diff --git a/.github/classifier.yml b/.github/classifier.yml index eba62b735d8..cbce466994d 100644 --- a/.github/classifier.yml +++ b/.github/classifier.yml @@ -7,7 +7,7 @@ api: [], css-less-sass: [], debug: [ weinand ], - editor: [], + editor: [ rebornix ], editor-brackets: [], editor-clipboard: [], editor-colors: [], @@ -30,7 +30,7 @@ i18n: [], install-update: [], integrated-terminal: [ Tyriar ], - javascript: [], + javascript: [ mjbvz ], json: [], languages basic: [], markdown: [], @@ -39,7 +39,7 @@ search: [ roblourens ], snippets: [ jrieken ], tasks: [], - typescript: [], + typescript: [ mjbvz ], workbench: [ bpasero ], } } diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index be9df9d57a4..feff102ea13 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -391,8 +391,8 @@ function snapshotTask(platform, arch) { startupBlobFilepath = path.join(destination, 'snapshot_blob.bin') } else if (platform === 'linux') { - // TODO - return () => { }; + loaderInputFilepath = path.join(destination, 'resources/app/out/vs/loader.js'); + startupBlobFilepath = path.join(destination, 'snapshot_blob.bin') } return () => { @@ -419,9 +419,12 @@ function snapshotTask(platform, arch) { } } +gulp.task('vscode-win32-ia32-snapshots', ['vscode-win32-ia32-min'], snapshotTask('win32', 'ia32')); +gulp.task('vscode-win32-x64-snapshots', ['vscode-win32-x64-min'], snapshotTask('win32', 'x64')); gulp.task('vscode-darwin-snapshots', ['vscode-darwin-min'], snapshotTask('darwin', undefined)); -gulp.task('vscode-win32-ia32-snapshots', ['vscode-win32-ia32'], snapshotTask('win32', 'ia32')); -gulp.task('vscode-win32-x64-snapshots', ['vscode-win32-x64'], snapshotTask('win32', 'x64')); +gulp.task('vscode-linux-ia32-snapshots', ['vscode-linux-ia32-min'], snapshotTask('linux', 'ia32')); +gulp.task('vscode-linux-x64-snapshots', ['vscode-linux-x64-min'], snapshotTask('linux', 'x64')); +gulp.task('vscode-linux-arm-snapshots', ['vscode-linux-arm-min'], snapshotTask('linux', 'arm')); // Transifex Localizations diff --git a/extensions/cpp/syntaxes/c++.json b/extensions/cpp/syntaxes/c++.json index bc627e3a036..4cd5c4e8d91 100644 --- a/extensions/cpp/syntaxes/c++.json +++ b/extensions/cpp/syntaxes/c++.json @@ -4,6 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], + "version": "https://github.com/atom/language-c/commit/3a269f88b12e512fb9495dc006a1dabf325d3d7f", "scopeName": "source.cpp", "fileTypes": [ "cc", diff --git a/extensions/cpp/syntaxes/c.json b/extensions/cpp/syntaxes/c.json index b83b31ad22e..c81bd51eadc 100644 --- a/extensions/cpp/syntaxes/c.json +++ b/extensions/cpp/syntaxes/c.json @@ -4,10 +4,12 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], + "version": "https://github.com/atom/language-c/commit/0a57fd7ee32bd14e3ee8291434263d744a8ecf1e", "scopeName": "source.c", "fileTypes": [ "c", - "h.in" + "h.in", + "xpm" ], "firstLineMatch": "(?i)-\\*-[^*]*(Mode:\\s*)?C(\\s*;.*?)?\\s*-\\*-", "name": "C", @@ -273,7 +275,7 @@ "include": "#parens" }, { - "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|sizeof|[cr]?iterate|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\s*\\()\n(?=\n (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n |\n (?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)", + "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\s*\\()\n(?=\n (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n |\n (?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)", "end": "(?<=\\))(?!\\w)", "name": "meta.function.c", "patterns": [ @@ -404,7 +406,7 @@ ] }, "c_function_call": { - "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|sizeof|[cr]?iterate)\\s*\\()\n(?=\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)", + "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate)\\s*\\()\n(?=\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)", "end": "(?<=\\))(?!\\w)", "name": "meta.function-call.c", "patterns": [ @@ -778,7 +780,7 @@ }, "patterns": [ { - "begin": "\\G(?=.)", + "begin": "\\G", "end": "(?=//)|(?=/\\*(?!.*\\\\\\s*\\n))|(?=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)", + "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\s*\\()\n(?=\n (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n |\n (?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)", "end": "(?<=\\))(?!\\w)|(?=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()", + "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()", "beginCaptures": { "1": { "name": "entity.name.function.c" @@ -1850,7 +1852,7 @@ "include": "#vararg_ellipses" }, { - "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|sizeof|[cr]?iterate)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()", + "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()", "beginCaptures": { "1": { "name": "entity.name.function.c" @@ -1910,7 +1912,7 @@ "include": "#operators" }, { - "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|sizeof|[cr]?iterate)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()", + "begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()", "beginCaptures": { "1": { "name": "entity.name.function.c" diff --git a/extensions/cpp/test/colorize-results/test-23630_cpp.json b/extensions/cpp/test/colorize-results/test-23630_cpp.json index f22786a105f..0f6ce5827ae 100644 --- a/extensions/cpp/test/colorize-results/test-23630_cpp.json +++ b/extensions/cpp/test/colorize-results/test-23630_cpp.json @@ -100,24 +100,24 @@ }, { "c": "#", - "t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c punctuation.definition.directive.c", + "t": "source.cpp meta.preprocessor.c", "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "dark_plus": "meta.preprocessor: #569CD6", + "light_plus": "meta.preprocessor: #0000FF", + "dark_vs": "meta.preprocessor: #569CD6", + "light_vs": "meta.preprocessor: #0000FF", + "hc_black": "meta.preprocessor: #569CD6" } }, { "c": "endif", - "t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c", + "t": "source.cpp meta.preprocessor.c entity.name.function.preprocessor.c", "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "dark_plus": "entity.name.function: #DCDCAA", + "light_plus": "entity.name.function: #795E26", + "dark_vs": "meta.preprocessor: #569CD6", + "light_vs": "meta.preprocessor: #0000FF", + "hc_black": "entity.name.function: #DCDCAA" } } ] \ No newline at end of file diff --git a/extensions/javascript/package.json b/extensions/javascript/package.json index b8c76ba64aa..b0c0aed3722 100644 --- a/extensions/javascript/package.json +++ b/extensions/javascript/package.json @@ -102,14 +102,14 @@ "fileMatch": "bower.json", "url": "http://json.schemastore.org/bower" }, - { - "fileMatch": ".bower.json", - "url": "http://json.schemastore.org/bower" - }, { "fileMatch": ".bowerrc", "url": "http://json.schemastore.org/bowerrc" }, + { + "fileMatch": ".babelrc", + "url": "http://json.schemastore.org/babelrc" + }, { "fileMatch": "jsconfig.json", "url": "http://json.schemastore.org/jsconfig" diff --git a/extensions/npm/src/main.ts b/extensions/npm/src/main.ts index 82d266687f8..a52b9de7cb3 100644 --- a/extensions/npm/src/main.ts +++ b/extensions/npm/src/main.ts @@ -123,7 +123,7 @@ async function getNpmScriptsAsTasks(): Promise { result.push(task); }); // add some 'well known' npm tasks - result.push(new vscode.Task({ type: 'npm', script: 'install' } as NpmTaskDefinition, `install`, 'npm', new vscode.ShellExecution(`npm install`))); + result.push(new vscode.Task({ type: 'npm', script: 'install' } as NpmTaskDefinition, `install`, 'npm', new vscode.ShellExecution(`npm install`), [])); return Promise.resolve(result); } catch (e) { return Promise.resolve(emptyTasks); diff --git a/extensions/php/syntaxes/php.tmLanguage.json b/extensions/php/syntaxes/php.tmLanguage.json index 8b457cf3c6f..aa2c4165302 100644 --- a/extensions/php/syntaxes/php.tmLanguage.json +++ b/extensions/php/syntaxes/php.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/atom/language-php/commit/e1290265f3d68316347e0ab2665686016b4b24b7", + "version": "https://github.com/atom/language-php/commit/16d8c3ea6f30c808e270a7be02a33e27ed19eed0", "scopeName": "text.html.php", "name": "PHP", "fileTypes": [ @@ -449,6 +449,10 @@ { "include": "#comments" }, + { + "match": ",", + "name": "punctuation.separator.delimiter.php" + }, { "begin": "(?xi)\n(array) # Typehint\n\\s+((&)?\\s*(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable name with possible reference\n\\s*(=)\\s*(array)\\s*(\\() # Default value", "beginCaptures": { @@ -535,21 +539,34 @@ } }, { - "begin": "(?xi)\n([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Typehinted class name\n\\s*((&)?\\s*(\\.\\.\\.)?(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable name with possible reference", + "begin": "(?xi)\n(\\\\?(?:[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*\\\\)*) # Optional namespace\n([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Typehinted class name\n\\s+((&)?\\s*(\\.\\.\\.)?(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable name with possible reference", "beginCaptures": { "1": { - "name": "storage.type.php" + "name": "support.other.namespace.php", + "patterns": [ + { + "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", + "name": "storage.type.php" + }, + { + "match": "\\\\", + "name": "punctuation.separator.inheritance.php" + } + ] }, "2": { - "name": "variable.other.php" + "name": "storage.type.php" }, "3": { - "name": "storage.modifier.reference.php" + "name": "variable.other.php" }, "4": { - "name": "keyword.operator.variadic.php" + "name": "storage.modifier.reference.php" }, "5": { + "name": "keyword.operator.variadic.php" + }, + "6": { "name": "punctuation.definition.variable.php" } }, @@ -1760,13 +1777,10 @@ "name": "keyword.control.exception.php" }, { - "begin": "(?i)\\b(function)\\s*(&)?\\s*(?=\\()", + "begin": "(?i)\\b(function)\\s*(?=\\()", "beginCaptures": { "1": { "name": "storage.type.function.php" - }, - "2": { - "name": "storage.modifier.reference.php" } }, "end": "(?={)", @@ -1829,7 +1843,7 @@ ] }, { - "begin": "(?x)\n((?:(?:final|abstract|public|private|protected|static)\\s+)*)\n(function)\n\\s*(&)?\\s*\n(?i:\n (__(?:call|construct|debugInfo|destruct|get|set|isset|unset|tostring|\n clone|set_state|sleep|wakeup|autoload|invoke|callStatic))\n |([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)\n)\n\\s*(\\()", + "begin": "(?x)\n((?:(?:final|abstract|public|private|protected|static)\\s+)*)\n(function)\\s+\n(?i:\n (__(?:call|construct|debugInfo|destruct|get|set|isset|unset|tostring|\n clone|set_state|sleep|wakeup|autoload|invoke|callStatic))\n |([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)\n)\n\\s*(\\()", "beginCaptures": { "1": { "patterns": [ @@ -1843,15 +1857,12 @@ "name": "storage.type.function.php" }, "3": { - "name": "storage.modifier.reference.php" - }, - "4": { "name": "support.function.magic.php" }, - "5": { + "4": { "name": "entity.name.function.php" }, - "6": { + "5": { "name": "punctuation.definition.parameters.begin.bracket.round.php" } }, @@ -2099,6 +2110,10 @@ }, { "include": "#constants" + }, + { + "match": ",", + "name": "punctuation.separator.delimiter.php" } ] }, diff --git a/extensions/php/test/colorize-results/test_php.json b/extensions/php/test/colorize-results/test_php.json index 997b0b2fbad..dcbe3ab7cfa 100644 --- a/extensions/php/test/colorize-results/test_php.json +++ b/extensions/php/test/colorize-results/test_php.json @@ -550,7 +550,18 @@ } }, { - "c": ", ", + "c": ",", + "t": "text.html.php meta.embedded.block.php source.php meta.array.php punctuation.separator.delimiter.php", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", "t": "text.html.php meta.embedded.block.php source.php meta.array.php", "r": { "dark_plus": "default: #D4D4D4", @@ -594,7 +605,18 @@ } }, { - "c": ", ", + "c": ",", + "t": "text.html.php meta.embedded.block.php source.php meta.array.php punctuation.separator.delimiter.php", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", "t": "text.html.php meta.embedded.block.php source.php meta.array.php", "r": { "dark_plus": "default: #D4D4D4", @@ -638,7 +660,18 @@ } }, { - "c": ", ", + "c": ",", + "t": "text.html.php meta.embedded.block.php source.php meta.array.php punctuation.separator.delimiter.php", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", "t": "text.html.php meta.embedded.block.php source.php meta.array.php", "r": { "dark_plus": "default: #D4D4D4", @@ -683,7 +716,7 @@ }, { "c": ",", - "t": "text.html.php meta.embedded.block.php source.php meta.array.php", + "t": "text.html.php meta.embedded.block.php source.php meta.array.php punctuation.separator.delimiter.php", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -737,7 +770,18 @@ } }, { - "c": ", ", + "c": ",", + "t": "text.html.php meta.embedded.block.php source.php meta.array.php punctuation.separator.delimiter.php", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", "t": "text.html.php meta.embedded.block.php source.php meta.array.php", "r": { "dark_plus": "default: #D4D4D4", @@ -781,7 +825,18 @@ } }, { - "c": ", ", + "c": ",", + "t": "text.html.php meta.embedded.block.php source.php meta.array.php punctuation.separator.delimiter.php", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", "t": "text.html.php meta.embedded.block.php source.php meta.array.php", "r": { "dark_plus": "default: #D4D4D4", @@ -825,7 +880,18 @@ } }, { - "c": ", ", + "c": ",", + "t": "text.html.php meta.embedded.block.php source.php meta.array.php punctuation.separator.delimiter.php", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", "t": "text.html.php meta.embedded.block.php source.php meta.array.php", "r": { "dark_plus": "default: #D4D4D4", diff --git a/extensions/razor/package.json b/extensions/razor/package.json index 1f50b33eeaf..f2b69806fde 100644 --- a/extensions/razor/package.json +++ b/extensions/razor/package.json @@ -6,7 +6,7 @@ "vscode": "0.10.x" }, "scripts": { - "update-grammar": "node ../../build/npm/update-grammar.js demyte/language-cshtml grammars/cshtml.cson ./syntaxes/cshtml.json" + "update-grammar": "node ../../build/npm/update-grammar.js demyte/language-cshtml grammars/cshtml.json ./syntaxes/cshtml.json" }, "contributes": { "languages": [{ diff --git a/extensions/razor/syntaxes/cshtml.json b/extensions/razor/syntaxes/cshtml.json index 180ad0e68dd..241e4486800 100644 --- a/extensions/razor/syntaxes/cshtml.json +++ b/extensions/razor/syntaxes/cshtml.json @@ -1,9 +1,10 @@ { "information_for_contributors": [ - "This file has been converted from https://github.com/demyte/language-cshtml/blob/master/grammars/cshtml.cson", + "This file has been converted from https://github.com/demyte/language-cshtml/blob/master/grammars/cshtml.json", "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], + "version": "https://github.com/demyte/language-cshtml/commit/cbf0e35971324e861247145e92f4cbbe0bc42d0e", "name": "ASP.NET Razor", "scopeName": "text.html.cshtml", "fileTypes": [ @@ -35,21 +36,14 @@ } }, "patterns": [ - { - "name": "string.quoted.single.cshtml", - "match": "'" - }, { "include": "#embedded-code" }, { - "include": "#comments" + "include": "#general-includes" }, { "include": "source.cs" - }, - { - "include": "text.html.basic" } ], "end": "\\}", @@ -59,18 +53,14 @@ } } }, - { - "name": "string.quoted.single.cshtml", - "match": "'" - }, { "include": "#embedded-code" }, { - "include": "#comments" + "include": "#general-includes" }, { - "include": "text.html.basic" + "include": "source.cs" } ], "end": "\\}", @@ -107,17 +97,32 @@ "include": "#embedded-code" }, { - "include": "#comments" - }, - { - "include": "source.cs" - }, - { - "include": "text.html.basic" + "include": "#general-includes" } ], "end": "(\\n|\\s)", - "comments": "Covers single line Razor tags" + "comments": "Single statement Razor tags" + }, + { + "begin": "(@\\()", + "captures": { + "0": { + "name": "punctuation.section.embedded.begin.cshtml" + } + }, + "patterns": [ + { + "include": "#embedded-code" + }, + { + "include": "#general-includes" + }, + { + "include": "source.cs" + } + ], + "end": "(\\))", + "comments": "Covers same line Razor statments with embedded C#" }, { "include": "#comments" @@ -139,7 +144,7 @@ }, "patterns": [ { - "include": "#comments" + "include": "#general-includes" } ] }, @@ -152,6 +157,69 @@ }, "end": "\\*@", "name": "comment.block.cshtml" + }, + "line-comments": { + "name": "comment.line.double-slash.cshtml", + "begin": "(\\s*)//", + "end": "$(\\s*)" + }, + "block-comments": { + "name": "comment.block.cshtml", + "begin": "/\\*", + "end": "((?=})|(\\*/))" + }, + "single-quotes": { + "name": "string.quoted.single.cshtml", + "begin": "'", + "end": "'" + }, + "double-quotes": { + "name": "string.quoted.double.cshtml", + "begin": "\"", + "end": "\"", + "patterns": [ + { + "include": "text.html.basic" + } + ] + }, + "round-brackets": { + "name": "string.bracers.round.cshtml", + "begin": "\\(", + "end": "\\)" + }, + "squiggly-brackets": { + "name": "string.bracers.squiggly.cshtml", + "begin": "{", + "end": "}" + }, + "general-includes": { + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#line-comments" + }, + { + "include": "#block-comments" + }, + { + "include": "#round-brackets" + }, + { + "include": "#squiggly-brackets" + }, + { + "include": "#single-quotes" + }, + { + "include": "#double-quotes" + }, + { + "include": "text.html.basic" + } + ] } } } \ No newline at end of file diff --git a/extensions/razor/test/colorize-results/test_cshtml.json b/extensions/razor/test/colorize-results/test_cshtml.json index b87c41d8f04..2e3dbe31e97 100644 --- a/extensions/razor/test/colorize-results/test_cshtml.json +++ b/extensions/razor/test/colorize-results/test_cshtml.json @@ -66,7 +66,29 @@ } }, { - "c": " = ", + "c": " ", + "t": "text.html.cshtml section.embedded.source.cshtml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "=", + "t": "text.html.cshtml section.embedded.source.cshtml keyword.operator.assignment.cs", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4" + } + }, + { + "c": " ", "t": "text.html.cshtml section.embedded.source.cshtml", "r": { "dark_plus": "default: #D4D4D4", @@ -89,7 +111,7 @@ }, { "c": ";", - "t": "text.html.cshtml section.embedded.source.cshtml", + "t": "text.html.cshtml section.embedded.source.cshtml punctuation.terminator.statement.cs", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -143,7 +165,7 @@ } }, { - "c": " = \"\";", + "c": " ", "t": "text.html.cshtml section.embedded.source.cshtml", "r": { "dark_plus": "default: #D4D4D4", @@ -153,6 +175,50 @@ "hc_black": "default: #FFFFFF" } }, + { + "c": "=", + "t": "text.html.cshtml section.embedded.source.cshtml keyword.operator.assignment.cs", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4" + } + }, + { + "c": " ", + "t": "text.html.cshtml section.embedded.source.cshtml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "\"\"", + "t": "text.html.cshtml section.embedded.source.cshtml string.quoted.double.cshtml", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178" + } + }, + { + "c": ";", + "t": "text.html.cshtml section.embedded.source.cshtml punctuation.terminator.statement.cs", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, { "c": " ", "t": "text.html.cshtml section.embedded.source.cshtml", @@ -231,7 +297,7 @@ } }, { - "c": " (", + "c": " ", "t": "text.html.cshtml section.embedded.source.cshtml", "r": { "dark_plus": "default: #D4D4D4", @@ -242,18 +308,18 @@ } }, { - "c": "IsPost", - "t": "text.html.cshtml section.embedded.source.cshtml keyword.control.cshtml", + "c": "(IsPost)", + "t": "text.html.cshtml section.embedded.source.cshtml string.bracers.round.cshtml", "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178" } }, { - "c": ") ", + "c": " ", "t": "text.html.cshtml section.embedded.source.cshtml", "r": { "dark_plus": "default: #D4D4D4", @@ -275,30 +341,8 @@ } }, { - "c": " ", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml punctuation.whitespace.comment.leading.cs", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "//", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml comment.line.double-slash.cs punctuation.definition.comment.cs", - "r": { - "dark_plus": "comment: #608B4E", - "light_plus": "comment: #008000", - "dark_vs": "comment: #608B4E", - "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" - } - }, - { - "c": " Retrieve the numbers that the user entered.", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml comment.line.double-slash.cs", + "c": " // Retrieve the numbers that the user entered.", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml comment.line.double-slash.cshtml", "r": { "dark_plus": "comment: #608B4E", "light_plus": "comment: #008000", @@ -616,30 +660,8 @@ } }, { - "c": " ", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml punctuation.whitespace.comment.leading.cs", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": "//", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml comment.line.double-slash.cs punctuation.definition.comment.cs", - "r": { - "dark_plus": "comment: #608B4E", - "light_plus": "comment: #008000", - "dark_vs": "comment: #608B4E", - "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" - } - }, - { - "c": " Convert the entered strings into integers numbers and add.", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml comment.line.double-slash.cs", + "c": " // Convert the entered strings into integers numbers and add.", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml comment.line.double-slash.cshtml", "r": { "dark_plus": "comment: #608B4E", "light_plus": "comment: #008000", @@ -737,25 +759,14 @@ } }, { - "c": "(", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml punctuation.parenthesis.open.cs", + "c": "()", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml string.bracers.round.cshtml", "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": ")", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml punctuation.parenthesis.close.cs", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178" } }, { @@ -825,25 +836,14 @@ } }, { - "c": "(", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml punctuation.parenthesis.open.cs", + "c": "()", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml string.bracers.round.cshtml", "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" - } - }, - { - "c": ")", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml punctuation.parenthesis.close.cs", - "r": { - "dark_plus": "default: #D4D4D4", - "light_plus": "default: #000000", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "default: #FFFFFF" + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178" } }, { @@ -870,57 +870,68 @@ }, { "c": "<", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.relational.cs", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.begin.html", "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "dark_plus": "punctuation.definition.tag: #808080", + "light_plus": "punctuation.definition.tag: #800000", + "dark_vs": "punctuation.definition.tag: #808080", + "light_vs": "punctuation.definition.tag: #800000", + "hc_black": "punctuation.definition.tag: #808080" } }, { "c": "italic", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.control.cshtml", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html entity.name.tag.other.html", "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" - } - }, - { - "c": "><", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.relational.cs", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" - } - }, - { - "c": "bold", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.control.cshtml", - "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "dark_plus": "entity.name.tag: #569CD6", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag: #569CD6", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag: #569CD6" } }, { "c": ">", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.relational.cs", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.end.html", "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "dark_plus": "punctuation.definition.tag: #808080", + "light_plus": "punctuation.definition.tag: #800000", + "dark_vs": "punctuation.definition.tag: #808080", + "light_vs": "punctuation.definition.tag: #800000", + "hc_black": "punctuation.definition.tag: #808080" + } + }, + { + "c": "<", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.begin.html", + "r": { + "dark_plus": "punctuation.definition.tag: #808080", + "light_plus": "punctuation.definition.tag: #800000", + "dark_vs": "punctuation.definition.tag: #808080", + "light_vs": "punctuation.definition.tag: #800000", + "hc_black": "punctuation.definition.tag: #808080" + } + }, + { + "c": "bold", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html entity.name.tag.other.html", + "r": { + "dark_plus": "entity.name.tag: #569CD6", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag: #569CD6", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag: #569CD6" + } + }, + { + "c": ">", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.end.html", + "r": { + "dark_plus": "punctuation.definition.tag: #808080", + "light_plus": "punctuation.definition.tag: #800000", + "dark_vs": "punctuation.definition.tag: #808080", + "light_vs": "punctuation.definition.tag: #800000", + "hc_black": "punctuation.definition.tag: #808080" } }, { @@ -968,30 +979,8 @@ } }, { - "c": "\"", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml string.quoted.double.cs punctuation.definition.string.begin.cs", - "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" - } - }, - { - "c": "Total = ", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml string.quoted.double.cs", - "r": { - "dark_plus": "string: #CE9178", - "light_plus": "string: #A31515", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "string: #CE9178" - } - }, - { - "c": "\"", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml string.quoted.double.cs punctuation.definition.string.end.cs", + "c": "\"Total = \"", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml string.quoted.double.cshtml", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -1056,80 +1045,69 @@ } }, { - "c": "<", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.relational.cs", + "c": "<", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.relational.cs", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" - } - }, - { - "c": "/", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.arithmetic.cs", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" - } - }, - { - "c": "italic", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.control.cshtml", - "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0" + "dark_plus": "entity.name.tag: #569CD6", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag: #569CD6", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag: #569CD6" } }, { "c": ">", - "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.relational.cs", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.end.html", "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "dark_plus": "punctuation.definition.tag: #808080", + "light_plus": "punctuation.definition.tag: #800000", + "dark_vs": "punctuation.definition.tag: #808080", + "light_vs": "punctuation.definition.tag: #800000", + "hc_black": "punctuation.definition.tag: #808080" + } + }, + { + "c": "", + "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.end.html", + "r": { + "dark_plus": "punctuation.definition.tag: #808080", + "light_plus": "punctuation.definition.tag: #800000", + "dark_vs": "punctuation.definition.tag: #808080", + "light_vs": "punctuation.definition.tag: #800000", + "hc_black": "punctuation.definition.tag: #808080" } }, { @@ -3168,30 +3146,19 @@ } }, { - "c": "<", - "t": "text.html.cshtml keyword.operator.relational.cs", + "c": "", - "t": "text.html.cshtml keyword.operator.relational.cs", + "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html", "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4" + "dark_plus": "punctuation.definition.tag: #808080", + "light_plus": "punctuation.definition.tag: #800000", + "dark_vs": "punctuation.definition.tag: #808080", + "light_vs": "punctuation.definition.tag: #800000", + "hc_black": "punctuation.definition.tag: #808080" } }, { @@ -3256,8 +3223,52 @@ } }, { - "c": "@(totalMessage+\"!\")", - "t": "text.html.cshtml", + "c": "@(", + "t": "text.html.cshtml punctuation.section.embedded.begin.cshtml", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "totalMessage", + "t": "text.html.cshtml keyword.control.cshtml", + "r": { + "dark_plus": "keyword.control: #C586C0", + "light_plus": "keyword.control: #AF00DB", + "dark_vs": "keyword.control: #569CD6", + "light_vs": "keyword.control: #0000FF", + "hc_black": "keyword.control: #C586C0" + } + }, + { + "c": "+", + "t": "text.html.cshtml keyword.operator.arithmetic.cs", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4" + } + }, + { + "c": "\"!\"", + "t": "text.html.cshtml string.quoted.double.cshtml", + "r": { + "dark_plus": "string: #CE9178", + "light_plus": "string: #A31515", + "dark_vs": "string: #CE9178", + "light_vs": "string: #A31515", + "hc_black": "string: #CE9178" + } + }, + { + "c": ")", + "t": "text.html.cshtml punctuation.section.embedded.begin.cshtml", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3323,7 +3334,7 @@ }, { "c": ".", - "t": "text.html.cshtml punctuation.accessor.cs", + "t": "text.html.cshtml", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3334,13 +3345,13 @@ }, { "c": "com", - "t": "text.html.cshtml variable.other.object.property.cs", + "t": "text.html.cshtml entity.name.tag.source.cshtml", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE" + "dark_plus": "entity.name.tag: #569CD6", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag: #569CD6", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag: #569CD6" } }, { diff --git a/extensions/scss/syntaxes/scss.json b/extensions/scss/syntaxes/scss.json index d60a4be60ed..11ae1c1a34e 100644 --- a/extensions/scss/syntaxes/scss.json +++ b/extensions/scss/syntaxes/scss.json @@ -4,6 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], + "version": "https://github.com/atom/language-sass/commit/2d8c5f85f3be978ac8fc7a40d11b4c493385a457", "scopeName": "source.css.scss", "name": "SCSS", "fileTypes": [ @@ -67,6 +68,10 @@ }, { "include": "#at_rule_supports" + }, + { + "match": ";", + "name": "punctuation.terminator.rule.css" } ], "repository": { @@ -171,14 +176,14 @@ "begin": "\\s*((@)extend\\b)\\s*", "captures": { "1": { - "name": "keyword.control.at-rule.import.scss" + "name": "keyword.control.at-rule.extend.scss" }, "2": { "name": "punctuation.definition.keyword.scss" } }, "end": "\\s*(?=;)", - "name": "meta.at-rule.import.scss", + "name": "meta.at-rule.extend.scss", "patterns": [ { "include": "#variable" @@ -1069,7 +1074,7 @@ "name": "punctuation.definition.map.end.bracket.round.scss" } }, - "name": "meta.set.variable.map.scss", + "name": "meta.definition.variable.map.scss", "patterns": [ { "include": "#comment_block" @@ -1451,7 +1456,7 @@ } }, "selector_placeholder": { - "match": "(?x)\n(%) # Valid placeholder-name\n(\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n | \\#\\{ # Interpolation (escaped to avoid Coffeelint errors)\n | \\$ # Possible start of interpolation variable\n | } # Possible end of interpolation\n )+\n) # Followed by either:\n(?= $ # - End of the line\n | [\\s,.\\#)\\[:{>+~|] # - Another selector\n | /\\* # - A block comment\n)", + "match": "(?x)\n(%) # Valid placeholder-name\n(\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n | \\#\\{ # Interpolation (escaped to avoid Coffeelint errors)\n | \\$ # Possible start of interpolation variable\n | } # Possible end of interpolation\n )+\n) # Followed by either:\n(?= ; # - End of statement\n | $ # - End of the line\n | [\\s,.\\#)\\[:{>+~|] # - Another selector\n | /\\* # - A block comment\n)", "name": "entity.other.attribute-name.placeholder.css", "captures": { "1": { @@ -1646,32 +1651,48 @@ ] }, "variable_setting": { - "begin": "\\s*(\\$[A-Za-z0-9_-]+\\b)\\s*(:)\\s*", - "captures": { - "1": { - "name": "variable.scss" - }, - "2": { - "name": "punctuation.separator.key-value.scss" + "begin": "(?=\\$[\\w-]+\\s*:)", + "end": ";", + "endCaptures": { + "0": { + "name": "punctuation.terminator.rule.scss" } }, - "end": "\\s*(?=;)", - "name": "meta.set.variable.scss", + "contentName": "meta.definition.variable.scss", "patterns": [ { - "include": "#comment_block" + "match": "\\$[\\w-]+(?=\\s*:)", + "name": "variable.scss" }, { - "include": "#comment_line" - }, - { - "include": "#map" - }, - { - "include": "#property_values" - }, - { - "include": "#variable" + "begin": ":", + "beginCaptures": { + "0": { + "name": "punctuation.separator.key-value.scss" + } + }, + "end": "(?=;)", + "patterns": [ + { + "include": "#comment_block" + }, + { + "include": "#comment_line" + }, + { + "include": "#map" + }, + { + "include": "#property_values" + }, + { + "include": "#variable" + }, + { + "match": ",", + "name": "punctuation.separator.delimiter.scss" + } + ] } ] }, diff --git a/extensions/scss/test/colorize-results/test_scss.json b/extensions/scss/test/colorize-results/test_scss.json index ffcdbc7f034..961c9da0912 100644 --- a/extensions/scss/test/colorize-results/test_scss.json +++ b/extensions/scss/test/colorize-results/test_scss.json @@ -155,7 +155,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1606,7 +1606,7 @@ } }, { - "c": " color: black;", + "c": " color: black", "t": "source.css.scss", "r": { "dark_plus": "default: #D4D4D4", @@ -1616,6 +1616,17 @@ "hc_black": "default: #FFFFFF" } }, + { + "c": ";", + "t": "source.css.scss punctuation.terminator.rule.css", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, { "c": "}", "t": "source.css.scss", @@ -2321,7 +2332,29 @@ } }, { - "c": " foo: 1px; ", + "c": " foo: 1px", + "t": "source.css.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": ";", + "t": "source.css.scss punctuation.terminator.rule.css", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", "t": "source.css.scss", "r": { "dark_plus": "default: #D4D4D4", @@ -2806,7 +2839,7 @@ }, { "c": "$width", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -2817,7 +2850,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -2828,7 +2861,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -2839,7 +2872,7 @@ }, { "c": "5", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -2850,7 +2883,7 @@ }, { "c": "em", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.em.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css keyword.other.unit.em.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -2861,7 +2894,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -2872,7 +2905,7 @@ }, { "c": "$width", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -2883,7 +2916,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -2894,7 +2927,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -2905,7 +2938,7 @@ }, { "c": "\"", - "t": "source.css.scss meta.set.variable.scss string.quoted.double.scss punctuation.definition.string.begin.scss", + "t": "source.css.scss meta.definition.variable.scss string.quoted.double.scss punctuation.definition.string.begin.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -2916,7 +2949,7 @@ }, { "c": "Second width?", - "t": "source.css.scss meta.set.variable.scss string.quoted.double.scss", + "t": "source.css.scss meta.definition.variable.scss string.quoted.double.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -2927,7 +2960,7 @@ }, { "c": "\"", - "t": "source.css.scss meta.set.variable.scss string.quoted.double.scss punctuation.definition.string.end.scss", + "t": "source.css.scss meta.definition.variable.scss string.quoted.double.scss punctuation.definition.string.end.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -2938,7 +2971,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -2949,7 +2982,7 @@ }, { "c": "!default", - "t": "source.css.scss meta.set.variable.scss keyword.other.default.scss", + "t": "source.css.scss meta.definition.variable.scss keyword.other.default.scss", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", @@ -2960,7 +2993,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3015,7 +3048,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3026,7 +3059,7 @@ }, { "c": "$localvar", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.property-list.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -3037,7 +3070,7 @@ }, { "c": ":", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.property-list.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3048,7 +3081,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3059,7 +3092,7 @@ }, { "c": "6", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.property-list.scss meta.property-value.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -3070,7 +3103,7 @@ }, { "c": "em", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.em.css", + "t": "source.css.scss meta.property-list.scss meta.property-value.scss constant.numeric.css keyword.other.unit.em.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -3081,7 +3114,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3158,7 +3191,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3169,7 +3202,7 @@ }, { "c": "$font-size", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.property-list.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -3180,7 +3213,7 @@ }, { "c": ":", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.property-list.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3191,7 +3224,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3202,7 +3235,7 @@ }, { "c": "12", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.property-list.scss meta.property-value.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -3213,7 +3246,7 @@ }, { "c": "px", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.scss meta.property-list.scss meta.property-value.scss constant.numeric.css keyword.other.unit.px.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -3224,7 +3257,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3235,7 +3268,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3246,7 +3279,7 @@ }, { "c": "$line-height", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.property-list.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -3257,7 +3290,7 @@ }, { "c": ":", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.property-list.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3268,7 +3301,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3279,7 +3312,7 @@ }, { "c": "30", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.property-list.scss meta.property-value.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -3290,7 +3323,7 @@ }, { "c": "px", - "t": "source.css.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.scss meta.property-list.scss meta.property-value.scss constant.numeric.css keyword.other.unit.px.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -3301,7 +3334,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3455,7 +3488,7 @@ }, { "c": "$name", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -3466,7 +3499,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3477,7 +3510,7 @@ }, { "c": " foo", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3488,7 +3521,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3499,7 +3532,7 @@ }, { "c": "$attr", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -3510,7 +3543,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3521,7 +3554,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3532,7 +3565,7 @@ }, { "c": "border", - "t": "source.css.scss meta.set.variable.scss support.constant.property-value.css", + "t": "source.css.scss meta.definition.variable.scss support.constant.property-value.css", "r": { "dark_plus": "support.constant.property-value: #CE9178", "light_plus": "support.constant.property-value: #0451A5", @@ -3543,7 +3576,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3796,7 +3829,7 @@ }, { "c": "$grid-background-column-color", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -3807,7 +3840,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3818,7 +3851,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3829,7 +3862,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3840,7 +3873,7 @@ }, { "c": "rgba", - "t": "source.css.scss meta.set.variable.scss support.function.misc.scss", + "t": "source.css.scss meta.definition.variable.scss support.function.misc.scss", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -3851,7 +3884,7 @@ }, { "c": "(", - "t": "source.css.scss meta.set.variable.scss punctuation.section.function.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.section.function.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3862,7 +3895,7 @@ }, { "c": "100", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -3873,7 +3906,7 @@ }, { "c": ",", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.delimiter.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.delimiter.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3884,7 +3917,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3895,7 +3928,7 @@ }, { "c": "100", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -3906,7 +3939,7 @@ }, { "c": ",", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.delimiter.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.delimiter.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3917,7 +3950,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3928,7 +3961,7 @@ }, { "c": "225", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -3939,7 +3972,7 @@ }, { "c": ",", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.delimiter.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.delimiter.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3950,7 +3983,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3961,7 +3994,7 @@ }, { "c": "0.25", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -3972,7 +4005,7 @@ }, { "c": ")", - "t": "source.css.scss meta.set.variable.scss punctuation.section.function.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.section.function.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3983,7 +4016,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -3994,7 +4027,7 @@ }, { "c": "!default", - "t": "source.css.scss meta.set.variable.scss keyword.other.default.scss", + "t": "source.css.scss meta.definition.variable.scss keyword.other.default.scss", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", @@ -4005,7 +4038,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -5380,7 +5413,7 @@ }, { "c": "$grid-width", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -5391,7 +5424,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -5402,7 +5435,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -5413,7 +5446,7 @@ }, { "c": "40", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -5424,7 +5457,7 @@ }, { "c": "px", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css keyword.other.unit.px.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -5435,7 +5468,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -5446,7 +5479,7 @@ }, { "c": "$gutter-width", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -5457,7 +5490,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -5468,7 +5501,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -5479,7 +5512,7 @@ }, { "c": "10", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -5490,7 +5523,7 @@ }, { "c": "px", - "t": "source.css.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.scss meta.definition.variable.scss constant.numeric.css keyword.other.unit.px.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -5501,7 +5534,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -5864,7 +5897,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -6150,7 +6183,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -6161,7 +6194,7 @@ }, { "c": "$family", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -6172,7 +6205,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -6183,7 +6216,7 @@ }, { "c": " ", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -6194,7 +6227,7 @@ }, { "c": "unquote", - "t": "source.css.scss meta.set.variable.scss support.function.misc.scss", + "t": "source.css.scss meta.definition.variable.scss support.function.misc.scss", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -6205,7 +6238,7 @@ }, { "c": "(", - "t": "source.css.scss meta.set.variable.scss punctuation.section.function.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.section.function.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -6216,7 +6249,7 @@ }, { "c": "\"", - "t": "source.css.scss meta.set.variable.scss string.quoted.double.scss punctuation.definition.string.begin.scss", + "t": "source.css.scss meta.definition.variable.scss string.quoted.double.scss punctuation.definition.string.begin.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -6227,7 +6260,7 @@ }, { "c": "Droid+Sans", - "t": "source.css.scss meta.set.variable.scss string.quoted.double.scss", + "t": "source.css.scss meta.definition.variable.scss string.quoted.double.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -6238,7 +6271,7 @@ }, { "c": "\"", - "t": "source.css.scss meta.set.variable.scss string.quoted.double.scss punctuation.definition.string.end.scss", + "t": "source.css.scss meta.definition.variable.scss string.quoted.double.scss punctuation.definition.string.end.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -6249,7 +6282,7 @@ }, { "c": ")", - "t": "source.css.scss meta.set.variable.scss punctuation.section.function.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.section.function.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -6260,7 +6293,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -6447,7 +6480,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -6579,7 +6612,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -7360,7 +7393,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -7371,7 +7404,7 @@ }, { "c": "@", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss keyword.control.at-rule.import.scss punctuation.definition.keyword.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss punctuation.definition.keyword.scss", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -7382,7 +7415,7 @@ }, { "c": "extend", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss keyword.control.at-rule.import.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -7393,7 +7426,7 @@ }, { "c": " .error", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -7404,7 +7437,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -7844,7 +7877,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -7855,7 +7888,7 @@ }, { "c": "@", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss keyword.control.at-rule.import.scss punctuation.definition.keyword.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss punctuation.definition.keyword.scss", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -7866,7 +7899,7 @@ }, { "c": "extend", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss keyword.control.at-rule.import.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -7877,7 +7910,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -7888,7 +7921,7 @@ }, { "c": "%", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss entity.other.attribute-name.placeholder.css punctuation.definition.entity.css", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.placeholder.css punctuation.definition.entity.css", "r": { "dark_plus": "entity.other.attribute-name: #9CDCFE", "light_plus": "entity.other.attribute-name: #FF0000", @@ -7899,7 +7932,7 @@ }, { "c": "extreme", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss entity.other.attribute-name.placeholder.css", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.placeholder.css", "r": { "dark_plus": "entity.other.attribute-name: #9CDCFE", "light_plus": "entity.other.attribute-name: #FF0000", @@ -7910,7 +7943,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -7921,7 +7954,7 @@ }, { "c": "!optional", - "t": "source.css.scss meta.property-list.scss meta.at-rule.import.scss keyword.other.optional.scss", + "t": "source.css.scss meta.property-list.scss meta.at-rule.extend.scss keyword.other.optional.scss", "r": { "dark_plus": "keyword: #569CD6", "light_plus": "keyword: #0000FF", @@ -7932,7 +7965,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8020,7 +8053,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8383,7 +8416,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8394,7 +8427,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8405,7 +8438,7 @@ }, { "c": "$x", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -8416,7 +8449,7 @@ }, { "c": ":", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8427,7 +8460,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8438,7 +8471,7 @@ }, { "c": "1", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -8449,7 +8482,7 @@ }, { "c": "px", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss constant.numeric.css keyword.other.unit.px.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -8460,7 +8493,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8471,7 +8504,7 @@ }, { "c": "*", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss keyword.operator.css", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss keyword.operator.css", "r": { "dark_plus": "keyword.operator: #D4D4D4", "light_plus": "keyword.operator: #000000", @@ -8482,7 +8515,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8493,7 +8526,7 @@ }, { "c": "$x", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -8504,7 +8537,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8768,7 +8801,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8779,7 +8812,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8790,7 +8823,7 @@ }, { "c": "$y", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -8801,7 +8834,7 @@ }, { "c": ":", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8812,7 +8845,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8823,7 +8856,7 @@ }, { "c": "1", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -8834,7 +8867,7 @@ }, { "c": "px", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss constant.numeric.css keyword.other.unit.px.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -8845,7 +8878,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8856,7 +8889,7 @@ }, { "c": "*", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss keyword.operator.css", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss keyword.operator.css", "r": { "dark_plus": "keyword.operator: #D4D4D4", "light_plus": "keyword.operator: #000000", @@ -8867,7 +8900,7 @@ }, { "c": " ", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -8878,7 +8911,7 @@ }, { "c": "$y", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -8889,7 +8922,7 @@ }, { "c": ";", - "t": "source.css.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -9978,7 +10011,7 @@ }, { "c": "$type", - "t": "source.css.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -9989,7 +10022,7 @@ }, { "c": ":", - "t": "source.css.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.definition.variable.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -10000,7 +10033,7 @@ }, { "c": " monster", - "t": "source.css.scss meta.set.variable.scss", + "t": "source.css.scss meta.definition.variable.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -10011,7 +10044,7 @@ }, { "c": ";", - "t": "source.css.scss", + "t": "source.css.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -11309,7 +11342,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss", + "t": "source.css.scss meta.at-rule.each.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -11661,7 +11694,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -11672,7 +11705,7 @@ }, { "c": "$i", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -11683,7 +11716,7 @@ }, { "c": ":", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -11694,7 +11727,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -11705,7 +11738,7 @@ }, { "c": "$i", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -11716,7 +11749,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -11727,7 +11760,7 @@ }, { "c": "-", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss keyword.operator.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss keyword.operator.css", "r": { "dark_plus": "keyword.operator: #D4D4D4", "light_plus": "keyword.operator: #000000", @@ -11738,7 +11771,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -11749,7 +11782,7 @@ }, { "c": "2", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -11760,7 +11793,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -12431,7 +12464,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -12442,7 +12475,7 @@ }, { "c": "$z", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -12453,7 +12486,7 @@ }, { "c": ":", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -12464,7 +12497,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -12475,7 +12508,7 @@ }, { "c": "100", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -12486,7 +12519,7 @@ }, { "c": "%", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.percentage.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss constant.numeric.css keyword.other.unit.percentage.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -12497,7 +12530,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -12585,7 +12618,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -12695,7 +12728,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -13278,7 +13311,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -13970,7 +14003,18 @@ } }, { - "c": "; ", + "c": ";", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss punctuation.terminator.rule.css", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", @@ -14719,7 +14763,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -15236,7 +15280,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -15390,7 +15434,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -15599,7 +15643,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16754,7 +16798,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16765,7 +16809,7 @@ }, { "c": "$foo", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -16776,7 +16820,7 @@ }, { "c": ":", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss punctuation.separator.key-value.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.separator.key-value.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16787,7 +16831,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16798,7 +16842,7 @@ }, { "c": "1", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -16809,7 +16853,7 @@ }, { "c": "px", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss constant.numeric.css keyword.other.unit.px.css", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #09885A", @@ -16819,8 +16863,8 @@ } }, { - "c": " }", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16830,8 +16874,8 @@ } }, { - "c": " foo: {", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "c": "}", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.section.property-list.end.bracket.curly.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16841,8 +16885,96 @@ } }, { - "c": " foo : ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "foo", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-name.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": ": ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "{", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.section.property-list.begin.bracket.curly.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "foo", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-name.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": ":", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.separator.key-value.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16853,7 +16985,7 @@ }, { "c": "white", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss support.constant.color.w3c-standard-color-name.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss support.constant.color.w3c-standard-color-name.css", "r": { "dark_plus": "support.constant.color: #CE9178", "light_plus": "support.constant.color: #0451A5", @@ -16863,8 +16995,8 @@ } }, { - "c": " }", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16874,8 +17006,8 @@ } }, { - "c": " foo.bar1 {", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "c": "}", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.section.property-list.end.bracket.curly.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16885,8 +17017,8 @@ } }, { - "c": " @extend tr.", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16895,20 +17027,141 @@ "hc_black": "default: #FFFFFF" } }, + { + "c": "foo", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-name.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": ".", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css punctuation.definition.entity.css", + "r": { + "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", + "light_plus": "entity.other.attribute-name.class.css: #800000", + "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", + "light_vs": "entity.other.attribute-name.class.css: #800000", + "hc_black": "entity.other.attribute-name.class.css: #D7BA7D" + } + }, + { + "c": "bar1", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css", + "r": { + "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", + "light_plus": "entity.other.attribute-name.class.css: #800000", + "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", + "light_vs": "entity.other.attribute-name.class.css: #800000", + "hc_black": "entity.other.attribute-name.class.css: #D7BA7D" + } + }, + { + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "{", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.section.property-list.begin.bracket.curly.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "@", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss punctuation.definition.keyword.scss", + "r": { + "dark_plus": "keyword.control: #C586C0", + "light_plus": "keyword.control: #AF00DB", + "dark_vs": "keyword.control: #569CD6", + "light_vs": "keyword.control: #0000FF", + "hc_black": "keyword.control: #C586C0" + } + }, + { + "c": "extend", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss", + "r": { + "dark_plus": "keyword.control: #C586C0", + "light_plus": "keyword.control: #AF00DB", + "dark_vs": "keyword.control: #569CD6", + "light_vs": "keyword.control: #0000FF", + "hc_black": "keyword.control: #C586C0" + } + }, + { + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "tr", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.name.tag.css", + "r": { + "dark_plus": "entity.name.tag.css: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.css: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.css: #D7BA7D" + } + }, + { + "c": ".", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css punctuation.definition.entity.css", + "r": { + "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", + "light_plus": "entity.other.attribute-name.class.css: #800000", + "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", + "light_vs": "entity.other.attribute-name.class.css: #800000", + "hc_black": "entity.other.attribute-name.class.css: #D7BA7D" + } + }, { "c": "default", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss support.constant.property-value.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css", "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178" + "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", + "light_plus": "entity.other.attribute-name.class.css: #800000", + "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", + "light_vs": "entity.other.attribute-name.class.css: #800000", + "hc_black": "entity.other.attribute-name.class.css: #D7BA7D" } }, { "c": " }", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16918,8 +17171,41 @@ } }, { - "c": " foo.bar2 {", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "c": " foo", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": ".", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css punctuation.definition.entity.css", + "r": { + "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", + "light_plus": "entity.other.attribute-name.class.css: #800000", + "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", + "light_vs": "entity.other.attribute-name.class.css: #800000", + "hc_black": "entity.other.attribute-name.class.css: #D7BA7D" + } + }, + { + "c": "bar2", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css", + "r": { + "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", + "light_plus": "entity.other.attribute-name.class.css: #800000", + "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", + "light_vs": "entity.other.attribute-name.class.css: #800000", + "hc_black": "entity.other.attribute-name.class.css: #D7BA7D" + } + }, + { + "c": " {", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16930,7 +17216,7 @@ }, { "c": " @import ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16941,7 +17227,7 @@ }, { "c": "\"", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss string.quoted.double.scss punctuation.definition.string.begin.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss string.quoted.double.scss punctuation.definition.string.begin.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -16952,7 +17238,7 @@ }, { "c": "compass", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss string.quoted.double.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss string.quoted.double.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -16963,7 +17249,7 @@ }, { "c": "\"", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss string.quoted.double.scss punctuation.definition.string.end.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss string.quoted.double.scss punctuation.definition.string.end.scss", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -16974,7 +17260,7 @@ }, { "c": " }", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16985,7 +17271,7 @@ }, { "c": " bar: ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -16996,7 +17282,7 @@ }, { "c": "black", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss support.constant.color.w3c-standard-color-name.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss support.constant.color.w3c-standard-color-name.css", "r": { "dark_plus": "support.constant.color: #CE9178", "light_plus": "support.constant.color: #0451A5", @@ -17007,7 +17293,7 @@ }, { "c": "}", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17017,41 +17303,118 @@ } }, { - "c": "/*", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss comment.block.scss punctuation.definition.comment.scss", + "c": "/", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { - "dark_plus": "comment: #608B4E", - "light_plus": "comment: #008000", - "dark_vs": "comment: #608B4E", - "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" } }, { - "c": " rules without whitespace ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss comment.block.scss", + "c": "*", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.name.tag.wildcard.scss", "r": { - "dark_plus": "comment: #608B4E", - "light_plus": "comment: #008000", - "dark_vs": "comment: #608B4E", - "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "dark_plus": "entity.name.tag: #569CD6", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag: #569CD6", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag: #569CD6" } }, { - "c": "*/", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss comment.block.scss punctuation.definition.comment.scss", + "c": " rules without ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { - "dark_plus": "comment: #608B4E", - "light_plus": "comment: #008000", - "dark_vs": "comment: #608B4E", - "light_vs": "comment: #008000", - "hc_black": "comment: #7CA668" + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" } }, { - "c": "legend {foo{a:s}", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "c": "whitespace", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss support.constant.property-value.css", + "r": { + "dark_plus": "support.constant.property-value: #CE9178", + "light_plus": "support.constant.property-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.property-value: #0451A5", + "hc_black": "support.constant.property-value: #CE9178" + } + }, + { + "c": " ", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "*", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.name.tag.wildcard.scss", + "r": { + "dark_plus": "entity.name.tag: #569CD6", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag: #569CD6", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag: #569CD6" + } + }, + { + "c": "/", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss keyword.operator.css", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4" + } + }, + { + "c": "legend", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.name.tag.css", + "r": { + "dark_plus": "entity.name.tag.css: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.css: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.css: #D7BA7D" + } + }, + { + "c": " {foo{", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "a", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.name.tag.css", + "r": { + "dark_plus": "entity.name.tag.css: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.css: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.css: #D7BA7D" + } + }, + { + "c": ":s}", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17062,7 +17425,7 @@ }, { "c": "margin-top", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss support.type.property-name.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss support.type.property-name.css", "r": { "dark_plus": "support.type.property-name: #9CDCFE", "light_plus": "support.type.property-name: #FF0000", @@ -17073,7 +17436,7 @@ }, { "c": ":", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17084,7 +17447,7 @@ }, { "c": "0", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.set.variable.scss constant.numeric.css", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss constant.numeric.css", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #09885A", @@ -17095,7 +17458,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17392,7 +17755,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17403,7 +17766,7 @@ }, { "c": "@", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss keyword.control.at-rule.import.scss punctuation.definition.keyword.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss punctuation.definition.keyword.scss", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -17414,7 +17777,7 @@ }, { "c": "extend", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss keyword.control.at-rule.import.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -17425,7 +17788,7 @@ }, { "c": " .", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17436,7 +17799,7 @@ }, { "c": "#{", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", @@ -17447,7 +17810,7 @@ }, { "c": "$a", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss variable.interpolation.scss variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -17458,7 +17821,7 @@ }, { "c": "}", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", @@ -17469,7 +17832,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17480,7 +17843,7 @@ }, { "c": " ", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17491,7 +17854,7 @@ }, { "c": "@", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss keyword.control.at-rule.import.scss punctuation.definition.keyword.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss punctuation.definition.keyword.scss", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -17502,7 +17865,7 @@ }, { "c": "extend", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss keyword.control.at-rule.import.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss keyword.control.at-rule.extend.scss", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -17513,7 +17876,7 @@ }, { "c": " #", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17524,7 +17887,7 @@ }, { "c": "#{", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", @@ -17535,7 +17898,7 @@ }, { "c": "$a", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss variable.interpolation.scss variable.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss variable.scss", "r": { "dark_plus": "variable.scss: #9CDCFE", "light_plus": "variable.scss: #FF0000", @@ -17546,7 +17909,7 @@ }, { "c": "}", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.import.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { "dark_plus": "variable: #9CDCFE", "light_plus": "variable: #001080", @@ -17557,7 +17920,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -17964,7 +18327,7 @@ }, { "c": ";", - "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss", + "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss punctuation.terminator.rule.css", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", diff --git a/src/vs/code/electron-main/menus.ts b/src/vs/code/electron-main/menus.ts index 7c8e51044c4..15ec1c62f18 100644 --- a/src/vs/code/electron-main/menus.ts +++ b/src/vs/code/electron-main/menus.ts @@ -913,9 +913,10 @@ export class CodeMenu { private setTaskMenu(taskMenu: Electron.Menu): void { const runTask = this.createMenuItem(nls.localize({ key: 'miRunTask', comment: ['&& denotes a mnemonic'] }, "&&Run Task..."), 'workbench.action.tasks.runTask'); + const buildTask = this.createMenuItem(nls.localize({ key: 'miBuildTask', comment: ['&& denotes a mnemonic'] }, "Run &&Build Task..."), 'workbench.action.tasks.build'); + const showTasks = this.createMenuItem(nls.localize({ key: 'miRunningTask', comment: ['&& denotes a mnemonic'] }, "Show Runnin&&g Tasks..."), 'workbench.action.tasks.showTasks'); const restartTask = this.createMenuItem(nls.localize({ key: 'miRestartTask', comment: ['&& denotes a mnemonic'] }, "R&&estart Running Task..."), 'workbench.action.tasks.restartTask'); const terminateTask = this.createMenuItem(nls.localize({ key: 'miTerminateTask', comment: ['&& denotes a mnemonic'] }, "&&Terminate Task..."), 'workbench.action.tasks.terminate'); - const buildTask = this.createMenuItem(nls.localize({ key: 'miBuildTask', comment: ['&& denotes a mnemonic'] }, "Run &&Build Task..."), 'workbench.action.tasks.build'); // const testTask = this.createMenuItem(nls.localize({ key: 'miTestTask', comment: ['&& denotes a mnemonic'] }, "Run Test T&&ask..."), 'workbench.action.tasks.test'); // const showTaskLog = this.createMenuItem(nls.localize({ key: 'miShowTaskLog', comment: ['&& denotes a mnemonic'] }, "&&Show Task Log"), 'workbench.action.tasks.showLog'); const configureTask = this.createMenuItem(nls.localize({ key: 'miConfigureTask', comment: ['&& denotes a mnemonic'] }, "&&Configure Tasks"), 'workbench.action.tasks.configureTaskRunner'); @@ -930,6 +931,7 @@ export class CodeMenu { __separator__(), terminateTask, restartTask, + showTasks, __separator__(), //showTaskLog, configureTask, diff --git a/src/vs/editor/contrib/find/browser/simpleFindWidget.css b/src/vs/editor/contrib/find/browser/simpleFindWidget.css index 1deb6371583..c4e79f0eea3 100644 --- a/src/vs/editor/contrib/find/browser/simpleFindWidget.css +++ b/src/vs/editor/contrib/find/browser/simpleFindWidget.css @@ -4,12 +4,15 @@ *--------------------------------------------------------------------------------------------*/ .monaco-workbench .simple-find-part { + z-index: 10; position: absolute; top: -40px; right: 28px; display: flex; padding: 4px; align-items: center; + width: 220px; + max-width: calc(100% - 28px - 28px - 8px); -webkit-transition: top 200ms linear; -o-transition: top 200ms linear; @@ -22,6 +25,10 @@ top: 0; } +.monaco-workbench .simple-find-part .monaco-findInput { + flex: 1; +} + /* Temporarily we don't show match numbers */ .monaco-workbench .simple-find-part .monaco-findInput .controls { display: none; diff --git a/src/vs/editor/contrib/find/browser/simpleFindWidget.ts b/src/vs/editor/contrib/find/browser/simpleFindWidget.ts index 13dd6964817..404da3a75ca 100644 --- a/src/vs/editor/contrib/find/browser/simpleFindWidget.ts +++ b/src/vs/editor/contrib/find/browser/simpleFindWidget.ts @@ -92,7 +92,6 @@ export abstract class SimpleFindWidget extends Widget { ) { super(); this._findInput = this._register(new FindInput(null, this._contextViewService, { - width: 155, label: NLS_FIND_INPUT_LABEL, placeholder: NLS_FIND_INPUT_PLACEHOLDER, })); @@ -195,7 +194,11 @@ export abstract class SimpleFindWidget extends Widget { return this._domNode; } - public reveal(): void { + public reveal(initialInput?: string): void { + if (initialInput) { + this._findInput.setValue(initialInput); + } + if (this._isVisible) { this._findInput.select(); return; diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index a80a3db0b2a..6ae007cf28d 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -202,6 +202,26 @@ declare module 'vscode' { onData(callback: (data: string) => any): void; } + /** + * A custom Debug Adapter Protocol event received from a [debug session](#DebugSession). + */ + export interface DebugSessionCustomEvent { + /** + * The [debug session](#DebugSession) for which the custom event was received. + */ + session: DebugSession; + + /** + * Type of event. + */ + event: string; + + /** + * Event specific information. + */ + body?: any; + } + export namespace debug { /** @@ -209,7 +229,7 @@ declare module 'vscode' { * represented by the debug action floating window or the one currently shown in the drop down menu of the debug action floating window. * If no debug session is active, the value is `undefined`. */ - export const activeDebugSession: DebugSession | undefined; + export let activeDebugSession: DebugSession | undefined; /** * An [event](#Event) which fires when the [active debug session](#debug.activeDebugSession) @@ -217,16 +237,19 @@ declare module 'vscode' { * to `undefined`. */ export const onDidChangeActiveDebugSession: Event; + + /** + * An [event](#Event) which fires when a custom DAP event is received from the debug session. + */ + export const onDidReceiveDebugSessionCustomEvent: Event; } export interface DebugSession { /** - * Experimental API that allows hooking custom events from the debug session's debug adapter. - * - * @param callback The callback that is triggered when a custom event is received from the debug adapter. + * The debug session's ID. */ - onCustomEvent(callback: (event: any) => void): void; + readonly id: string; } } diff --git a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts index 6ff2e09a7c9..f79a00d97e6 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts @@ -5,7 +5,7 @@ 'use strict'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { IDebugService, IProcess, IConfig } from 'vs/workbench/parts/debug/common/debug'; +import { IDebugService, IConfig } from 'vs/workbench/parts/debug/common/debug'; import { IThreadService } from 'vs/workbench/services/thread/common/threadService'; import { TPromise } from 'vs/base/common/winjs.base'; import { ExtHostContext, ExtHostDebugServiceShape, MainThreadDebugServiceShape, DebugSessionUUID } from '../node/extHost.protocol'; @@ -33,7 +33,8 @@ export class MainThreadDebugService extends MainThreadDebugServiceShape { })); this._toDispose.push(debugService.onDidCustomEvent(event => { if (event.body && event.body.sessionId) { - this._proxy.$acceptDebugSessionCustomEvent(event.body.sessionId, event); + const process = this.debugService.findProcessByUUID(event.body.sessionId); // TODO + this._proxy.$acceptDebugSessionCustomEvent(event.body.sessionId, process.configuration.type, process.configuration.name, event); } })); } @@ -57,7 +58,7 @@ export class MainThreadDebugService extends MainThreadDebugServiceShape { } public $customDebugAdapterRequest(sessionId: DebugSessionUUID, request: string, args: any): TPromise { - const process = this._findProcessByUUID(sessionId); + const process = this.debugService.findProcessByUUID(sessionId); if (process) { return process.session.custom(request, args).then(response => { if (response.success) { @@ -69,13 +70,4 @@ export class MainThreadDebugService extends MainThreadDebugServiceShape { } return TPromise.wrapError(new Error('debug session not found')); } - - private _findProcessByUUID(processId: DebugSessionUUID): IProcess | null { - const processes = this.debugService.getModel().getProcesses(); - const result = processes.filter(process => process.getId() === processId); - if (result.length > 0) { - return result[0]; // there can only be one - } - return null; - } } diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index e043eaccc5b..332d8e24a24 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -478,6 +478,9 @@ export function createApiFactory( }, onDidChangeActiveDebugSession: proposedApiFunction(extension, (listener, thisArg?, disposables?) => { return extHostDebugService.onDidChangeActiveDebugSession(listener, thisArg, disposables); + }), + onDidReceiveDebugSessionCustomEvent: proposedApiFunction(extension, (listener, thisArg?, disposables?) => { + return extHostDebugService.onDidReceiveDebugSessionCustomEvent(listener, thisArg, disposables); }) }; diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 9950f8eda23..2ed8b299f98 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -507,7 +507,7 @@ export abstract class ExtHostTaskShape { export abstract class ExtHostDebugServiceShape { $acceptDebugSessionTerminated(id: DebugSessionUUID, type: string, name: string): void { throw ni(); } $acceptDebugSessionActiveChanged(id: DebugSessionUUID | undefined, type?: string, name?: string): void { throw ni(); } - $acceptDebugSessionCustomEvent(id: DebugSessionUUID, event: any): void { throw ni(); } + $acceptDebugSessionCustomEvent(id: DebugSessionUUID, type: string, name: string, event: any): void { throw ni(); } } // --- proxy identifiers diff --git a/src/vs/workbench/api/node/extHostDebugService.ts b/src/vs/workbench/api/node/extHostDebugService.ts index fb2ab925368..b4eaf56447d 100644 --- a/src/vs/workbench/api/node/extHostDebugService.ts +++ b/src/vs/workbench/api/node/extHostDebugService.ts @@ -27,11 +27,16 @@ export class ExtHostDebugService extends ExtHostDebugServiceShape { private _activeDebugSession: ExtHostDebugSession | undefined; get activeDebugSession(): ExtHostDebugSession | undefined { return this._activeDebugSession; } + private _onDidReceiveDebugSessionCustomEvent: Emitter; + get onDidReceiveDebugSessionCustomEvent(): Event { return this._onDidReceiveDebugSessionCustomEvent.event; } + + constructor(threadService: IThreadService) { super(); this._onDidTerminateDebugSession = new Emitter(); this._onDidChangeActiveDebugSession = new Emitter(); + this._onDidReceiveDebugSessionCustomEvent = new Emitter(); this._debugServiceProxy = threadService.get(MainContext.MainThreadDebugService); } @@ -70,12 +75,19 @@ export class ExtHostDebugService extends ExtHostDebugServiceShape { this._onDidChangeActiveDebugSession.fire(this._activeDebugSession); } - public $acceptDebugSessionCustomEvent(id: DebugSessionUUID, event: any): void { + public $acceptDebugSessionCustomEvent(id: DebugSessionUUID, type: string, name: string, event: any): void { let debugSession = this._debugSessions.get(id); - if (debugSession) { - debugSession._onCustomEvent(event); + if (!debugSession) { + debugSession = new ExtHostDebugSession(this._debugServiceProxy, id, type, name); + this._debugSessions.set(id, debugSession); } + const ee: vscode.DebugSessionCustomEvent = { + session: debugSession, + event: event.event, + body: event.body + }; + this._onDidReceiveDebugSessionCustomEvent.fire(ee); } } @@ -88,8 +100,6 @@ export class ExtHostDebugSession implements vscode.DebugSession { private _type: string; private _name: string; - private _onCustomEventCallback: (event: any) => void; - constructor(proxy: MainThreadDebugServiceShape, id: DebugSessionUUID, type: string, name: string) { this._debugServiceProxy = proxy; this._id = id; @@ -112,12 +122,4 @@ export class ExtHostDebugSession implements vscode.DebugSession { public customRequest(command: string, args: any): Thenable { return this._debugServiceProxy.$customDebugAdapterRequest(this._id, command, args); } - - public onCustomEvent(callback: (event: any) => void): void { - this._onCustomEventCallback = callback; - } - - public _onCustomEvent(event: any): void { - this._onCustomEventCallback(event); - } } diff --git a/src/vs/workbench/api/node/extHostTask.ts b/src/vs/workbench/api/node/extHostTask.ts index e6bd17c90d4..36195a1b02a 100644 --- a/src/vs/workbench/api/node/extHostTask.ts +++ b/src/vs/workbench/api/node/extHostTask.ts @@ -352,7 +352,8 @@ namespace Tasks { group: task.group ? (task.group as types.TaskGroup).id : undefined, command: command, isBackground: !!task.isBackground, - problemMatchers: task.problemMatchers.slice() + problemMatchers: task.problemMatchers.slice(), + hasDefinedMatchers: (task as types.Task).hasDefinedMatchers }; return result; } diff --git a/src/vs/workbench/api/node/extHostTypes.ts b/src/vs/workbench/api/node/extHostTypes.ts index 51c7e0b2934..ee87589d753 100644 --- a/src/vs/workbench/api/node/extHostTypes.ts +++ b/src/vs/workbench/api/node/extHostTypes.ts @@ -1158,6 +1158,7 @@ export class Task implements vscode.Task { private _name: string; private _execution: ProcessExecution | ShellExecution; private _problemMatchers: string[]; + private _hasDefinedMatchers: boolean; private _isBackground: boolean; private _source: string; private _group: TaskGroup; @@ -1170,10 +1171,13 @@ export class Task implements vscode.Task { this.execution = execution; if (typeof problemMatchers === 'string') { this._problemMatchers = [problemMatchers]; + this._hasDefinedMatchers = true; } else if (Array.isArray(problemMatchers)) { this._problemMatchers = problemMatchers; + this._hasDefinedMatchers = true; } else { this._problemMatchers = []; + this._hasDefinedMatchers = false; } this._isBackground = false; } @@ -1227,9 +1231,16 @@ export class Task implements vscode.Task { set problemMatchers(value: string[]) { if (!Array.isArray(value)) { - value = []; + this._problemMatchers = []; + this._hasDefinedMatchers = false; + return; } this._problemMatchers = value; + this._hasDefinedMatchers = true; + } + + get hasDefinedMatchers(): boolean { + return this._hasDefinedMatchers; } get isBackground(): boolean { diff --git a/src/vs/workbench/parts/debug/browser/debugContentProvider.ts b/src/vs/workbench/parts/debug/browser/debugContentProvider.ts index d683f528efa..f6814ec43c3 100644 --- a/src/vs/workbench/parts/debug/browser/debugContentProvider.ts +++ b/src/vs/workbench/parts/debug/browser/debugContentProvider.ts @@ -12,7 +12,7 @@ import { IModelService } from 'vs/editor/common/services/modelService'; import { IModeService } from 'vs/editor/common/services/modeService'; import { ITextModelService, ITextModelContentProvider } from 'vs/editor/common/services/resolverService'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { DEBUG_SCHEME, IDebugService } from 'vs/workbench/parts/debug/common/debug'; +import { DEBUG_SCHEME, IDebugService, IProcess } from 'vs/workbench/parts/debug/common/debug'; export class DebugContentProvider implements IWorkbenchContribution, ITextModelContentProvider { @@ -30,7 +30,23 @@ export class DebugContentProvider implements IWorkbenchContribution, ITextModelC } public provideTextContent(resource: uri): TPromise { - const process = this.debugService.getViewModel().focusedProcess; + + let process: IProcess; + if (resource.query) { + const keyvalues = resource.query.split('&'); + for (let keyvalue of keyvalues) { + const pair = keyvalue.split('='); + if (pair.length === 2 && pair[0] === 'session') { + process = this.debugService.findProcessByUUID(decodeURIComponent(pair[1])); + break; + } + } + } + + if (!process) { + // fallback: use focussed process + process = this.debugService.getViewModel().focusedProcess; + } if (!process) { return TPromise.wrapError(new Error(localize('unable', "Unable to resolve the resource without a debug session"))); @@ -41,7 +57,7 @@ export class DebugContentProvider implements IWorkbenchContribution, ITextModelC rawSource = source.raw; } else { // Remove debug: scheme - rawSource = { path: resource.with({ scheme: '' }).toString(true) }; + rawSource = { path: resource.with({ scheme: '', query: '' }).toString(true) }; } return process.session.source({ sourceReference: source ? source.reference : undefined, source: rawSource }).then(response => { diff --git a/src/vs/workbench/parts/debug/common/debug.ts b/src/vs/workbench/parts/debug/common/debug.ts index ef5205cebf5..d7dffcdb029 100644 --- a/src/vs/workbench/parts/debug/common/debug.ts +++ b/src/vs/workbench/parts/debug/common/debug.ts @@ -547,6 +547,11 @@ export interface IDebugService { */ createProcess(config: IConfig): TPromise; + /** + * Find process by ID. + */ + findProcessByUUID(uuid: string): IProcess | null; + /** * Restarts a process or creates a new one if there is no active session. */ diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts index ba5fe5d1801..59197c80665 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -685,6 +685,15 @@ export class DebugService implements debug.IDebugService { )); } + public findProcessByUUID(uuid: string): debug.IProcess | null { + const processes = this.getModel().getProcesses(); + const result = processes.filter(process => process.getId() === uuid); + if (result.length > 0) { + return result[0]; // there can only be one + } + return null; + } + public createProcess(config: debug.IConfig): TPromise { return this.textFileService.saveAll().then(() => this.configurationManager.resolveConfiguration(config).then(resolvedConfig => { diff --git a/src/vs/workbench/parts/debug/test/common/mockDebug.ts b/src/vs/workbench/parts/debug/test/common/mockDebug.ts index ac277ba0f73..afcc057d1e1 100644 --- a/src/vs/workbench/parts/debug/test/common/mockDebug.ts +++ b/src/vs/workbench/parts/debug/test/common/mockDebug.ts @@ -87,6 +87,10 @@ export class MockDebugService implements debug.IDebugService { return TPromise.as(null); } + public findProcessByUUID(uuid: string): debug.IProcess | null { + return null; + } + public restartProcess(): TPromise { return TPromise.as(null); } diff --git a/src/vs/workbench/parts/files/browser/views/explorerView.ts b/src/vs/workbench/parts/files/browser/views/explorerView.ts index 73ee94ee631..357105eb10a 100644 --- a/src/vs/workbench/parts/files/browser/views/explorerView.ts +++ b/src/vs/workbench/parts/files/browser/views/explorerView.ts @@ -722,10 +722,12 @@ export class ExplorerView extends CollapsibleView { const rootAndTargets = { root, resource: root.resource, options: { resolveTo: [] } }; targetsToResolve.push(rootAndTargets); }); - let targetsToExpand: URI[] = []; + let targetsToExpand: URI[] = []; if (this.settings[ExplorerView.MEMENTO_EXPANDED_FOLDER_RESOURCES]) { targetsToExpand = this.settings[ExplorerView.MEMENTO_EXPANDED_FOLDER_RESOURCES].map((e: string) => URI.parse(e)); + } else if (this.model.roots.length === 1) { + targetsToExpand = this.model.roots.map(root => root.resource); // always expand single root folder } // First time refresh: Receive target through active editor input or selection and also include settings from previous session diff --git a/src/vs/workbench/parts/html/browser/html.contribution.ts b/src/vs/workbench/parts/html/browser/html.contribution.ts index 651e0d6b572..fd782f55d8f 100644 --- a/src/vs/workbench/parts/html/browser/html.contribution.ts +++ b/src/vs/workbench/parts/html/browser/html.contribution.ts @@ -18,9 +18,6 @@ import { EditorDescriptor } from 'vs/workbench/browser/parts/editor/baseEditor'; import { IEditorRegistry, Extensions as EditorExtensions } from 'vs/workbench/common/editor'; import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService'; -import { isCommonCodeEditor, ICommonCodeEditor } from 'vs/editor/common/editorCommon'; -import { HtmlZoneController } from './htmlEditorZone'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; // --- Register Editor (Registry.as(EditorExtensions.Editors)).registerEditor(new EditorDescriptor(HtmlPreviewPart.ID, @@ -31,47 +28,6 @@ import { ITextModelService } from 'vs/editor/common/services/resolverService'; // --- Register Commands -interface HtmlZoneParams { - editorPosition: EditorPosition; - lineNumber: number; - resource: URI; -} - -let warn = true; - -CommandsRegistry.registerCommand('_workbench.htmlZone', function (accessor: ServicesAccessor, params: HtmlZoneParams) { - - if (warn) { - console.warn(`'_workbench.htmlZone' is an EXPERIMENTAL feature and therefore subject to CHANGE and REMOVAL without notice.`); - warn = false; - } - - let codeEditor: ICommonCodeEditor; - for (const editor of accessor.get(IWorkbenchEditorService).getVisibleEditors()) { - if (editor.position === params.editorPosition) { - const control = editor.getControl(); - if (isCommonCodeEditor(control)) { - codeEditor = control; - } - } - } - - if (!codeEditor) { - console.warn('NO matching editor found'); - return undefined; - } - - const textModelResolverService = accessor.get(ITextModelService); - - return textModelResolverService.createModelReference(params.resource).then(ref => { - const model = ref.object; - const contents = model.textEditorModel.getValue(); - ref.dispose(); - - HtmlZoneController.getInstance(codeEditor).addZone(params.lineNumber, contents); - }); -}); - const defaultPreviewHtmlOptions: HtmlInputOptions = { allowScripts: true, allowSvgs: true diff --git a/src/vs/workbench/parts/html/browser/htmlEditorZone.ts b/src/vs/workbench/parts/html/browser/htmlEditorZone.ts deleted file mode 100644 index 8fa3a7449b7..00000000000 --- a/src/vs/workbench/parts/html/browser/htmlEditorZone.ts +++ /dev/null @@ -1,95 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * 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 { IEditorContribution, ICommonCodeEditor } from 'vs/editor/common/editorCommon'; -import { ICodeEditor, IViewZone } from 'vs/editor/browser/editorBrowser'; -import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { editorContribution } from 'vs/editor/browser/editorBrowserExtensions'; -import Webview from './webview'; - -class HtmlZone implements IViewZone { - - zoneId: number; - - private _domNode: HTMLElement; - private _webview: Webview; - private _disposables: IDisposable[] = []; - - constructor(public lineNumber: number, public htmlContent: string) { - - } - - dispose(): void { - dispose(this._disposables); - } - - get domNode(): HTMLElement { - if (!this._domNode) { - this._domNode = document.createElement('div'); - - const observer = new MutationObserver(_ => this._onVisibilityChanged()); - observer.observe(this._domNode, { attributes: true, attributeFilter: ['monaco-visible-view-zone'] }); - this._disposables.push({ dispose: () => observer.disconnect() }); - } - - return this._domNode; - } - - private _onVisibilityChanged(): void { - if (this._domNode.hasAttribute('monaco-visible-view-zone') && !this._webview) { - this._webview = new Webview(this.domNode, document.querySelector('.monaco-editor'), null, null); - this._disposables.push(this._webview); - this._webview.contents = [this.htmlContent]; - } - } - - get afterLineNumber(): number { - return this.lineNumber; - } - - get heightInLines(): number { - return 6; - } - - get suppressMouseDown(): boolean { - return false; - } -} - -@editorContribution -export class HtmlZoneController implements IEditorContribution { - - static getInstance(editor: ICommonCodeEditor): HtmlZoneController { - return editor.getContribution('htmlZoneContribution'); - } - - private _editor: ICodeEditor; - private _zones: HtmlZone[] = []; - - constructor(editor: ICodeEditor) { - this._editor = editor; - this._editor.onDidChangeModel(() => this._zones = dispose(this._zones)); - } - - getId(): string { - return 'htmlZoneContribution'; - } - - dispose(): void { - dispose(this._zones); - } - - addZone(lineNumber: number, htmlContents: string): void { - const zone = new HtmlZone(lineNumber, htmlContents); - this._zones.push(zone); - - this._editor.changeViewZones(accessor => { - zone.zoneId = accessor.addZone(zone); - console.log('ADDED new zone #', zone.zoneId); - }); - } -} diff --git a/src/vs/workbench/parts/tasks/common/taskService.ts b/src/vs/workbench/parts/tasks/common/taskService.ts index bd469539ad7..a2cdeb91456 100644 --- a/src/vs/workbench/parts/tasks/common/taskService.ts +++ b/src/vs/workbench/parts/tasks/common/taskService.ts @@ -21,6 +21,7 @@ export namespace TaskServiceEvents { export let Inactive: string = 'inactive'; export let ConfigChanged: string = 'configChanged'; export let Terminated: string = 'terminated'; + export let Changed: string = 'changed'; } export interface ITaskProvider { diff --git a/src/vs/workbench/parts/tasks/common/taskSystem.ts b/src/vs/workbench/parts/tasks/common/taskSystem.ts index 434910b2b09..48ce82ee764 100644 --- a/src/vs/workbench/parts/tasks/common/taskSystem.ts +++ b/src/vs/workbench/parts/tasks/common/taskSystem.ts @@ -82,6 +82,7 @@ export namespace TaskSystemEvents { export let Active: string = 'active'; export let Inactive: string = 'inactive'; export let Terminated: string = 'terminated'; + export let Changed: string = 'changed'; } export enum TaskType { @@ -94,6 +95,7 @@ export interface TaskEvent { taskName?: string; type?: TaskType; group?: string; + __task?: Task; } export interface ITaskResolver { @@ -112,4 +114,5 @@ export interface ITaskSystem extends IEventEmitter { canAutoTerminate(): boolean; terminate(id: string): TPromise; terminateAll(): TPromise; + revealTask(task: Task): boolean; } \ No newline at end of file diff --git a/src/vs/workbench/parts/tasks/common/tasks.ts b/src/vs/workbench/parts/tasks/common/tasks.ts index 43b7cd5a77b..04c51da7beb 100644 --- a/src/vs/workbench/parts/tasks/common/tasks.ts +++ b/src/vs/workbench/parts/tasks/common/tasks.ts @@ -340,6 +340,8 @@ export interface ContributedTask extends CommonTask, ConfigurationProperties { defines: TaskIdentifier; + hasDefinedMatchers: boolean; + /** * The command configuration */ diff --git a/src/vs/workbench/parts/tasks/electron-browser/media/task.contribution.css b/src/vs/workbench/parts/tasks/electron-browser/media/task.contribution.css index f8b7e9e67e5..c02899f2f02 100644 --- a/src/vs/workbench/parts/tasks/electron-browser/media/task.contribution.css +++ b/src/vs/workbench/parts/tasks/electron-browser/media/task.contribution.css @@ -3,6 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +.task-statusbar-runningItem { + display: inline-block; +} + +.task-statusbar-runningItem-label { + display: inline-block; + cursor: pointer; + padding: 0 5px 0 5px; +} + .task-statusbar-item { display: inline-block; } diff --git a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts index 397f0f890de..c1850846978 100644 --- a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts +++ b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts @@ -263,7 +263,7 @@ class ViewTerminalAction extends Action { } } -class StatusBarItem extends Themable implements IStatusbarItem { +class BuildStatusBarItem extends Themable implements IStatusbarItem { private intervalToken: any; private activeCount: number; private static progressChars: string = '|/-\\'; @@ -309,7 +309,7 @@ class StatusBarItem extends Themable implements IStatusbarItem { Dom.addClass(progress, 'task-statusbar-item-progress'); element.appendChild(progress); - progress.innerHTML = StatusBarItem.progressChars[0]; + progress.innerHTML = BuildStatusBarItem.progressChars[0]; $(progress).hide(); Dom.addClass(label, 'task-statusbar-item-label'); @@ -378,13 +378,13 @@ class StatusBarItem extends Themable implements IStatusbarItem { }); callOnDispose.push(this.taskService.addListener(TaskServiceEvents.Active, (event: TaskEvent) => { - if (this.taskService.inTerminal() && event.group !== TaskGroup.Build) { + if (this.ignoreEvent(event)) { return; } this.activeCount++; if (this.activeCount === 1) { let index = 1; - let chars = StatusBarItem.progressChars; + let chars = BuildStatusBarItem.progressChars; progress.innerHTML = chars[0]; this.intervalToken = setInterval(() => { progress.innerHTML = chars[index]; @@ -398,7 +398,7 @@ class StatusBarItem extends Themable implements IStatusbarItem { })); callOnDispose.push(this.taskService.addListener(TaskServiceEvents.Inactive, (event: TaskEvent) => { - if (this.taskService.inTerminal() && event.group !== TaskGroup.Build) { + if (this.ignoreEvent(event)) { return; } // Since the exiting of the sub process is communicated async we can't order inactive and terminate events. @@ -416,7 +416,7 @@ class StatusBarItem extends Themable implements IStatusbarItem { })); callOnDispose.push(this.taskService.addListener(TaskServiceEvents.Terminated, (event: TaskEvent) => { - if (this.taskService.inTerminal() && event.group !== TaskGroup.Build) { + if (this.ignoreEvent(event)) { return; } if (this.activeCount !== 0) { @@ -439,6 +439,82 @@ class StatusBarItem extends Themable implements IStatusbarItem { } }; } + + private ignoreEvent(event: TaskEvent): boolean { + if (!this.taskService.inTerminal()) { + return false; + } + if (event.group !== TaskGroup.Build) { + return true; + } + if (!event.__task) { + return false; + } + return event.__task.problemMatchers === void 0 || event.__task.problemMatchers.length === 0; + } +} + +class TaskStatusBarItem extends Themable implements IStatusbarItem { + + constructor( + @IPanelService private panelService: IPanelService, + @IMarkerService private markerService: IMarkerService, + @IOutputService private outputService: IOutputService, + @ITaskService private taskService: ITaskService, + @IPartService private partService: IPartService, + @IThemeService themeService: IThemeService, + @IWorkspaceContextService private contextService: IWorkspaceContextService, + ) { + super(themeService); + } + + protected updateStyles(): void { + super.updateStyles(); + } + + public render(container: HTMLElement): IDisposable { + let callOnDispose: IDisposable[] = []; + + const element = document.createElement('div'); + const label = document.createElement('a'); + + Dom.addClass(element, 'task-statusbar-runningItem'); + + Dom.addClass(label, 'task-statusbar-runningItem-label'); + element.appendChild(label); + element.title = nls.localize('runningTasks', "Show Running Tasks"); + + callOnDispose.push(Dom.addDisposableListener(label, 'click', (e: MouseEvent) => { + (this.taskService as TaskService).runShowTasks(); + })); + + let updateStatus = (): void => { + this.taskService.getActiveTasks().then(tasks => { + if (tasks.length === 0) { + label.innerHTML = nls.localize('nothingRunner', 'Running Tasks: 0'); + } else if (tasks.length === 1) { + label.innerHTML = nls.localize('oneTasksRunnering', 'Running Tasks: 1'); + } else { + label.innerHTML = nls.localize('nTasksRunnering', 'Running Tasks: {0}', tasks.length); + } + }); + }; + + callOnDispose.push(this.taskService.addListener(TaskServiceEvents.Changed, (event: TaskEvent) => { + updateStatus(); + })); + + container.appendChild(element); + + this.updateStyles(); + updateStatus(); + + return { + dispose: () => { + callOnDispose = dispose(callOnDispose); + } + }; + } } interface TaskServiceEventData { @@ -452,6 +528,9 @@ class NullTaskSystem extends EventEmitter implements ITaskSystem { promise: TPromise.as({}) }; } + public revealTask(task: Task): boolean { + return false; + } public isActive(): TPromise { return TPromise.as(false); } @@ -673,6 +752,10 @@ class TaskService extends EventEmitter implements ITaskService { CommandsRegistry.registerCommand('workbench.action.tasks.configureDefaultTestTask', () => { this.runConfigureDefaultTestTask(); }); + + CommandsRegistry.registerCommand('workbench.action.tasks.showTasks', () => { + this.runShowTasks(); + }); } private showOutput(): void { @@ -757,7 +840,7 @@ class TaskService extends EventEmitter implements ITaskService { this.storageService.store(TaskService.RecentlyUsedTasks_Key, JSON.stringify(values), StorageScope.WORKSPACE); } - public openDocumentation(): void { + private openDocumentation(): void { this.openerService.open(URI.parse('https://go.microsoft.com/fwlink/?LinkId=733558')); } @@ -839,11 +922,14 @@ class TaskService extends EventEmitter implements ITaskService { if (!this.canCustomize()) { return false; } + if (task.group !== void 0 && task.group !== TaskGroup.Build) { + return false; + } if (task.problemMatchers !== void 0 && task.problemMatchers.length > 0) { return false; } if (task._source.config === void 0 && ContributedTask.is(task)) { - return true; + return !task.hasDefinedMatchers && task.problemMatchers.length === 0; } let configProperties: TaskConfig.ConfigurationProperties = task._source.config.element; return configProperties.problemMatcher === void 0; @@ -872,12 +958,12 @@ class TaskService extends EventEmitter implements ITaskService { entries = entries.sort((a, b) => a.label.localeCompare(b.label)); entries[0].separator = { border: true }; entries.unshift( - { label: nls.localize('TaskService.attachProblemMatcher.continueWithout', 'Continue without scanning the build output'), matcher: undefined }, - { label: nls.localize('TaskService.attachProblemMatcher.never', 'Never scan the build output'), matcher: undefined, never: true }, - { label: nls.localize('TaskService.attachProblemMatcher.learnMoreAbout', 'Learn more about scanning the build output'), matcher: undefined, learnMore: true } + { label: nls.localize('TaskService.attachProblemMatcher.continueWithout', 'Continue without scanning the task output'), matcher: undefined }, + { label: nls.localize('TaskService.attachProblemMatcher.never', 'Never scan the task output'), matcher: undefined, never: true }, + { label: nls.localize('TaskService.attachProblemMatcher.learnMoreAbout', 'Learn more about scanning the task output'), matcher: undefined, learnMore: true } ); return this.quickOpenService.pick(entries, { - placeHolder: nls.localize('selectProblemMatcher', 'Select for which kind of errors and warnings to scan the build output'), + placeHolder: nls.localize('selectProblemMatcher', 'Select for which kind of errors and warnings to scan the task output'), autoFocus: { autoFocusFirstEntry: true } }).then((selected) => { if (selected) { @@ -1109,9 +1195,9 @@ class TaskService extends EventEmitter implements ITaskService { let active = executeResult.active; if (active.same) { if (active.background) { - this.messageService.show(Severity.Info, nls.localize('TaskSystem.activeSame.background', 'The task is already active and in background mode. To terminate the task use `F1 > terminate task`')); + this.messageService.show(Severity.Info, nls.localize('TaskSystem.activeSame.background', 'The task \'{0}\' is already active and in background mode. To terminate it use `Terminate Task...` from the Tasks menu.', task._label)); } else { - this.messageService.show(Severity.Info, nls.localize('TaskSystem.activeSame.noBackground', 'The task is already active. To terminate the task use `F1 > terminate task`')); + this.messageService.show(Severity.Info, nls.localize('TaskSystem.activeSame.noBackground', 'The task \'{0}\' is already active. To terminate it use `Terminate Task...` from the Tasks menu.')); } } else { throw new TaskError(Severity.Warning, nls.localize('TaskSystem.active', 'There is already a task running. Terminate it first before executing another task.'), TaskErrors.RunningTask); @@ -1176,6 +1262,7 @@ class TaskService extends EventEmitter implements ITaskService { this._taskSystemListeners.push(this._taskSystem.addListener(TaskSystemEvents.Active, (event) => this.emit(TaskServiceEvents.Active, event))); this._taskSystemListeners.push(this._taskSystem.addListener(TaskSystemEvents.Inactive, (event) => this.emit(TaskServiceEvents.Inactive, event))); this._taskSystemListeners.push(this._taskSystem.addListener(TaskSystemEvents.Terminated, (event) => this.emit(TaskServiceEvents.Terminated, event))); + this._taskSystemListeners.push(this._taskSystem.addListener(TaskSystemEvents.Changed, () => this.emit(TaskServiceEvents.Changed))); return this._taskSystem; } @@ -1861,6 +1948,32 @@ class TaskService extends EventEmitter implements ITaskService { this.configureAction().run(); } } + + public runShowTasks(): void { + if (!this.canRunCommand()) { + return; + } + if (!this._taskSystem) { + this.messageService.show(Severity.Info, nls.localize('TaskService.noTaskIsRunning', 'No task is running.')); + return; + } + this.getActiveTasks().then((tasks) => { + if (tasks.length === 0) { + this.messageService.show(Severity.Info, nls.localize('TaskService.noTaskIsRunning', 'No task is running.')); + } else if (tasks.length === 1) { + if (this._taskSystem) { + this._taskSystem.revealTask(tasks[0]); + } + } else { + this.showQuickPick(tasks, nls.localize('TaskService.pickShowTask', 'Select the task to show its output'), false, true).then((task) => { + if (!task || !this._taskSystem) { + return; + } + this._taskSystem.revealTask(task); + }); + } + }); + } } @@ -1870,6 +1983,7 @@ workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(Config MenuRegistry.addCommand({ id: 'workbench.action.tasks.showLog', title: { value: nls.localize('ShowLogAction.label', "Show Task Log"), original: 'Show Task Log' }, category: { value: tasksCategory, original: 'Tasks' } }); MenuRegistry.addCommand({ id: 'workbench.action.tasks.runTask', title: { value: nls.localize('RunTaskAction.label', "Run Task"), original: 'Run Task' }, category: { value: tasksCategory, original: 'Tasks' } }); MenuRegistry.addCommand({ id: 'workbench.action.tasks.restartTask', title: { value: nls.localize('RestartTaskAction.label', "Restart Running Task"), original: 'Restart Running Task' }, category: { value: tasksCategory, original: 'Tasks' } }); +MenuRegistry.addCommand({ id: 'workbench.action.tasks.showTasks', title: { value: nls.localize('ShowTasksAction.label', "Show Running Tasks"), original: 'Show Running Tasks' }, category: { value: tasksCategory, original: 'Tasks' } }); MenuRegistry.addCommand({ id: 'workbench.action.tasks.terminate', title: { value: nls.localize('TerminateAction.label', "Terminate Task"), original: 'Terminate Task' }, category: { value: tasksCategory, original: 'Tasks' } }); MenuRegistry.addCommand({ id: 'workbench.action.tasks.build', title: { value: nls.localize('BuildAction.label', "Run Build Task"), original: 'Run Build Task' }, category: { value: tasksCategory, original: 'Tasks' } }); MenuRegistry.addCommand({ id: 'workbench.action.tasks.test', title: { value: nls.localize('TestAction.label', "Run Test Task"), original: 'Run Test Task' }, category: { value: tasksCategory, original: 'Tasks' } }); @@ -1900,7 +2014,8 @@ actionBarRegistry.registerActionBarContributor(Scope.VIEWER, QuickOpenActionCont // Status bar let statusbarRegistry = Registry.as(StatusbarExtensions.Statusbar); -statusbarRegistry.registerStatusbarItem(new StatusbarItemDescriptor(StatusBarItem, StatusbarAlignment.LEFT, 50 /* Medium Priority */)); +statusbarRegistry.registerStatusbarItem(new StatusbarItemDescriptor(BuildStatusBarItem, StatusbarAlignment.LEFT, 50 /* Medium Priority */)); +statusbarRegistry.registerStatusbarItem(new StatusbarItemDescriptor(TaskStatusBarItem, StatusbarAlignment.LEFT, 50 /* Medium Priority */)); // Output channel let outputChannelRegistry = Registry.as(OutputExt.OutputChannels); diff --git a/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts b/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts index 4b04532ae91..3ad7ca39063 100644 --- a/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts +++ b/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts @@ -162,6 +162,17 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { } } + + public revealTask(task: Task): boolean { + let terminalData = this.activeTasks[task._id]; + if (!terminalData) { + return false; + } + this.terminalService.setActiveInstance(terminalData.terminal); + this.terminalService.showPanel(task.command.presentation.focus); + return true; + } + public isActive(): TPromise { return TPromise.as(this.isActiveSync()); } @@ -189,7 +200,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { let task = activeTerminal.task; try { onExit.dispose(); - let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.SingleRun, group: task.group }; + let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.SingleRun, group: task.group, __task: task }; this.emit(TaskSystemEvents.Terminated, event); } catch (error) { // Do nothing. @@ -210,7 +221,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { let task = terminalData.task; try { onExit.dispose(); - let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.SingleRun, group: task.group }; + let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.SingleRun, group: task.group, __task: task }; this.emit(TaskSystemEvents.Terminated, event); } catch (error) { // Do nothing. @@ -270,7 +281,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { const problemMatchers = this.resolveMatchers(task.problemMatchers); let watchingProblemMatcher = new WatchingProblemCollector(problemMatchers, this.markerService, this.modelService); let toUnbind: IDisposable[] = []; - let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.Watching, group: task.group }; + let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.Watching, group: task.group, __task: task }; let eventCounter: number = 0; toUnbind.push(watchingProblemMatcher.addListener(ProblemCollectorEvents.WatchingBeginDetected, () => { eventCounter++; @@ -301,6 +312,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { onData.dispose(); onExit.dispose(); delete this.activeTasks[task._id]; + this.emit(TaskSystemEvents.Changed); switch (task.command.presentation.panel) { case PanelKind.Dedicated: this.sameTaskTerminals[task._id] = terminal.id.toString(); @@ -332,7 +344,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { } else { promise = new TPromise((resolve, reject) => { [terminal, executedCommand] = this.createTerminal(task); - let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.SingleRun, group: task.group }; + let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.SingleRun, group: task.group, __task: task }; this.emit(TaskSystemEvents.Active, event); let decoder = new TerminalDecoder(); let problemMatchers = this.resolveMatchers(task.problemMatchers); @@ -347,6 +359,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { onData.dispose(); onExit.dispose(); delete this.activeTasks[task._id]; + this.emit(TaskSystemEvents.Changed); switch (task.command.presentation.panel) { case PanelKind.Dedicated: this.sameTaskTerminals[task._id] = terminal.id.toString(); @@ -372,6 +385,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { this.terminalService.showPanel(task.command.presentation.focus); } this.activeTasks[task._id] = { terminal, task, promise }; + this.emit(TaskSystemEvents.Changed); return promise.then((summary) => { try { let telemetryEvent: TelemetryEvent = { diff --git a/src/vs/workbench/parts/tasks/node/processTaskSystem.ts b/src/vs/workbench/parts/tasks/node/processTaskSystem.ts index da8779d160b..ed4a91d2d4e 100644 --- a/src/vs/workbench/parts/tasks/node/processTaskSystem.ts +++ b/src/vs/workbench/parts/tasks/node/processTaskSystem.ts @@ -90,6 +90,11 @@ export class ProcessTaskSystem extends EventEmitter implements ITaskSystem { return this.executeTask(task); } + public revealTask(task: Task): boolean { + this.showOutput(); + return true; + } + public hasErrors(value: boolean): void { this.errorsShown = !value; } diff --git a/src/vs/workbench/parts/terminal/common/terminal.ts b/src/vs/workbench/parts/terminal/common/terminal.ts index 449cf29d2fc..c8c22a1ccd2 100644 --- a/src/vs/workbench/parts/terminal/common/terminal.ts +++ b/src/vs/workbench/parts/terminal/common/terminal.ts @@ -67,6 +67,11 @@ export interface ITerminalConfiguration { commandsToSkipShell: string[]; cwd: string; confirmOnExit: boolean; + env: { + linux: { [key: string]: string }; + osx: { [key: string]: string }; + windows: { [key: string]: string }; + }; } export interface ITerminalConfigHelper { @@ -232,6 +237,11 @@ export interface ITerminalInstance { */ copySelection(): void; + /** + * Current selection in the terminal. + */ + readonly selection: string | undefined; + /** * Clear current selection. */ diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts index 3995aacb60c..1759c679e1d 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts @@ -197,6 +197,21 @@ configurationRegistry.registerConfiguration({ DeleteWordLeftTerminalAction.ID, DeleteWordRightTerminalAction.ID ].sort() + }, + 'terminal.integrated.env.osx': { + 'description': nls.localize('terminal.integrated.env.osx', "Object with environment variables that will be added to the VS Code process to be used by the terminal on OS X"), + 'type': 'object', + 'default': {} + }, + 'terminal.integrated.env.linux': { + 'description': nls.localize('terminal.integrated.env.linux', "Object with environment variables that will be added to the VS Code process to be used by the terminal on Linux"), + 'type': 'object', + 'default': {} + }, + 'terminal.integrated.env.windows': { + 'description': nls.localize('terminal.integrated.env.windows', "Object with environment variables that will be added to the VS Code process to be used by the terminal on Windows"), + 'type': 'object', + 'default': {} } } }); diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts index bd1c9448be5..c1894c983ad 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts @@ -34,6 +34,7 @@ import { scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSli import { TPromise } from 'vs/base/common/winjs.base'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; import { IHistoryService } from 'vs/workbench/services/history/common/history'; +import pkg from 'vs/platform/node/package'; /** The amount of time to consider terminal errors to be related to the launch */ const LAUNCHING_DURATION = 500; @@ -48,7 +49,7 @@ class StandardTerminalProcessFactory implements ITerminalProcessFactory { } export class TerminalInstance implements ITerminalInstance { - private static readonly WINDOWS_EOL_REGEX = /\r?\n/g; + private static readonly EOL_REGEX = /\r?\n/g; private static _terminalProcessFactory: ITerminalProcessFactory = new StandardTerminalProcessFactory(); private static _lastKnownDimensions: Dimension = null; @@ -217,7 +218,7 @@ export class TerminalInstance implements ITerminalInstance { // Send data if the pty is ready this._process.send({ event: 'input', - data: this._sanitizeInput(data) + data }); } else { // If the pty is not ready, queue the data received from @@ -343,6 +344,10 @@ export class TerminalInstance implements ITerminalInstance { } } + get selection(): string | undefined { + return this.hasSelection() ? this._xterm.getSelection() : undefined; + } + public clearSelection(): void { this._xterm.clearSelection(); } @@ -414,7 +419,8 @@ export class TerminalInstance implements ITerminalInstance { public sendText(text: string, addNewLine: boolean): void { this._processReady.then(() => { - text = this._sanitizeInput(text); + // Normalize line endings to 'enter' press. + text = text.replace(TerminalInstance.EOL_REGEX, '\r'); if (addNewLine && text.substr(text.length - 1) !== '\r') { text += '\r'; } @@ -473,10 +479,6 @@ export class TerminalInstance implements ITerminalInstance { this._terminalHasTextContextKey.set(isActive && this.hasSelection()); } - private _sanitizeInput(data: any) { - return typeof data === 'string' ? data.replace(TerminalInstance.WINDOWS_EOL_REGEX, '\r') : data; - } - protected _getCwd(shell: IShellLaunchConfig, root: Uri): string { if (shell.cwd) { return shell.cwd; @@ -511,7 +513,9 @@ export class TerminalInstance implements ITerminalInstance { this._configHelper.mergeDefaultShellPathAndArgs(shell); } this._initialCwd = this._getCwd(this._shellLaunchConfig, this._historyService.getLastActiveWorkspaceRoot()); - const env = TerminalInstance.createTerminalEnv(process.env, shell, this._initialCwd, locale, this._cols, this._rows); + const platformKey = platform.isWindows ? 'windows' : platform.isMacintosh ? 'osx' : 'linux'; + const envFromConfig = { ...process.env, ...this._configHelper.config.env[platformKey] }; + const env = TerminalInstance.createTerminalEnv(envFromConfig, shell, this._initialCwd, locale, this._cols, this._rows); this._title = shell.name || ''; this._process = cp.fork(Uri.parse(require.toUrl('bootstrap')).fsPath, ['--type=terminal'], { env, @@ -535,7 +539,7 @@ export class TerminalInstance implements ITerminalInstance { if (this._preLaunchInputQueue.length > 0) { this._process.send({ event: 'input', - data: this._sanitizeInput(this._preLaunchInputQueue) + data: this._preLaunchInputQueue }); this._preLaunchInputQueue = null; } @@ -665,6 +669,8 @@ export class TerminalInstance implements ITerminalInstance { const env = shell.env ? shell.env : TerminalInstance._cloneEnv(parentEnv); env['PTYPID'] = process.pid.toString(); env['PTYSHELL'] = shell.executable; + env['TERM_PROGRAM'] = 'vscode'; + env['TERM_PROGRAM_VERSION'] = pkg.version; if (shell.args) { if (typeof shell.args === 'string') { env[`PTYSHELLCMDLINE`] = shell.args; diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts index cd8300d6b54..1b550324c4c 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts @@ -159,7 +159,12 @@ export class TerminalPanel extends Panel { } public focusFindWidget() { - this._findWidget.reveal(); + const activeInstance = this._terminalService.getActiveInstance(); + if (activeInstance && activeInstance.hasSelection()) { + this._findWidget.reveal(activeInstance.selection); + } else { + this._findWidget.reveal(); + } } public hideFindWidget() {