From f487f4f76d7dcde57a178a9d5e95c0784b4ad9a5 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Sun, 11 Dec 2016 17:46:37 +0100 Subject: [PATCH] Generate classic-style tokens for scss and add tests --- src/scss.ts | 124 +-- test/all.js | 1 + test/scss.test.ts | 2054 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2117 insertions(+), 62 deletions(-) create mode 100644 test/scss.test.ts diff --git a/src/scss.ts b/src/scss.ts index bb651098..91f801b5 100644 --- a/src/scss.ts +++ b/src/scss.ts @@ -25,11 +25,11 @@ export var conf: LanguageConfiguration = { ] }; -const TOKEN_SELECTOR = 'entity.name.selector'; -const TOKEN_SELECTOR_TAG = 'entity.name.tag'; -const TOKEN_PROPERTY = 'support.type.property-name'; -const TOKEN_VALUE = 'support.property-value'; -const TOKEN_AT_KEYWORD = 'keyword.control.at-rule'; +const TOKEN_SELECTOR = 'tag'; +const TOKEN_SELECTOR_TAG = 'tag'; +const TOKEN_PROPERTY = 'attribute.name'; +const TOKEN_VALUE = 'attribute.value'; +const TOKEN_AT_KEYWORD = 'keyword'; export var language = { defaultToken: '', @@ -39,10 +39,10 @@ export var language = { identifier: '-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*', brackets: [ - { open: '{', close: '}', token: 'punctuation.curly' }, - { open: '[', close: ']', token: 'punctuation.bracket' }, - { open: '(', close: ')', token: 'punctuation.parenthesis' }, - { open: '<', close: '>', token: 'punctuation.angle' } + { open: '{', close: '}', token: 'delimiter.curly' }, + { open: '[', close: ']', token: 'delimiter.bracket' }, + { open: '(', close: ')', token: 'delimiter.parenthesis' }, + { open: '<', close: '>', token: 'delimiter.angle' } ], tokenizer: { @@ -61,13 +61,13 @@ export var language = { ['[@](charset|namespace)', { token: TOKEN_AT_KEYWORD, next: '@declarationbody' }], ['[@](function)', { token: TOKEN_AT_KEYWORD, next: '@functiondeclaration' }], ['[@](mixin)', { token: TOKEN_AT_KEYWORD, next: '@mixindeclaration' }], - ['url(\\-prefix)?\\(', { token: 'support.function.name', bracket: '@open', next: '@urldeclaration' }], + ['url(\\-prefix)?\\(', { token: 'meta', bracket: '@open', next: '@urldeclaration' }], { include: '@controlstatement' }, // sass control statements { include: '@selectorname' }, ['[&\\*]', TOKEN_SELECTOR_TAG], // selector symbols - ['[>\\+,]', 'punctuation'], // selector operators - ['\\[', { token: 'punctuation.bracket', bracket: '@open', next: '@selectorattribute' }], - ['{', { token: 'punctuation.curly', bracket: '@open', next: '@selectorbody' }], + ['[>\\+,]', 'delimiter'], // selector operators + ['\\[', { token: 'delimiter.bracket', bracket: '@open', next: '@selectorattribute' }], + ['{', { token: 'delimiter.curly', bracket: '@open', next: '@selectorbody' }], ], selectorbody: [ @@ -75,46 +75,46 @@ export var language = { { include: '@selector' }, // sass: nested selectors ['[@](extend)', { token: TOKEN_AT_KEYWORD, next: '@extendbody' }], // sass: extend other selectors ['[@](return)', { token: TOKEN_AT_KEYWORD, next: '@declarationbody' }], - ['}', { token: 'punctuation.curly', bracket: '@close', next: '@pop' }], + ['}', { token: 'delimiter.curly', bracket: '@close', next: '@pop' }], ], selectorname: [ - ['#{', { token: 'support.function.interpolation', bracket: '@open', next: '@variableinterpolation' }], // sass: interpolation + ['#{', { token: 'meta', bracket: '@open', next: '@variableinterpolation' }], // sass: interpolation ['(\\.|#(?=[^{])|%|(@identifier)|:)+', TOKEN_SELECTOR], // selector (.foo, div, ...) ], selectorattribute: [ { include: '@term' }, - [']', { token: 'punctuation.bracket', bracket: '@close', next: '@pop' }], + [']', { token: 'delimiter.bracket', bracket: '@close', next: '@pop' }], ], term: [ { include: '@comments' }, - ['url(\\-prefix)?\\(', { token: 'support.function.name', bracket: '@open', next: '@urldeclaration' }], + ['url(\\-prefix)?\\(', { token: 'meta', bracket: '@open', next: '@urldeclaration' }], { include: '@functioninvocation' }, { include: '@numbers' }, { include: '@strings' }, { include: '@variablereference' }, - ['(and\\b|or\\b|not\\b)', 'keyword.operator'], + ['(and\\b|or\\b|not\\b)', 'operator'], { include: '@name' }, - ['([<>=\\+\\-\\*\\/\\^\\|\\~,])', 'keyword.operator'], - [',', 'punctuation'], + ['([<>=\\+\\-\\*\\/\\^\\|\\~,])', 'operator'], + [',', 'delimiter'], ['!default', 'literal'], - ['\\(', { token: 'punctuation.parenthesis', bracket: '@open', next: '@parenthizedterm' }], + ['\\(', { token: 'delimiter.parenthesis', bracket: '@open', next: '@parenthizedterm' }], ], rulevalue: [ { include: '@term' }, ['!important', 'literal'], - [';', 'punctuation', '@pop'], - ['{', { token: 'punctuation.curly', bracket: '@open', switchTo: '@nestedproperty' }], // sass: nested properties + [';', 'delimiter', '@pop'], + ['{', { token: 'delimiter.curly', bracket: '@open', switchTo: '@nestedproperty' }], // sass: nested properties ['(?=})', { token: '', next: '@pop' }], // missing semicolon ], nestedproperty: [ ['[*_]?@identifier@ws:', TOKEN_PROPERTY, '@rulevalue'], { include: '@comments' }, - ['}', { token: 'punctuation.curly', bracket: '@close', next: '@pop' }], + ['}', { token: 'delimiter.curly', bracket: '@close', next: '@pop' }], ], warndebug: [ @@ -132,36 +132,36 @@ export var language = { urldeclaration: [ { include: '@strings' }, ['[^)\r\n]+', 'string'], - ['\\)', { token: 'support.function.name', bracket: '@close', next: '@pop' }], + ['\\)', { token: 'meta', bracket: '@close', next: '@pop' }], ], parenthizedterm: [ { include: '@term' }, - ['\\)', { token: 'punctuation.parenthesis', bracket: '@close', next: '@pop' }], + ['\\)', { token: 'delimiter.parenthesis', bracket: '@close', next: '@pop' }], ], declarationbody: [ { include: '@term' }, - [';', 'punctuation', '@pop'], + [';', 'delimiter', '@pop'], ['(?=})', { token: '', next: '@pop' }], // missing semicolon ], extendbody: [ { include: '@selectorname' }, ['!optional', 'literal'], - [';', 'punctuation', '@pop'], + [';', 'delimiter', '@pop'], ['(?=})', { token: '', next: '@pop' }], // missing semicolon ], variablereference: [ // sass variable reference ['\\$@identifier', 'variable.ref'], - ['\\.\\.\\.', 'keyword.operator'], // var args in reference - ['#{', { token: 'support.function.interpolation', bracket: '@open', next: '@variableinterpolation' }], // sass var resolve + ['\\.\\.\\.', 'operator'], // var args in reference + ['#{', { token: 'meta', bracket: '@open', next: '@variableinterpolation' }], // sass var resolve ], variableinterpolation: [ { include: '@variablereference' }, - ['}', { token: 'support.function.interpolation', bracket: '@close', next: '@pop' }], + ['}', { token: 'meta', bracket: '@close', next: '@pop' }], ], comments: [ @@ -179,62 +179,62 @@ export var language = { ], numbers: [ - ['(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?', { token: 'constant.numeric', next: '@units' }], - ['#[0-9a-fA-F_]+(?!\\w)', 'constant.rgb-value'], + ['(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?', { token: 'number', next: '@units' }], + ['#[0-9a-fA-F_]+(?!\\w)', 'number.hex'], ], units: [ - ['(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?', 'constant.numeric', '@pop'] + ['(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?', 'number', '@pop'] ], functiondeclaration: [ - ['@identifier@ws\\(', { token: 'support.function.name', bracket: '@open', next: '@parameterdeclaration' }], - ['{', { token: 'punctuation.curly', bracket: '@open', switchTo: '@functionbody' }], + ['@identifier@ws\\(', { token: 'meta', bracket: '@open', next: '@parameterdeclaration' }], + ['{', { token: 'delimiter.curly', bracket: '@open', switchTo: '@functionbody' }], ], mixindeclaration: [ // mixin with parameters - ['@identifier@ws\\(', { token: 'support.function.name', bracket: '@open', next: '@parameterdeclaration' }], + ['@identifier@ws\\(', { token: 'meta', bracket: '@open', next: '@parameterdeclaration' }], // mixin without parameters - ['@identifier', 'support.function.name'], - ['{', { token: 'punctuation.curly', bracket: '@open', switchTo: '@selectorbody' }], + ['@identifier', 'meta'], + ['{', { token: 'delimiter.curly', bracket: '@open', switchTo: '@selectorbody' }], ], parameterdeclaration: [ - ['\\$@identifier@ws:', 'variable'], - ['\\.\\.\\.', 'keyword.operator'], // var args in declaration - [',', 'punctuation'], + ['\\$@identifier@ws:', 'variable.decl'], + ['\\.\\.\\.', 'operator'], // var args in declaration + [',', 'delimiter'], { include: '@term' }, - ['\\)', { token: 'support.function.name', bracket: '@close', next: '@pop' }], + ['\\)', { token: 'meta', bracket: '@close', next: '@pop' }], ], includedeclaration: [ { include: '@functioninvocation' }, - ['@identifier', 'support.function.name'], - [';', 'punctuation', '@pop'], + ['@identifier', 'meta'], + [';', 'delimiter', '@pop'], ['(?=})', { token: '', next: '@pop' }], // missing semicolon - ['{', { token: 'punctuation.curly', bracket: '@open', switchTo: '@selectorbody' }], + ['{', { token: 'delimiter.curly', bracket: '@open', switchTo: '@selectorbody' }], ], keyframedeclaration: [ - ['@identifier', 'support.function.name'], - ['{', { token: 'punctuation.curly', bracket: '@open', switchTo: '@keyframebody' }], + ['@identifier', 'meta'], + ['{', { token: 'delimiter.curly', bracket: '@open', switchTo: '@keyframebody' }], ], keyframebody: [ { include: '@term' }, - ['{', { token: 'punctuation.curly', bracket: '@open', next: '@selectorbody' }], - ['}', { token: 'punctuation.curly', bracket: '@close', next: '@pop' }], + ['{', { token: 'delimiter.curly', bracket: '@open', next: '@selectorbody' }], + ['}', { token: 'delimiter.curly', bracket: '@close', next: '@pop' }], ], controlstatement: [ - ['[@](if|else|for|while|each|media)', { token: 'keyword.flow.control.at-rule', next: '@controlstatementdeclaration' }], + ['[@](if|else|for|while|each|media)', { token: 'keyword.flow', next: '@controlstatementdeclaration' }], ], controlstatementdeclaration: [ - ['(in|from|through|if|to)\\b', { token: 'keyword.flow.control.at-rule' }], + ['(in|from|through|if|to)\\b', { token: 'keyword.flow' }], { include: '@term' }, - ['{', { token: 'punctuation.curly', bracket: '@open', switchTo: '@selectorbody' }], + ['{', { token: 'delimiter.curly', bracket: '@open', switchTo: '@selectorbody' }], ], functionbody: [ @@ -242,35 +242,35 @@ export var language = { { include: '@variabledeclaration' }, { include: '@term' }, { include: '@controlstatement' }, - [';', 'punctuation'], - ['}', { token: 'punctuation.curly', bracket: '@close', next: '@pop' }], + [';', 'delimiter'], + ['}', { token: 'delimiter.curly', bracket: '@close', next: '@pop' }], ], functioninvocation: [ - ['@identifier\\(', { token: 'support.function.name', bracket: '@open', next: '@functionarguments' }], + ['@identifier\\(', { token: 'meta', bracket: '@open', next: '@functionarguments' }], ], functionarguments: [ ['\\$@identifier@ws:', TOKEN_PROPERTY], - ['[,]', 'punctuation'], + ['[,]', 'delimiter'], { include: '@term' }, - ['\\)', { token: 'support.function.name', bracket: '@close', next: '@pop' }], + ['\\)', { token: 'meta', bracket: '@close', next: '@pop' }], ], strings: [ - ['~?"', { token: 'string.punctuation', bracket: '@open', next: '@stringenddoublequote' }], - ['~?\'', { token: 'string.punctuation', bracket: '@open', next: '@stringendquote' }] + ['~?"', { token: 'string.delimiter', bracket: '@open', next: '@stringenddoublequote' }], + ['~?\'', { token: 'string.delimiter', bracket: '@open', next: '@stringendquote' }] ], stringenddoublequote: [ ['\\\\.', 'string'], - ['"', { token: 'string.punctuation', next: '@pop', bracket: '@close' }], + ['"', { token: 'string.delimiter', next: '@pop', bracket: '@close' }], ['.', 'string'] ], stringendquote: [ ['\\\\.', 'string'], - ['\'', { token: 'string.punctuation', next: '@pop', bracket: '@close' }], + ['\'', { token: 'string.delimiter', next: '@pop', bracket: '@close' }], ['.', 'string'] ] } diff --git a/test/all.js b/test/all.js index a570434d..e4f91836 100644 --- a/test/all.js +++ b/test/all.js @@ -45,6 +45,7 @@ requirejs([ 'out/test/r.test', 'out/test/razor.test', 'out/test/ruby.test', + 'out/test/scss.test', 'out/test/swift.test', 'out/test/sql.test', 'out/test/vb.test', diff --git a/test/scss.test.ts b/test/scss.test.ts new file mode 100644 index 00000000..0d9ff637 --- /dev/null +++ b/test/scss.test.ts @@ -0,0 +1,2054 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +import {testTokenization as actualTestTokenization, ITestItem} from './testRunner'; + +function testTokenization(_language:string|string[], tests:ITestItem[][]): void { + tests = tests.map(t => { + return t.map(t => { + return { + line: t.line.replace(/\n/g, ' '), + tokens: t.tokens + }; + }); + }); + actualTestTokenization(_language, tests); +} + +testTokenization('scss', [ + // Nested Rules + [{ + line: + '#main {\n' + + ' width: 97%;\n' + + ' p, div {\n' + + ' font-size: 2em;\n' + + ' a { font-weight: bold; }\n' + + ' }\n' + + ' pre { font-size: 3em; }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* '#main' */, + { startIndex: 5, type: '' }, + { startIndex: 6, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 7, type: '' }, + { startIndex: 10, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 16, type: '' }, + { startIndex: 17, type: 'number.scss' } /* '97%' */, + { startIndex: 20, type: 'delimiter.scss' } /* ';' */, + { startIndex: 21, type: '' }, + { startIndex: 24, type: 'tag.scss' } /* 'p' */, + { startIndex: 25, type: 'delimiter.scss' } /* ',' */, + { startIndex: 26, type: '' }, + { startIndex: 27, type: 'tag.scss' } /* 'div' */, + { startIndex: 30, type: '' }, + { startIndex: 31, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 32, type: '' }, + { startIndex: 37, type: 'attribute.name.scss' } /* 'font-size:' */, + { startIndex: 47, type: '' }, + { startIndex: 48, type: 'number.scss' } /* '2em' */, + { startIndex: 51, type: 'delimiter.scss' } /* ';' */, + { startIndex: 52, type: '' }, + { startIndex: 57, type: 'tag.scss' } /* 'a' */, + { startIndex: 58, type: '' }, + { startIndex: 59, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 60, type: '' }, + { startIndex: 61, type: 'attribute.name.scss' } /* 'font-weight:' */, + { startIndex: 73, type: '' }, + { startIndex: 74, type: 'attribute.value.scss' } /* 'bold' */, + { startIndex: 78, type: 'delimiter.scss' } /* ';' */, + { startIndex: 79, type: '' }, + { startIndex: 80, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 81, type: '' }, + { startIndex: 84, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 85, type: '' }, + { startIndex: 88, type: 'tag.scss' } /* 'pre' */, + { startIndex: 91, type: '' }, + { startIndex: 92, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 93, type: '' }, + { startIndex: 94, type: 'attribute.name.scss' } /* 'font-size:' */, + { startIndex: 104, type: '' }, + { startIndex: 105, type: 'number.scss' } /* '3em' */, + { startIndex: 108, type: 'delimiter.scss' } /* ';' */, + { startIndex: 109, type: '' }, + { startIndex: 110, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 111, type: '' }, + { startIndex: 112, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Parent selector + [{ + line: + '#main {\n' + + ' color: black;\n' + + ' a {\n' + + ' font-weight: bold;\n' + + ' &:hover { color: red; }\n' + + ' }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* '#main' */, + { startIndex: 5, type: '' }, + { startIndex: 6, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 7, type: '' }, + { startIndex: 10, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 16, type: '' }, + { startIndex: 17, type: 'attribute.value.scss' } /* 'black' */, + { startIndex: 22, type: 'delimiter.scss' } /* ';' */, + { startIndex: 23, type: '' }, + { startIndex: 26, type: 'tag.scss' } /* 'a' */, + { startIndex: 27, type: '' }, + { startIndex: 28, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 29, type: '' }, + { startIndex: 34, type: 'attribute.name.scss' } /* 'font-weight:' */, + { startIndex: 46, type: '' }, + { startIndex: 47, type: 'attribute.value.scss' } /* 'bold' */, + { startIndex: 51, type: 'delimiter.scss' } /* ';' */, + { startIndex: 52, type: '' }, + { startIndex: 57, type: 'tag.scss' } /* '&:hover' */, + { startIndex: 64, type: '' }, + { startIndex: 65, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 66, type: '' }, + { startIndex: 67, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 73, type: '' }, + { startIndex: 74, type: 'attribute.value.scss' } /* 'red' */, + { startIndex: 77, type: 'delimiter.scss' } /* ';' */, + { startIndex: 78, type: '' }, + { startIndex: 79, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 80, type: '' }, + { startIndex: 83, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 84, type: '' }, + { startIndex: 85, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Nested Properties + [{ + line: + '.funky {\n' + + ' font: 2px/3px {\n' + + ' family: fantasy;\n' + + ' size: 30em;\n' + + ' weight: bold;\n' + + ' }\n' + + ' color: black;\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* '.funky' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 8, type: '' }, + { startIndex: 11, type: 'attribute.name.scss' } /* 'font:' */, + { startIndex: 16, type: '' }, + { startIndex: 17, type: 'number.scss' } /* '2px' */, + { startIndex: 20, type: 'operator.scss' } /* '/' */, + { startIndex: 21, type: 'number.scss' } /* '3px' */, + { startIndex: 24, type: '' }, + { startIndex: 25, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 26, type: '' }, + { startIndex: 31, type: 'attribute.name.scss' } /* 'family:' */, + { startIndex: 38, type: '' }, + { startIndex: 39, type: 'attribute.value.scss' } /* 'fantasy' */, + { startIndex: 46, type: 'delimiter.scss' } /* ';' */, + { startIndex: 47, type: '' }, + { startIndex: 52, type: 'attribute.name.scss' } /* 'size:' */, + { startIndex: 57, type: '' }, + { startIndex: 58, type: 'number.scss' } /* '30em' */, + { startIndex: 62, type: 'delimiter.scss' } /* ';' */, + { startIndex: 63, type: '' }, + { startIndex: 68, type: 'attribute.name.scss' } /* 'weight:' */, + { startIndex: 75, type: '' }, + { startIndex: 76, type: 'attribute.value.scss' } /* 'bold' */, + { startIndex: 80, type: 'delimiter.scss' } /* ';' */, + { startIndex: 81, type: '' }, + { startIndex: 84, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 85, type: '' }, + { startIndex: 88, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 94, type: '' }, + { startIndex: 95, type: 'attribute.value.scss' } /* 'black' */, + { startIndex: 100, type: 'delimiter.scss' } /* ';' */, + { startIndex: 101, type: '' }, + { startIndex: 102, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Nesting name conflicts + [{ + line: + 'tr.default {\n' + + ' foo: { /* properti*/\n' + + ' foo : 1;\n' + + ' }\n' + + ' foo: 1px; /* ru*/\n' + + ' foo.bar { /* select*/\n' + + ' foo : 1;\n' + + ' }\n' + + ' foo:bar { /* select*/\n' + + ' foo : 1;\n' + + ' }\n' + + ' foo: 1px; /* ru*/\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* 'tr.default' */, + { startIndex: 10, type: '' }, + { startIndex: 11, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 12, type: '' }, + { startIndex: 15, type: 'attribute.name.scss' } /* 'foo:' */, + { startIndex: 19, type: '' }, + { startIndex: 20, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 21, type: '' }, + { startIndex: 22, type: 'comment.scss' } /* '// properties' */, + { startIndex: 35, type: '' }, + { startIndex: 40, type: 'attribute.name.scss' } /* 'foo :' */, + { startIndex: 45, type: '' }, + { startIndex: 46, type: 'number.scss' } /* '1' */, + { startIndex: 47, type: 'delimiter.scss' } /* ';' */, + { startIndex: 48, type: '' }, + { startIndex: 51, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 52, type: '' }, + { startIndex: 55, type: 'attribute.name.scss' } /* 'foo:' */, + { startIndex: 59, type: '' }, + { startIndex: 60, type: 'number.scss' } /* '1px' */, + { startIndex: 63, type: 'delimiter.scss' } /* ';' */, + { startIndex: 64, type: '' }, + { startIndex: 65, type: 'comment.scss' } /* '// rule' */, + { startIndex: 72, type: '' }, + { startIndex: 75, type: 'tag.scss' } /* 'foo.bar' */, + { startIndex: 82, type: '' }, + { startIndex: 83, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 84, type: '' }, + { startIndex: 85, type: 'comment.scss' } /* '// selector' */, + { startIndex: 96, type: '' }, + { startIndex: 101, type: 'attribute.name.scss' } /* 'foo :' */, + { startIndex: 106, type: '' }, + { startIndex: 107, type: 'number.scss' } /* '1' */, + { startIndex: 108, type: 'delimiter.scss' } /* ';' */, + { startIndex: 109, type: '' }, + { startIndex: 112, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 113, type: '' }, + { startIndex: 116, type: 'tag.scss' } /* 'foo:bar' */, + { startIndex: 123, type: '' }, + { startIndex: 124, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 125, type: '' }, + { startIndex: 126, type: 'comment.scss' } /* '// selector' */, + { startIndex: 137, type: '' }, + { startIndex: 142, type: 'attribute.name.scss' } /* 'foo :' */, + { startIndex: 147, type: '' }, + { startIndex: 148, type: 'number.scss' } /* '1' */, + { startIndex: 149, type: 'delimiter.scss' } /* ';' */, + { startIndex: 150, type: '' }, + { startIndex: 153, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 154, type: '' }, + { startIndex: 157, type: 'attribute.name.scss' } /* 'foo:' */, + { startIndex: 161, type: '' }, + { startIndex: 162, type: 'number.scss' } /* '1px' */, + { startIndex: 165, type: 'delimiter.scss' } /* ';' */, + { startIndex: 166, type: '' }, + { startIndex: 167, type: 'comment.scss' } /* '// rule' */, + { startIndex: 174, type: '' }, + { startIndex: 175, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Missing semicolons + [{ + line: + 'tr.default {\n' + + ' foo.bar {\n' + + ' $foo: 1px\n' + + ' }\n' + + ' foo: {\n' + + ' foo : white\n' + + ' }\n' + + ' foo.bar1 {\n' + + ' @extend tr.default\n' + + ' }\n' + + ' foo.bar2 {\n' + + ' @import "compass"\n' + + ' }\n' + + ' bar: black\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* 'tr.default' */, + { startIndex: 10, type: '' }, + { startIndex: 11, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 12, type: '' }, + { startIndex: 15, type: 'tag.scss' } /* 'foo.bar' */, + { startIndex: 22, type: '' }, + { startIndex: 23, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 24, type: '' }, + { startIndex: 29, type: 'variable.decl.scss' } /* '$foo:' */, + { startIndex: 34, type: '' }, + { startIndex: 35, type: 'number.scss' } /* '1px' */, + { startIndex: 38, type: '' }, + { startIndex: 41, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 42, type: '' }, + { startIndex: 45, type: 'attribute.name.scss' } /* 'foo:' */, + { startIndex: 49, type: '' }, + { startIndex: 50, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 51, type: '' }, + { startIndex: 56, type: 'attribute.name.scss' } /* 'foo :' */, + { startIndex: 61, type: '' }, + { startIndex: 62, type: 'attribute.value.scss' } /* 'white' */, + { startIndex: 67, type: '' }, + { startIndex: 70, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 71, type: '' }, + { startIndex: 74, type: 'tag.scss' } /* 'foo.bar1' */, + { startIndex: 82, type: '' }, + { startIndex: 83, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 84, type: '' }, + { startIndex: 89, type: 'keyword.scss' } /* '@extend' */, + { startIndex: 96, type: '' }, + { startIndex: 97, type: 'tag.scss' } /* 'tr.default' */, + { startIndex: 107, type: '' }, + { startIndex: 110, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 111, type: '' }, + { startIndex: 114, type: 'tag.scss' } /* 'foo.bar2' */, + { startIndex: 122, type: '' }, + { startIndex: 123, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 124, type: '' }, + { startIndex: 129, type: 'keyword.scss' } /* '@import' */, + { startIndex: 136, type: '' }, + { startIndex: 137, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 138, type: 'string.scss' } /* 'compass' */, + { startIndex: 145, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 146, type: '' }, + { startIndex: 149, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 150, type: '' }, + { startIndex: 153, type: 'attribute.name.scss' } /* 'bar:' */, + { startIndex: 157, type: '' }, + { startIndex: 158, type: 'attribute.value.scss' } /* 'black' */, + { startIndex: 163, type: '' }, + { startIndex: 164, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Rules without whitespaces + [{ + line: + 'legend {foo{a:s}margin-top:0;margin-bottom:#123;margin-top:s(1)}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* 'legend' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 8, type: 'tag.scss' } /* 'foo' */, + { startIndex: 11, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 12, type: 'attribute.name.scss' } /* 'a:' */, + { startIndex: 14, type: 'attribute.value.scss' } /* 's' */, + { startIndex: 15, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 16, type: 'attribute.name.scss' } /* 'margin-top:' */, + { startIndex: 27, type: 'number.scss' } /* '0' */, + { startIndex: 28, type: 'delimiter.scss' } /* ';' */, + { startIndex: 29, type: 'attribute.name.scss' } /* 'margin-bottom:' */, + { startIndex: 43, type: 'number.hex.scss' } /* '#123' */, + { startIndex: 47, type: 'delimiter.scss' } /* ';' */, + { startIndex: 48, type: 'attribute.name.scss' } /* 'margin-top:' */, + { startIndex: 59, type: 'meta.scss' } /* 's(' */, + { startIndex: 61, type: 'number.scss' } /* '1' */, + { startIndex: 62, type: 'meta.scss' } /* ')' */, + { startIndex: 63, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Extended commentswhitespaces + [{ + line: + '/* extended comment syntax */\n' + + '/* This comment is\n' + + ' * several lines long.\n' + + ' * since it uses the CSS comment syntax,\n' + + ' * it will appear in the CSS output. */\n' + + 'body { color: black; }\n' + + '\n' + + '/* These comments are only one line long eac*/\n' + + '/* They won\'t appear in the CSS outpu*/\n' + + '/* since they use the single-line comment synta*/\n' + + 'a { color: green; }', + tokens: [ + { startIndex: 0, type: 'comment.scss' } /* '/* extended comment syntax * /' */, + { startIndex: 29, type: '' }, + { startIndex: 30, type: 'comment.scss' } /* '/* This comment is' */, + { startIndex: 152, type: '' }, + { startIndex: 153, type: 'tag.scss' } /* 'body' */, + { startIndex: 157, type: '' }, + { startIndex: 158, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 159, type: '' }, + { startIndex: 160, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 166, type: '' }, + { startIndex: 167, type: 'attribute.value.scss' } /* 'black' */, + { startIndex: 172, type: 'delimiter.scss' } /* ';' */, + { startIndex: 173, type: '' }, + { startIndex: 174, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 175, type: '' }, + { startIndex: 177, type: 'comment.scss' } /* '// These comments are only one line long each.' */, + { startIndex: 223, type: '' }, + { startIndex: 224, type: 'comment.scss' } /* '// They won't appear in the CSS output,' */, + { startIndex: 263, type: '' }, + { startIndex: 264, type: 'comment.scss' } /* '// since they use the single-line comment syntax.' */, + { startIndex: 313, type: '' }, + { startIndex: 314, type: 'tag.scss' } /* 'a' */, + { startIndex: 315, type: '' }, + { startIndex: 316, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 317, type: '' }, + { startIndex: 318, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 324, type: '' }, + { startIndex: 325, type: 'attribute.value.scss' } /* 'green' */, + { startIndex: 330, type: 'delimiter.scss' } /* ';' */, + { startIndex: 331, type: '' }, + { startIndex: 332, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Variable declarations and referenceswhitespaces + [{ + line: + '$width: 5em;\n' + + '$width: "Second width?" !default;\n' + + '#main {\n' + + ' $localvar: 6em;\n' + + ' width: $width;\n' + + '\n' + + ' $font-size: 12px;\n' + + ' $line-height: 30px;\n' + + ' font: #{$font-size}/#{$line-height};\n' + + '}\n' + + '$name: foo;\n' + + '$attr: border;\n' + + 'p.#{$name} {\n' + + ' #{$attr}-color: blue;\n' + + '}', + tokens: [ + { startIndex: 0, type: 'variable.decl.scss' } /* '$width:' */, + { startIndex: 7, type: '' }, + { startIndex: 8, type: 'number.scss' } /* '5em' */, + { startIndex: 11, type: 'delimiter.scss' } /* ';' */, + { startIndex: 12, type: '' }, + { startIndex: 13, type: 'variable.decl.scss' } /* '$width:' */, + { startIndex: 20, type: '' }, + { startIndex: 21, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 22, type: 'string.scss' } /* 'Second width?' */, + { startIndex: 35, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 36, type: '' }, + { startIndex: 37, type: 'literal.scss' } /* '!default' */, + { startIndex: 45, type: 'delimiter.scss' } /* ';' */, + { startIndex: 46, type: '' }, + { startIndex: 47, type: 'tag.scss' } /* '#main' */, + { startIndex: 52, type: '' }, + { startIndex: 53, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 54, type: '' }, + { startIndex: 57, type: 'variable.decl.scss' } /* '$localvar:' */, + { startIndex: 67, type: '' }, + { startIndex: 68, type: 'number.scss' } /* '6em' */, + { startIndex: 71, type: 'delimiter.scss' } /* ';' */, + { startIndex: 72, type: '' }, + { startIndex: 75, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 81, type: '' }, + { startIndex: 82, type: 'variable.ref.scss' } /* '$width' */, + { startIndex: 88, type: 'delimiter.scss' } /* ';' */, + { startIndex: 89, type: '' }, + { startIndex: 93, type: 'variable.decl.scss' } /* '$font-size:' */, + { startIndex: 104, type: '' }, + { startIndex: 105, type: 'number.scss' } /* '12px' */, + { startIndex: 109, type: 'delimiter.scss' } /* ';' */, + { startIndex: 110, type: '' }, + { startIndex: 113, type: 'variable.decl.scss' } /* '$line-height:' */, + { startIndex: 126, type: '' }, + { startIndex: 127, type: 'number.scss' } /* '30px' */, + { startIndex: 131, type: 'delimiter.scss' } /* ';' */, + { startIndex: 132, type: '' }, + { startIndex: 135, type: 'attribute.name.scss' } /* 'font:' */, + { startIndex: 140, type: '' }, + { startIndex: 141, type: 'meta.scss' } /* '#{' */, + { startIndex: 143, type: 'variable.ref.scss' } /* '$font-size' */, + { startIndex: 153, type: 'meta.scss' } /* '}' */, + { startIndex: 154, type: 'operator.scss' } /* '/' */, + { startIndex: 155, type: 'meta.scss' } /* '#{' */, + { startIndex: 157, type: 'variable.ref.scss' } /* '$line-height' */, + { startIndex: 169, type: 'meta.scss' } /* '}' */, + { startIndex: 170, type: 'delimiter.scss' } /* ';' */, + { startIndex: 171, type: '' }, + { startIndex: 172, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 173, type: '' }, + { startIndex: 174, type: 'variable.decl.scss' } /* '$name:' */, + { startIndex: 180, type: '' }, + { startIndex: 181, type: 'attribute.value.scss' } /* 'foo' */, + { startIndex: 184, type: 'delimiter.scss' } /* ';' */, + { startIndex: 185, type: '' }, + { startIndex: 186, type: 'variable.decl.scss' } /* '$attr:' */, + { startIndex: 192, type: '' }, + { startIndex: 193, type: 'attribute.value.scss' } /* 'border' */, + { startIndex: 199, type: 'delimiter.scss' } /* ';' */, + { startIndex: 200, type: '' }, + { startIndex: 201, type: 'tag.scss' } /* 'p.' */, + { startIndex: 203, type: 'meta.scss' } /* '#{' */, + { startIndex: 205, type: 'variable.ref.scss' } /* '$name' */, + { startIndex: 210, type: 'meta.scss' } /* '}' */, + { startIndex: 211, type: '' }, + { startIndex: 212, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 213, type: '' }, + { startIndex: 216, type: 'meta.scss' } /* '#{' */, + { startIndex: 218, type: 'variable.ref.scss' } /* '$attr' */, + { startIndex: 223, type: 'meta.scss' } /* '}' */, + { startIndex: 224, type: 'attribute.name.scss' } /* '-color:' */, + { startIndex: 231, type: '' }, + { startIndex: 232, type: 'attribute.value.scss' } /* 'blue' */, + { startIndex: 236, type: 'delimiter.scss' } /* ';' */, + { startIndex: 237, type: '' }, + { startIndex: 238, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Variable declaration with whitespaces + [{ + line: + '/* Set the color of your colum*/\n' + + '$grid-background-column-color : rgba(100, 100, 225, 0.25) !default;', + tokens: [ + { startIndex: 0, type: 'comment.scss' } /* '// Set the color of your columns' */, + { startIndex: 32, type: '' }, + { startIndex: 33, type: 'variable.decl.scss' } /* '$grid-background-column-color :' */, + { startIndex: 68, type: '' }, + { startIndex: 69, type: 'meta.scss' } /* 'rgba(' */, + { startIndex: 74, type: 'number.scss' } /* '100' */, + { startIndex: 77, type: 'delimiter.scss' } /* ',' */, + { startIndex: 78, type: '' }, + { startIndex: 79, type: 'number.scss' } /* '100' */, + { startIndex: 82, type: 'delimiter.scss' } /* ',' */, + { startIndex: 83, type: '' }, + { startIndex: 84, type: 'number.scss' } /* '225' */, + { startIndex: 87, type: 'delimiter.scss' } /* ',' */, + { startIndex: 88, type: '' }, + { startIndex: 89, type: 'number.scss' } /* '0.25' */, + { startIndex: 93, type: 'meta.scss' } /* ')' */, + { startIndex: 94, type: '' }, + { startIndex: 97, type: 'literal.scss' } /* '!default' */, + { startIndex: 105, type: 'delimiter.scss' } /* ';' */ + ]}], + + // Operationswhitespaces + [{ + line: + 'p {\n' + + ' width: (1em + 2em) * 3;\n' + + ' color: #010203 + #040506;\n' + + ' font-family: sans- + "serif";\n' + + ' margin: 3px + 4px auto;\n' + + ' content: "I ate #{5 + 10} pies!";\n' + + ' color: hsl(0, 100%, 50%);\n' + + ' color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* 'p' */, + { startIndex: 1, type: '' }, + { startIndex: 2, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 3, type: '' }, + { startIndex: 6, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 12, type: '' }, + { startIndex: 13, type: 'delimiter.parenthesis.scss' } /* '(' */, + { startIndex: 14, type: 'number.scss' } /* '1em' */, + { startIndex: 17, type: '' }, + { startIndex: 18, type: 'operator.scss' } /* '+' */, + { startIndex: 19, type: '' }, + { startIndex: 20, type: 'number.scss' } /* '2em' */, + { startIndex: 23, type: 'delimiter.parenthesis.scss' } /* ')' */, + { startIndex: 24, type: '' }, + { startIndex: 25, type: 'operator.scss' } /* '*' */, + { startIndex: 26, type: '' }, + { startIndex: 27, type: 'number.scss' } /* '3' */, + { startIndex: 28, type: 'delimiter.scss' } /* ';' */, + { startIndex: 29, type: '' }, + { startIndex: 32, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 38, type: '' }, + { startIndex: 39, type: 'number.hex.scss' } /* '#010203' */, + { startIndex: 46, type: '' }, + { startIndex: 47, type: 'operator.scss' } /* '+' */, + { startIndex: 48, type: '' }, + { startIndex: 49, type: 'number.hex.scss' } /* '#040506' */, + { startIndex: 56, type: 'delimiter.scss' } /* ';' */, + { startIndex: 57, type: '' }, + { startIndex: 60, type: 'attribute.name.scss' } /* 'font-family:' */, + { startIndex: 72, type: '' }, + { startIndex: 73, type: 'attribute.value.scss' } /* 'sans-' */, + { startIndex: 78, type: '' }, + { startIndex: 79, type: 'operator.scss' } /* '+' */, + { startIndex: 80, type: '' }, + { startIndex: 81, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 82, type: 'string.scss' } /* 'serif' */, + { startIndex: 87, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 88, type: 'delimiter.scss' } /* ';' */, + { startIndex: 89, type: '' }, + { startIndex: 92, type: 'attribute.name.scss' } /* 'margin:' */, + { startIndex: 99, type: '' }, + { startIndex: 100, type: 'number.scss' } /* '3px' */, + { startIndex: 103, type: '' }, + { startIndex: 104, type: 'operator.scss' } /* '+' */, + { startIndex: 105, type: '' }, + { startIndex: 106, type: 'number.scss' } /* '4px' */, + { startIndex: 109, type: '' }, + { startIndex: 110, type: 'attribute.value.scss' } /* 'auto' */, + { startIndex: 114, type: 'delimiter.scss' } /* ';' */, + { startIndex: 115, type: '' }, + { startIndex: 118, type: 'attribute.name.scss' } /* 'content:' */, + { startIndex: 126, type: '' }, + { startIndex: 127, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 128, type: 'string.scss' } /* 'I ate #{5 + 10} pies!' */, + { startIndex: 149, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 150, type: 'delimiter.scss' } /* ';' */, + { startIndex: 151, type: '' }, + { startIndex: 154, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 160, type: '' }, + { startIndex: 161, type: 'meta.scss' } /* 'hsl(' */, + { startIndex: 165, type: 'number.scss' } /* '0' */, + { startIndex: 166, type: 'delimiter.scss' } /* ',' */, + { startIndex: 167, type: '' }, + { startIndex: 168, type: 'number.scss' } /* '100%' */, + { startIndex: 172, type: 'delimiter.scss' } /* ',' */, + { startIndex: 173, type: '' }, + { startIndex: 174, type: 'number.scss' } /* '50%' */, + { startIndex: 177, type: 'meta.scss' } /* ')' */, + { startIndex: 178, type: 'delimiter.scss' } /* ';' */, + { startIndex: 179, type: '' }, + { startIndex: 182, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 188, type: '' }, + { startIndex: 189, type: 'meta.scss' } /* 'hsl(' */, + { startIndex: 193, type: 'attribute.name.scss' } /* '$hue:' */, + { startIndex: 198, type: '' }, + { startIndex: 199, type: 'number.scss' } /* '0' */, + { startIndex: 200, type: 'delimiter.scss' } /* ',' */, + { startIndex: 201, type: '' }, + { startIndex: 202, type: 'attribute.name.scss' } /* '$saturation:' */, + { startIndex: 214, type: '' }, + { startIndex: 215, type: 'number.scss' } /* '100%' */, + { startIndex: 219, type: 'delimiter.scss' } /* ',' */, + { startIndex: 220, type: '' }, + { startIndex: 221, type: 'attribute.name.scss' } /* '$lightness:' */, + { startIndex: 232, type: '' }, + { startIndex: 233, type: 'number.scss' } /* '50%' */, + { startIndex: 236, type: 'meta.scss' } /* ')' */, + { startIndex: 237, type: 'delimiter.scss' } /* ';' */, + { startIndex: 238, type: '' }, + { startIndex: 239, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Functionwhitespaces + [{ + line: + '$grid-width: 40px;\n' + + '$gutter-width: 10px;\n' + + '@function grid-width($n) {\n' + + ' @return $n * $grid-width + ($n - 1) * $gutter-width;\n' + + '}\n' + + '#sidebar { width: grid-width(5); }', + tokens: [ + { startIndex: 0, type: 'variable.decl.scss' } /* '$grid-width:' */, + { startIndex: 12, type: '' }, + { startIndex: 13, type: 'number.scss' } /* '40px' */, + { startIndex: 17, type: 'delimiter.scss' } /* ';' */, + { startIndex: 18, type: '' }, + { startIndex: 19, type: 'variable.decl.scss' } /* '$gutter-width:' */, + { startIndex: 33, type: '' }, + { startIndex: 34, type: 'number.scss' } /* '10px' */, + { startIndex: 38, type: 'delimiter.scss' } /* ';' */, + { startIndex: 39, type: '' }, + { startIndex: 40, type: 'keyword.scss' } /* '@function' */, + { startIndex: 49, type: '' }, + { startIndex: 50, type: 'meta.scss' } /* 'grid-width(' */, + { startIndex: 61, type: 'variable.ref.scss' } /* '$n' */, + { startIndex: 63, type: 'meta.scss' } /* ')' */, + { startIndex: 64, type: '' }, + { startIndex: 65, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 66, type: '' }, + { startIndex: 69, type: 'keyword.scss' } /* '@return' */, + { startIndex: 76, type: '' }, + { startIndex: 77, type: 'variable.ref.scss' } /* '$n' */, + { startIndex: 79, type: '' }, + { startIndex: 80, type: 'operator.scss' } /* '*' */, + { startIndex: 81, type: '' }, + { startIndex: 82, type: 'variable.ref.scss' } /* '$grid-width' */, + { startIndex: 93, type: '' }, + { startIndex: 94, type: 'operator.scss' } /* '+' */, + { startIndex: 95, type: '' }, + { startIndex: 96, type: 'delimiter.parenthesis.scss' } /* '(' */, + { startIndex: 97, type: 'variable.ref.scss' } /* '$n' */, + { startIndex: 99, type: '' }, + { startIndex: 100, type: 'operator.scss' } /* '-' */, + { startIndex: 101, type: '' }, + { startIndex: 102, type: 'number.scss' } /* '1' */, + { startIndex: 103, type: 'delimiter.parenthesis.scss' } /* ')' */, + { startIndex: 104, type: '' }, + { startIndex: 105, type: 'operator.scss' } /* '*' */, + { startIndex: 106, type: '' }, + { startIndex: 107, type: 'variable.ref.scss' } /* '$gutter-width' */, + { startIndex: 120, type: 'delimiter.scss' } /* ';' */, + { startIndex: 121, type: '' }, + { startIndex: 122, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 123, type: '' }, + { startIndex: 124, type: 'tag.scss' } /* '#sidebar' */, + { startIndex: 132, type: '' }, + { startIndex: 133, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 134, type: '' }, + { startIndex: 135, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 141, type: '' }, + { startIndex: 142, type: 'meta.scss' } /* 'grid-width(' */, + { startIndex: 153, type: 'number.scss' } /* '5' */, + { startIndex: 154, type: 'meta.scss' } /* ')' */, + { startIndex: 155, type: 'delimiter.scss' } /* ';' */, + { startIndex: 156, type: '' }, + { startIndex: 157, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Importswhitespaces + [{ + line: + '@import "foo.scss";\n' + + '$family: unquote("Droid+Sans");\n' + + '@import "rounded-corners" url("http://fonts.googleapis.com/css?family=#{$family}");\n' + + '#main {\n' + + ' @import "example";\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@import' */, + { startIndex: 7, type: '' }, + { startIndex: 8, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 9, type: 'string.scss' } /* 'foo.scss' */, + { startIndex: 17, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 18, type: 'delimiter.scss' } /* ';' */, + { startIndex: 19, type: '' }, + { startIndex: 20, type: 'variable.decl.scss' } /* '$family:' */, + { startIndex: 28, type: '' }, + { startIndex: 29, type: 'meta.scss' } /* 'unquote(' */, + { startIndex: 37, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 38, type: 'string.scss' } /* 'Droid+Sans' */, + { startIndex: 48, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 49, type: 'meta.scss' } /* ')' */, + { startIndex: 50, type: 'delimiter.scss' } /* ';' */, + { startIndex: 51, type: '' }, + { startIndex: 52, type: 'keyword.scss' } /* '@import' */, + { startIndex: 59, type: '' }, + { startIndex: 60, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 61, type: 'string.scss' } /* 'rounded-corners' */, + { startIndex: 76, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 77, type: '' }, + { startIndex: 78, type: 'meta.scss' } /* 'url(' */, + { startIndex: 82, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 83, type: 'string.scss' } /* 'http://fonts.googleapis.com/css?family=#{$family}' */, + { startIndex: 132, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 133, type: 'meta.scss' } /* ')' */, + { startIndex: 134, type: 'delimiter.scss' } /* ';' */, + { startIndex: 135, type: '' }, + { startIndex: 136, type: 'tag.scss' } /* '#main' */, + { startIndex: 141, type: '' }, + { startIndex: 142, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 143, type: '' }, + { startIndex: 146, type: 'keyword.scss' } /* '@import' */, + { startIndex: 153, type: '' }, + { startIndex: 154, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 155, type: 'string.scss' } /* 'example' */, + { startIndex: 162, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 163, type: 'delimiter.scss' } /* ';' */, + { startIndex: 164, type: '' }, + { startIndex: 165, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Mediawhitespaces + [{ + line: + '.sidebar {\n' + + ' width: 300px;\n' + + ' @media screen and (orientation: landscape) {\n' + + ' width: 500px;\n' + + ' }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* '.sidebar' */, + { startIndex: 8, type: '' }, + { startIndex: 9, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 10, type: '' }, + { startIndex: 13, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 19, type: '' }, + { startIndex: 20, type: 'number.scss' } /* '300px' */, + { startIndex: 25, type: 'delimiter.scss' } /* ';' */, + { startIndex: 26, type: '' }, + { startIndex: 29, type: 'keyword.flow.scss' } /* '@media' */, + { startIndex: 35, type: '' }, + { startIndex: 36, type: 'attribute.value.scss' } /* 'screen' */, + { startIndex: 42, type: '' }, + { startIndex: 43, type: 'operator.scss' } /* 'and' */, + { startIndex: 46, type: '' }, + { startIndex: 47, type: 'delimiter.parenthesis.scss' } /* '(' */, + { startIndex: 48, type: 'attribute.value.scss' } /* 'orientation' */, + { startIndex: 59, type: '' }, + { startIndex: 61, type: 'attribute.value.scss' } /* 'landscape' */, + { startIndex: 70, type: 'delimiter.parenthesis.scss' } /* ')' */, + { startIndex: 71, type: '' }, + { startIndex: 72, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 73, type: '' }, + { startIndex: 78, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 84, type: '' }, + { startIndex: 85, type: 'number.scss' } /* '500px' */, + { startIndex: 90, type: 'delimiter.scss' } /* ';' */, + { startIndex: 91, type: '' }, + { startIndex: 94, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 95, type: '' }, + { startIndex: 96, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Extendwhitespaces + [{ + line: + '.error {\n' + + ' border: 1px #f00;\n' + + ' background-color: #fdd;\n' + + '}\n' + + '.seriousError {\n' + + ' @extend .error;\n' + + ' border-width: 3px;\n' + + '}\n' + + '#context a%extreme {\n' + + ' color: blue;\n' + + ' font-weight: bold;\n' + + ' font-size: 2em;\n' + + '}\n' + + '.notice {\n' + + ' @extend %extreme !optional;\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* '.error' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 8, type: '' }, + { startIndex: 11, type: 'attribute.name.scss' } /* 'border:' */, + { startIndex: 18, type: '' }, + { startIndex: 19, type: 'number.scss' } /* '1px' */, + { startIndex: 22, type: '' }, + { startIndex: 23, type: 'number.hex.scss' } /* '#f00' */, + { startIndex: 27, type: 'delimiter.scss' } /* ';' */, + { startIndex: 28, type: '' }, + { startIndex: 31, type: 'attribute.name.scss' } /* 'background-color:' */, + { startIndex: 48, type: '' }, + { startIndex: 49, type: 'number.hex.scss' } /* '#fdd' */, + { startIndex: 53, type: 'delimiter.scss' } /* ';' */, + { startIndex: 54, type: '' }, + { startIndex: 55, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 56, type: '' }, + { startIndex: 57, type: 'tag.scss' } /* '.seriousError' */, + { startIndex: 70, type: '' }, + { startIndex: 71, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 72, type: '' }, + { startIndex: 75, type: 'keyword.scss' } /* '@extend' */, + { startIndex: 82, type: '' }, + { startIndex: 83, type: 'tag.scss' } /* '.error' */, + { startIndex: 89, type: 'delimiter.scss' } /* ';' */, + { startIndex: 90, type: '' }, + { startIndex: 93, type: 'attribute.name.scss' } /* 'border-width:' */, + { startIndex: 106, type: '' }, + { startIndex: 107, type: 'number.scss' } /* '3px' */, + { startIndex: 110, type: 'delimiter.scss' } /* ';' */, + { startIndex: 111, type: '' }, + { startIndex: 112, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 113, type: '' }, + { startIndex: 114, type: 'tag.scss' } /* '#context' */, + { startIndex: 122, type: '' }, + { startIndex: 123, type: 'tag.scss' } /* 'a%extreme' */, + { startIndex: 132, type: '' }, + { startIndex: 133, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 134, type: '' }, + { startIndex: 137, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 143, type: '' }, + { startIndex: 144, type: 'attribute.value.scss' } /* 'blue' */, + { startIndex: 148, type: 'delimiter.scss' } /* ';' */, + { startIndex: 149, type: '' }, + { startIndex: 152, type: 'attribute.name.scss' } /* 'font-weight:' */, + { startIndex: 164, type: '' }, + { startIndex: 165, type: 'attribute.value.scss' } /* 'bold' */, + { startIndex: 169, type: 'delimiter.scss' } /* ';' */, + { startIndex: 170, type: '' }, + { startIndex: 173, type: 'attribute.name.scss' } /* 'font-size:' */, + { startIndex: 183, type: '' }, + { startIndex: 184, type: 'number.scss' } /* '2em' */, + { startIndex: 187, type: 'delimiter.scss' } /* ';' */, + { startIndex: 188, type: '' }, + { startIndex: 189, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 190, type: '' }, + { startIndex: 191, type: 'tag.scss' } /* '.notice' */, + { startIndex: 198, type: '' }, + { startIndex: 199, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 200, type: '' }, + { startIndex: 203, type: 'keyword.scss' } /* '@extend' */, + { startIndex: 210, type: '' }, + { startIndex: 211, type: 'tag.scss' } /* '%extreme' */, + { startIndex: 219, type: '' }, + { startIndex: 220, type: 'literal.scss' } /* '!optional' */, + { startIndex: 229, type: 'delimiter.scss' } /* ';' */, + { startIndex: 230, type: '' }, + { startIndex: 231, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // @debug and @warnwhitespaces + [{ + line: + '@debug 10em + 12em;\n' + + '@mixin adjust-location($x, $y) {\n' + + ' @if unitless($x) {\n' + + ' @warn "Assuming #{$x} to be in pixels";\n' + + ' $x: 1px * $x;\n' + + ' }\n' + + ' @if unitless($y) {\n' + + ' @warn "Assuming #{$y} to be in pixels";\n' + + ' $y: 1px * $y;\n' + + ' }\n' + + ' position: relative; left: $x; top: $y;\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@debug' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'number.scss' } /* '10em' */, + { startIndex: 11, type: '' }, + { startIndex: 12, type: 'operator.scss' } /* '+' */, + { startIndex: 13, type: '' }, + { startIndex: 14, type: 'number.scss' } /* '12em' */, + { startIndex: 18, type: 'delimiter.scss' } /* ';' */, + { startIndex: 19, type: '' }, + { startIndex: 20, type: 'keyword.scss' } /* '@mixin' */, + { startIndex: 26, type: '' }, + { startIndex: 27, type: 'meta.scss' } /* 'adjust-location(' */, + { startIndex: 43, type: 'variable.ref.scss' } /* '$x' */, + { startIndex: 45, type: 'delimiter.scss' } /* ',' */, + { startIndex: 46, type: '' }, + { startIndex: 47, type: 'variable.ref.scss' } /* '$y' */, + { startIndex: 49, type: 'meta.scss' } /* ')' */, + { startIndex: 50, type: '' }, + { startIndex: 51, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 52, type: '' }, + { startIndex: 55, type: 'keyword.flow.scss' } /* '@if' */, + { startIndex: 58, type: '' }, + { startIndex: 59, type: 'meta.scss' } /* 'unitless(' */, + { startIndex: 68, type: 'variable.ref.scss' } /* '$x' */, + { startIndex: 70, type: 'meta.scss' } /* ')' */, + { startIndex: 71, type: '' }, + { startIndex: 72, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 73, type: '' }, + { startIndex: 78, type: 'keyword.scss' } /* '@warn' */, + { startIndex: 83, type: '' }, + { startIndex: 84, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 85, type: 'string.scss' } /* 'Assuming #{$x} to be in pixels' */, + { startIndex: 115, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 116, type: 'delimiter.scss' } /* ';' */, + { startIndex: 117, type: '' }, + { startIndex: 122, type: 'variable.decl.scss' } /* '$x:' */, + { startIndex: 125, type: '' }, + { startIndex: 126, type: 'number.scss' } /* '1px' */, + { startIndex: 129, type: '' }, + { startIndex: 130, type: 'operator.scss' } /* '*' */, + { startIndex: 131, type: '' }, + { startIndex: 132, type: 'variable.ref.scss' } /* '$x' */, + { startIndex: 134, type: 'delimiter.scss' } /* ';' */, + { startIndex: 135, type: '' }, + { startIndex: 138, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 139, type: '' }, + { startIndex: 142, type: 'keyword.flow.scss' } /* '@if' */, + { startIndex: 145, type: '' }, + { startIndex: 146, type: 'meta.scss' } /* 'unitless(' */, + { startIndex: 155, type: 'variable.ref.scss' } /* '$y' */, + { startIndex: 157, type: 'meta.scss' } /* ')' */, + { startIndex: 158, type: '' }, + { startIndex: 159, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 160, type: '' }, + { startIndex: 165, type: 'keyword.scss' } /* '@warn' */, + { startIndex: 170, type: '' }, + { startIndex: 171, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 172, type: 'string.scss' } /* 'Assuming #{$y} to be in pixels' */, + { startIndex: 202, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 203, type: 'delimiter.scss' } /* ';' */, + { startIndex: 204, type: '' }, + { startIndex: 209, type: 'variable.decl.scss' } /* '$y:' */, + { startIndex: 212, type: '' }, + { startIndex: 213, type: 'number.scss' } /* '1px' */, + { startIndex: 216, type: '' }, + { startIndex: 217, type: 'operator.scss' } /* '*' */, + { startIndex: 218, type: '' }, + { startIndex: 219, type: 'variable.ref.scss' } /* '$y' */, + { startIndex: 221, type: 'delimiter.scss' } /* ';' */, + { startIndex: 222, type: '' }, + { startIndex: 225, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 226, type: '' }, + { startIndex: 229, type: 'attribute.name.scss' } /* 'position:' */, + { startIndex: 238, type: '' }, + { startIndex: 239, type: 'attribute.value.scss' } /* 'relative' */, + { startIndex: 247, type: 'delimiter.scss' } /* ';' */, + { startIndex: 248, type: '' }, + { startIndex: 249, type: 'attribute.name.scss' } /* 'left:' */, + { startIndex: 254, type: '' }, + { startIndex: 255, type: 'variable.ref.scss' } /* '$x' */, + { startIndex: 257, type: 'delimiter.scss' } /* ';' */, + { startIndex: 258, type: '' }, + { startIndex: 259, type: 'attribute.name.scss' } /* 'top:' */, + { startIndex: 263, type: '' }, + { startIndex: 264, type: 'variable.ref.scss' } /* '$y' */, + { startIndex: 266, type: 'delimiter.scss' } /* ';' */, + { startIndex: 267, type: '' }, + { startIndex: 268, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // if statementwhitespaces + [{ + line: + 'p {\n' + + ' @if 1 + 1 == 2 { border: 1px solid; }\n' + + ' @if 5 < 3 { border: 2px dotted; }\n' + + ' @if null { border: 3px double; }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'tag.scss' } /* 'p' */, + { startIndex: 1, type: '' }, + { startIndex: 2, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 3, type: '' }, + { startIndex: 6, type: 'keyword.flow.scss' } /* '@if' */, + { startIndex: 9, type: '' }, + { startIndex: 10, type: 'number.scss' } /* '1' */, + { startIndex: 11, type: '' }, + { startIndex: 12, type: 'operator.scss' } /* '+' */, + { startIndex: 13, type: '' }, + { startIndex: 14, type: 'number.scss' } /* '1' */, + { startIndex: 15, type: '' }, + { startIndex: 16, type: 'operator.scss' } /* '==' */, + { startIndex: 18, type: '' }, + { startIndex: 19, type: 'number.scss' } /* '2' */, + { startIndex: 20, type: '' }, + { startIndex: 21, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 22, type: '' }, + { startIndex: 23, type: 'attribute.name.scss' } /* 'border:' */, + { startIndex: 30, type: '' }, + { startIndex: 31, type: 'number.scss' } /* '1px' */, + { startIndex: 34, type: '' }, + { startIndex: 35, type: 'attribute.value.scss' } /* 'solid' */, + { startIndex: 40, type: 'delimiter.scss' } /* ';' */, + { startIndex: 41, type: '' }, + { startIndex: 43, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 44, type: '' }, + { startIndex: 47, type: 'keyword.flow.scss' } /* '@if' */, + { startIndex: 50, type: '' }, + { startIndex: 51, type: 'number.scss' } /* '5' */, + { startIndex: 52, type: '' }, + { startIndex: 53, type: 'operator.scss' } /* '<' */, + { startIndex: 54, type: '' }, + { startIndex: 55, type: 'number.scss' } /* '3' */, + { startIndex: 56, type: '' }, + { startIndex: 62, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 63, type: '' }, + { startIndex: 64, type: 'attribute.name.scss' } /* 'border:' */, + { startIndex: 71, type: '' }, + { startIndex: 72, type: 'number.scss' } /* '2px' */, + { startIndex: 75, type: '' }, + { startIndex: 76, type: 'attribute.value.scss' } /* 'dotted' */, + { startIndex: 82, type: 'delimiter.scss' } /* ';' */, + { startIndex: 83, type: '' }, + { startIndex: 84, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 85, type: '' }, + { startIndex: 88, type: 'keyword.flow.scss' } /* '@if' */, + { startIndex: 91, type: '' }, + { startIndex: 92, type: 'attribute.value.scss' } /* 'null' */, + { startIndex: 96, type: '' }, + { startIndex: 103, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 104, type: '' }, + { startIndex: 105, type: 'attribute.name.scss' } /* 'border:' */, + { startIndex: 112, type: '' }, + { startIndex: 113, type: 'number.scss' } /* '3px' */, + { startIndex: 116, type: '' }, + { startIndex: 117, type: 'attribute.value.scss' } /* 'double' */, + { startIndex: 123, type: 'delimiter.scss' } /* ';' */, + { startIndex: 124, type: '' }, + { startIndex: 125, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 126, type: '' }, + { startIndex: 127, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // if-else statementwhitespaces + [{ + line: + '$type: monster;\n' + + 'p {\n' + + ' @if $type == ocean {\n' + + ' color: blue;\n' + + ' } @else if $type == matador {\n' + + ' color: red;\n' + + ' } @else {\n' + + ' color: black;\n' + + ' }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'variable.decl.scss' } /* '$type:' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'attribute.value.scss' } /* 'monster' */, + { startIndex: 14, type: 'delimiter.scss' } /* ';' */, + { startIndex: 15, type: '' }, + { startIndex: 16, type: 'tag.scss' } /* 'p' */, + { startIndex: 17, type: '' }, + { startIndex: 18, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 19, type: '' }, + { startIndex: 22, type: 'keyword.flow.scss' } /* '@if' */, + { startIndex: 25, type: '' }, + { startIndex: 26, type: 'variable.ref.scss' } /* '$type' */, + { startIndex: 31, type: '' }, + { startIndex: 32, type: 'operator.scss' } /* '==' */, + { startIndex: 34, type: '' }, + { startIndex: 35, type: 'attribute.value.scss' } /* 'ocean' */, + { startIndex: 40, type: '' }, + { startIndex: 41, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 42, type: '' }, + { startIndex: 47, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 53, type: '' }, + { startIndex: 54, type: 'attribute.value.scss' } /* 'blue' */, + { startIndex: 58, type: 'delimiter.scss' } /* ';' */, + { startIndex: 59, type: '' }, + { startIndex: 62, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 63, type: '' }, + { startIndex: 64, type: 'keyword.flow.scss' } /* '@else' */, + { startIndex: 69, type: '' }, + { startIndex: 70, type: 'keyword.flow.scss' } /* 'if' */, + { startIndex: 72, type: '' }, + { startIndex: 73, type: 'variable.ref.scss' } /* '$type' */, + { startIndex: 78, type: '' }, + { startIndex: 79, type: 'operator.scss' } /* '==' */, + { startIndex: 81, type: '' }, + { startIndex: 82, type: 'attribute.value.scss' } /* 'matador' */, + { startIndex: 89, type: '' }, + { startIndex: 90, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 91, type: '' }, + { startIndex: 96, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 102, type: '' }, + { startIndex: 103, type: 'attribute.value.scss' } /* 'red' */, + { startIndex: 106, type: 'delimiter.scss' } /* ';' */, + { startIndex: 107, type: '' }, + { startIndex: 110, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 111, type: '' }, + { startIndex: 112, type: 'keyword.flow.scss' } /* '@else' */, + { startIndex: 117, type: '' }, + { startIndex: 118, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 119, type: '' }, + { startIndex: 124, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 130, type: '' }, + { startIndex: 131, type: 'attribute.value.scss' } /* 'black' */, + { startIndex: 136, type: 'delimiter.scss' } /* ';' */, + { startIndex: 137, type: '' }, + { startIndex: 140, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 141, type: '' }, + { startIndex: 142, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // for statementwhitespaces + [{ + line: + '@for $i from 1 through 3 {\n' + + ' .item-#{$i} { width: 2em * $i; }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.flow.scss' } /* '@for' */, + { startIndex: 4, type: '' }, + { startIndex: 5, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 7, type: '' }, + { startIndex: 8, type: 'keyword.flow.scss' } /* 'from' */, + { startIndex: 12, type: '' }, + { startIndex: 13, type: 'number.scss' } /* '1' */, + { startIndex: 14, type: '' }, + { startIndex: 15, type: 'keyword.flow.scss' } /* 'through' */, + { startIndex: 22, type: '' }, + { startIndex: 23, type: 'number.scss' } /* '3' */, + { startIndex: 24, type: '' }, + { startIndex: 25, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 26, type: '' }, + { startIndex: 29, type: 'tag.scss' } /* '.item-' */, + { startIndex: 35, type: 'meta.scss' } /* '#{' */, + { startIndex: 37, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 39, type: 'meta.scss' } /* '}' */, + { startIndex: 40, type: '' }, + { startIndex: 41, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 42, type: '' }, + { startIndex: 43, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 49, type: '' }, + { startIndex: 50, type: 'number.scss' } /* '2em' */, + { startIndex: 53, type: '' }, + { startIndex: 54, type: 'operator.scss' } /* '*' */, + { startIndex: 55, type: '' }, + { startIndex: 56, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 58, type: 'delimiter.scss' } /* ';' */, + { startIndex: 59, type: '' }, + { startIndex: 60, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 61, type: '' }, + { startIndex: 62, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // each statementwhitespaces + [{ + line: + '@each $animal in puma, sea-slug, egret, salamander {\n' + + ' .#{$animal}-icon {\n' + + ' background-image: url(\'/images/#{$animal}.png\');\n' + + ' }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.flow.scss' } /* '@each' */, + { startIndex: 5, type: '' }, + { startIndex: 6, type: 'variable.ref.scss' } /* '$animal' */, + { startIndex: 13, type: '' }, + { startIndex: 14, type: 'keyword.flow.scss' } /* 'in' */, + { startIndex: 16, type: '' }, + { startIndex: 17, type: 'attribute.value.scss' } /* 'puma' */, + { startIndex: 21, type: 'operator.scss' } /* ',' */, + { startIndex: 22, type: '' }, + { startIndex: 23, type: 'attribute.value.scss' } /* 'sea-slug' */, + { startIndex: 31, type: 'operator.scss' } /* ',' */, + { startIndex: 32, type: '' }, + { startIndex: 33, type: 'attribute.value.scss' } /* 'egret' */, + { startIndex: 38, type: 'operator.scss' } /* ',' */, + { startIndex: 39, type: '' }, + { startIndex: 40, type: 'attribute.value.scss' } /* 'salamander' */, + { startIndex: 50, type: '' }, + { startIndex: 51, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 52, type: '' }, + { startIndex: 55, type: 'tag.scss' } /* '.' */, + { startIndex: 56, type: 'meta.scss' } /* '#{' */, + { startIndex: 58, type: 'variable.ref.scss' } /* '$animal' */, + { startIndex: 65, type: 'meta.scss' } /* '}' */, + { startIndex: 66, type: 'tag.scss' } /* '-icon' */, + { startIndex: 71, type: '' }, + { startIndex: 72, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 73, type: '' }, + { startIndex: 78, type: 'attribute.name.scss' } /* 'background-image:' */, + { startIndex: 95, type: '' }, + { startIndex: 96, type: 'meta.scss' } /* 'url(' */, + { startIndex: 100, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 101, type: 'string.scss' } /* '/images/#{$animal}.png' */, + { startIndex: 123, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 124, type: 'meta.scss' } /* ')' */, + { startIndex: 125, type: 'delimiter.scss' } /* ';' */, + { startIndex: 126, type: '' }, + { startIndex: 129, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 130, type: '' }, + { startIndex: 131, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // while statementwhitespaces + [{ + line: + '$i: 6;\n' + + '@while $i > 0 {\n' + + ' .item-#{$i} { width: 2em * $i; }\n' + + ' $i: $i - 2;\n' + + '}', + tokens: [ + { startIndex: 0, type: 'variable.decl.scss' } /* '$i:' */, + { startIndex: 3, type: '' }, + { startIndex: 4, type: 'number.scss' } /* '6' */, + { startIndex: 5, type: 'delimiter.scss' } /* ';' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'keyword.flow.scss' } /* '@while' */, + { startIndex: 13, type: '' }, + { startIndex: 14, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 16, type: '' }, + { startIndex: 17, type: 'operator.scss' } /* '>' */, + { startIndex: 18, type: '' }, + { startIndex: 19, type: 'number.scss' } /* '0' */, + { startIndex: 20, type: '' }, + { startIndex: 21, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 22, type: '' }, + { startIndex: 25, type: 'tag.scss' } /* '.item-' */, + { startIndex: 31, type: 'meta.scss' } /* '#{' */, + { startIndex: 33, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 35, type: 'meta.scss' } /* '}' */, + { startIndex: 36, type: '' }, + { startIndex: 37, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 38, type: '' }, + { startIndex: 39, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 45, type: '' }, + { startIndex: 46, type: 'number.scss' } /* '2em' */, + { startIndex: 49, type: '' }, + { startIndex: 50, type: 'operator.scss' } /* '*' */, + { startIndex: 51, type: '' }, + { startIndex: 52, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 54, type: 'delimiter.scss' } /* ';' */, + { startIndex: 55, type: '' }, + { startIndex: 56, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 57, type: '' }, + { startIndex: 60, type: 'variable.decl.scss' } /* '$i:' */, + { startIndex: 63, type: '' }, + { startIndex: 64, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 66, type: '' }, + { startIndex: 67, type: 'operator.scss' } /* '-' */, + { startIndex: 68, type: '' }, + { startIndex: 69, type: 'number.scss' } /* '2' */, + { startIndex: 70, type: 'delimiter.scss' } /* ';' */, + { startIndex: 71, type: '' }, + { startIndex: 72, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Function with control statements nestedwhitespaces + [{ + line: + '@function foo($total, $a) {\n' + + ' @for $i from 0 to $total {\n' + + ' @if (unit($a) == "%") and ($i == ($total - 1)) {\n' + + ' $z: 100%;\n' + + ' @return \'1\';\n' + + ' }\n' + + ' }\n' + + ' @return $grid;\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@function' */, + { startIndex: 9, type: '' }, + { startIndex: 10, type: 'meta.scss' } /* 'foo(' */, + { startIndex: 14, type: 'variable.ref.scss' } /* '$total' */, + { startIndex: 20, type: 'delimiter.scss' } /* ',' */, + { startIndex: 21, type: '' }, + { startIndex: 22, type: 'variable.ref.scss' } /* '$a' */, + { startIndex: 24, type: 'meta.scss' } /* ')' */, + { startIndex: 25, type: '' }, + { startIndex: 26, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 27, type: '' }, + { startIndex: 30, type: 'keyword.flow.scss' } /* '@for' */, + { startIndex: 34, type: '' }, + { startIndex: 35, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 37, type: '' }, + { startIndex: 38, type: 'keyword.flow.scss' } /* 'from' */, + { startIndex: 42, type: '' }, + { startIndex: 43, type: 'number.scss' } /* '0' */, + { startIndex: 44, type: '' }, + { startIndex: 45, type: 'keyword.flow.scss' } /* 'to' */, + { startIndex: 47, type: '' }, + { startIndex: 48, type: 'variable.ref.scss' } /* '$total' */, + { startIndex: 54, type: '' }, + { startIndex: 55, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 56, type: '' }, + { startIndex: 61, type: 'keyword.flow.scss' } /* '@if' */, + { startIndex: 64, type: '' }, + { startIndex: 65, type: 'delimiter.parenthesis.scss' } /* '(' */, + { startIndex: 66, type: 'meta.scss' } /* 'unit(' */, + { startIndex: 71, type: 'variable.ref.scss' } /* '$a' */, + { startIndex: 73, type: 'meta.scss' } /* ')' */, + { startIndex: 74, type: '' }, + { startIndex: 75, type: 'operator.scss' } /* '==' */, + { startIndex: 77, type: '' }, + { startIndex: 78, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 79, type: 'string.scss' } /* '%' */, + { startIndex: 80, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 81, type: 'delimiter.parenthesis.scss' } /* ')' */, + { startIndex: 82, type: '' }, + { startIndex: 83, type: 'operator.scss' } /* 'and' */, + { startIndex: 86, type: '' }, + { startIndex: 87, type: 'delimiter.parenthesis.scss' } /* '(' */, + { startIndex: 88, type: 'variable.ref.scss' } /* '$i' */, + { startIndex: 90, type: '' }, + { startIndex: 91, type: 'operator.scss' } /* '==' */, + { startIndex: 93, type: '' }, + { startIndex: 94, type: 'delimiter.parenthesis.scss' } /* '(' */, + { startIndex: 95, type: 'variable.ref.scss' } /* '$total' */, + { startIndex: 101, type: '' }, + { startIndex: 102, type: 'operator.scss' } /* '-' */, + { startIndex: 103, type: '' }, + { startIndex: 104, type: 'number.scss' } /* '1' */, + { startIndex: 105, type: 'delimiter.parenthesis.scss' } /* ')' */, + { startIndex: 107, type: '' }, + { startIndex: 108, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 109, type: '' }, + { startIndex: 116, type: 'variable.decl.scss' } /* '$z:' */, + { startIndex: 119, type: '' }, + { startIndex: 120, type: 'number.scss' } /* '100%' */, + { startIndex: 124, type: 'delimiter.scss' } /* ';' */, + { startIndex: 125, type: '' }, + { startIndex: 132, type: 'keyword.scss' } /* '@return' */, + { startIndex: 139, type: '' }, + { startIndex: 140, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 141, type: 'string.scss' } /* '1' */, + { startIndex: 142, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 143, type: 'delimiter.scss' } /* ';' */, + { startIndex: 144, type: '' }, + { startIndex: 149, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 150, type: '' }, + { startIndex: 153, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 154, type: '' }, + { startIndex: 157, type: 'keyword.scss' } /* '@return' */, + { startIndex: 164, type: '' }, + { startIndex: 165, type: 'variable.ref.scss' } /* '$grid' */, + { startIndex: 170, type: 'delimiter.scss' } /* ';' */, + { startIndex: 171, type: '' }, + { startIndex: 172, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + + + // @mixin simplewhitespaces + [{ + line: + '@mixin large-text {\n' + + ' font: {\n' + + ' family: Arial;\n' + + ' size: 20px;\n' + + ' weight: bold;\n' + + ' }\n' + + ' color: #ff0000;\n' + + '}\n' + + '.page-title {\n' + + ' @include large-text;\n' + + ' padding: 4px;\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@mixin' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'meta.scss' } /* 'large-text' */, + { startIndex: 17, type: '' }, + { startIndex: 18, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 19, type: '' }, + { startIndex: 22, type: 'attribute.name.scss' } /* 'font:' */, + { startIndex: 27, type: '' }, + { startIndex: 28, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 29, type: '' }, + { startIndex: 34, type: 'attribute.name.scss' } /* 'family:' */, + { startIndex: 41, type: '' }, + { startIndex: 42, type: 'attribute.value.scss' } /* 'Arial' */, + { startIndex: 47, type: 'delimiter.scss' } /* ';' */, + { startIndex: 48, type: '' }, + { startIndex: 53, type: 'attribute.name.scss' } /* 'size:' */, + { startIndex: 58, type: '' }, + { startIndex: 59, type: 'number.scss' } /* '20px' */, + { startIndex: 63, type: 'delimiter.scss' } /* ';' */, + { startIndex: 64, type: '' }, + { startIndex: 69, type: 'attribute.name.scss' } /* 'weight:' */, + { startIndex: 76, type: '' }, + { startIndex: 77, type: 'attribute.value.scss' } /* 'bold' */, + { startIndex: 81, type: 'delimiter.scss' } /* ';' */, + { startIndex: 82, type: '' }, + { startIndex: 85, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 86, type: '' }, + { startIndex: 89, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 95, type: '' }, + { startIndex: 96, type: 'number.hex.scss' } /* '#ff0000' */, + { startIndex: 103, type: 'delimiter.scss' } /* ';' */, + { startIndex: 104, type: '' }, + { startIndex: 105, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 106, type: '' }, + { startIndex: 107, type: 'tag.scss' } /* '.page-title' */, + { startIndex: 118, type: '' }, + { startIndex: 119, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 120, type: '' }, + { startIndex: 123, type: 'keyword.scss' } /* '@include' */, + { startIndex: 131, type: '' }, + { startIndex: 132, type: 'meta.scss' } /* 'large-text' */, + { startIndex: 142, type: 'delimiter.scss' } /* ';' */, + { startIndex: 143, type: '' }, + { startIndex: 146, type: 'attribute.name.scss' } /* 'padding:' */, + { startIndex: 154, type: '' }, + { startIndex: 155, type: 'number.scss' } /* '4px' */, + { startIndex: 158, type: 'delimiter.scss' } /* ';' */, + { startIndex: 159, type: '' }, + { startIndex: 160, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // @mixin with parameterswhitespaces + [{ + line: + '@mixin sexy-border($color, $width: 1in) {\n' + + ' border: {\n' + + ' color: $color;\n' + + ' width: $width;\n' + + ' style: dashed;\n' + + ' }\n' + + '}\n' + + 'p { @include sexy-border(blue); }', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@mixin' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'meta.scss' } /* 'sexy-border(' */, + { startIndex: 19, type: 'variable.ref.scss' } /* '$color' */, + { startIndex: 25, type: 'delimiter.scss' } /* ',' */, + { startIndex: 26, type: '' }, + { startIndex: 27, type: 'variable.decl.scss' } /* '$width:' */, + { startIndex: 34, type: '' }, + { startIndex: 35, type: 'number.scss' } /* '1in' */, + { startIndex: 38, type: 'meta.scss' } /* ')' */, + { startIndex: 39, type: '' }, + { startIndex: 40, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 41, type: '' }, + { startIndex: 44, type: 'attribute.name.scss' } /* 'border:' */, + { startIndex: 51, type: '' }, + { startIndex: 52, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 53, type: '' }, + { startIndex: 58, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 64, type: '' }, + { startIndex: 65, type: 'variable.ref.scss' } /* '$color' */, + { startIndex: 71, type: 'delimiter.scss' } /* ';' */, + { startIndex: 72, type: '' }, + { startIndex: 77, type: 'attribute.name.scss' } /* 'width:' */, + { startIndex: 83, type: '' }, + { startIndex: 84, type: 'variable.ref.scss' } /* '$width' */, + { startIndex: 90, type: 'delimiter.scss' } /* ';' */, + { startIndex: 91, type: '' }, + { startIndex: 96, type: 'attribute.name.scss' } /* 'style:' */, + { startIndex: 102, type: '' }, + { startIndex: 103, type: 'attribute.value.scss' } /* 'dashed' */, + { startIndex: 109, type: 'delimiter.scss' } /* ';' */, + { startIndex: 110, type: '' }, + { startIndex: 113, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 114, type: '' }, + { startIndex: 115, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 116, type: '' }, + { startIndex: 117, type: 'tag.scss' } /* 'p' */, + { startIndex: 118, type: '' }, + { startIndex: 119, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 120, type: '' }, + { startIndex: 121, type: 'keyword.scss' } /* '@include' */, + { startIndex: 129, type: '' }, + { startIndex: 130, type: 'meta.scss' } /* 'sexy-border(' */, + { startIndex: 142, type: 'attribute.value.scss' } /* 'blue' */, + { startIndex: 146, type: 'meta.scss' } /* ')' */, + { startIndex: 147, type: 'delimiter.scss' } /* ';' */, + { startIndex: 148, type: '' }, + { startIndex: 149, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // @mixin with varargswhitespaces + [{ + line: + '@mixin box-shadow($shadows...) {\n' + + ' -moz-box-shadow: $shadows;\n' + + ' -webkit-box-shadow: $shadows;\n' + + ' box-shadow: $shadows;\n' + + '}\n' + + '.shadows {\n' + + ' @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@mixin' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'meta.scss' } /* 'box-shadow(' */, + { startIndex: 18, type: 'variable.ref.scss' } /* '$shadows' */, + { startIndex: 26, type: 'operator.scss' } /* '...' */, + { startIndex: 29, type: 'meta.scss' } /* ')' */, + { startIndex: 30, type: '' }, + { startIndex: 31, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 32, type: '' }, + { startIndex: 35, type: 'attribute.name.scss' } /* '-moz-box-shadow:' */, + { startIndex: 51, type: '' }, + { startIndex: 52, type: 'variable.ref.scss' } /* '$shadows' */, + { startIndex: 60, type: 'delimiter.scss' } /* ';' */, + { startIndex: 61, type: '' }, + { startIndex: 64, type: 'attribute.name.scss' } /* '-webkit-box-shadow:' */, + { startIndex: 83, type: '' }, + { startIndex: 84, type: 'variable.ref.scss' } /* '$shadows' */, + { startIndex: 92, type: 'delimiter.scss' } /* ';' */, + { startIndex: 93, type: '' }, + { startIndex: 96, type: 'attribute.name.scss' } /* 'box-shadow:' */, + { startIndex: 107, type: '' }, + { startIndex: 108, type: 'variable.ref.scss' } /* '$shadows' */, + { startIndex: 116, type: 'delimiter.scss' } /* ';' */, + { startIndex: 117, type: '' }, + { startIndex: 118, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 119, type: '' }, + { startIndex: 120, type: 'tag.scss' } /* '.shadows' */, + { startIndex: 128, type: '' }, + { startIndex: 129, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 130, type: '' }, + { startIndex: 133, type: 'keyword.scss' } /* '@include' */, + { startIndex: 141, type: '' }, + { startIndex: 142, type: 'meta.scss' } /* 'box-shadow(' */, + { startIndex: 153, type: 'number.scss' } /* '0px' */, + { startIndex: 156, type: '' }, + { startIndex: 157, type: 'number.scss' } /* '4px' */, + { startIndex: 160, type: '' }, + { startIndex: 161, type: 'number.scss' } /* '5px' */, + { startIndex: 164, type: '' }, + { startIndex: 165, type: 'number.hex.scss' } /* '#666' */, + { startIndex: 169, type: 'delimiter.scss' } /* ',' */, + { startIndex: 170, type: '' }, + { startIndex: 171, type: 'number.scss' } /* '2px' */, + { startIndex: 174, type: '' }, + { startIndex: 175, type: 'number.scss' } /* '6px' */, + { startIndex: 178, type: '' }, + { startIndex: 179, type: 'number.scss' } /* '10px' */, + { startIndex: 183, type: '' }, + { startIndex: 184, type: 'number.hex.scss' } /* '#999' */, + { startIndex: 188, type: 'meta.scss' } /* ')' */, + { startIndex: 189, type: 'delimiter.scss' } /* ';' */, + { startIndex: 190, type: '' }, + { startIndex: 191, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // @include with varargswhitespaces + [{ + line: + '@mixin colors($text, $background, $border) {\n' + + ' color: $text;\n' + + ' background-color: $background;\n' + + ' border-color: $border;\n' + + '}\n' + + '$values: #ff0000, #00ff00, #0000ff;\n' + + '.primary {\n' + + ' @include colors($values...);\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@mixin' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'meta.scss' } /* 'colors(' */, + { startIndex: 14, type: 'variable.ref.scss' } /* '$text' */, + { startIndex: 19, type: 'delimiter.scss' } /* ',' */, + { startIndex: 20, type: '' }, + { startIndex: 21, type: 'variable.ref.scss' } /* '$background' */, + { startIndex: 32, type: 'delimiter.scss' } /* ',' */, + { startIndex: 33, type: '' }, + { startIndex: 34, type: 'variable.ref.scss' } /* '$border' */, + { startIndex: 41, type: 'meta.scss' } /* ')' */, + { startIndex: 42, type: '' }, + { startIndex: 43, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 44, type: '' }, + { startIndex: 47, type: 'attribute.name.scss' } /* 'color:' */, + { startIndex: 53, type: '' }, + { startIndex: 54, type: 'variable.ref.scss' } /* '$text' */, + { startIndex: 59, type: 'delimiter.scss' } /* ';' */, + { startIndex: 60, type: '' }, + { startIndex: 63, type: 'attribute.name.scss' } /* 'background-color:' */, + { startIndex: 80, type: '' }, + { startIndex: 81, type: 'variable.ref.scss' } /* '$background' */, + { startIndex: 92, type: 'delimiter.scss' } /* ';' */, + { startIndex: 93, type: '' }, + { startIndex: 96, type: 'attribute.name.scss' } /* 'border-color:' */, + { startIndex: 109, type: '' }, + { startIndex: 110, type: 'variable.ref.scss' } /* '$border' */, + { startIndex: 117, type: 'delimiter.scss' } /* ';' */, + { startIndex: 118, type: '' }, + { startIndex: 119, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 120, type: '' }, + { startIndex: 121, type: 'variable.decl.scss' } /* '$values:' */, + { startIndex: 129, type: '' }, + { startIndex: 130, type: 'number.hex.scss' } /* '#ff0000' */, + { startIndex: 137, type: 'operator.scss' } /* ',' */, + { startIndex: 138, type: '' }, + { startIndex: 139, type: 'number.hex.scss' } /* '#00ff00' */, + { startIndex: 146, type: 'operator.scss' } /* ',' */, + { startIndex: 147, type: '' }, + { startIndex: 148, type: 'number.hex.scss' } /* '#0000ff' */, + { startIndex: 155, type: 'delimiter.scss' } /* ';' */, + { startIndex: 156, type: '' }, + { startIndex: 157, type: 'tag.scss' } /* '.primary' */, + { startIndex: 165, type: '' }, + { startIndex: 166, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 167, type: '' }, + { startIndex: 170, type: 'keyword.scss' } /* '@include' */, + { startIndex: 178, type: '' }, + { startIndex: 179, type: 'meta.scss' } /* 'colors(' */, + { startIndex: 186, type: 'variable.ref.scss' } /* '$values' */, + { startIndex: 193, type: 'operator.scss' } /* '...' */, + { startIndex: 196, type: 'meta.scss' } /* ')' */, + { startIndex: 197, type: 'delimiter.scss' } /* ';' */, + { startIndex: 198, type: '' }, + { startIndex: 199, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + // @include with bodywhitespaces + [{ + line: + '@mixin apply-to-ie6-only {\n' + + ' * html {\n' + + ' @content;\n' + + ' }\n' + + '}\n' + + '@include apply-to-ie6-only {\n' + + ' #logo {\n' + + ' background-image: url(/logo.gif);\n' + + ' }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@mixin' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'meta.scss' } /* 'apply-to-ie6-only' */, + { startIndex: 24, type: '' }, + { startIndex: 25, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 26, type: '' }, + { startIndex: 29, type: 'tag.scss' } /* '*' */, + { startIndex: 30, type: '' }, + { startIndex: 31, type: 'tag.scss' } /* 'html' */, + { startIndex: 35, type: '' }, + { startIndex: 36, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 37, type: '' }, + { startIndex: 42, type: 'keyword.scss' } /* '@content' */, + { startIndex: 50, type: '' }, + { startIndex: 54, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 55, type: '' }, + { startIndex: 56, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 57, type: '' }, + { startIndex: 58, type: 'keyword.scss' } /* '@include' */, + { startIndex: 66, type: '' }, + { startIndex: 67, type: 'meta.scss' } /* 'apply-to-ie6-only' */, + { startIndex: 84, type: '' }, + { startIndex: 85, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 86, type: '' }, + { startIndex: 89, type: 'tag.scss' } /* '#logo' */, + { startIndex: 94, type: '' }, + { startIndex: 95, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 96, type: '' }, + { startIndex: 101, type: 'attribute.name.scss' } /* 'background-image:' */, + { startIndex: 118, type: '' }, + { startIndex: 119, type: 'meta.scss' } /* 'url(' */, + { startIndex: 123, type: 'string.scss' } /* '/logo.gif' */, + { startIndex: 132, type: 'meta.scss' } /* ')' */, + { startIndex: 133, type: 'delimiter.scss' } /* ';' */, + { startIndex: 134, type: '' }, + { startIndex: 137, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 138, type: '' }, + { startIndex: 139, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // CSS charsetwhitespaces + [{ + line: + '@charset "UTF-8";', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@charset' */, + { startIndex: 8, type: '' }, + { startIndex: 9, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 10, type: 'string.scss' } /* 'UTF-8' */, + { startIndex: 15, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 16, type: 'delimiter.scss' } /* ';' */ + ]}], + + // CSS attributeswhitespaces + [{ + line: + '[rel="external"]::after {\n' + + ' content: \'s\';\n' + + '}', + tokens: [ + { startIndex: 0, type: 'delimiter.bracket.scss' } /* '[' */, + { startIndex: 1, type: 'attribute.value.scss' } /* 'rel' */, + { startIndex: 4, type: 'operator.scss' } /* '=' */, + { startIndex: 5, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 6, type: 'string.scss' } /* 'external' */, + { startIndex: 14, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 15, type: 'delimiter.bracket.scss' } /* ']' */, + { startIndex: 16, type: 'tag.scss' } /* '::after' */, + { startIndex: 23, type: '' }, + { startIndex: 24, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 25, type: '' }, + { startIndex: 30, type: 'attribute.name.scss' } /* 'content:' */, + { startIndex: 38, type: '' }, + { startIndex: 39, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 40, type: 'string.scss' } /* 's' */, + { startIndex: 41, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 42, type: 'delimiter.scss' } /* ';' */, + { startIndex: 43, type: '' }, + { startIndex: 44, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // CSS @pagewhitespaces + [{ + line: + '@page :left {\n' + + ' margin-left: 4cm;\n' + + ' margin-right: 3cm;\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@page' */, + { startIndex: 5, type: '' }, + { startIndex: 6, type: 'tag.scss' } /* ':left' */, + { startIndex: 11, type: '' }, + { startIndex: 12, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 13, type: '' }, + { startIndex: 16, type: 'attribute.name.scss' } /* 'margin-left:' */, + { startIndex: 28, type: '' }, + { startIndex: 29, type: 'number.scss' } /* '4cm' */, + { startIndex: 32, type: 'delimiter.scss' } /* ';' */, + { startIndex: 33, type: '' }, + { startIndex: 36, type: 'attribute.name.scss' } /* 'margin-right:' */, + { startIndex: 49, type: '' }, + { startIndex: 50, type: 'number.scss' } /* '3cm' */, + { startIndex: 53, type: 'delimiter.scss' } /* ';' */, + { startIndex: 54, type: '' }, + { startIndex: 55, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // Extend with interpolation variablewhitespaces + [{ + line: + '@mixin error($a: false) {\n' + + ' @extend .#{$a};\n' + + ' @extend ##{$a};\n' + + '}\n' + + '#bar {a: 1px;}\n' + + '.bar {b: 1px;}\n' + + 'foo {\n' + + ' @include error(\'bar\'); \n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@mixin' */, + { startIndex: 6, type: '' }, + { startIndex: 7, type: 'meta.scss' } /* 'error(' */, + { startIndex: 13, type: 'variable.decl.scss' } /* '$a:' */, + { startIndex: 16, type: '' }, + { startIndex: 17, type: 'attribute.value.scss' } /* 'false' */, + { startIndex: 22, type: 'meta.scss' } /* ')' */, + { startIndex: 23, type: '' }, + { startIndex: 24, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 25, type: '' }, + { startIndex: 28, type: 'keyword.scss' } /* '@extend' */, + { startIndex: 35, type: '' }, + { startIndex: 36, type: 'tag.scss' } /* '.' */, + { startIndex: 37, type: 'meta.scss' } /* '#{' */, + { startIndex: 39, type: 'variable.ref.scss' } /* '$a' */, + { startIndex: 41, type: 'meta.scss' } /* '}' */, + { startIndex: 42, type: 'delimiter.scss' } /* ';' */, + { startIndex: 43, type: '' }, + { startIndex: 46, type: 'keyword.scss' } /* '@extend' */, + { startIndex: 53, type: '' }, + { startIndex: 54, type: 'tag.scss' } /* '#' */, + { startIndex: 55, type: 'meta.scss' } /* '#{' */, + { startIndex: 57, type: 'variable.ref.scss' } /* '$a' */, + { startIndex: 59, type: 'meta.scss' } /* '}' */, + { startIndex: 60, type: 'delimiter.scss' } /* ';' */, + { startIndex: 61, type: '' }, + { startIndex: 62, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 63, type: '' }, + { startIndex: 64, type: 'tag.scss' } /* '#bar' */, + { startIndex: 68, type: '' }, + { startIndex: 69, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 70, type: 'attribute.name.scss' } /* 'a:' */, + { startIndex: 72, type: '' }, + { startIndex: 73, type: 'number.scss' } /* '1px' */, + { startIndex: 76, type: 'delimiter.scss' } /* ';' */, + { startIndex: 77, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 78, type: '' }, + { startIndex: 79, type: 'tag.scss' } /* '.bar' */, + { startIndex: 83, type: '' }, + { startIndex: 84, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 85, type: 'attribute.name.scss' } /* 'b:' */, + { startIndex: 87, type: '' }, + { startIndex: 88, type: 'number.scss' } /* '1px' */, + { startIndex: 91, type: 'delimiter.scss' } /* ';' */, + { startIndex: 92, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 93, type: '' }, + { startIndex: 94, type: 'tag.scss' } /* 'foo' */, + { startIndex: 97, type: '' }, + { startIndex: 98, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 99, type: '' }, + { startIndex: 102, type: 'keyword.scss' } /* '@include' */, + { startIndex: 110, type: '' }, + { startIndex: 111, type: 'meta.scss' } /* 'error(' */, + { startIndex: 117, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 118, type: 'string.scss' } /* 'bar' */, + { startIndex: 121, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 122, type: 'meta.scss' } /* ')' */, + { startIndex: 123, type: 'delimiter.scss' } /* ';' */, + { startIndex: 124, type: '' }, + { startIndex: 128, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // @font-facewhitespaces + [{ + line: + '@font-face { font-family: Delicious; src: url(\'Delicious-Roman.otf\'); } ', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@font-face' */, + { startIndex: 10, type: '' }, + { startIndex: 11, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 12, type: '' }, + { startIndex: 13, type: 'attribute.name.scss' } /* 'font-family:' */, + { startIndex: 25, type: '' }, + { startIndex: 26, type: 'attribute.value.scss' } /* 'Delicious' */, + { startIndex: 35, type: 'delimiter.scss' } /* ';' */, + { startIndex: 36, type: '' }, + { startIndex: 37, type: 'attribute.name.scss' } /* 'src:' */, + { startIndex: 41, type: '' }, + { startIndex: 42, type: 'meta.scss' } /* 'url(' */, + { startIndex: 46, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 47, type: 'string.scss' } /* 'Delicious-Roman.otf' */, + { startIndex: 66, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 67, type: 'meta.scss' } /* ')' */, + { startIndex: 68, type: 'delimiter.scss' } /* ';' */, + { startIndex: 69, type: '' }, + { startIndex: 70, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 71, type: '' } + ]}], + + // Keyframeswhitespaces + [{ + line: + '@-webkit-keyframes NAME-YOUR-ANIMATION {\n' + + ' 0% { opacity: 0; }\n' + + ' 100% { opacity: 1; }\n' + + '}\n' + + '@-moz-keyframes NAME-YOUR-ANIMATION {\n' + + ' 0% { opacity: 0; }\n' + + ' 100% { opacity: 1; }\n' + + '}\n' + + '@-o-keyframes NAME-YOUR-ANIMATION {\n' + + ' 0% { opacity: 0; }\n' + + ' 100% { opacity: 1; }\n' + + '}\n' + + '@keyframes NAME-YOUR-ANIMATION {\n' + + ' 0% { opacity: 0; }\n' + + ' 100% { opacity: 1; }\n' + + '}', + tokens: [ + { startIndex: 0, type: 'keyword.scss' } /* '@-webkit-keyframes' */, + { startIndex: 18, type: '' }, + { startIndex: 19, type: 'meta.scss' } /* 'NAME-YOUR-ANIMATION' */, + { startIndex: 38, type: '' }, + { startIndex: 39, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 40, type: '' }, + { startIndex: 43, type: 'number.scss' } /* '0%' */, + { startIndex: 45, type: '' }, + { startIndex: 48, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 49, type: '' }, + { startIndex: 50, type: 'attribute.name.scss' } /* 'opacity:' */, + { startIndex: 58, type: '' }, + { startIndex: 59, type: 'number.scss' } /* '0' */, + { startIndex: 60, type: 'delimiter.scss' } /* ';' */, + { startIndex: 61, type: '' }, + { startIndex: 62, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 63, type: '' }, + { startIndex: 66, type: 'number.scss' } /* '100%' */, + { startIndex: 70, type: '' }, + { startIndex: 71, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 72, type: '' }, + { startIndex: 73, type: 'attribute.name.scss' } /* 'opacity:' */, + { startIndex: 81, type: '' }, + { startIndex: 82, type: 'number.scss' } /* '1' */, + { startIndex: 83, type: 'delimiter.scss' } /* ';' */, + { startIndex: 84, type: '' }, + { startIndex: 85, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 86, type: '' }, + { startIndex: 87, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 88, type: '' }, + { startIndex: 89, type: 'keyword.scss' } /* '@-moz-keyframes' */, + { startIndex: 104, type: '' }, + { startIndex: 105, type: 'meta.scss' } /* 'NAME-YOUR-ANIMATION' */, + { startIndex: 124, type: '' }, + { startIndex: 125, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 126, type: '' }, + { startIndex: 129, type: 'number.scss' } /* '0%' */, + { startIndex: 131, type: '' }, + { startIndex: 134, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 135, type: '' }, + { startIndex: 136, type: 'attribute.name.scss' } /* 'opacity:' */, + { startIndex: 144, type: '' }, + { startIndex: 145, type: 'number.scss' } /* '0' */, + { startIndex: 146, type: 'delimiter.scss' } /* ';' */, + { startIndex: 147, type: '' }, + { startIndex: 148, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 149, type: '' }, + { startIndex: 152, type: 'number.scss' } /* '100%' */, + { startIndex: 156, type: '' }, + { startIndex: 157, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 158, type: '' }, + { startIndex: 159, type: 'attribute.name.scss' } /* 'opacity:' */, + { startIndex: 167, type: '' }, + { startIndex: 168, type: 'number.scss' } /* '1' */, + { startIndex: 169, type: 'delimiter.scss' } /* ';' */, + { startIndex: 170, type: '' }, + { startIndex: 171, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 172, type: '' }, + { startIndex: 173, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 174, type: '' }, + { startIndex: 175, type: 'keyword.scss' } /* '@-o-keyframes' */, + { startIndex: 188, type: '' }, + { startIndex: 189, type: 'meta.scss' } /* 'NAME-YOUR-ANIMATION' */, + { startIndex: 208, type: '' }, + { startIndex: 209, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 210, type: '' }, + { startIndex: 213, type: 'number.scss' } /* '0%' */, + { startIndex: 215, type: '' }, + { startIndex: 218, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 219, type: '' }, + { startIndex: 220, type: 'attribute.name.scss' } /* 'opacity:' */, + { startIndex: 228, type: '' }, + { startIndex: 229, type: 'number.scss' } /* '0' */, + { startIndex: 230, type: 'delimiter.scss' } /* ';' */, + { startIndex: 231, type: '' }, + { startIndex: 232, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 233, type: '' }, + { startIndex: 236, type: 'number.scss' } /* '100%' */, + { startIndex: 240, type: '' }, + { startIndex: 241, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 242, type: '' }, + { startIndex: 243, type: 'attribute.name.scss' } /* 'opacity:' */, + { startIndex: 251, type: '' }, + { startIndex: 252, type: 'number.scss' } /* '1' */, + { startIndex: 253, type: 'delimiter.scss' } /* ';' */, + { startIndex: 254, type: '' }, + { startIndex: 255, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 256, type: '' }, + { startIndex: 257, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 258, type: '' }, + { startIndex: 259, type: 'keyword.scss' } /* '@keyframes' */, + { startIndex: 269, type: '' }, + { startIndex: 270, type: 'meta.scss' } /* 'NAME-YOUR-ANIMATION' */, + { startIndex: 289, type: '' }, + { startIndex: 290, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 291, type: '' }, + { startIndex: 294, type: 'number.scss' } /* '0%' */, + { startIndex: 296, type: '' }, + { startIndex: 299, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 300, type: '' }, + { startIndex: 301, type: 'attribute.name.scss' } /* 'opacity:' */, + { startIndex: 309, type: '' }, + { startIndex: 310, type: 'number.scss' } /* '0' */, + { startIndex: 311, type: 'delimiter.scss' } /* ';' */, + { startIndex: 312, type: '' }, + { startIndex: 313, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 314, type: '' }, + { startIndex: 317, type: 'number.scss' } /* '100%' */, + { startIndex: 321, type: '' }, + { startIndex: 322, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 323, type: '' }, + { startIndex: 324, type: 'attribute.name.scss' } /* 'opacity:' */, + { startIndex: 332, type: '' }, + { startIndex: 333, type: 'number.scss' } /* '1' */, + { startIndex: 334, type: 'delimiter.scss' } /* ';' */, + { startIndex: 335, type: '' }, + { startIndex: 336, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 337, type: '' }, + { startIndex: 338, type: 'delimiter.curly.scss' } /* '}' */ + ]}], + + // String escapingwhitespaces + [{ + line: + '[data-icon=\'test-1\']:before {\n' + + ' content:\'\\\\\';\n' + + '}\n' + + '/* a comment */\n' + + '$var1: \'\\\'\';\n' + + '$var2: "\\"";\n' + + '/* another comment */', + tokens: [ + { startIndex: 0, type: 'delimiter.bracket.scss' } /* '[' */, + { startIndex: 1, type: 'attribute.value.scss' } /* 'data-icon' */, + { startIndex: 10, type: 'operator.scss' } /* '=' */, + { startIndex: 11, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 12, type: 'string.scss' } /* 'test-1' */, + { startIndex: 18, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 19, type: 'delimiter.bracket.scss' } /* ']' */, + { startIndex: 20, type: 'tag.scss' } /* ':before' */, + { startIndex: 27, type: '' }, + { startIndex: 28, type: 'delimiter.curly.scss' } /* '{' */, + { startIndex: 29, type: '' }, + { startIndex: 32, type: 'attribute.name.scss' } /* 'content:' */, + { startIndex: 40, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 41, type: 'string.scss' } /* '\\' */, + { startIndex: 43, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 44, type: 'delimiter.scss' } /* ';' */, + { startIndex: 45, type: '' }, + { startIndex: 46, type: 'delimiter.curly.scss' } /* '}' */, + { startIndex: 47, type: '' }, + { startIndex: 48, type: 'comment.scss' } /* '/* a comment * /' */, + { startIndex: 63, type: '' }, + { startIndex: 64, type: 'variable.decl.scss' } /* '$var1:' */, + { startIndex: 70, type: '' }, + { startIndex: 71, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 72, type: 'string.scss' } /* '\'' */, + { startIndex: 74, type: 'string.delimiter.scss' } /* ''' */, + { startIndex: 75, type: 'delimiter.scss' } /* ';' */, + { startIndex: 76, type: '' }, + { startIndex: 77, type: 'variable.decl.scss' } /* '$var2:' */, + { startIndex: 83, type: '' }, + { startIndex: 84, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 85, type: 'string.scss' } /* '\"' */, + { startIndex: 87, type: 'string.delimiter.scss' } /* '"' */, + { startIndex: 88, type: 'delimiter.scss' } /* ';' */, + { startIndex: 89, type: '' }, + { startIndex: 90, type: 'comment.scss' } /* '/* another comment * /' */ + ]}], +]);