提交 4b8db4f6 编写于 作者: M Martin Aeschlimann

Duplicate module definitions upon opening LESS or SASS files #1282

上级 44c19d2c
......@@ -12,7 +12,7 @@ import Monarch = require('vs/editor/common/modes/monarch/monarch');
import Types = require('vs/editor/common/modes/monarch/monarchTypes');
import Compile = require('vs/editor/common/modes/monarch/monarchCompile');
import lessWorker = require('vs/languages/less/common/lessWorker');
import {cssTokenTypes} from 'vs/languages/css/common/css';
import * as lessTokenTypes from 'vs/languages/less/common/lessTokenTypes';
import supports = require('vs/editor/common/modes/supports');
import {AbstractMode} from 'vs/editor/common/modes/abstractMode';
import {OneWorkerAttr} from 'vs/platform/thread/common/threadService';
......@@ -55,20 +55,20 @@ export var language: Types.ILanguage = <Types.ILanguage> {
{ include: '@keyword' },
{ include: '@strings' },
{ include: '@numbers' },
['[*_]?[a-zA-Z\\-\\s]+(?=:.*(;|(\\\\$)))', cssTokenTypes.TOKEN_PROPERTY, '@attribute'],
['[*_]?[a-zA-Z\\-\\s]+(?=:.*(;|(\\\\$)))', lessTokenTypes.TOKEN_PROPERTY, '@attribute'],
['url(\\-prefix)?\\(', { token: 'function', bracket: '@open', next: '@urldeclaration'}],
['[{}()\\[\\]]', '@brackets'],
['[,:;]', 'punctuation'],
['#@identifierPlus', cssTokenTypes.TOKEN_SELECTOR + '.id'],
['&', cssTokenTypes.TOKEN_SELECTOR_TAG],
['#@identifierPlus', lessTokenTypes.TOKEN_SELECTOR + '.id'],
['&', lessTokenTypes.TOKEN_SELECTOR_TAG],
['\\.@identifierPlus(?=\\()', cssTokenTypes.TOKEN_SELECTOR + '.class', '@attribute'],
['\\.@identifierPlus', cssTokenTypes.TOKEN_SELECTOR + '.class'],
['\\.@identifierPlus(?=\\()', lessTokenTypes.TOKEN_SELECTOR + '.class', '@attribute'],
['\\.@identifierPlus', lessTokenTypes.TOKEN_SELECTOR + '.class'],
['@identifierPlus', cssTokenTypes.TOKEN_SELECTOR_TAG],
['@identifierPlus', lessTokenTypes.TOKEN_SELECTOR_TAG],
{ include: '@operators' },
['@(@identifier(?=[:,\\)]))', 'variable', '@attribute'],
......@@ -112,9 +112,9 @@ export var language: Types.ILanguage = <Types.ILanguage> {
{ include: '@keyword' },
['[a-zA-Z\\-]+(?=\\()', cssTokenTypes.TOKEN_VALUE, '@attribute'],
['[a-zA-Z\\-]+(?=\\()', lessTokenTypes.TOKEN_VALUE, '@attribute'],
['>', 'operator', '@pop'],
['@identifier', cssTokenTypes.TOKEN_VALUE],
['@identifier', lessTokenTypes.TOKEN_VALUE],
{ include: '@operators' },
['@(@identifier)', 'variable'],
......@@ -125,7 +125,7 @@ export var language: Types.ILanguage = <Types.ILanguage> {
['[,=:]', 'punctuation'],
['\\s', ''],
['.', cssTokenTypes.TOKEN_VALUE]
['.', lessTokenTypes.TOKEN_VALUE]
],
comments: [
......@@ -139,12 +139,12 @@ export var language: Types.ILanguage = <Types.ILanguage> {
],
numbers: [
<any[]>['(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?', { token: cssTokenTypes.TOKEN_VALUE + '.numeric', next: '@units' }],
['#[0-9a-fA-F_]+(?!\\w)', cssTokenTypes.TOKEN_VALUE + '.rgb-value']
<any[]>['(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?', { token: lessTokenTypes.TOKEN_VALUE + '.numeric', next: '@units' }],
['#[0-9a-fA-F_]+(?!\\w)', lessTokenTypes.TOKEN_VALUE + '.rgb-value']
],
units: [
['((em|ex|ch|rem|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)\\b)?', cssTokenTypes.TOKEN_VALUE + '.unit', '@pop']
['((em|ex|ch|rem|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)\\b)?', lessTokenTypes.TOKEN_VALUE + '.unit', '@pop']
],
strings: [
......@@ -198,11 +198,11 @@ export class LESSMode extends Monarch.MonarchMode<lessWorker.LessWorker> impleme
this.extraInfoSupport = this;
this.referenceSupport = new supports.ReferenceSupport(this, {
tokens: [cssTokenTypes.TOKEN_PROPERTY + '.less', cssTokenTypes.TOKEN_VALUE + '.less', 'variable.less', cssTokenTypes.TOKEN_SELECTOR + '.class.less', cssTokenTypes.TOKEN_SELECTOR + '.id.less', 'selector.less'],
tokens: [lessTokenTypes.TOKEN_PROPERTY + '.less', lessTokenTypes.TOKEN_VALUE + '.less', 'variable.less', lessTokenTypes.TOKEN_SELECTOR + '.class.less', lessTokenTypes.TOKEN_SELECTOR + '.id.less', 'selector.less'],
findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
this.declarationSupport = new supports.DeclarationSupport(this, {
tokens: ['variable.less', cssTokenTypes.TOKEN_SELECTOR + '.class.less', cssTokenTypes.TOKEN_SELECTOR + '.id.less', 'selector.less'],
tokens: ['variable.less', lessTokenTypes.TOKEN_SELECTOR + '.class.less', lessTokenTypes.TOKEN_SELECTOR + '.id.less', 'selector.less'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
this.outlineSupport = this;
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
/* always keep in sync with cssTokenTypes */
export const TOKEN_SELECTOR = 'entity.name.selector';
export const TOKEN_SELECTOR_TAG = 'entity.name.tag';
export const TOKEN_PROPERTY = 'support.type.property-name';
export const TOKEN_VALUE = 'support.property-value';
export const TOKEN_AT_KEYWORD = 'keyword.control.at-rule';
......@@ -13,7 +13,7 @@ import EditorCommon = require('vs/editor/common/editorCommon');
import Modes = require('vs/editor/common/modes');
import sassWorker = require('vs/languages/sass/common/sassWorker');
import supports = require('vs/editor/common/modes/supports');
import {cssTokenTypes} from 'vs/languages/css/common/css';
import * as sassTokenTypes from 'vs/languages/sass/common/sassTokenTypes';
import {AbstractMode} from 'vs/editor/common/modes/abstractMode';
import {OneWorkerAttr} from 'vs/platform/thread/common/threadService';
import {AsyncDescriptor2, createAsyncDescriptor2} from 'vs/platform/instantiation/common/descriptors';
......@@ -48,9 +48,9 @@ export var language = <Types.ILanguage>{
tokenizer: {
root: [
{ include: '@selector' },
['[@](charset|namespace)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@declarationbody'}],
['[@](function)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@functiondeclaration'}],
['[@](mixin)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@mixindeclaration'}],
['[@](charset|namespace)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@declarationbody'}],
['[@](function)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@functiondeclaration'}],
['[@](mixin)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@mixindeclaration'}],
],
selector: [
......@@ -58,29 +58,29 @@ export var language = <Types.ILanguage>{
{ include: '@import' },
{ include: '@variabledeclaration' },
{ include: '@warndebug' }, // sass: log statements
['[@](include)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@includedeclaration'}], // sass: include statement
['[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@keyframedeclaration'}],
['[@](page|content|font-face|-moz-document)', { token: cssTokenTypes.TOKEN_AT_KEYWORD}], // sass: placeholder for includes
['[@](include)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@includedeclaration'}], // sass: include statement
['[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@keyframedeclaration'}],
['[@](page|content|font-face|-moz-document)', { token: sassTokenTypes.TOKEN_AT_KEYWORD}], // sass: placeholder for includes
['url(\\-prefix)?\\(', { token: 'support.function.name', bracket: '@open', next: '@urldeclaration'}],
{ include: '@controlstatement' }, // sass control statements
{ include: '@selectorname' },
['[&\\*]', cssTokenTypes.TOKEN_SELECTOR_TAG], // selector symbols
['[&\\*]', sassTokenTypes.TOKEN_SELECTOR_TAG], // selector symbols
['[>\\+,]', 'punctuation'], // selector operators
['\\[', { token: 'punctuation.bracket', bracket: '@open', next: '@selectorattribute' }],
['{', { token: 'punctuation.curly', bracket: '@open', next: '@selectorbody' }],
],
selectorbody: [
['[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))', cssTokenTypes.TOKEN_PROPERTY, '@rulevalue'], // rule definition: to distinguish from a nested selector check for whitespace, number or a semicolon
['[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))', sassTokenTypes.TOKEN_PROPERTY, '@rulevalue'], // rule definition: to distinguish from a nested selector check for whitespace, number or a semicolon
{ include: '@selector'}, // sass: nested selectors
['[@](extend)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@extendbody'}], // sass: extend other selectors
['[@](return)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@declarationbody'}],
['[@](extend)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@extendbody'}], // sass: extend other selectors
['[@](return)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@declarationbody'}],
['}', { token: 'punctuation.curly', bracket: '@close', next: '@pop'}],
],
selectorname: [
['#{', { token: 'support.function.interpolation', bracket: '@open', next: '@variableinterpolation' }], // sass: interpolation
['(\\.|#(?=[^{])|%|(@identifier)|:)+', cssTokenTypes.TOKEN_SELECTOR], // selector (.foo, div, ...)
['(\\.|#(?=[^{])|%|(@identifier)|:)+', sassTokenTypes.TOKEN_SELECTOR], // selector (.foo, div, ...)
],
selectorattribute: [
......@@ -112,17 +112,17 @@ export var language = <Types.ILanguage>{
],
nestedproperty: [
['[*_]?@identifier@ws:', cssTokenTypes.TOKEN_PROPERTY, '@rulevalue'],
['[*_]?@identifier@ws:', sassTokenTypes.TOKEN_PROPERTY, '@rulevalue'],
{ include: '@comments' },
['}', { token: 'punctuation.curly', bracket: '@close', next: '@pop'}],
],
warndebug: [
['[@](warn|debug)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@declarationbody'}],
['[@](warn|debug)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@declarationbody'}],
],
import: [
['[@](import)', { token: cssTokenTypes.TOKEN_AT_KEYWORD, next: '@declarationbody'}],
['[@](import)', { token: sassTokenTypes.TOKEN_AT_KEYWORD, next: '@declarationbody'}],
],
variabledeclaration: [ // sass variables
......@@ -175,7 +175,7 @@ export var language = <Types.ILanguage>{
],
name: [
['@identifier', cssTokenTypes.TOKEN_VALUE],
['@identifier', sassTokenTypes.TOKEN_VALUE],
],
numbers: [
......@@ -201,7 +201,7 @@ export var language = <Types.ILanguage>{
],
parameterdeclaration: [
['\\$@identifier@ws:', cssTokenTypes.TOKEN_PROPERTY],
['\\$@identifier@ws:', sassTokenTypes.TOKEN_PROPERTY],
['\\.\\.\\.', 'keyword.operator'], // var args in declaration
[',', 'punctuation'],
{ include: '@term' },
......@@ -238,7 +238,7 @@ export var language = <Types.ILanguage>{
],
functionbody: [
['[@](return)', { token: cssTokenTypes.TOKEN_AT_KEYWORD}],
['[@](return)', { token: sassTokenTypes.TOKEN_AT_KEYWORD}],
{ include: '@variabledeclaration' },
{ include: '@term' },
{ include: '@controlstatement' },
......@@ -251,7 +251,7 @@ export var language = <Types.ILanguage>{
],
functionarguments: [
['\\$@identifier@ws:', cssTokenTypes.TOKEN_PROPERTY],
['\\$@identifier@ws:', sassTokenTypes.TOKEN_PROPERTY],
['[,]', 'punctuation'],
{ include: '@term' },
['\\)', { token: 'support.function.name', bracket: '@close', next: '@pop'}],
......@@ -300,11 +300,11 @@ export class SASSMode extends Monarch.MonarchMode<sassWorker.SassWorker> impleme
this.extraInfoSupport = this;
this.referenceSupport = new supports.ReferenceSupport(this, {
tokens: [cssTokenTypes.TOKEN_PROPERTY + '.sass', cssTokenTypes.TOKEN_VALUE + '.sass', 'variable.decl.sass', 'variable.ref.sass', 'support.function.name.sass', cssTokenTypes.TOKEN_PROPERTY + '.sass', cssTokenTypes.TOKEN_SELECTOR + '.sass'],
tokens: [sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_VALUE + '.sass', 'variable.decl.sass', 'variable.ref.sass', 'support.function.name.sass', sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_SELECTOR + '.sass'],
findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
this.declarationSupport = new supports.DeclarationSupport(this, {
tokens: ['variable.decl.sass', 'variable.ref.sass', 'support.function.name.sass', cssTokenTypes.TOKEN_PROPERTY + '.sass', cssTokenTypes.TOKEN_SELECTOR + '.sass'],
tokens: ['variable.decl.sass', 'variable.ref.sass', 'support.function.name.sass', sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_SELECTOR + '.sass'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
this.outlineSupport = this;
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
/* always keep in sync with cssTokenTypes */
export const TOKEN_SELECTOR = 'entity.name.selector';
export const TOKEN_SELECTOR_TAG = 'entity.name.tag';
export const TOKEN_PROPERTY = 'support.type.property-name';
export const TOKEN_VALUE = 'support.property-value';
export const TOKEN_AT_KEYWORD = 'keyword.control.at-rule';
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册