├── .gitignore ├── LICENSE.md ├── README.md ├── build.js ├── javascript.sublime-syntax ├── javascript.sublime-syntax.source ├── lib ├── apply-version.js ├── mixin.js └── replace.js ├── messages.json ├── messages ├── 3.10.0.txt ├── 4.0.0.txt └── install.txt ├── mixins ├── array_destructuring.yaml ├── destructuring_spread.yaml ├── expression.yaml ├── known_idents.yaml ├── method_definition.yaml ├── object_destructuring.yaml ├── open_ended_expression.yaml ├── parameter_binding.yaml ├── property_name.yaml ├── statement.yaml └── want_token.yaml ├── package.json ├── preferences ├── Comments.tmPreferences ├── Completion Rules.tmPreferences ├── JavaScript Indent.tmPreferences ├── Symbol List Banned.tmPreferences ├── Symbol List Class.tmPreferences ├── Symbol List Function.tmPreferences └── Symbol List Label.tmPreferences ├── snippets ├── Get-Elements.sublime-snippet ├── Object-Method.sublime-snippet ├── Object-Value-JS.sublime-snippet ├── Object-key-key-value.sublime-snippet ├── Prototype-(proto).sublime-snippet ├── for-()-{}-(faster).sublime-snippet ├── for-()-{}.sublime-snippet ├── function-(fun).sublime-snippet ├── function.sublime-snippet ├── if-___-else.sublime-snippet ├── if.sublime-snippet └── setTimeout-function.sublime-snippet ├── themes ├── Indiana Jones.tmTheme ├── Monokai JU.tmTheme ├── Solarized JU (dark).tmTheme ├── Solarized JU (light).tmTheme ├── Tron.tmTheme ├── Twilight JU.tmTheme └── Wes Anderson.tmTheme └── versions └── default.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License 2 | =============== 3 | 4 | Copyright (c) 2015 Joshua Wise, 2014 Dayle Rees, 2013 Matthew E. Torok 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JavaScript Ultimate 2 | 3 | *(Language Package for Sublime Text 3)* 4 | 5 | Although Sublime Text's built-in JavaScript language definition have made *significant* improvements recently, it's still not perfect. JavaScript Ultimate aims to be a perfectly accurate (to-the-spec) language definition for JavaScript. 6 | 7 | Here are some of the improvements that it makes: 8 | * More accurate to the JavaScript specification 9 | * Complete ES2016 support 10 | * JavaDoc support 11 | * Context-awareness (capable of highlighting errors or mistakes in your code) 12 | 13 | ## Regular Expression comprehension 14 | 15 | If you use JavaScript Ultimate with any of your existing themes, it will work just fine, and you can you enjoy a perfect JavaScript language definition. 16 | 17 | But, if you use any of the themes that come with this bundle, you can the additional benefit of Regular Expression comprehension, as seen below: 18 | 19 | ![](http://i.imgur.com/XIb7b8P.png) 20 | 21 | ## Compatibility 22 | 23 | JavaScript Ultimate is only compatible with Sublime Text 3, and specifically only with version 3103 or higher. 24 | 25 | JavaScript Ultimate will work perfectly fine with the [Nodejs](https://packagecontrol.io/packages/Nodejs) package, [Node Completions](https://packagecontrol.io/packages/Node%20Completions) package, and any other code completions package you can find. 26 | 27 | If you'd like to use the [jQuery](https://packagecontrol.io/packages/jQuery) package, you can do that too! Thanks to [Zander Martineau](https://github.com/MrMartineau) for making the [jQuery](https://packagecontrol.io/packages/jQuery) package properly work with JavaScript Ultimate! 28 | 29 | ## Themes 30 | 31 | * Monokai JU (just like defualt Monokai, but with regexp comprehension) 32 | * Twilight JU 33 | * Solarized JU (light) 34 | * Solarized JU (dark) 35 | * Indiana Jones (best with gray_antialias in user settings) 36 | * Wes Anderson (best with subpixel_antialias in user settings) 37 | * Tron (best with gray_antialias in user settings) 38 | 39 | # Installation 40 | 41 | You can install this package, and any other package mentioned here, using [Package Control](https://packagecontrol.io/). 42 | 43 | ## Authors 44 | 45 | * Joshua Wise - [@JoshuaWise](https://github.com/JoshuaWise) 46 | 47 | ## License 48 | 49 | This bundle is licensed under the [MIT license](http://www.opensource.org/licenses/mit-license.php). 50 | -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | const glob = require('glob').sync; 5 | const yaml = require('js-yaml'); 6 | const Mixin = require('./lib/mixin'); 7 | const applyVersion = require('./lib/apply-version'); 8 | const sourceFilename = glob('./*.sublime-syntax.source')[0]; 9 | 10 | const getMixin = (mixins, name) => { 11 | const mixin = mixins.find(mixin => mixin.name === name); 12 | if (!mixin) { 13 | throw new ReferenceError(`Unrecognized mixin "${name}".`); 14 | } 15 | return mixin; 16 | }; 17 | 18 | const walkMixins = (obj, fn) => { 19 | let count = 0; 20 | for (let key in obj) { 21 | if (obj[key].hasOwnProperty('mixin')) { 22 | fn(obj[key], key, obj); 23 | count += 1; 24 | } 25 | } 26 | return count; 27 | }; 28 | 29 | glob('./versions/*.yaml').forEach(filename => { 30 | let versionName = path.basename(filename, path.extname(filename)); 31 | const versionLibrary = yaml.safeLoad(fs.readFileSync(filename).toString()); 32 | const mixins = glob('./mixins/*.yaml').map(filename => new Mixin(filename, versionLibrary)); 33 | if (versionName === 'default') { 34 | versionName = ''; 35 | } else { 36 | versionName = '.' + versionName; 37 | } 38 | (function process(filename) { 39 | const file = yaml.safeLoad(applyVersion(versionLibrary, fs.readFileSync(filename).toString())); 40 | const count = walkMixins(file.contexts, (def, key, obj) => { 41 | const mixin = getMixin(mixins, def.mixin); 42 | def.name = key; 43 | delete def.mixin; 44 | delete obj[key]; 45 | const results = yaml.safeLoad(mixin.render(def)); 46 | for (let context in results) { 47 | obj[context] = results[context]; 48 | } 49 | }); 50 | filename = filename.replace(/\.sublime-syntax\.source$/g, versionName + '.sublime-syntax'); 51 | fs.writeFileSync(filename, '%YAML 1.2\n---\n' + JSON.stringify(file, null, ' ')); 52 | count && process(filename); 53 | }(sourceFilename)); 54 | }); 55 | -------------------------------------------------------------------------------- /javascript.sublime-syntax.source: -------------------------------------------------------------------------------- 1 | %YAML 1.2 2 | --- 3 | name: #####{include} name##### 4 | file_extensions: [js, htc] 5 | first_line_match: '{{shebang}}' 6 | scope: #####{include} scope##### 7 | 8 | variables: 9 | # Low-level character categories 10 | unicode_other_id_start: '\x{2118}\x{212E}\x{309B}\x{309C}' 11 | unicode_other_id_continue: '\x{1369}\x{00B7}\x{0387}\x{19DA}' 12 | unicode_id_start: '\p{L}\p{Nl}{{unicode_other_id_start}}' 13 | unicode_id_continue: '{{unicode_id_start}}\p{Mn}\p{Mc}\p{Nd}\p{Pc}{{unicode_other_id_continue}}' 14 | ident_start: '{{unicode_id_start}}_$\\' 15 | ident_part: '{{unicode_id_continue}}\x{200C}\x{200D}_$\\' 16 | space_chars: '\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}' 17 | line_terminator_chars: '\x{000a}\x{000d}\x{2028}\x{2029}' 18 | 19 | # Low-level JavaScript categories 20 | keyword: '(?:break|case|catch|class|const|continue|debugger|default|delete|do|else|export|extends|finally|for|function|if|import|in|instanceof|new|return|super|switch|this|throw|try|typeof|var|void|while|with|yield|let|of|static|await)' 21 | future_reserved_word: '(?:enum|implements|interface|package|private|protected|public)' 22 | hex_escape_sequence: '(?:x\h{2})' 23 | unicode_escape_sequence: '(?:u\h{4}|u\{\h++\})' 24 | common_regexp_escape_sequences: '(?:{{hex_escape_sequence}}|{{unicode_escape_sequence}}|c[a-zA-Z]|0(?![0-9])|[1-9][0-9]*+)' 25 | common_regexp_operators: '(?:\^|\$|\\|\.|\*|\+|\?|\(|\)|\[|\]|\{|\}|\||\/)' 26 | 27 | # Articulatory JavaScript categories 28 | space: '[{{space_chars}}]' 29 | line_terminator: '(?:\x{000d}\x{000a}|[{{line_terminator_chars}}])' 30 | non_token: '[{{space_chars}}{{line_terminator_chars}}]++' 31 | some_space: '{{space}}++' 32 | to_token: '{{space}}*+' # skip to next token on the same line 33 | token: '[^{{space_chars}}{{line_terminator_chars}}]' 34 | b_before: '(?)' 46 | arrow_function_with_reserved_word: '(?:{{b_before}}(async){{some_space}})?+({{reserved_word}})(?={{to_token}}=>)' 47 | arrow_function_with_ident: '(?:{{b_before}}(async){{some_space}})?+({{ident}})(?={{to_token}}=>)' 48 | assignment_for_function: '(?={{to_token}}={{to_token}}(?:(?:async{{some_space}})?+function\*?+{{to_token}}\(|{{arrow_function_with_parenthesis}}|{{arrow_function_with_reserved_word}}|{{arrow_function_with_ident}}))' 49 | property_assignment_for_function: '(?={{to_token}}:{{to_token}}(?:(?:async{{some_space}})?+function\*?+{{to_token}}\(|{{arrow_function_with_parenthesis}}|{{arrow_function_with_reserved_word}}|{{arrow_function_with_ident}}))' 50 | 51 | contexts: 52 | prototype: 53 | - match: '(//)[^{{line_terminator_chars}}]*+' 54 | scope: comment.line.double-slash.js 55 | captures: 56 | 1: punctuation.definition.comment.js 57 | - match: '/\*\*(?!/)' 58 | scope: punctuation.definition.comment.js 59 | push: 60 | - meta_scope: comment.block.documentation.js 61 | - match: '\*/' 62 | scope: punctuation.definition.comment.js 63 | pop: true 64 | - match: '^{{to_token}}\*{{to_token}}(@{{token}}++)' 65 | captures: 66 | 1: keyword.other.documentation.custom.js 67 | - match: '/\*' 68 | scope: punctuation.definition.comment.js 69 | push: 70 | - meta_scope: comment.block.js 71 | - match: '\*/' 72 | scope: punctuation.definition.comment.js 73 | pop: true 74 | #####{include} library_comments##### 75 | 76 | main: 77 | - match: '{{shebang}}' 78 | scope: comment.line.shebang.js 79 | - match: '{{otherwise}}' 80 | push: 81 | - match: '{{non_token}}' 82 | - match: '{{otherwise}}' 83 | push: statement_top_level 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | expression_until_parenthesis: {mixin: expression, exitMatch: '\)'} 95 | expression_until_square_bracket: {mixin: expression, exitMatch: '\]'} 96 | expression_until_colon: {mixin: expression, exitMatch: ':'} 97 | expression_until_curly_bracket_ahead_or_colon: {mixin: expression, exitMatch: ':|(?=\})'} 98 | expression_until_end_of_template_interpolation: {mixin: expression, exitMatch: '\}', exitExtra: 'scope: string.quoted.template.js variable.language.js'} 99 | expression_until_comma_or_curly_bracket: {mixin: expression, exitMatch: '[,}]'} 100 | expression_until_comma_or_square_bracket_ahead: {mixin: expression, exitMatch: '(?=[,\]])'} 101 | expression_until_parenthesis_ahead_or_comma: {mixin: expression, exitMatch: '(?=\))|,'} 102 | expression_until_parameter_binding_list: {mixin: expression, exitMatch: '(?=\))', overrideSecondary: {match: '(?=,)', pop: true}} 103 | expression_until_parenthesis_ahead_no_comma: {mixin: expression, exitMatch: '(?=\))', overrideSecondary: {match: ',', scope: invalid.illegal.js}} 104 | expression_until_parenthesis_with_spread_anywhere: {mixin: expression, exitMatch: '\)', beforeAnything: [{match: '{{non_token}}'}, {match: '\.\.\.', scope: keyword.operator.js, push: expression_until_parenthesis_ahead_or_comma}], overrideSecondary: {match: ',', set: expression_until_parenthesis_with_spread_anywhere}} 105 | expression_until_square_bracket_with_spread_or_comma_anywhere: {mixin: expression, exitMatch: '\]', beforeAnything: [{match: '{{non_token}}'}, {match: ',++'}, {match: '\.\.\.', scope: keyword.operator.js, push: expression_until_comma_or_square_bracket_ahead}], overridePrimary: [{match: '(?=,)', pop: true}], overrideSecondary: [{match: '(?=,)', set: expression_until_square_bracket_with_spread_or_comma_anywhere}]} 106 | expression_until_square_bracket_ahead_no_comma: {mixin: expression, exitMatch: '(?=\])', overrideSecondary: {match: ',', scope: invalid.illegal.js}} 107 | expression_until_curly_bracket_ahead_no_comma: {mixin: expression, exitMatch: '(?=\})', overrideSecondary: {match: ',', scope: invalid.illegal.js}} 108 | expression_until_for_statement_third_section: {mixin: expression, exitMatch: ';|(?=\))'} 109 | expression_until_for_binding: {mixin: expression, exitMatch: '(?=[,;)])', override: {match: '{{b_before}}(?:of|in){{b_after}}', scope: invalid.illegal.js}} 110 | _for_statement_first_expression: {mixin: expression, exitMatch: '(?=[;)]|{{b_before}}(?:of|in){{b_after}})'} 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | destructuring_spread_for_parameter_binding_list: {mixin: destructuring_spread, exitMatch: '(?=\))', initializer: expression_until_parenthesis_ahead_no_comma, identExtra: 'scope: variable.language.js', destructuring: destructuring_for_parameter} 122 | 123 | parameter_binding_until_parenthesis: {mixin: parameter_binding, exitMatch: '\)', identExtra: 'scope: variable.language.js', destructuring: destructuring_for_parameter} 124 | parameter_binding_until_parenthesis_with_initializer: {mixin: parameter_binding, exitMatch: '\)', overrideAfter: {match: '=', scope: keyword.operator.js, push: expression_until_parenthesis_ahead_no_comma}, identExtra: 'scope: variable.language.js', destructuring: destructuring_for_parameter} 125 | parameter_binding_list: {mixin: parameter_binding, exitMatch: '\)', overrideAfter: [{match: ',', set: parameter_binding_list}, {match: '=', scope: keyword.operator.js, push: expression_until_parameter_binding_list}], overrideBefore: {include: destructuring_spread_for_parameter_binding_list}, identExtra: 'scope: variable.language.js', destructuring: destructuring_for_parameter} 126 | variable_binding_for_for_statement: {mixin: parameter_binding, exitMatch: '(?=[,;)]|{{b_before}}(?:of|in){{b_after}})', overrideAfter: {match: '(?==)', scope: keyword.operator.js, pop: true}, overrideIdent: {match: '{{ident}}{{assignment_for_function}}', scope: entity.name.function.js, pop: true}, destructuring: destructuring_for_variable} 127 | variable_binding: {mixin: parameter_binding, exitMatch: '[^\s\S]', catchAfter: {match: '{{otherwise}}', pop: true}, overrideIdent: {match: '{{ident}}{{assignment_for_function}}', scope: entity.name.function.js, pop: true}, destructuring: destructuring_for_variable} 128 | 129 | property_name_for_method: {mixin: property_name, identScope: 'entity.name.function.js'} 130 | property_name_requires_parenthesis_for_method: {mixin: property_name, identTail: '\(', identScope: 'entity.name.function.js'} 131 | property_name_requires_colon: {mixin: property_name, identTail: ':', identScope: 'entity.name.property.js'} 132 | 133 | method_definition_in_class: 134 | mixin: method_definition 135 | exitMatch: '[;}]' 136 | overrideNonRecurring: 137 | - match: '{{b_before}}static{{b_after}}' 138 | scope: storage.modifier.js 139 | set: 140 | - match: '{{non_token}}' 141 | - include: _parts__method_definition_in_class 142 | overrideAfter: 143 | - match: '{{ident}}' 144 | scope: entity.name.function.js 145 | pop: true 146 | exit: 147 | - match: '(?<=\})' 148 | pop: true 149 | - match: '(?<=;)' 150 | set: method_definition_in_class 151 | altExit: 152 | - match: '{{otherwise}}' 153 | set: _main__method_definition_in_class 154 | 155 | method_definition_in_object_literal: 156 | mixin: method_definition 157 | exitMatch: '[,}]' 158 | overrideBefore: 159 | - match: ',' 160 | scope: invalid.illegal.js 161 | - match: '\.\.\.' 162 | scope: keyword.operator.js 163 | set: expression_until_comma_or_curly_bracket 164 | - match: '{{ident}}{{property_assignment_for_function}}' 165 | scope: entity.name.function.js 166 | pop: true 167 | - match: '{{ident}}(?={{to_token}}:)' # this doesn't extend through new lines 168 | scope: entity.name.property.js 169 | pop: true 170 | overrideAfter: 171 | - match: '{{reserved_word}}' 172 | scope: invalid.illegal.js 173 | set: need_comma_or_closing_curly_bracket 174 | - match: '{{ident}}' 175 | # scope: entity.name.property.js # optional 176 | set: need_comma_or_closing_curly_bracket 177 | exit: 178 | - match: '(?<=\})' 179 | pop: true 180 | - match: '(?<=,)' 181 | set: method_definition_in_object_literal 182 | - match: '{{non_token}}' 183 | - match: '\}' 184 | scope: invalid.illegal.js 185 | pop: true 186 | - match: ',' 187 | scope: invalid.illegal.js 188 | set: method_definition_in_object_literal 189 | - match: '{{to_token}}:' # this doesn't extend through new lines 190 | push: expression_until_comma_or_curly_bracket 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | otherwise_invalid: [{match: '{{token}}', scope: invalid.illegal.js}] 202 | 203 | need_closing_parenthesis: [{match: '\)', pop: true}, {include: otherwise_invalid}] 204 | need_comma_or_closing_curly_bracket: [{match: '[,}]', pop: true}, {include: otherwise_invalid}] 205 | need_opening_parenthesis_ahead_or_comma_or_closing_curly_bracket: [{match: '[,}]|(?=\()', pop: true}, {include: otherwise_invalid}] 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | statement_in_block: {mixin: statement, statementExit: ';|(?=\})', self: 'statement_in_block', possibleExit: {match: '(?=\})', pop: true}} 217 | statement_top_level: {mixin: statement, statementExit: ';', self: 'statement', override: [{include: import_statement}, {include: export_statement}]} 218 | statement: {mixin: statement, statementExit: ';', self: 'statement'} 219 | 220 | block_statement: 221 | - match: '\{' 222 | set: 223 | - match: '{{non_token}}' 224 | - match: '\}' 225 | pop: true 226 | - match: '{{otherwise}}' 227 | push: statement_in_block 228 | 229 | _switch_statement_block: 230 | - match: '{{non_token}}' 231 | - match: '\}' 232 | pop: true 233 | - match: '{{b_before}}case{{b_after}}' 234 | scope: keyword.control.js 235 | push: 236 | - match: '{{non_token}}' 237 | - match: '(?=\})' 238 | pop: true 239 | - match: ':' 240 | scope: invalid.illegal.js 241 | pop: true 242 | - match: '{{otherwise}}' 243 | set: expression_until_curly_bracket_ahead_or_colon 244 | - match: '{{b_before}}default{{b_after}}' 245 | scope: keyword.control.js 246 | push: 247 | - match: ':|(?=\})' 248 | pop: true 249 | - include: otherwise_invalid 250 | - match: '{{otherwise}}' 251 | push: statement_in_block 252 | 253 | _class_block: 254 | - include: method_definition_in_class 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | parenthesized_expression: 266 | - match: '\(' 267 | set: expression_until_parenthesis 268 | 269 | string_literal: 270 | - match: '('')(use strict)('')|(")(use strict)(")' 271 | scope: string.quoted.js 272 | captures: 273 | 1: punctuation.definition.string.begin.js 274 | 2: comment.directive.js 275 | 3: punctuation.definition.string.end.js 276 | 4: punctuation.definition.string.begin.js 277 | 5: comment.directive.js 278 | 6: punctuation.definition.string.end.js 279 | pop: true 280 | - match: '''' 281 | scope: punctuation.definition.string.begin.js 282 | set: _string_literal_contents 283 | with_prototype: 284 | - match: '"' 285 | - match: '"' 286 | scope: punctuation.definition.string.begin.js 287 | set: _string_literal_contents 288 | with_prototype: 289 | - match: '''' 290 | 291 | _string_literal_contents: 292 | - meta_include_prototype: false 293 | - meta_scope: string.quoted.js 294 | - include: _string_escape_sequences 295 | - match: '{{line_terminator}}' 296 | set: 297 | - meta_include_prototype: false 298 | - meta_scope: string.quoted.js 299 | - include: _string_escape_sequences 300 | - match: '[''"]' 301 | scope: punctuation.definition.string.end.js invalid.illegal.js 302 | pop: true 303 | - match: '[''"]' 304 | scope: punctuation.definition.string.end.js 305 | pop: true 306 | 307 | _string_escape_sequences: 308 | - match: '(\\){{line_terminator}}' 309 | scope: constant.character.escape.js 310 | captures: 311 | 1: linecontinuation.js 312 | - match: '\\(?:0(?![0-9])|[bfnrtv''"\\]|{{hex_escape_sequence}}|{{unicode_escape_sequence}})' 313 | scope: constant.character.escape.js 314 | - match: '\\(?:0[0-9]++|[1-9][0-9]*+)?+' 315 | scope: invalid.illegal.js 316 | 317 | template_literal: 318 | - match: '`' 319 | scope: punctuation.definition.string.begin.js 320 | set: _template_literal_contents 321 | 322 | _template_literal_contents: 323 | - meta_include_prototype: false 324 | - meta_scope: string.quoted.template.js 325 | - match: '\\[$`]' 326 | scope: constant.character.escape.js 327 | - include: _string_escape_sequences 328 | - match: '\$\{' 329 | scope: variable.language.js 330 | set: [_template_literal_contents_continue, expression_until_end_of_template_interpolation] 331 | - match: '`' 332 | scope: punctuation.definition.string.end.js 333 | pop: true 334 | 335 | _template_literal_contents_continue: 336 | - match: '{{otherwise}}' 337 | set: _template_literal_contents 338 | 339 | regular_expression_literal: 340 | - match: '/' 341 | scope: string.regexp.js punctuation.definition.string.begin.js 342 | set: _regular_expression_literal_contents 343 | 344 | _regular_expression_literal_contents: 345 | - meta_include_prototype: false 346 | - meta_content_scope: string.regexp.js 347 | - match: '\\(?:[dDsSwWfnrtvbB]|{{common_regexp_escape_sequences}})' 348 | scope: constant.character.escape.js regexp-operator.js 349 | - match: '\\{{common_regexp_operators}}' 350 | scope: constant.character.escape.js 351 | - match: '\^|\$|\||\?|\*|\+|\.|\{[0-9]++(?:,[0-9]*+)?+\}|\((?:\?\!|\?=|\?:)?+|\)' 352 | scope: regexp-operator.js 353 | - match: '\\(?:0[0-9]++)?+' 354 | scope: invalid.illegal.js 355 | - match: '(\[\^?+)-?+' 356 | scope: string.regexp.characterclass.js 357 | captures: 358 | 1: punctuation.definition.string.begin.js 359 | set: _regular_expression_literal_class 360 | - match: '{{line_terminator}}' 361 | scope: invalid.illegal.js 362 | pop: true 363 | - match: '/(?:([gimuys]*?(?''option''[gimuys])[gimuys]*?\k''option'')|[gimuys]*)([{{ident_part}}]*+)' 364 | scope: string.regexp.js punctuation.definition.string.end.js 365 | captures: 366 | 1: invalid.illegal.js 367 | 3: invalid.illegal.js 368 | pop: true 369 | 370 | _regular_expression_literal_class: 371 | - meta_include_prototype: false 372 | - meta_content_scope: string.regexp.js string.regexp.characterclass.js 373 | - match: '\\(?:[dDsSwWfnrtvb]|{{common_regexp_escape_sequences}})' 374 | scope: constant.character.escape.js regexp-operator.js 375 | - match: '\\(?:-|{{common_regexp_operators}})' 376 | scope: constant.character.escape.js 377 | - match: '\\(?:0[0-9]++|B|c[0-9_])?+' # "\c[0-9_]" actually does work in the tested implementations, but it's not in the spec 378 | scope: invalid.illegal.js 379 | - match: '(?={{line_terminator}})' 380 | pop: true 381 | - match: '-?+(\])' 382 | captures: 383 | 1: punctuation.definition.string.end.js 384 | set: _regular_expression_literal_contents 385 | - match: '-' 386 | scope: regexp-operator.js 387 | 388 | numeric_literal: 389 | - match: '{{b_before}}0([xXbBoO]n?+){{b_after}}' 390 | scope: constant.numeric.js 391 | captures: 392 | 1: invalid.illegal.js 393 | pop: true 394 | - match: '{{b_before}}0[xX]\h++n?+{{b_after}}' 395 | scope: constant.numeric.hexadecimal.js 396 | pop: true 397 | - match: '{{b_before}}0[bB][01]++n?+{{b_after}}' 398 | scope: constant.numeric.binary.js 399 | pop: true 400 | - match: '{{b_before}}0[oO][0-7]++n?+{{b_after}}' 401 | scope: constant.numeric.octal.js 402 | pop: true 403 | - match: '{{b_before}}(?:(?:0|[1-9][0-9]*+)n|(?:(?:0|[1-9][0-9]*+)(?:\.[0-9]*+)?+|\.[0-9]++)(?:[eE][+-]?+[0-9]++)?+){{b_after}}' 404 | scope: constant.numeric.decimal.js 405 | pop: true 406 | 407 | language_constant: 408 | - match: '{{b_before}}(?:true|false|null|undefined|Infinity|NaN){{b_after}}' 409 | scope: constant.language.js 410 | pop: true 411 | 412 | language_variable: 413 | - match: '{{b_before}}(?:this|arguments|super){{b_after}}' 414 | scope: variable.language.js 415 | pop: true 416 | 417 | reserved_word_reference: 418 | - match: '{{reserved_word}}' 419 | scope: invalid.illegal.js 420 | pop: true 421 | 422 | identifier_reference: 423 | mixin: known_idents 424 | exitType: 'set' 425 | exitValue: '_optional_postfix_operator' 426 | overrideWithAssignment: 427 | - match: '{{ident}}{{assignment_for_function}}' 428 | scope: entity.name.function.js 429 | pop: true 430 | 431 | identifier_reference_simple: 432 | mixin: known_idents 433 | exitType: 'pop' 434 | exitValue: 'true' 435 | 436 | _optional_postfix_operator: 437 | - match: '{{to_token}}(--|\+\+)' 438 | captures: {1: keyword.operator.js} 439 | pop: true 440 | - match: '{{otherwise}}' 441 | pop: true 442 | 443 | array_literal: 444 | - match: '\[' 445 | set: expression_until_square_bracket_with_spread_or_comma_anywhere 446 | 447 | object_literal: 448 | - match: '\{' 449 | set: method_definition_in_object_literal 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | _arrow_operator: 461 | - match: '=>' 462 | scope: keyword.operator.js 463 | pop: true 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | object_destructuring_for_parameter: 475 | mixin: object_destructuring 476 | identExtra: 'scope: variable.language.js' 477 | destructuring: destructuring_for_parameter 478 | 479 | object_destructuring_for_variable: 480 | mixin: object_destructuring 481 | destructuring: destructuring_for_variable 482 | 483 | array_destructuring_for_parameter: 484 | mixin: array_destructuring 485 | identExtra: 'scope: variable.language.js' 486 | destructuring: destructuring_for_parameter 487 | 488 | array_destructuring_for_variable: 489 | mixin: array_destructuring 490 | destructuring: destructuring_for_variable 491 | 492 | destructuring_for_parameter: 493 | - include: object_destructuring_for_parameter 494 | - include: array_destructuring_for_parameter 495 | 496 | destructuring_for_variable: 497 | - include: object_destructuring_for_variable 498 | - include: array_destructuring_for_variable 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | import_statement: 510 | - match: '{{b_before}}import{{b_after}}' 511 | scope: storage.type.js 512 | set: _import_statement_core 513 | 514 | _import_statement_core: 515 | mixin: want_token 516 | match: '(?=[''''"])' 517 | goto: '_import_location' 518 | exitMatch: ';' 519 | overrideNewline: {match: '(?={{statement_keyword_all}}|{{ident}}{{to_token}}[^,;f{{line_terminator_chars}}])', pop: true} 520 | override: 521 | - match: '{{reserved_word}}' 522 | scope: invalid.illegal.js 523 | set: _import_statement_optional_addition 524 | - match: '{{ident}}' 525 | # scope: variable.language.js # optional 526 | set: _import_statement_optional_addition 527 | - include: _import_all_named 528 | - include: _import_named_block 529 | 530 | _import_statement_optional_addition: 531 | mixin: want_token 532 | match: ',' 533 | goto: '_import_statement_addition' 534 | exitMatch: ';' 535 | override: 536 | - match: '{{b_before}}(?=(?:from|fro|fr|f){{b_after}})' 537 | set: _import_from 538 | 539 | _import_statement_addition: 540 | mixin: want_token 541 | match: '(?=\*)' 542 | goto: '_import_all_named' 543 | exitMatch: ';' 544 | override: {include: _import_named_block} 545 | 546 | _import_all_named: 547 | - match: '\*' 548 | scope: keyword.operator.js 549 | set: _import_all_named_as 550 | 551 | _import_all_named_as: 552 | mixin: want_token 553 | match: '{{b_before}}as{{b_after}}' 554 | matchExtra: 'scope: keyword.operator.js' 555 | goto: '_import_all_named_as_ident' 556 | exitMatch: ';' 557 | 558 | _import_all_named_as_ident: 559 | mixin: want_token 560 | match: '{{ident}}' 561 | # matchExtra: 'scope: variable.language.js' # optional 562 | goto: '_import_from' 563 | exitMatch: ';' 564 | overrideNewline: {match: '(?={{statement_keyword_all}}|{{ident}}{{to_token}}[^;f{{line_terminator_chars}}])', pop: true} 565 | override: 566 | - match: '{{reserved_word}}' 567 | scope: invalid.illegal.js 568 | set: _import_from 569 | 570 | _import_named_block: 571 | - match: '\{' 572 | # scope: storage.modifier.js # optional 573 | set: _import_named_item 574 | 575 | _import_named_item: 576 | - match: '\}' 577 | # scope: storage.modifier.js # optional 578 | set: _import_from 579 | - match: '({{ident}}){{to_token}}(as){{b_after}}' # this doesn't extend through new lines 580 | captures: {1: entity.name.property.js, 2: keyword.operator.js} 581 | set: 582 | - match: '\}' 583 | # scope: storage.modifier.js # optional 584 | set: _import_from 585 | - match: ',' 586 | scope: invalid.illegal.js 587 | set: _import_named_item 588 | - match: '{{reserved_word}}' 589 | scope: invalid.illegal.js 590 | set: _import_named_continue 591 | - match: '{{ident}}' 592 | # scope: variable.language.js # optional 593 | set: _import_named_continue 594 | - include: otherwise_invalid 595 | - match: '{{reserved_word}}' 596 | scope: invalid.illegal.js 597 | set: _import_named_continue 598 | - match: '{{ident}}' 599 | # scope: variable.language.js # optional 600 | set: _import_named_continue 601 | - include: otherwise_invalid 602 | 603 | _import_named_continue: 604 | - match: ',' 605 | set: _import_named_item 606 | - match: '\}' 607 | # scope: storage.modifier.js # optional 608 | set: _import_from 609 | - include: otherwise_invalid 610 | 611 | _import_from: 612 | mixin: want_token 613 | match: '{{b_before}}from{{b_after}}' 614 | matchExtra: 'scope: keyword.operator.js' 615 | goto: '_import_location' 616 | exitMatch: ';' 617 | override: {match: '{{b_before}}(?:fro|fr|f){{to_token}}{{b_after}}'} 618 | 619 | _import_location: 620 | mixin: want_token 621 | match: '(?=[''''"])' 622 | goto: '[_end_of_statement__statement, string_literal]' 623 | exitMatch: ';' 624 | 625 | export_statement: 626 | - match: '{{b_before}}export{{b_after}}' 627 | scope: storage.modifier.js 628 | set: _export_statement_core 629 | 630 | _export_statement_core: 631 | mixin: want_token 632 | match: '\{' 633 | goto: '[_end_of_statement__statement, _export_clause]' 634 | exitMatch: ';' 635 | override: 636 | - match: '{{b_before}}(?=(?:var|let|const){{b_after}})' 637 | set: _variable_statement__statement 638 | - match: '{{b_before}}(?=class{{b_after}})' 639 | set: _class_declaration__statement 640 | - match: '{{b_before}}(?=(?:async{{some_space}})?+function{{b_after}})' 641 | set: _function_declaration__statement 642 | - match: '{{b_before}}default{{b_after}}' 643 | scope: storage.modifier.js 644 | set: _expression_until_end_of_statement__statement 645 | - match: '{{b_before}}(?:defaul|defau|defa|def|de|d|cons|con|co|clas|cla|cl|c|functio|functi|funct|func|fun|fu|f|va|v|le|l){{to_token}}{{b_after}}' 646 | 647 | _export_clause: 648 | - match: '\}' 649 | pop: true 650 | - match: '({{reserved_word}}){{to_token}}(as){{b_after}}' # this doesn't extend through new lines 651 | captures: {1: invalid.illegal.js, 2: keyword.operator.js} 652 | set: _export_clause_as 653 | - match: '{{ident}}{{to_token}}(as){{b_after}}' # this doesn't extend through new lines 654 | captures: {1: keyword.operator.js} 655 | set: _export_clause_as 656 | - match: '{{reserved_word}}' 657 | scope: invalid.illegal.js 658 | set: _export_clause_continue 659 | - match: '{{ident}}' 660 | scope: entity.name.property.js 661 | set: _export_clause_continue 662 | - include: otherwise_invalid 663 | 664 | _export_clause_as: 665 | - match: '\}' 666 | pop: true 667 | - match: '{{ident}}' 668 | scope: entity.name.property.js 669 | set: _export_clause_continue 670 | - include: otherwise_invalid 671 | 672 | _export_clause_continue: 673 | - match: ',' 674 | set: _export_clause 675 | - match: '\}' 676 | pop: true 677 | - include: otherwise_invalid 678 | 679 | -------------------------------------------------------------------------------- /lib/apply-version.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const replace = require('./replace'); 3 | 4 | module.exports = (library, source) => { 5 | Object.keys(library).forEach(key => { 6 | source = replace({ 7 | source, 8 | regexp: new RegExp(`(^\\s+)?#####{include}\\s*${key}#####`, 'm'), 9 | replacement: library[key], 10 | required: false 11 | }); 12 | }); 13 | return source; 14 | }; 15 | -------------------------------------------------------------------------------- /lib/mixin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | const replace = require('./replace'); 5 | const applyVersion = require('./apply-version'); 6 | 7 | module.exports = class Mixin { 8 | constructor(filename, library) { 9 | if (typeof filename !== 'string') { 10 | throw new TypeError('Expected filename to be a string.'); 11 | } 12 | this._name = path.basename(filename, path.extname(filename)); 13 | this._template = applyVersion(library, fs.readFileSync(filename).toString()); 14 | const params = this._template.match(/%%(~)?[\w-]+%%/g).map(param => param.slice(2, -2)); 15 | const optionalParams = params.filter(param => param[0] === '~').map(param => param.slice(1)).filter((x, i, arr) => arr.indexOf(x) === i); 16 | const requiredParams = params.filter(param => param[0] !== '~').filter((x, i, arr) => arr.indexOf(x) === i); 17 | optionalParams.forEach(key => { 18 | if (requiredParams.includes(key)) { 19 | throw new TypeError(`Parameter %%key%% exists as both required and optional.`); 20 | } 21 | }); 22 | this._parameters = optionalParams.map(key => ({key, full: `%%~${key}%%`, optional: true})) 23 | .concat(requiredParams.map(key => ({key, full: `%%${key}%%`, optional: false}))); 24 | } 25 | render(options = {}) { 26 | let source = this._template; 27 | this._parameters.forEach(param => { 28 | source = replace({ 29 | source, 30 | regexp: new RegExp('(^\\s+)?' + param.full, 'm'), 31 | replacement: options[param.key], 32 | required: !param.optional && {error: `Expected parameter ${param.full} to be a string.`} 33 | }); 34 | }); 35 | return source; 36 | } 37 | get name() { 38 | return this._name; 39 | } 40 | }; 41 | -------------------------------------------------------------------------------- /lib/replace.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = ({source, regexp, replacement, required}) => { 4 | if (replacement === undefined && !required) { 5 | replacement = ''; 6 | } else if (typeof replacement === 'object' && replacement !== null) { 7 | if (Array.isArray(replacement)) { 8 | replacement = '- ' + replacement.map(item => JSON.stringify(item)).join('\n- '); 9 | } else { 10 | replacement = '- ' + JSON.stringify(replacement); 11 | } 12 | } else if (typeof replacement !== 'string') { 13 | throw new TypeError('' + required.error); 14 | } 15 | let match; 16 | while (match = regexp.exec(source)) { 17 | const indent = match[1] || ''; 18 | source = source.slice(0, match.index) 19 | + indent 20 | + replacement.replace(/\r?\n/g, '$&' + indent) 21 | + source.slice(match.index + match[0].length); 22 | } 23 | return source; 24 | }; 25 | -------------------------------------------------------------------------------- /messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "install": "messages/install.txt", 3 | "3.10.0": "messages/3.10.0.txt", 4 | "4.0.0": "messages/4.0.0.txt" 5 | } 6 | -------------------------------------------------------------------------------- /messages/3.10.0.txt: -------------------------------------------------------------------------------- 1 | JavaScript Ultimate now support ES2016! 2 | 3 | You'll also notice a few features from ES2017, such as object spread/rest operators 4 | and async/await functions. 5 | 6 | NOTE: 7 | If you use SublimeLinter, you'll need to add the following to your settings file: 8 | (Preferences > Package Settings > SublimeLinter > Settings - User) 9 | "syntax_map": { 10 | "javascript.dom": "javascript" 11 | } 12 | -------------------------------------------------------------------------------- /messages/4.0.0.txt: -------------------------------------------------------------------------------- 1 | As of major version 4, JavaScript Ultimate no longer has a DOM-specific syntax. 2 | 3 | Also, JavaScript Ultimate no longer disables the default JavaScript syntax. The JavaScript Ultimate syntax was renamed from "JavaScript" to "JavaScript Ultimate". 4 | -------------------------------------------------------------------------------- /messages/install.txt: -------------------------------------------------------------------------------- 1 | JavaScript Ultimate is now installed! 2 | -------------------------------------------------------------------------------- /mixins/array_destructuring.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '\[' 3 | # scope: storage.modifier.js # optional 4 | set: _parameter_binding__%%name%% 5 | 6 | _destructuring_spread__%%name%%: 7 | mixin: destructuring_spread 8 | exitMatch: '(?=\])' 9 | initializer: expression_until_square_bracket_ahead_no_comma 10 | identExtra: '%%~identExtra%%' 11 | destructuring: '%%destructuring%%' 12 | 13 | _parameter_binding__%%name%%: 14 | mixin: parameter_binding 15 | exitMatch: '\]' 16 | # exitExtra: 'scope: storage.modifier.js' # optional 17 | destructuring: '%%destructuring%%' 18 | overrideAfter: 19 | - match: '=' 20 | scope: keyword.operator.js 21 | push: expression_until_comma_or_square_bracket_ahead 22 | - match: ',' 23 | push: ___parameter_binding__%%name%% 24 | overrideBefore: 25 | - match: ',++' 26 | - include: _destructuring_spread__%%name%% 27 | identExtra: '%%~identExtra%%' 28 | -------------------------------------------------------------------------------- /mixins/destructuring_spread.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '\.\.\.' 3 | scope: keyword.operator.js 4 | set: [_end__%%name%%, _identifier__%%name%%] 5 | 6 | _identifier__%%name%%: 7 | - match: '(?=%%exitMatch%%)' 8 | pop: true 9 | - match: '{{reserved_word}}' 10 | scope: invalid.illegal.js 11 | pop: true 12 | - include: %%destructuring%% 13 | - match: '{{ident}}' 14 | %%~identExtra%% 15 | pop: true 16 | - include: otherwise_invalid 17 | 18 | _end__%%name%%: 19 | - match: '%%exitMatch%%' 20 | %%~exitExtra%% 21 | pop: true 22 | - match: '=' 23 | scope: keyword.operator.js 24 | set: %%initializer%% 25 | - include: otherwise_invalid 26 | -------------------------------------------------------------------------------- /mixins/expression.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | %%~beforeAnything%% 3 | - match: '{{otherwise}}' 4 | set: [_secondary__%%name%%, _primary__%%name%%] 5 | 6 | _primary_parts__%%name%%: 7 | - include: _arrow_function_expression__%%name%% 8 | - include: parenthesized_expression 9 | - include: string_literal 10 | - include: template_literal 11 | - include: regular_expression_literal 12 | - include: numeric_literal 13 | - include: array_literal 14 | - include: object_literal 15 | - include: _function_expression__%%name%% 16 | - include: _class_expression__%%name%% 17 | - include: language_constant 18 | - include: language_variable 19 | - include: _new_keyword__%%name%% 20 | - include: _prefix_operators__%%name%% 21 | - include: _unary_operators__%%name%% 22 | 23 | _primary__%%name%%: 24 | - match: '{{some_space}}' 25 | - match: '(?=%%exitMatch%%)' 26 | pop: true 27 | %%~override%% 28 | %%~overridePrimary%% 29 | - include: _primary_parts__%%name%% 30 | - include: reserved_word_reference 31 | - include: identifier_reference 32 | - include: otherwise_invalid 33 | 34 | _primary_or_block_statement__%%name%%: 35 | - match: '{{some_space}}' 36 | - match: '(?=%%exitMatch%%)' 37 | pop: true 38 | %%~override%% 39 | %%~overridePrimaryOrBlockStatement%% 40 | %%~overridePrimary%% 41 | - match: '(?=\{)' 42 | set: block_statement 43 | - include: _primary_parts__%%name%% 44 | - include: reserved_word_reference 45 | - include: identifier_reference 46 | - include: otherwise_invalid 47 | 48 | _new_keyword__%%name%%: 49 | - match: '{{b_before}}new{{b_after}}' 50 | scope: keyword.operator.js 51 | set: 52 | - match: '{{some_space}}' 53 | - match: '(?=%%exitMatch%%)' 54 | pop: true 55 | - match: '\.' 56 | scope: keyword.operator.js 57 | set: _new_target__%%name%% 58 | - include: _class_name_shallow__%%name%% 59 | 60 | _new_target__%%name%%: 61 | - match: '{{some_space}}' 62 | - match: '(?=%%exitMatch%%)' 63 | pop: true 64 | %%~overrideNewTarget%% 65 | - match: '{{b_before}}target{{b_after}}' 66 | scope: support.class.js 67 | pop: true 68 | - match: '{{b_before}}(?:t|ta|tar|targ|targe){{b_after}}' 69 | pop: true 70 | - match: '{{ident}}' 71 | scope: invalid.illegal.js 72 | pop: true 73 | - include: otherwise_invalid 74 | 75 | _class_name_shallow__%%name%%: 76 | - match: '{{some_space}}' 77 | - match: '(?=%%exitMatch%%)' 78 | pop: true 79 | - match: '\(' 80 | set: [_class_name_deep__%%name%%, expression_until_parenthesis] 81 | - match: '{{reserved_word}}' 82 | scope: invalid.illegal.js 83 | set: _class_name_deep__%%name%% 84 | - match: '{{ident}}' 85 | scope: support.class.js 86 | set: _class_name_deep__%%name%% 87 | - include: _primary__%%name%% 88 | 89 | _class_name_deep__%%name%%: 90 | - match: '{{some_space}}' 91 | - match: '(?=%%exitMatch%%)' 92 | pop: true 93 | - match: '\.' 94 | scope: support.class.js 95 | set: _class_name_deep_dot_reference__%%name%% 96 | - match: '\[' 97 | push: expression_until_square_bracket 98 | - match: '{{otherwise}}' 99 | pop: true 100 | 101 | _class_name_deep_dot_reference__%%name%%: 102 | - match: '{{some_space}}' 103 | - match: '(?=%%exitMatch%%)' 104 | pop: true 105 | %%~overrideClassDotReference%% 106 | - match: '{{ident}}' 107 | scope: support.class.js 108 | set: _class_name_deep__%%name%% 109 | - include: otherwise_invalid 110 | 111 | # Known bug: 112 | # A dot_reference or square_bracket_reference chained from this can have a 113 | # postfix operator after it, which should be illegal. 114 | _prefix_operators__%%name%%: 115 | - match: '(?>>?+=?+|<<=?+|&=|\^=|\|=' 298 | scope: keyword.operator.bitwise.js 299 | set: [_secondary__%%name%%, _primary__%%name%%] 300 | - match: '\*\*|-=|\+=|===?+|!==?+|<=|>=|&&|\|\||\*=?+|/=|%=' 301 | scope: keyword.operator.js 302 | set: [_secondary__%%name%%, _primary__%%name%%] 303 | - match: '%|\*|/|-|\+|=|<|>|{{b_before}}in{{b_after}}' 304 | scope: keyword.operator.js 305 | set: [_secondary__%%name%%, _primary__%%name%%] 306 | - match: '&|\^|~|\|' 307 | scope: keyword.operator.bitwise.js 308 | set: [_secondary__%%name%%, _primary__%%name%%] 309 | - match: ',' 310 | set: [_secondary__%%name%%, _primary__%%name%%] 311 | 312 | _dot_reference__%%name%%: 313 | - match: '\.' 314 | set: _dot_reference_contents__%%name%% 315 | 316 | _dot_reference_contents__%%name%%: 317 | - match: '{{some_space}}' 318 | - match: '%%exitMatch%%' 319 | pop: true 320 | %%~exitExtra%% 321 | %%~overrideDotReference%% 322 | - match: '{{b_before}}constructor{{b_after}}' 323 | scope: support.class.js 324 | set: [_secondary__%%name%%, _optional_postfix_operator] 325 | - match: '{{ident}}{{assignment_for_function}}' 326 | scope: entity.name.function.js 327 | set: [_secondary__%%name%%, _optional_postfix_operator] 328 | - match: '{{b_before}}(?:prototype|length|size|message|buffer|byteLength|byteOffset|EPSILON|MAX_SAFE_INTEGER|MIN_SAFE_INTEGER|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY|NaN|E|LN10|LOG10E|LOG2E|PI|SQRT1_2|SQRT2|BYTES_PER_ELEMENT){{b_after}}' 329 | scope: support.constant.js 330 | set: [_secondary__%%name%%, _optional_postfix_operator] 331 | - match: '{{b_before}}(?:create|ceil|cos|defineProperty|defineProperties|freeze|fromCharCode|fromCodePoint|chatAt|charCodeAt|codePointAt|concat|endsWith|includes|indexOf|lastIndexOf|localeCompare|match|normalize|repeat|replace|search|slice|splice|split|startsWith|trimStart|trimEnd|padStart|padEnd|repeat|substr|substring|toLocaleLowerCase|toLocaleUpperCase|toLowerCase|toUpperCase|trim|floor|getOwnPropertyDescriptor|getOwnPropertyDescriptors|getOwnPropertyNames|getOwnPropertySymbols|getPrototypeOf|is|isExtensible|isFrozen|isSealed|isArray|isView|keys|pow|parse|preventExtensions|seal|sin|sqrt|stringify|tan|acos|atan2|atan|asin|abs|exp|log|max|min|random|round|UTC|now|exec|test|toString|toSource|assign|hasOwnProperty|isPrototypeOf|propertyIsEnumerable|toLocaleString|valueOf|setPrototypeOf|values|entries|call|apply|bind|is|isInteger|isFinite|isNaN|isSafeInteger|parseFloat|parseInt|toExponential|toFixed|toPrecision|trunc|tanh|sinh|cosh|sign|log2|log10|log1p|imul|hypot|fround|expml|clz32|cbrt|atanh|asinh|acosh|getDate|getDay|getFullYear|getHours|getMilliseconds|getMinutes|getMonth|getSeconds|getTime|getTimezoneOffset|getUTCDate|getUTCDay|getUTCFullYear|getUTCHours|getUTCMilliseconds|getUTCMinutes|getUTCMonth|getUTCSeconds|setDate|setFullYear|setHours|setMilliseconds|setMinutes|setMonth|setSeconds|setTime|setUTCDate|setUTCFullYear|setUTCHours|setUTCMilliseconds|setUTCMinutes|setUTCMonth|setUTCSeconds|toDateString|toISOString|toJSON|toLocaleDateString|toLocaleTimeString|toTimeString|toUTCString|for|keyFor|from|copyWithin|every|fill|filter|find|findIndex|forEach|join|map|pop|push|shift|unshift|reduce|reduceRight|reverse|some|sort|set|subarray|clear|delete|get|has|add|construct|deleteProperty|getCanonicalLocales|next|return|throw|all|race|then|catch|finally|resolve|reject|getFloat32|setFloat32|getFloat64|setFloat64|getInt16|setInt16|getInt32|setInt32|getInt64|setInt64|getInt8|setInt8|getUint16|setUint16|getUint32|setUint32|getUint64|setUint64|getUint8|setUint8|assert|count|dir|dirxml|group|groupCollapsed|groupEnd|info|log|profile|profileEnd|table|time|timeEnd|trace|warn)(?={{to_token}}\()' 332 | scope: support.function.js 333 | set: [_secondary__%%name%%, _optional_postfix_operator] 334 | #####{include} library_dot_reference_contents##### 335 | - match: '{{ident}}' 336 | set: [_secondary__%%name%%, _optional_postfix_operator] 337 | - include: otherwise_invalid 338 | 339 | _square_bracket_reference__%%name%%: 340 | - match: '\[' 341 | set: [_secondary__%%name%%, _optional_postfix_operator, expression_until_square_bracket] 342 | 343 | _function_invocation__%%name%%: 344 | - match: '\(' 345 | set: [_secondary__%%name%%, expression_until_parenthesis_with_spread_anywhere] 346 | 347 | _template_literal__%%name%%: 348 | - match: '(?=`)' 349 | set: [_secondary__%%name%%, template_literal] 350 | 351 | _conditional_expression__%%name%%: # TODO: make this less aggressive 352 | - match: '\?' 353 | set: [_secondary__%%name%%, _primary__%%name%%, expression_until_colon] 354 | -------------------------------------------------------------------------------- /mixins/known_idents.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '{{b_before}}(?:Object|Function|Boolean|String|Number|BigInt|Symbol|Error|EvalError|RangeError|ReferenceError|SyntaxError|TypeError|URIError|Date|RegExp|Array|Uint8Array|Uint8ClampedArray|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array|Float64Array|BigInt64Array|BigUint64Array|Map|Set|WeakMap|WeakSet|ArrayBuffer|DataView|Promise|Proxy){{b_after}}' 3 | scope: support.class.js 4 | %%exitType%%: %%exitValue%% 5 | - match: '{{b_before}}(?:eval|import|isFinite|isNaN|parseFloat|parseInt|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|setTimeout|setInterval|clearTimeout|clearInterval|setImmediate|clearImmediate){{b_after}}' 6 | scope: support.function.js 7 | %%exitType%%: %%exitValue%% 8 | - match: '{{b_before}}(?:console|global|Math|JSON|Reflect|Intl|EPSILON|MAX_SAFE_INTEGER|MIN_SAFE_INTEGER|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY|E|LN10|LOG10E|LOG2E|PI|SQRT1_2|SQRT2|BYTES_PER_ELEMENT){{b_after}}' 9 | scope: support.constant.js 10 | %%exitType%%: %%exitValue%% 11 | %%~overrideWithAssignment%% 12 | - match: '{{b_before}}(?:unescape|escape){{b_after}}' 13 | scope: support.function.js 14 | %%exitType%%: %%exitValue%% 15 | #####{include} library_identifier_reference##### 16 | - match: '({{ident}}){{to_token}}\.{{to_token}}(prototype){{b_after}}' 17 | captures: 18 | 1: support.class.js 19 | 2: support.constant.js 20 | %%exitType%%: %%exitValue%% 21 | - match: '{{ident}}' 22 | %%exitType%%: %%exitValue%% 23 | -------------------------------------------------------------------------------- /mixins/method_definition.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '{{otherwise}}' 3 | set: [_continue__%%name%%, _main__%%name%%] 4 | 5 | _parts__%%name%%: 6 | %%~overrideBefore%% 7 | - match: '%%exitMatch%%' 8 | pop: true 9 | - match: '\*' 10 | scope: keyword.operator.js 11 | set: [_finish_method__%%name%%, _need_property_name_for_method__%%name%%] 12 | - match: '{{b_before}}async{{b_after}}(?={{to_token}}(?!\(|%%exitMatch%%|{{line_terminator}}))' 13 | scope: storage.modifier.js 14 | set: [_finish_method__%%name%%, _need_property_name_for_method__%%name%%] 15 | - match: '{{b_before}}get{{b_after}}(?={{to_token}}(?!\(|%%exitMatch%%|{{line_terminator}}))' # this doesn't extend through new lines 16 | scope: storage.type.js 17 | set: [_finish_getter__%%name%%, _need_property_name_for_method__%%name%%] 18 | - match: '{{b_before}}set{{b_after}}(?={{to_token}}(?!\(|%%exitMatch%%|{{line_terminator}}))' # this doesn't extend through new lines 19 | scope: storage.type.js 20 | set: [_finish_setter__%%name%%, _need_property_name_for_method__%%name%%] 21 | - include: property_name_requires_parenthesis_for_method 22 | %%~overrideAfter%% 23 | - include: otherwise_invalid 24 | 25 | _main__%%name%%: 26 | - match: '{{non_token}}' 27 | %%~overrideNonRecurring%% 28 | - include: _parts__%%name%% 29 | 30 | _continue__%%name%%: 31 | %%exit%% 32 | - match: '{{otherwise}}' 33 | push: _finish_method__%%name%% 34 | 35 | _need_property_name_for_method__%%name%%: 36 | - match: '{{non_token}}' 37 | - match: '(?=%%exitMatch%%)' 38 | pop: true 39 | - include: property_name_for_method 40 | - include: otherwise_invalid 41 | 42 | _finish_method__%%name%%: 43 | - match: '{{non_token}}' 44 | - match: '%%exitMatch%%' 45 | pop: true 46 | - match: '\(' 47 | set: [_exit_method__%%name%%, _finish_method_block__%%name%%, parameter_binding_list] 48 | - include: otherwise_invalid 49 | 50 | _finish_getter__%%name%%: 51 | - match: '{{non_token}}' 52 | - match: '%%exitMatch%%' 53 | pop: true 54 | - match: '\(' 55 | set: [_exit_method__%%name%%, _finish_method_block__%%name%%, need_closing_parenthesis] 56 | - include: otherwise_invalid 57 | 58 | _finish_setter__%%name%%: 59 | - match: '{{non_token}}' 60 | - match: '%%exitMatch%%' 61 | pop: true 62 | - match: '\(' 63 | set: [_exit_method__%%name%%, _finish_method_block__%%name%%, parameter_binding_until_parenthesis_with_initializer] 64 | - include: otherwise_invalid 65 | 66 | _finish_method_block__%%name%%: 67 | - match: '{{non_token}}' 68 | - match: '(?=%%exitMatch%%)' 69 | pop: true 70 | - include: block_statement 71 | - include: otherwise_invalid 72 | 73 | _exit_method__%%name%%: 74 | %%~altExit%% 75 | - match: '{{non_token}}' 76 | - match: '%%exitMatch%%' 77 | pop: true 78 | - include: otherwise_invalid 79 | -------------------------------------------------------------------------------- /mixins/object_destructuring.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '\{' 3 | # scope: storage.modifier.js # optional 4 | set: [_object_destructuring_continue__%%name%%, _object_destructuring_value__%%name%%, _object_destructuring_pattern__%%name%%] 5 | 6 | _destructuring_spread__%%name%%: 7 | mixin: destructuring_spread 8 | exitMatch: '\}' 9 | # exitExtra: 'scope: storage.modifier.js' # optional 10 | initializer: expression_until_curly_bracket_ahead_no_comma 11 | identExtra: '%%~identExtra%%' 12 | destructuring: '%%destructuring%%' 13 | 14 | _parameter_binding__%%name%%: 15 | mixin: parameter_binding 16 | exitMatch: '\}' 17 | # exitExtra: 'scope: storage.modifier.js' # optional 18 | destructuring: '%%destructuring%%' 19 | overrideAfter: 20 | - match: '=' 21 | scope: keyword.operator.js 22 | set: expression_until_comma_or_curly_bracket 23 | - match: ',' 24 | pop: true 25 | overrideBefore: 26 | - match: '(?=,)' 27 | pop: true 28 | identExtra: '%%~identExtra%%' 29 | 30 | _object_destructuring_pattern__%%name%%: 31 | - match: '\}' 32 | # scope: storage.modifier.js # optional 33 | pop: true 34 | - include: _destructuring_spread__%%name%% 35 | - include: property_name_requires_colon 36 | - match: '{{reserved_word}}' 37 | scope: invalid.illegal.js 38 | set: _after___parameter_binding__%%name%% 39 | - match: '{{ident}}' 40 | %%~identExtra%% 41 | set: _after___parameter_binding__%%name%% 42 | - include: otherwise_invalid 43 | 44 | _object_destructuring_value__%%name%%: 45 | - match: '(?<=[,}])' 46 | pop: true 47 | - match: '{{otherwise}}' 48 | set: 49 | - match: '[,}]' 50 | scope: invalid.illegal.js 51 | pop: true 52 | - match: ':' 53 | set: _parameter_binding__%%name%% 54 | - include: otherwise_invalid 55 | 56 | _object_destructuring_continue__%%name%%: 57 | - match: '(?<=,)' 58 | push: [_object_destructuring_value__%%name%%, _object_destructuring_pattern__%%name%%] 59 | - match: '(?<=\})' 60 | pop: true 61 | -------------------------------------------------------------------------------- /mixins/open_ended_expression.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | mixin: expression 3 | exitMatch: '%%exitMatch%%' 4 | overridePrimary: 5 | - match: '{{line_terminator}}' 6 | set: 7 | - match: '^(?={{to_token}}{{statement_keyword}})' 8 | pop: true 9 | - include: _primary__%%name%% 10 | %%~alternativelyLookahead%% 11 | overridePrimaryOrBlockStatement: 12 | - match: '{{line_terminator}}' 13 | set: 14 | - match: '^(?={{to_token}}{{statement_keyword}})' 15 | pop: true 16 | - include: _primary_or_block_statement__%%name%% 17 | %%~alternativelyLookahead%% 18 | catchSecondary: 19 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 20 | pop: true 21 | overrideSecondary: 22 | - match: '{{line_terminator}}' 23 | set: 24 | - match: '{{non_token}}' 25 | - match: '%%exitMatch%%' 26 | pop: true 27 | %%~alternatively%% 28 | - include: _secondary_parts__%%name%% 29 | - match: '{{otherwise}}' 30 | pop: true 31 | %%~alternatively%% 32 | overrideDotReference: 33 | - match: '{{line_terminator}}' 34 | set: 35 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 36 | pop: true 37 | - include: _dot_reference_contents__%%name%% 38 | %%~alternatively%% 39 | overrideClassDotReference: 40 | - match: '{{line_terminator}}' 41 | set: 42 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 43 | pop: true 44 | - include: _class_name_deep_dot_reference__%%name%% 45 | %%~alternativelyLookahead%% 46 | overrideNewTarget: 47 | - match: '{{line_terminator}}' 48 | set: 49 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 50 | pop: true 51 | - include: _new_target__%%name%% 52 | %%~alternativelyLookahead%% 53 | overrideFunctionName: 54 | - match: '{{line_terminator}}' 55 | set: 56 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 57 | pop: true 58 | - include: _function_expression_name__%%name%% 59 | %%~alternativelyLookahead%% 60 | overrideFunctionParenthesis: 61 | - match: '{{line_terminator}}' 62 | set: 63 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 64 | pop: true 65 | - include: _function_expression_parenthesis__%%name%% 66 | %%~alternativelyLookahead%% 67 | overrideFunctionCurlyBracket: 68 | - match: '{{line_terminator}}' 69 | set: 70 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 71 | pop: true 72 | - include: _function_expression_curly_bracket__%%name%% 73 | %%~alternativelyLookahead%% 74 | overrideClassName: 75 | - match: '{{line_terminator}}' 76 | set: 77 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 78 | pop: true 79 | - include: _class_expression_name__%%name%% 80 | %%~alternativelyLookahead%% 81 | overrideClassCurlyBracketOrExtends: 82 | - match: '{{line_terminator}}' 83 | set: 84 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 85 | pop: true 86 | - include: _class_expression_curly_bracket_or_extends__%%name%% 87 | %%~alternativelyLookahead%% 88 | overrideClassCurlyBracket: 89 | - match: '{{line_terminator}}' 90 | set: 91 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 92 | pop: true 93 | - include: _class_expression_curly_bracket__%%name%% 94 | %%~alternativelyLookahead%% 95 | overrideClassInheritance: 96 | - match: '{{line_terminator}}' 97 | set: 98 | - match: '^(?={{to_token}}{{statement_keyword_all}})' 99 | pop: true 100 | - include: _class_expression_inheritance__%%name%% 101 | %%~alternativelyLookahead%% 102 | -------------------------------------------------------------------------------- /mixins/parameter_binding.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '{{otherwise}}' 3 | set: [_after__%%name%%, __%%name%%] 4 | 5 | __%%name%%: 6 | - match: '{{some_space}}' 7 | %%~overrideBefore%% 8 | - match: '(?=%%exitMatch%%)' 9 | pop: true 10 | - include: %%destructuring%% 11 | - match: '{{reserved_word}}' 12 | scope: invalid.illegal.js 13 | pop: true 14 | %%~overrideIdent%% 15 | - match: '{{ident}}' 16 | %%~identExtra%% 17 | pop: true 18 | - include: otherwise_invalid 19 | 20 | _after__%%name%%: 21 | %%~catchAfter%% 22 | - match: '{{some_space}}' 23 | %%~overrideAfter%% 24 | - match: '%%exitMatch%%' 25 | %%~exitExtra%% 26 | pop: true 27 | - include: otherwise_invalid 28 | -------------------------------------------------------------------------------- /mixins/property_name.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '{{ident}}(?={{to_token}}(?:%%~identTail%%))' # this doesn't extend through new lines 3 | scope: %%identScope%% 4 | pop: true 5 | - match: '\[' 6 | set: expression_until_square_bracket 7 | - include: numeric_literal 8 | - include: string_literal 9 | -------------------------------------------------------------------------------- /mixins/statement.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '{{non_token}}' 3 | %%~possibleExit%% 4 | %%~override%% 5 | - include: block_statement 6 | - include: _variable_statement__%%name%% 7 | - include: _function_declaration__%%name%% 8 | - include: _class_declaration__%%name%% 9 | - include: _if_statement__%%name%% 10 | - include: _with_or_while_statement__%%name%% 11 | - include: _do_statement__%%name%% 12 | - include: _for_statement__%%name%% 13 | - include: _switch_statement__%%name%% 14 | - include: _try_statement__%%name%% 15 | - include: _goto_statement__%%name%% 16 | - include: _termination_statement__%%name%% 17 | - include: _debugger_statement__%%name%% 18 | - include: _labelled_statement__%%name%% 19 | - match: ';' 20 | pop: true 21 | - match: '{{otherwise}}' 22 | set: _expression_until_end_of_statement__%%name%% 23 | 24 | _expression_until_end_of_statement__%%name%%: {mixin: open_ended_expression, exitMatch: '%%statementExit%%'} 25 | _expression_until_variable_binding__%%name%%: {mixin: open_ended_expression, exitMatch: '%%statementExit%%', alternatively: {match: ',', set: _variable_statement_want_binding__%%name%%}, alternativelyLookahead: {match: '(?=,)', pop: true}} 26 | _end_of_statement__%%name%%: 27 | - match: '{{statement_terminator}}' 28 | pop: true 29 | %%~possibleExit%% 30 | - include: otherwise_invalid 31 | 32 | _variable_statement__%%name%%: 33 | - match: '{{b_before}}(?:var|let|const){{b_after}}' 34 | scope: storage.type.js 35 | set: _variable_statement_want_binding__%%name%% 36 | 37 | _variable_statement_want_binding__%%name%%: 38 | mixin: want_token 39 | match: '(?=\{|\[|{{ident}})' 40 | overrideNewline: {match: '(?={{statement_keyword_all}}|{{ident}}{{to_token}}(?!%%statementExit%%)[^=,{{line_terminator_chars}}])', pop: true} 41 | exitMatch: '%%statementExit%%' 42 | goto: '[_variable_initializer__%%name%%, variable_binding]' 43 | 44 | _variable_initializer__%%name%%: 45 | - match: '(?<=[}\]])' 46 | set: 47 | - match: '{{line_terminator}}' 48 | set: _variable_initializer_likely_candidates__%%name%% 49 | - include: _variable_initializer_likely_candidates__%%name%% 50 | - include: otherwise_invalid 51 | - match: '{{otherwise}}' 52 | set: _variable_statement_want_continue__%%name%% 53 | 54 | _variable_initializer_likely_candidates__%%name%%: 55 | - match: '=' 56 | scope: keyword.operator.js 57 | set: _expression_until_variable_binding__%%name%% 58 | - match: ';' 59 | scope: invalid.illegal.js 60 | pop: true 61 | - match: ',' 62 | scope: invalid.illegal.js 63 | set: _variable_statement_want_binding__%%name%% 64 | 65 | _variable_statement_want_continue__%%name%%: 66 | mixin: want_token 67 | match: '(?=[;=,])' 68 | exitMatch: '%%statementExit%%' 69 | goto: '_variable_statement_continue__%%name%%' 70 | 71 | _variable_statement_continue__%%name%%: 72 | - match: ';' 73 | pop: true 74 | - match: '=' 75 | scope: keyword.operator.js 76 | set: _expression_until_variable_binding__%%name%% 77 | - match: ',' 78 | set: _variable_statement_want_binding__%%name%% 79 | 80 | _function_declaration__%%name%%: 81 | - match: '{{b_before}}(?:(async){{some_space}})?+(function)(?:(\*)|{{b_after}})' 82 | captures: {1: storage.modifier.js, 2: storage.type.js, 3: keyword.operator.js} 83 | set: _function_declaration_want_name__%%name%% 84 | 85 | _function_declaration_want_name__%%name%%: 86 | mixin: want_token 87 | match: '(?={{ident}})' 88 | overrideNewline: {match: '(?={{statement_keyword_all}}|{{ident}}{{to_token}}(?!%%statementExit%%)[^({{line_terminator_chars}}])', pop: true} 89 | exitMatch: '%%statementExit%%' 90 | goto: '[_function_declaration_want_parenthesis__%%name%%, _declaration_name__%%name%%]' 91 | 92 | _declaration_name__%%name%%: 93 | - match: '{{reserved_word}}' 94 | scope: invalid.illegal.js 95 | pop: true 96 | - match: '{{ident}}' 97 | scope: entity.name.function.js 98 | pop: true 99 | 100 | _function_declaration_want_parenthesis__%%name%%: 101 | mixin: want_token 102 | match: '\(' 103 | exitMatch: '%%statementExit%%' 104 | goto: '[_function_declaration_want_curly_bracket__%%name%%, parameter_binding_list]' 105 | 106 | _function_declaration_want_curly_bracket__%%name%%: 107 | mixin: want_token 108 | match: '(?=\{)' 109 | exitMatch: '%%statementExit%%' 110 | goto: 'block_statement' 111 | 112 | _class_declaration__%%name%%: 113 | - match: '{{b_before}}class{{b_after}}' 114 | scope: storage.type.js 115 | set: _class_declaration_want_name__%%name%% 116 | 117 | _class_declaration_want_name__%%name%%: 118 | mixin: want_token 119 | match: '(?={{ident}})' 120 | overrideNewline: {match: '(?={{statement_keyword_all}}|{{ident}}{{to_token}}(?!%%statementExit%%)[^{e{{line_terminator_chars}}])', pop: true} 121 | exitMatch: '%%statementExit%%' 122 | goto: '[_class_declaration_want_curly_bracket_or_extends__%%name%%, _declaration_name__%%name%%]' 123 | 124 | _class_declaration_want_curly_bracket_or_extends__%%name%%: 125 | mixin: want_token 126 | match: '(?=\{|{{b_before}}extends{{b_after}})' 127 | overrideFirstLine: {match: '{{b_before}}(?:extend|exten|exte|ext|ex|e){{to_token}}{{b_after}}'} 128 | exitMatch: '%%statementExit%%' 129 | goto: '_class_declaration_curly_bracket_or_extends__%%name%%' 130 | 131 | _class_declaration_curly_bracket_or_extends__%%name%%: 132 | - match: '\{' 133 | set: _class_block 134 | - match: '{{b_before}}extends{{b_after}}' 135 | scope: storage.modifier.js 136 | set: _class_declaration_want_inheritance__%%name%% 137 | 138 | _class_declaration_want_inheritance__%%name%%: 139 | mixin: want_token 140 | match: '(?={{ident}})' 141 | overrideNewline: {match: '(?={{statement_keyword_all}}|{{ident}}{{to_token}}(?!%%statementExit%%)[^{{{line_terminator_chars}}])', pop: true} 142 | override: {match: '\{', scope: invalid.illegal.js, set: _class_block} 143 | exitMatch: '%%statementExit%%' 144 | goto: '[_class_declaration_want_curly_bracket__%%name%%, _declaration_name__%%name%%]' 145 | 146 | _class_declaration_want_curly_bracket__%%name%%: 147 | mixin: want_token 148 | match: '\{' 149 | exitMatch: '%%statementExit%%' 150 | goto: '_class_block' 151 | 152 | _if_statement__%%name%%: 153 | - match: '{{b_before}}if{{b_after}}' 154 | scope: keyword.control.js 155 | set: _if_statement_want_parenthesis__%%name%% 156 | 157 | _if_statement_want_parenthesis__%%name%%: 158 | mixin: want_token 159 | match: '\(' 160 | exitMatch: '%%statementExit%%' 161 | goto: '[_if_statement_possible_exit__%%name%%, expression_until_parenthesis]' 162 | 163 | _if_statement_possible_exit__%%name%%: 164 | - match: '{{non_token}}' 165 | %%~possibleExit%% 166 | - match: '{{otherwise}}' 167 | set: [_optional_else_statement__%%name%%, %%self%%] 168 | 169 | _optional_else_statement__%%name%%: 170 | - match: '{{non_token}}' 171 | - match: '{{b_before}}else{{b_after}}' 172 | scope: keyword.control.js 173 | set: %%self%% 174 | - match: '{{otherwise}}' 175 | pop: true 176 | 177 | _with_or_while_statement__%%name%%: 178 | - match: '{{b_before}}(?:while|with){{b_after}}' 179 | scope: keyword.control.js 180 | set: _with_or_while_statement_want_parenthesis__%%name%% 181 | 182 | _with_or_while_statement_want_parenthesis__%%name%%: 183 | mixin: want_token 184 | match: '\(' 185 | exitMatch: '%%statementExit%%' 186 | goto: '[%%self%%, expression_until_parenthesis]' 187 | 188 | _do_statement__%%name%%: 189 | - match: '{{b_before}}do{{b_after}}' 190 | scope: keyword.control.js 191 | set: _do_statement_possible_exit__%%name%% 192 | 193 | _do_statement_possible_exit__%%name%%: 194 | - match: '{{non_token}}' 195 | %%~possibleExit%% 196 | - match: '{{otherwise}}' 197 | set: [_do_while, %%self%%] 198 | 199 | _do_while: 200 | - match: '{{b_before}}while{{b_after}}' 201 | scope: keyword.control.js 202 | set: _do_while_want_parenthesis 203 | 204 | _do_while_want_parenthesis: 205 | mixin: want_token 206 | match: '\(' 207 | exitMatch: '%%statementExit%%' 208 | goto: 'expression_until_parenthesis' 209 | 210 | _for_statement__%%name%%: 211 | - match: '{{b_before}}for{{b_after}}' 212 | scope: keyword.control.js 213 | set: _for_statement_want_parenthesis__%%name%% 214 | 215 | _for_statement_want_parenthesis__%%name%%: 216 | mixin: want_token 217 | match: '\(' 218 | exitMatch: '%%statementExit%%' 219 | goto: '_for_statement_first_section__%%name%%' 220 | 221 | _for_statement_first_section__%%name%%: 222 | - match: '{{non_token}}' 223 | - match: '\)' 224 | set: %%self%% 225 | - match: '{{b_before}}(?:var|let|const){{b_after}}' 226 | scope: storage.type.js 227 | set: [_for_statement_interpret_binding__%%name%%, variable_binding_for_for_statement] 228 | - match: ';' 229 | set: [%%self%%, expression_until_parenthesis, expression_until_for_statement_third_section] 230 | - match: '{{otherwise}}' 231 | set: [_for_statement_interpret_expression__%%name%%, _for_statement_first_expression] 232 | 233 | _for_statement_interpret_expression__%%name%%: 234 | - match: '\)' 235 | set: %%self%% 236 | - match: ';' 237 | set: [%%self%%, expression_until_parenthesis, expression_until_for_statement_third_section] 238 | - match: '{{b_before}}(?:of|in){{b_after}}' 239 | scope: keyword.operator.js 240 | set: [%%self%%, expression_until_parenthesis] 241 | 242 | _for_statement_interpret_binding__%%name%%: 243 | - match: '\)' 244 | set: %%self%% 245 | - match: '=' 246 | scope: keyword.operator.js 247 | set: [_for_statement_variable_binding_continuation__%%name%%, expression_until_for_binding] 248 | - match: ',' 249 | set: [_for_statement_variable_binding_continuation__%%name%%, variable_binding_for_for_statement] 250 | - match: ';' 251 | set: [%%self%%, expression_until_parenthesis, expression_until_for_statement_third_section] 252 | - match: '{{b_before}}(?:of|in){{b_after}}' 253 | scope: keyword.operator.js 254 | set: [%%self%%, expression_until_parenthesis] 255 | - include: otherwise_invalid 256 | 257 | _for_statement_variable_binding_continuation__%%name%%: 258 | - match: '\)' 259 | set: %%self%% 260 | - match: '=' 261 | scope: keyword.operator.js 262 | push: expression_until_for_binding 263 | - match: ',' 264 | push: variable_binding_for_for_statement 265 | - match: ';' 266 | set: [%%self%%, expression_until_parenthesis, expression_until_for_statement_third_section] 267 | - include: otherwise_invalid 268 | 269 | _switch_statement__%%name%%: 270 | - match: '{{b_before}}switch{{b_after}}' 271 | scope: keyword.control.js 272 | set: _switch_statement_want_parenthesis__%%name%% 273 | 274 | _switch_statement_want_parenthesis__%%name%%: 275 | mixin: want_token 276 | match: '\(' 277 | exitMatch: '%%statementExit%%' 278 | goto: '[_switch_statement_want_curly_bracket__%%name%%, expression_until_parenthesis]' 279 | 280 | _switch_statement_want_curly_bracket__%%name%%: 281 | mixin: want_token 282 | match: '\{' 283 | exitMatch: '%%statementExit%%' 284 | goto: '_switch_statement_block' 285 | 286 | _try_statement__%%name%%: 287 | - match: '{{b_before}}try{{b_after}}' 288 | scope: keyword.control.js 289 | set: _try_statement_want_curly_bracket__%%name%% 290 | 291 | _try_statement_want_curly_bracket__%%name%%: 292 | mixin: want_token 293 | match: '(?=\{)' 294 | exitMatch: '%%statementExit%%' 295 | goto: '[_catch_or_finally_statement__%%name%%, block_statement]' 296 | 297 | _catch_or_finally_statement__%%name%%: 298 | - include: _finally_statement__%%name%% 299 | - match: '{{b_before}}catch{{b_after}}' 300 | scope: keyword.control.js 301 | set: _catch_statement_want_parenthesis__%%name%% 302 | 303 | _catch_statement_want_parenthesis__%%name%%: 304 | mixin: want_token 305 | match: '\(' 306 | exitMatch: '%%statementExit%%' 307 | goto: '[_catch_statement_want_curly_bracket__%%name%%, parameter_binding_until_parenthesis]' 308 | 309 | _catch_statement_want_curly_bracket__%%name%%: 310 | mixin: want_token 311 | match: '(?=\{)' 312 | exitMatch: '%%statementExit%%' 313 | goto: '[_optional_finally_statement__%%name%%, block_statement]' 314 | 315 | _optional_finally_statement__%%name%%: 316 | - match: '{{non_token}}' 317 | - include: _finally_statement__%%name%% 318 | - match: '{{otherwise}}' 319 | pop: true 320 | 321 | _finally_statement__%%name%%: 322 | - match: '{{b_before}}finally{{b_after}}' 323 | scope: keyword.control.js 324 | set: _finally_statement_want_curly_bracket__%%name%% 325 | 326 | _finally_statement_want_curly_bracket__%%name%%: 327 | mixin: want_token 328 | match: '(?=\{)' 329 | exitMatch: '%%statementExit%%' 330 | goto: 'block_statement' 331 | 332 | _goto_statement__%%name%%: 333 | - match: '{{b_before}}(?:break|continue){{b_after}}' 334 | scope: keyword.control.js 335 | set: 336 | - match: '{{reserved_word}}' 337 | scope: invalid.illegal.js 338 | set: _end_of_statement__%%name%% 339 | - match: '{{ident}}' 340 | scope: entity.name.section.js 341 | set: _end_of_statement__%%name%% 342 | - include: _end_of_statement__%%name%% 343 | 344 | _termination_statement__%%name%%: 345 | - match: '{{b_before}}(?:return|throw){{b_after}}' 346 | scope: keyword.control.js 347 | set: 348 | - match: '{{to_token}}{{statement_terminator}}' 349 | pop: true 350 | - match: '{{otherwise}}' 351 | set: _expression_until_end_of_statement__%%name%% 352 | 353 | _debugger_statement__%%name%%: 354 | - match: '{{b_before}}debugger{{b_after}}' 355 | scope: keyword.control.js 356 | set: _end_of_statement__%%name%% 357 | 358 | _labelled_statement__%%name%%: # this doesn't extend through new lines 359 | - match: '({{reserved_word}}){{to_token}}:' 360 | captures: 361 | 1: invalid.illegal.js 362 | set: %%self%% 363 | - match: '({{ident}}){{to_token}}:' 364 | captures: 365 | 1: entity.name.section.js 366 | set: %%self%% 367 | -------------------------------------------------------------------------------- /mixins/want_token.yaml: -------------------------------------------------------------------------------- 1 | %%name%%: 2 | - match: '{{some_space}}' 3 | - match: '{{line_terminator}}' 4 | set: 5 | - match: '{{non_token}}' 6 | %%~overrideNewline%% 7 | %%~override%% 8 | - match: '%%match%%' 9 | set: %%goto%% 10 | %%~matchExtra%% 11 | - match: '{{otherwise}}' 12 | pop: true 13 | %%~overrideFirstLine%% 14 | %%~override%% 15 | - match: '%%match%%' 16 | set: %%goto%% 17 | %%~matchExtra%% 18 | - match: '%%exitMatch%%' 19 | pop: true 20 | - include: otherwise_invalid 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javascript-ultimate", 3 | "description": "A superior JavaScript syntax for Sublime Text.", 4 | "scripts": { 5 | "test": "echo \"Error: no test specified\" && exit 1", 6 | "build": "node build.js" 7 | }, 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/JoshuaWise/javascript-ultimate.git" 11 | }, 12 | "keywords": [ 13 | "javascript", 14 | "syntax", 15 | "sublime", 16 | "es5", 17 | "es6" 18 | ], 19 | "author": "Joshua Wise ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/JoshuaWise/javascript-ultimate/issues" 23 | }, 24 | "homepage": "https://github.com/JoshuaWise/javascript-ultimate#readme", 25 | "dependencies": { 26 | "glob": "^7.1.1", 27 | "js-yaml": "^3.7.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /preferences/Comments.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Comments 7 | scope 8 | source.js, source.json 9 | settings 10 | 11 | shellVariables 12 | 13 | 14 | name 15 | TM_COMMENT_START 16 | value 17 | // 18 | 19 | 20 | name 21 | TM_COMMENT_START_2 22 | value 23 | /* 24 | 25 | 26 | name 27 | TM_COMMENT_END_2 28 | value 29 | */ 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /preferences/Completion Rules.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | scope 6 | source.js 7 | settings 8 | 9 | cancelCompletion 10 | ^[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+\{?+[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+(?:import|export([\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]++default)?+|var|let|const|if|with|while|do|for|switch|try|catch|finally|break|continue|case|return|throw|debugger|function|class|true|false|null|undefined|Infinity|NaN|this|arguments|super|new|yield|typeof|void|delete|await|static)$ 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /preferences/JavaScript Indent.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | JavaScript Indent 7 | scope 8 | source.js 9 | settings 10 | 11 | decreaseIndentPattern 12 | ^(.*\*/)?[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*\}.*$ 13 | increaseIndentPattern 14 | ^.*\{[^}"']*$|^[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+case(?![\p{L}\p{Nl}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{2118}\x{212E}\x{309B}\x{309C}\x{1369}\x{00B7}\x{0387}\x{19DA}\x{200C}\x{200D}_$\\])[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+[^\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}:]++[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+:$|^[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+default[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+:$|^[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+[}{]?+[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+(?:(?:else[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]++if|if|with|for)[\x{0020}\x{0009}\x{000B}\x{000C}\x{00A0}\x{FEFF}\p{Zs}]*+\(.*|else|do)$ 15 | 16 | 17 | -------------------------------------------------------------------------------- /preferences/Symbol List Banned.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Symbol List Banned 7 | scope 8 | source.js entity.name.property 9 | settings 10 | 11 | showInSymbolList 12 | 0 13 | showInIndexedSymbolList 14 | 1 15 | 16 | 17 | -------------------------------------------------------------------------------- /preferences/Symbol List Class.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Symbol List Class 7 | scope 8 | source.js entity.name.type.class 9 | settings 10 | 11 | showInSymbolList 12 | 1 13 | symbolTransformation 14 | 15 | s/^/• /g; 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /preferences/Symbol List Function.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Symbol List Function 7 | scope 8 | source.js entity.name.function 9 | settings 10 | 11 | showInSymbolList 12 | 1 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /preferences/Symbol List Label.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Symbol List Label 7 | scope 8 | source.js entity.name.section 9 | settings 10 | 11 | showInSymbolList 12 | 1 13 | symbolTransformation 14 | 15 | s/$/:/g; 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /snippets/Get-Elements.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | get 4 | source.js 5 | Get Elements 6 | 7 | -------------------------------------------------------------------------------- /snippets/Object-Method.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 5 | :f 6 | source.js 7 | Object Method 8 | 9 | -------------------------------------------------------------------------------- /snippets/Object-Value-JS.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | :, 4 | source.js 5 | Object Value JS 6 | 7 | -------------------------------------------------------------------------------- /snippets/Object-key-key-value.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | : 4 | source.js 5 | Object key — key: "value" 6 | 7 | -------------------------------------------------------------------------------- /snippets/Prototype-(proto).sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 6 | proto 7 | source.js 8 | Prototype 9 | 10 | -------------------------------------------------------------------------------- /snippets/for-()-{}-(faster).sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | = 0; ${20:i}--) { 3 | ${100:${1:Things}[${20:i}]}$0 4 | };]]> 5 | for 6 | source.js 7 | for (…) {…} (Improved Native For-Loop) 8 | 9 | -------------------------------------------------------------------------------- /snippets/for-()-{}.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 5 | for 6 | source.js 7 | for (…) {…} 8 | 9 | -------------------------------------------------------------------------------- /snippets/function-(fun).sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 5 | fun 6 | source.js 7 | Function 8 | 9 | -------------------------------------------------------------------------------- /snippets/function.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | f 4 | source.js 5 | Anonymous Function 6 | 7 | -------------------------------------------------------------------------------- /snippets/if-___-else.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | ife 4 | source.js 5 | if … else 6 | 7 | -------------------------------------------------------------------------------- /snippets/if.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | if 4 | source.js 5 | if 6 | 7 | -------------------------------------------------------------------------------- /snippets/setTimeout-function.sublime-snippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | timeout 4 | source.js 5 | setTimeout function 6 | 7 | -------------------------------------------------------------------------------- /themes/Indiana Jones.tmTheme: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 14 | author 15 | Joshua Wise and Dayle Rees 16 | name 17 | Indiana Jones 18 | settings 19 | 20 | 21 | settings 22 | 23 | background 24 | #110f0e 25 | caret 26 | #f8f8f0 27 | foreground 28 | #F8F8F2 29 | invisibles 30 | #3b3a32 31 | lineHighlight 32 | #302b27 33 | selection 34 | #3bc7b840 35 | selectionBorder 36 | #FFFFFF00 37 | activeGuide 38 | #9d550fb0 39 | 40 | findHighlight 41 | #e6c57f 42 | findHighlightForeground 43 | #000000 44 | 45 | bracketsForeground 46 | #2EBF7E 47 | bracketsOptions 48 | underline 49 | bracketContentsForeground 50 | #2EBF7EAA 51 | bracketContentsOptions 52 | underline 53 | 54 | tagsOptions 55 | stippled_underline 56 | 57 | 58 | 59 | name 60 | Comment 61 | scope 62 | comment 63 | settings 64 | 65 | fontStyle 66 | italic 67 | foreground 68 | #7A7267 69 | 70 | 71 | 72 | name 73 | JavaDoc 74 | scope 75 | comment keyword 76 | settings 77 | 78 | foreground 79 | #ab9d87 80 | 81 | 82 | 83 | name 84 | Constant 85 | scope 86 | constant, markup.deleted 87 | settings 88 | 89 | foreground 90 | #F23A3A 91 | 92 | 93 | 94 | name 95 | Entity 96 | scope 97 | entity 98 | settings 99 | 100 | fontStyle 101 | italic 102 | foreground 103 | #F8BB39 104 | 105 | 106 | 107 | name 108 | Entity - inherited-class 109 | scope 110 | entity.other.inherited-class 111 | settings 112 | 113 | fontStyle 114 | italic 115 | foreground 116 | #ffb870 117 | 118 | 119 | 120 | name 121 | Storage 122 | scope 123 | storage 124 | settings 125 | 126 | fontStyle 127 | 128 | foreground 129 | #2EBF7E 130 | 131 | 132 | 133 | name 134 | Bitwise 135 | scope 136 | keyword.operator.bitwise 137 | settings 138 | 139 | fontStyle 140 | bold 141 | foreground 142 | #435b93 143 | 144 | 145 | 146 | name 147 | Keyword 148 | scope 149 | keyword, markup.changed, keyword.other.important.css 150 | settings 151 | 152 | fontStyle 153 | 154 | foreground 155 | #ff9a47 156 | 157 | 158 | 159 | name 160 | Variable 161 | scope 162 | variable, entity.name.tag.css, entity.name.tag.scss, meta.tag entity.other.attribute-name, entity.other.attribute-name.mixin.stylus 163 | settings 164 | 165 | fontStyle 166 | 167 | foreground 168 | #4ea1df 169 | 170 | 171 | 172 | name 173 | Support 174 | scope 175 | support, entity.other.attribute-name.id.css, entity.other.attribute-name.class.css, entity.other.attribute-name.class.stylus, entity.other.attribute-name.id.sass, entity.other.attribute-name.class.sass 176 | settings 177 | 178 | fontStyle 179 | 180 | foreground 181 | #9c7ddb 182 | 183 | 184 | 185 | name 186 | Support - function 187 | scope 188 | support.function, entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-element.stylus, entity.other.attribute-name.pseudo-class.css, entity.other.attribute-name.pseudo-class.stylus, entity.other.attribute-name.pseudo-class.scss, source.sass entity.other.attribute-name.tag.pseudo-class, source.css keyword.control.at-rule, source.scss meta.at-rule 189 | settings 190 | 191 | fontStyle 192 | 193 | foreground 194 | #53d0c5 195 | 196 | 197 | 198 | name 199 | Support - constant 200 | scope 201 | support.constant 202 | settings 203 | 204 | fontStyle 205 | 206 | foreground 207 | #F23A3A 208 | 209 | 210 | 211 | name 212 | Invalid 213 | scope 214 | invalid 215 | settings 216 | 217 | background 218 | #00a8c6 219 | foreground 220 | #f8f8f0 221 | 222 | 223 | 224 | name 225 | String 226 | scope 227 | string 228 | settings 229 | 230 | fontStyle 231 | 232 | foreground 233 | #d40261 234 | 235 | 236 | 237 | name 238 | String constant 239 | scope 240 | string constant, keyword.other.unit.css, keyword.other.unit.stylus, keyword.other.unit.scss, constant.other.unit.sass, support.constant.property-value.css, support.constant.property-value.scss, constant.string.sass 241 | settings 242 | 243 | foreground 244 | #ff94c4 245 | 246 | 247 | 248 | name 249 | String line-continuation 250 | scope 251 | string constant.character.escape linecontinuation 252 | settings 253 | 254 | background 255 | #d4026160 256 | fontStyle 257 | italic bold 258 | foreground 259 | #ff94c4 260 | 261 | 262 | 263 | name 264 | String variable 265 | scope 266 | string variable 267 | settings 268 | 269 | foreground 270 | #cdaaf8 271 | 272 | 273 | 274 | name 275 | Use Strict 276 | scope 277 | string comment.directive 278 | settings 279 | 280 | fontStyle 281 | 282 | 283 | 284 | 285 | 286 | name 287 | Regexp 288 | scope 289 | string.regexp, support.type.property-name.css, support.type.property-name.stylus, support.type.property-name.scss, support.type.property-name.sass, source.css meta.at-rule support.type.property-name, source.stylus meta.at-rule support.type.property-name 290 | settings 291 | 292 | fontStyle 293 | 294 | foreground 295 | #da6425 296 | 297 | 298 | 299 | name 300 | Regexp characterclass 301 | scope 302 | string.regexp.characterclass 303 | settings 304 | 305 | background 306 | #FFA02025 307 | 308 | 309 | 310 | name 311 | Regexp character class bounds 312 | scope 313 | string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 314 | settings 315 | 316 | background 317 | #FFFFFF00 318 | 319 | 320 | 321 | name 322 | Regexp escape 323 | scope 324 | string.regexp constant.character.escape 325 | settings 326 | 327 | foreground 328 | #b33e00 329 | 330 | 331 | 332 | name 333 | Regexp operator 334 | scope 335 | string.regexp regexp-operator, string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 336 | settings 337 | 338 | foreground 339 | #F8BB39 340 | 341 | 342 | 343 | 344 | name 345 | Doctype/XML Processing 346 | scope 347 | meta.tag.sgml.doctype, meta.tag.sgml.doctype entity.name.tag, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string 348 | settings 349 | 350 | foreground 351 | #7A7267 352 | 353 | 354 | 355 | name 356 | diff header 357 | scope 358 | meta.diff, meta.separator.diff 359 | settings 360 | 361 | foreground 362 | #9c7ddb 363 | 364 | 365 | 366 | name 367 | find-in-files 368 | scope 369 | text.find-in-files 370 | settings 371 | 372 | foreground 373 | #deede1 374 | 375 | 376 | 377 | name 378 | diff.inserted and tags 379 | scope 380 | markup.inserted, entity.name.filename.find-in-files, entity.name.tag, source.sass keyword.control.untitled, source.less keyword.control.html.elements, punctuation.definition.tag 381 | settings 382 | 383 | fontStyle 384 | 385 | foreground 386 | #2EBF7E 387 | 388 | 389 | 390 | name 391 | find in files 392 | scope 393 | constant.numeric.line-number.find-in-files - match 394 | settings 395 | 396 | foreground 397 | #4ea1df60 398 | 399 | 400 | 401 | scope 402 | text.html.handlebars string constant.language.expression 403 | settings 404 | 405 | foreground 406 | #F23A3A 407 | 408 | 409 | 410 | scope 411 | 412 | text.html.handlebars meta.function.block 413 | settings 414 | 415 | foreground 416 | #F23A3A 417 | 418 | 419 | 428 | 429 | uuid 430 | bd964d80-8bf2-476c-903f-98620541681a 431 | 432 | 433 | -------------------------------------------------------------------------------- /themes/Monokai JU.tmTheme: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Monokai JU 7 | settings 8 | 9 | 10 | settings 11 | 12 | background 13 | #272822 14 | caret 15 | #F8F8F0 16 | foreground 17 | #F8F8F2 18 | invisibles 19 | #3B3A32 20 | lineHighlight 21 | #3E3D32 22 | selection 23 | #49483E 24 | findHighlight 25 | #FFE792 26 | findHighlightForeground 27 | #000000 28 | selectionBorder 29 | #222218 30 | activeGuide 31 | #9D550FB0 32 | 33 | bracketsForeground 34 | #F8F8F2A5 35 | bracketsOptions 36 | underline 37 | 38 | bracketContentsForeground 39 | #F8F8F2A5 40 | bracketContentsOptions 41 | underline 42 | 43 | tagsOptions 44 | stippled_underline 45 | 46 | 47 | 48 | name 49 | Comment 50 | scope 51 | comment 52 | settings 53 | 54 | foreground 55 | #75715E 56 | 57 | 58 | 59 | name 60 | String 61 | scope 62 | string 63 | settings 64 | 65 | foreground 66 | #E6DB74 67 | 68 | 69 | 70 | 71 | name 72 | ♦ String.regexp 73 | scope 74 | string.regexp 75 | settings 76 | 77 | fontStyle 78 | 79 | foreground 80 | #75D1A6 81 | 82 | 83 | 84 | 85 | name 86 | ♦ String.regexp characterclass 87 | scope 88 | string.regexp.characterclass 89 | settings 90 | 91 | background 92 | #FF602028 93 | 94 | 95 | 96 | 97 | name 98 | ♦ String.regexp character class bounds 99 | scope 100 | string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 101 | settings 102 | 103 | background 104 | #FFFFFF00 105 | 106 | 107 | 108 | 109 | name 110 | ♦ String.regexp escape 111 | scope 112 | string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition 113 | settings 114 | 115 | foreground 116 | #E9FFCC 117 | 118 | 119 | 120 | 121 | name 122 | ♦ String.regexp operator 123 | scope 124 | string.regexp regexp-operator, string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 125 | settings 126 | 127 | foreground 128 | #DA725D 129 | 130 | 131 | 132 | name 133 | Number 134 | scope 135 | constant.numeric 136 | settings 137 | 138 | foreground 139 | #AE81FF 140 | 141 | 142 | 143 | 144 | name 145 | Built-in constant 146 | scope 147 | constant.language 148 | settings 149 | 150 | foreground 151 | #AE81FF 152 | 153 | 154 | 155 | name 156 | User-defined constant 157 | scope 158 | constant.character, constant.other 159 | settings 160 | 161 | foreground 162 | #AE81FF 163 | 164 | 165 | 166 | name 167 | Variable 168 | scope 169 | variable 170 | settings 171 | 172 | fontStyle 173 | 174 | 175 | 176 | 177 | 178 | name 179 | Bitwise 180 | scope 181 | keyword.operator.bitwise 182 | settings 183 | 184 | fontStyle 185 | 186 | foreground 187 | #6483F2 188 | 189 | 190 | 191 | name 192 | Keyword 193 | scope 194 | keyword 195 | settings 196 | 197 | foreground 198 | #F92672 199 | 200 | 201 | 202 | name 203 | Storage 204 | scope 205 | storage 206 | settings 207 | 208 | fontStyle 209 | 210 | foreground 211 | #F92672 212 | 213 | 214 | 215 | name 216 | Storage type 217 | scope 218 | storage.type 219 | settings 220 | 221 | fontStyle 222 | italic 223 | foreground 224 | #66D9EF 225 | 226 | 227 | 228 | name 229 | Class name 230 | scope 231 | entity.name.class 232 | settings 233 | 234 | fontStyle 235 | underline 236 | foreground 237 | #A6E22E 238 | 239 | 240 | 241 | name 242 | Inherited class 243 | scope 244 | entity.other.inherited-class 245 | settings 246 | 247 | fontStyle 248 | italic underline 249 | foreground 250 | #A6E22E 251 | 252 | 253 | 254 | name 255 | Function name 256 | scope 257 | entity.name.function 258 | settings 259 | 260 | fontStyle 261 | 262 | foreground 263 | #A6E22E 264 | 265 | 266 | 267 | name 268 | Function argument 269 | scope 270 | variable.parameter 271 | settings 272 | 273 | fontStyle 274 | italic 275 | foreground 276 | #FD971F 277 | 278 | 279 | 280 | name 281 | Tag name 282 | scope 283 | entity.name.tag 284 | settings 285 | 286 | fontStyle 287 | 288 | foreground 289 | #F92672 290 | 291 | 292 | 293 | name 294 | Tag attribute 295 | scope 296 | entity.other.attribute-name 297 | settings 298 | 299 | fontStyle 300 | 301 | foreground 302 | #A6E22E 303 | 304 | 305 | 306 | name 307 | Library function 308 | scope 309 | support.function 310 | settings 311 | 312 | fontStyle 313 | 314 | foreground 315 | #66D9EF 316 | 317 | 318 | 319 | name 320 | Library constant 321 | scope 322 | support.constant 323 | settings 324 | 325 | fontStyle 326 | 327 | foreground 328 | #66D9EF 329 | 330 | 331 | 332 | name 333 | Library class/type 334 | scope 335 | support.type, support.class 336 | settings 337 | 338 | fontStyle 339 | italic 340 | foreground 341 | #66D9EF 342 | 343 | 344 | 345 | name 346 | Library variable 347 | scope 348 | support.other.variable 349 | settings 350 | 351 | fontStyle 352 | 353 | 354 | 355 | 356 | name 357 | Invalid 358 | scope 359 | invalid 360 | settings 361 | 362 | background 363 | #F92672 364 | fontStyle 365 | 366 | foreground 367 | #F8F8F0 368 | 369 | 370 | 371 | name 372 | Invalid deprecated 373 | scope 374 | invalid.deprecated 375 | settings 376 | 377 | background 378 | #AE81FF 379 | foreground 380 | #F8F8F0 381 | 382 | 383 | 384 | name 385 | JSON String 386 | scope 387 | meta.structure.dictionary.json string.quoted.double.json 388 | settings 389 | 390 | foreground 391 | #CFCFC2 392 | 393 | 394 | 395 | 396 | name 397 | diff.header 398 | scope 399 | meta.diff, meta.diff.header 400 | settings 401 | 402 | foreground 403 | #75715E 404 | 405 | 406 | 407 | name 408 | diff.deleted 409 | scope 410 | markup.deleted 411 | settings 412 | 413 | foreground 414 | #F92672 415 | 416 | 417 | 418 | name 419 | diff.inserted 420 | scope 421 | markup.inserted 422 | settings 423 | 424 | foreground 425 | #A6E22E 426 | 427 | 428 | 429 | name 430 | diff.changed 431 | scope 432 | markup.changed 433 | settings 434 | 435 | foreground 436 | #E6DB74 437 | 438 | 439 | 440 | 441 | scope 442 | constant.numeric.line-number.find-in-files - match 443 | settings 444 | 445 | foreground 446 | #AE81FFA0 447 | 448 | 449 | 450 | scope 451 | entity.name.filename.find-in-files 452 | settings 453 | 454 | foreground 455 | #E6DB74 456 | 457 | 458 | 459 | 460 | uuid 461 | ee43668d-b66c-4a6e-a046-b388ba66f423 462 | 463 | 464 | -------------------------------------------------------------------------------- /themes/Solarized JU (light).tmTheme: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Solarized JU (light) 7 | settings 8 | 9 | 10 | settings 11 | 12 | background 13 | #FDF6E3 14 | caret 15 | #000000 16 | foreground 17 | #586E75 18 | invisibles 19 | #EAE3C9 20 | lineHighlight 21 | #EEE8D5 22 | selection 23 | #073642 24 | 25 | 26 | 27 | name 28 | Comment 29 | scope 30 | comment 31 | settings 32 | 33 | fontStyle 34 | 35 | foreground 36 | #93A1A1 37 | 38 | 39 | 40 | name 41 | String 42 | scope 43 | string 44 | settings 45 | 46 | foreground 47 | #2AA198 48 | 49 | 50 | 51 | name 52 | StringNumber 53 | scope 54 | string 55 | settings 56 | 57 | foreground 58 | #586E75 59 | 60 | 61 | 62 | 63 | name 64 | ♦ String.regexp 65 | scope 66 | string.regexp 67 | settings 68 | 69 | fontStyle 70 | 71 | foreground 72 | #D30102 73 | 74 | 75 | 76 | 77 | name 78 | ♦ String.regexp characterclass 79 | scope 80 | string.regexp.characterclass 81 | settings 82 | 83 | background 84 | #4030FF20 85 | 86 | 87 | 88 | 89 | name 90 | ♦ String.regexp character class bounds 91 | scope 92 | string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 93 | settings 94 | 95 | background 96 | #FFFFFF00 97 | 98 | 99 | 100 | 101 | name 102 | ♦ String.regexp escape 103 | scope 104 | string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition 105 | settings 106 | 107 | foreground 108 | #6B0101 109 | 110 | 111 | 112 | 113 | name 114 | ♦ String.regexp operator 115 | scope 116 | string.regexp regexp-operator, string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 117 | settings 118 | 119 | foreground 120 | #5C37B3 121 | 122 | 123 | 124 | name 125 | Number 126 | scope 127 | constant.numeric 128 | settings 129 | 130 | foreground 131 | #D33682 132 | 133 | 134 | 135 | name 136 | Variable 137 | scope 138 | variable.language, variable.other 139 | settings 140 | 141 | foreground 142 | #268BD2 143 | 144 | 145 | 146 | 147 | name 148 | Bitwise 149 | scope 150 | keyword.operator.bitwise 151 | settings 152 | 153 | fontStyle 154 | 155 | foreground 156 | #9873B5 157 | 158 | 159 | 160 | name 161 | Keyword 162 | scope 163 | keyword 164 | settings 165 | 166 | foreground 167 | #859900 168 | 169 | 170 | 171 | name 172 | Storage 173 | scope 174 | storage 175 | settings 176 | 177 | fontStyle 178 | bold 179 | foreground 180 | #073642 181 | 182 | 183 | 184 | name 185 | Class name 186 | scope 187 | entity.name.class, entity.name.type.class 188 | settings 189 | 190 | foreground 191 | #268BD2 192 | 193 | 194 | 195 | name 196 | Function name 197 | scope 198 | entity.name.function 199 | settings 200 | 201 | foreground 202 | #268BD2 203 | 204 | 205 | 206 | name 207 | Variable start 208 | scope 209 | punctuation.definition.variable 210 | settings 211 | 212 | foreground 213 | #859900 214 | 215 | 216 | 217 | name 218 | Embedded code markers 219 | scope 220 | punctuation.section.embedded.begin, punctuation.section.embedded.end 221 | settings 222 | 223 | foreground 224 | #D30102 225 | 226 | 227 | 228 | name 229 | Built-in constant 230 | scope 231 | constant.language, meta.preprocessor 232 | settings 233 | 234 | foreground 235 | #B58900 236 | 237 | 238 | 239 | name 240 | Support.construct 241 | scope 242 | support.function.construct, keyword.other.new 243 | settings 244 | 245 | foreground 246 | #D30102 247 | 248 | 249 | 250 | name 251 | User-defined constant 252 | scope 253 | constant.character, constant.other 254 | settings 255 | 256 | foreground 257 | #CB4B16 258 | 259 | 260 | 261 | name 262 | Inherited class 263 | scope 264 | entity.other.inherited-class 265 | settings 266 | 267 | 268 | 269 | name 270 | Function argument 271 | scope 272 | variable.parameter 273 | settings 274 | 275 | 276 | 277 | name 278 | Tag name 279 | scope 280 | entity.name.tag 281 | settings 282 | 283 | fontStyle 284 | bold 285 | foreground 286 | #268BD2 287 | 288 | 289 | 290 | name 291 | Tag start/end 292 | scope 293 | punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end 294 | settings 295 | 296 | foreground 297 | #93A1A1 298 | 299 | 300 | 301 | name 302 | Tag attribute 303 | scope 304 | entity.other.attribute-name 305 | settings 306 | 307 | foreground 308 | #93A1A1 309 | 310 | 311 | 312 | name 313 | Library function 314 | scope 315 | support.function 316 | settings 317 | 318 | foreground 319 | #268BD2 320 | 321 | 322 | 323 | name 324 | Continuation 325 | scope 326 | punctuation.separator.continuation 327 | settings 328 | 329 | foreground 330 | #D30102 331 | 332 | 333 | 334 | name 335 | Library constant 336 | scope 337 | support.constant 338 | settings 339 | 340 | 341 | 342 | name 343 | Library class/type 344 | scope 345 | support.type, support.class 346 | settings 347 | 348 | foreground 349 | #859900 350 | 351 | 352 | 353 | name 354 | Library Exception 355 | scope 356 | support.type.exception 357 | settings 358 | 359 | foreground 360 | #CB4B16 361 | 362 | 363 | 364 | name 365 | Special 366 | scope 367 | keyword.other.special-method 368 | settings 369 | 370 | foreground 371 | #CB4B16 372 | 373 | 374 | 375 | name 376 | Library variable 377 | scope 378 | support.other.variable 379 | settings 380 | 381 | 382 | 383 | name 384 | Invalid 385 | scope 386 | invalid 387 | settings 388 | 389 | 390 | 391 | name 392 | Quoted String 393 | scope 394 | string.quoted.double, string.quoted.single 395 | settings 396 | 397 | foreground 398 | #269186 399 | 400 | 401 | 402 | name 403 | Quotes 404 | scope 405 | punctuation.definition.string.begin, punctuation.definition.string.end 406 | settings 407 | 408 | foreground 409 | #C60000 410 | 411 | 412 | 413 | name 414 | CSS: Property 415 | scope 416 | entity.name.tag.css, support.type.property-name.css, meta.property-name.css 417 | settings 418 | 419 | fontStyle 420 | 421 | foreground 422 | #A57800 423 | 424 | 425 | 426 | name 427 | CSS: @font-face 428 | scope 429 | source.css 430 | settings 431 | 432 | foreground 433 | #D01F1E 434 | 435 | 436 | 437 | name 438 | CSS: Selector 439 | scope 440 | meta.selector.css 441 | settings 442 | 443 | fontStyle 444 | 445 | foreground 446 | #536871 447 | 448 | 449 | 450 | name 451 | CSS: {} 452 | scope 453 | punctuation.section.property-list.css 454 | settings 455 | 456 | foreground 457 | #5A74CF 458 | 459 | 460 | 461 | name 462 | CSS: Numeric Value 463 | scope 464 | meta.property-value.css constant.numeric.css, keyword.other.unit.css,constant.other.color.rgb-value.css 465 | settings 466 | 467 | fontStyle 468 | 469 | foreground 470 | #269186 471 | 472 | 473 | 474 | name 475 | CSS: Value 476 | scope 477 | meta.property-value.css 478 | settings 479 | 480 | fontStyle 481 | 482 | foreground 483 | #269186 484 | 485 | 486 | 487 | name 488 | CSS: !Important 489 | scope 490 | keyword.other.important.css 491 | settings 492 | 493 | foreground 494 | #D01F1E 495 | 496 | 497 | 498 | name 499 | CSS: Standard Value 500 | scope 501 | support.constant.color 502 | settings 503 | 504 | foreground 505 | #269186 506 | 507 | 508 | 509 | name 510 | CSS: Tag 511 | scope 512 | entity.name.tag.css 513 | settings 514 | 515 | foreground 516 | #738A13 517 | 518 | 519 | 520 | name 521 | CSS: : , 522 | scope 523 | punctuation.separator.key-value.css, punctuation.terminator.rule.css 524 | settings 525 | 526 | fontStyle 527 | 528 | foreground 529 | #536871 530 | 531 | 532 | 533 | name 534 | CSS .class 535 | scope 536 | entity.other.attribute-name.class.css 537 | settings 538 | 539 | fontStyle 540 | 541 | foreground 542 | #268BD2 543 | 544 | 545 | 546 | name 547 | CSS :pseudo 548 | scope 549 | entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css 550 | settings 551 | 552 | fontStyle 553 | 554 | foreground 555 | #BD3800 556 | 557 | 558 | 559 | name 560 | CSS: #id 561 | scope 562 | entity.other.attribute-name.id.css 563 | settings 564 | 565 | fontStyle 566 | 567 | foreground 568 | #268BD2 569 | 570 | 571 | 572 | name 573 | JS: Function Name 574 | scope 575 | meta.function.js, entity.name.function.js, support.function.js 576 | settings 577 | 578 | foreground 579 | #A57800 580 | 581 | 582 | 583 | name 584 | JS: Source 585 | scope 586 | text.html.basic source.js.embedded.html 587 | settings 588 | 589 | fontStyle 590 | 591 | foreground 592 | #A57800 593 | 594 | 595 | 596 | name 597 | JS: Function 598 | scope 599 | storage.type.function.js 600 | settings 601 | 602 | foreground 603 | #268BD2 604 | 605 | 606 | 607 | name 608 | JS: Numeric Constant 609 | scope 610 | constant.numeric.js 611 | settings 612 | 613 | foreground 614 | #269186 615 | 616 | 617 | 618 | name 619 | JS: [] 620 | scope 621 | meta.brace.square.js 622 | settings 623 | 624 | foreground 625 | #268BD2 626 | 627 | 628 | 629 | name 630 | JS: Storage Type 631 | scope 632 | storage.type.js 633 | settings 634 | 635 | foreground 636 | #268BD2 637 | 638 | 639 | 640 | name 641 | () 642 | scope 643 | meta.brace.round, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js 644 | settings 645 | 646 | foreground 647 | #93A1A1 648 | 649 | 650 | 651 | name 652 | {} 653 | scope 654 | meta.brace.curly.js 655 | settings 656 | 657 | foreground 658 | #268BD2 659 | 660 | 661 | 662 | name 663 | HTML: Doctype 664 | scope 665 | entity.name.tag.doctype.html, meta.tag.sgml.html, string.quoted.double.doctype.identifiers-and-DTDs.html 666 | settings 667 | 668 | fontStyle 669 | italic 670 | foreground 671 | #899090 672 | 673 | 674 | 675 | name 676 | HTML: Comment Block 677 | scope 678 | comment.block.html 679 | settings 680 | 681 | fontStyle 682 | italic 683 | foreground 684 | #839496 685 | 686 | 687 | 688 | name 689 | HTML: Script 690 | scope 691 | entity.name.tag.script.html 692 | settings 693 | 694 | fontStyle 695 | italic 696 | 697 | 698 | 699 | name 700 | HTML: Style 701 | scope 702 | source.css.embedded.html string.quoted.double.html 703 | settings 704 | 705 | fontStyle 706 | 707 | foreground 708 | #269186 709 | 710 | 711 | 712 | name 713 | HTML: Text 714 | scope 715 | text.html.ruby 716 | settings 717 | 718 | fontStyle 719 | bold 720 | foreground 721 | #BD3800 722 | 723 | 724 | 725 | name 726 | HTML: = 727 | scope 728 | text.html.basic meta.tag.other.html, text.html.basic meta.tag.any.html, text.html.basic meta.tag.block.any, text.html.basic meta.tag.inline.any, text.html.basic meta.tag.structure.any.html, text.html.basic source.js.embedded.html, punctuation.separator.key-value.html 729 | settings 730 | 731 | fontStyle 732 | 733 | foreground 734 | #708284 735 | 736 | 737 | 738 | name 739 | HTML: something= 740 | scope 741 | text.html.basic entity.other.attribute-name.html 742 | settings 743 | 744 | foreground 745 | #708284 746 | 747 | 748 | 749 | name 750 | HTML: " 751 | scope 752 | text.html.basic meta.tag.structure.any.html punctuation.definition.string.begin.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html 753 | settings 754 | 755 | fontStyle 756 | 757 | foreground 758 | #269186 759 | 760 | 761 | 762 | name 763 | HTML: <tag> 764 | scope 765 | entity.name.tag.block.any.html 766 | settings 767 | 768 | fontStyle 769 | bold 770 | foreground 771 | #268BD2 772 | 773 | 774 | 775 | name 776 | HTML: style 777 | scope 778 | source.css.embedded.html entity.name.tag.style.html 779 | settings 780 | 781 | fontStyle 782 | italic 783 | 784 | 785 | 786 | name 787 | HTML: <style> 788 | scope 789 | entity.name.tag.style.html 790 | settings 791 | 792 | fontStyle 793 | 794 | 795 | 796 | 797 | name 798 | HTML: {} 799 | scope 800 | text.html.basic punctuation.section.property-list.css 801 | settings 802 | 803 | fontStyle 804 | 805 | 806 | 807 | 808 | name 809 | HTML: Embeddable 810 | scope 811 | source.css.embedded.html, comment.block.html 812 | settings 813 | 814 | fontStyle 815 | italic 816 | foreground 817 | #819090 818 | 819 | 820 | 821 | name 822 | Ruby: Variable definition 823 | scope 824 | punctuation.definition.variable.ruby 825 | settings 826 | 827 | fontStyle 828 | 829 | foreground 830 | #268BD2 831 | 832 | 833 | 834 | name 835 | Ruby: Function Name 836 | scope 837 | meta.function.method.with-arguments.ruby 838 | settings 839 | 840 | foreground 841 | #708284 842 | 843 | 844 | 845 | name 846 | Ruby: Variable 847 | scope 848 | variable.language.ruby 849 | settings 850 | 851 | foreground 852 | #469186 853 | 854 | 855 | 856 | name 857 | Ruby: Function 858 | scope 859 | entity.name.function.ruby 860 | settings 861 | 862 | foreground 863 | #268BD2 864 | 865 | 866 | 867 | name 868 | Ruby: Keyword Control 869 | scope 870 | keyword.control.ruby, keyword.control.def.ruby 871 | settings 872 | 873 | fontStyle 874 | bold 875 | foreground 876 | #738A05 877 | 878 | 879 | 880 | name 881 | Ruby: Class 882 | scope 883 | keyword.control.class.ruby, meta.class.ruby 884 | settings 885 | 886 | foreground 887 | #748B00 888 | 889 | 890 | 891 | name 892 | Ruby: Class Name 893 | scope 894 | entity.name.type.class.ruby 895 | settings 896 | 897 | fontStyle 898 | 899 | foreground 900 | #A57800 901 | 902 | 903 | 904 | name 905 | Ruby: Keyword 906 | scope 907 | keyword.control.ruby 908 | settings 909 | 910 | fontStyle 911 | 912 | foreground 913 | #748B00 914 | 915 | 916 | 917 | name 918 | Ruby: Support Class 919 | scope 920 | support.class.ruby 921 | settings 922 | 923 | fontStyle 924 | 925 | foreground 926 | #A57800 927 | 928 | 929 | 930 | name 931 | Ruby: Special Method 932 | scope 933 | keyword.other.special-method.ruby 934 | settings 935 | 936 | foreground 937 | #748B00 938 | 939 | 940 | 941 | name 942 | Ruby: Constant 943 | scope 944 | constant.language.ruby, constant.numeric.ruby 945 | settings 946 | 947 | foreground 948 | #269186 949 | 950 | 951 | 952 | name 953 | Ruby: Constant Other 954 | scope 955 | variable.other.constant.ruby 956 | settings 957 | 958 | fontStyle 959 | 960 | foreground 961 | #A57800 962 | 963 | 964 | 965 | name 966 | Ruby: :symbol 967 | scope 968 | constant.other.symbol.ruby 969 | settings 970 | 971 | fontStyle 972 | 973 | foreground 974 | #269186 975 | 976 | 977 | 978 | name 979 | Ruby: Punctuation Section '' 980 | scope 981 | punctuation.section.embedded.ruby, punctuation.definition.string.begin.ruby, punctuation.definition.string.end.ruby 982 | settings 983 | 984 | foreground 985 | #D01F1E 986 | 987 | 988 | 989 | name 990 | Ruby: Special Method 991 | scope 992 | keyword.other.special-method.ruby 993 | settings 994 | 995 | foreground 996 | #BD3800 997 | 998 | 999 | 1000 | name 1001 | PHP: Include 1002 | scope 1003 | keyword.control.import.include.php 1004 | settings 1005 | 1006 | foreground 1007 | #BD3800 1008 | 1009 | 1010 | 1011 | name 1012 | Ruby: erb = 1013 | scope 1014 | text.html.ruby meta.tag.inline.any.html 1015 | settings 1016 | 1017 | fontStyle 1018 | 1019 | foreground 1020 | #819090 1021 | 1022 | 1023 | 1024 | name 1025 | Ruby: erb "" 1026 | scope 1027 | text.html.ruby punctuation.definition.string.begin, text.html.ruby punctuation.definition.string.end 1028 | settings 1029 | 1030 | fontStyle 1031 | 1032 | foreground 1033 | #269186 1034 | 1035 | 1036 | 1037 | name 1038 | PHP: Quoted Single 1039 | scope 1040 | punctuation.definition.string.begin, punctuation.definition.string.end 1041 | settings 1042 | 1043 | foreground 1044 | #839496 1045 | 1046 | 1047 | 1048 | name 1049 | PHP: [] 1050 | scope 1051 | keyword.operator.index-start.php, keyword.operator.index-end.php 1052 | settings 1053 | 1054 | foreground 1055 | #D31E1E 1056 | 1057 | 1058 | 1059 | name 1060 | PHP: Array 1061 | scope 1062 | meta.array.php 1063 | settings 1064 | 1065 | foreground 1066 | #536871 1067 | 1068 | 1069 | 1070 | name 1071 | PHP: Array() 1072 | scope 1073 | meta.array.php support.function.construct.php, meta.array.empty.php support.function.construct.php 1074 | settings 1075 | 1076 | fontStyle 1077 | 1078 | foreground 1079 | #A57800 1080 | 1081 | 1082 | 1083 | name 1084 | PHP: Array Construct 1085 | scope 1086 | support.function.construct.php 1087 | settings 1088 | 1089 | foreground 1090 | #A57800 1091 | 1092 | 1093 | 1094 | name 1095 | PHP: Array Begin 1096 | scope 1097 | punctuation.definition.array.begin, punctuation.definition.array.end 1098 | settings 1099 | 1100 | foreground 1101 | #D31E1E 1102 | 1103 | 1104 | 1105 | name 1106 | PHP: Numeric Constant 1107 | scope 1108 | constant.numeric.php 1109 | settings 1110 | 1111 | foreground 1112 | #269186 1113 | 1114 | 1115 | 1116 | name 1117 | PHP: New 1118 | scope 1119 | keyword.other.new.php 1120 | settings 1121 | 1122 | foreground 1123 | #CB4B16 1124 | 1125 | 1126 | 1127 | name 1128 | PHP: :: 1129 | scope 1130 | support.class.php, keyword.operator.class 1131 | settings 1132 | 1133 | fontStyle 1134 | 1135 | foreground 1136 | #536871 1137 | 1138 | 1139 | 1140 | name 1141 | PHP: Other Property 1142 | scope 1143 | variable.other.property.php 1144 | settings 1145 | 1146 | foreground 1147 | #899090 1148 | 1149 | 1150 | 1151 | name 1152 | PHP: Class 1153 | scope 1154 | storage.modifier.extends.php, storage.type.class.php, keyword.operator.class.php 1155 | settings 1156 | 1157 | foreground 1158 | #A57800 1159 | 1160 | 1161 | 1162 | name 1163 | PHP: Class Function 1164 | settings 1165 | 1166 | 1167 | 1168 | name 1169 | PHP: Inherited Class 1170 | scope 1171 | meta.other.inherited-class.php 1172 | settings 1173 | 1174 | fontStyle 1175 | 1176 | foreground 1177 | #536871 1178 | 1179 | 1180 | 1181 | name 1182 | PHP: Storage Type 1183 | scope 1184 | storage.type.php 1185 | settings 1186 | 1187 | foreground 1188 | #748B00 1189 | 1190 | 1191 | 1192 | name 1193 | PHP: Function 1194 | scope 1195 | entity.name.function.php 1196 | settings 1197 | 1198 | foreground 1199 | #899090 1200 | 1201 | 1202 | 1203 | name 1204 | PHP: Function Construct 1205 | scope 1206 | support.function.construct.php 1207 | settings 1208 | 1209 | foreground 1210 | #748B00 1211 | 1212 | 1213 | 1214 | name 1215 | PHP: Function Call 1216 | scope 1217 | entity.name.type.class.php, meta.function-call.php, meta.function-call.static.php, meta.function-call.object.php 1218 | settings 1219 | 1220 | foreground 1221 | #839496 1222 | 1223 | 1224 | 1225 | name 1226 | PHP: Comment 1227 | scope 1228 | keyword.other.phpdoc 1229 | settings 1230 | 1231 | fontStyle 1232 | 1233 | foreground 1234 | #899090 1235 | 1236 | 1237 | 1238 | name 1239 | PHP: Source Emebedded 1240 | scope 1241 | source.php.embedded.block.html 1242 | settings 1243 | 1244 | foreground 1245 | #BD3613 1246 | 1247 | 1248 | 1249 | name 1250 | PHP: Storage Type Function 1251 | scope 1252 | storage.type.function.php 1253 | settings 1254 | 1255 | foreground 1256 | #BD3800 1257 | 1258 | 1259 | 1260 | name 1261 | C: constant 1262 | scope 1263 | constant.numeric.c 1264 | settings 1265 | 1266 | fontStyle 1267 | 1268 | foreground 1269 | #269186 1270 | 1271 | 1272 | 1273 | name 1274 | C: Meta Preprocessor 1275 | scope 1276 | meta.preprocessor.c.include, meta.preprocessor.macro.c 1277 | settings 1278 | 1279 | fontStyle 1280 | 1281 | foreground 1282 | #BB3700 1283 | 1284 | 1285 | 1286 | name 1287 | C: Keyword 1288 | scope 1289 | keyword.control.import.define.c, keyword.control.import.include.c 1290 | settings 1291 | 1292 | fontStyle 1293 | 1294 | foreground 1295 | #BB3700 1296 | 1297 | 1298 | 1299 | name 1300 | C: Function Preprocessor 1301 | scope 1302 | entity.name.function.preprocessor.c 1303 | settings 1304 | 1305 | fontStyle 1306 | 1307 | foreground 1308 | #BB3700 1309 | 1310 | 1311 | 1312 | name 1313 | C: include <something.c> 1314 | scope 1315 | meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c 1316 | settings 1317 | 1318 | fontStyle 1319 | 1320 | foreground 1321 | #269186 1322 | 1323 | 1324 | 1325 | name 1326 | C: Function 1327 | scope 1328 | support.function.C99.c, support.function.any-method.c, entity.name.function.c 1329 | settings 1330 | 1331 | fontStyle 1332 | 1333 | foreground 1334 | #536871 1335 | 1336 | 1337 | 1338 | name 1339 | C: " 1340 | scope 1341 | punctuation.definition.string.begin.c, punctuation.definition.string.end.c 1342 | settings 1343 | 1344 | fontStyle 1345 | 1346 | foreground 1347 | #269186 1348 | 1349 | 1350 | 1351 | name 1352 | C: Storage Type 1353 | scope 1354 | storage.type.c 1355 | settings 1356 | 1357 | fontStyle 1358 | 1359 | foreground 1360 | #A57800 1361 | 1362 | 1363 | 1364 | name 1365 | diff: header 1366 | scope 1367 | meta.diff, meta.diff.header 1368 | settings 1369 | 1370 | background 1371 | #A57706 1372 | fontStyle 1373 | italic 1374 | foreground 1375 | #E0EDDD 1376 | 1377 | 1378 | 1379 | name 1380 | diff: deleted 1381 | scope 1382 | markup.deleted 1383 | settings 1384 | 1385 | background 1386 | #EAE3CA 1387 | fontStyle 1388 | 1389 | foreground 1390 | #D3201F 1391 | 1392 | 1393 | 1394 | name 1395 | diff: changed 1396 | scope 1397 | markup.changed 1398 | settings 1399 | 1400 | background 1401 | #EAE3CA 1402 | fontStyle 1403 | 1404 | foreground 1405 | #BF3904 1406 | 1407 | 1408 | 1409 | name 1410 | diff: inserted 1411 | scope 1412 | markup.inserted 1413 | settings 1414 | 1415 | background 1416 | #EAE3CA 1417 | foreground 1418 | #219186 1419 | 1420 | 1421 | 1422 | name 1423 | Markdown: Linebreak 1424 | scope 1425 | text.html.markdown meta.dummy.line-break 1426 | settings 1427 | 1428 | background 1429 | #A57706 1430 | foreground 1431 | #E0EDDD 1432 | 1433 | 1434 | 1435 | name 1436 | Markdown: Raw 1437 | scope 1438 | text.html.markdown markup.raw.inline 1439 | settings 1440 | 1441 | foreground 1442 | #269186 1443 | 1444 | 1445 | 1446 | name 1447 | reST raw 1448 | scope 1449 | text.restructuredtext markup.raw 1450 | settings 1451 | 1452 | foreground 1453 | #269186 1454 | 1455 | 1456 | 1457 | name 1458 | Other: Removal 1459 | scope 1460 | other.package.exclude, other.remove 1461 | settings 1462 | 1463 | fontStyle 1464 | 1465 | foreground 1466 | #D3201F 1467 | 1468 | 1469 | 1470 | name 1471 | Other: Add 1472 | scope 1473 | other.add 1474 | settings 1475 | 1476 | foreground 1477 | #269186 1478 | 1479 | 1480 | 1481 | name 1482 | Tex: {} 1483 | scope 1484 | punctuation.section.group.tex , punctuation.definition.arguments.begin.latex, punctuation.definition.arguments.end.latex, punctuation.definition.arguments.latex 1485 | settings 1486 | 1487 | fontStyle 1488 | 1489 | foreground 1490 | #B81D1C 1491 | 1492 | 1493 | 1494 | name 1495 | Tex: {text} 1496 | scope 1497 | meta.group.braces.tex 1498 | settings 1499 | 1500 | fontStyle 1501 | 1502 | foreground 1503 | #A57705 1504 | 1505 | 1506 | 1507 | name 1508 | Tex: Other Math 1509 | scope 1510 | string.other.math.tex 1511 | settings 1512 | 1513 | fontStyle 1514 | 1515 | foreground 1516 | #A57705 1517 | 1518 | 1519 | 1520 | name 1521 | Tex: {var} 1522 | scope 1523 | variable.parameter.function.latex 1524 | settings 1525 | 1526 | fontStyle 1527 | 1528 | foreground 1529 | #BD3800 1530 | 1531 | 1532 | 1533 | name 1534 | Tex: Math \\ 1535 | scope 1536 | punctuation.definition.constant.math.tex 1537 | settings 1538 | 1539 | fontStyle 1540 | 1541 | foreground 1542 | #D01F1E 1543 | 1544 | 1545 | 1546 | name 1547 | Tex: Constant Math 1548 | scope 1549 | text.tex.latex constant.other.math.tex, constant.other.general.math.tex, constant.other.general.math.tex, constant.character.math.tex 1550 | settings 1551 | 1552 | fontStyle 1553 | 1554 | foreground 1555 | #269186 1556 | 1557 | 1558 | 1559 | name 1560 | Tex: Other Math String 1561 | scope 1562 | string.other.math.tex 1563 | settings 1564 | 1565 | fontStyle 1566 | 1567 | foreground 1568 | #A57800 1569 | 1570 | 1571 | 1572 | name 1573 | Tex: $ 1574 | scope 1575 | punctuation.definition.string.begin.tex, punctuation.definition.string.end.tex 1576 | settings 1577 | 1578 | fontStyle 1579 | 1580 | foreground 1581 | #D3201F 1582 | 1583 | 1584 | 1585 | name 1586 | Tex: \label 1587 | scope 1588 | keyword.control.label.latex, text.tex.latex constant.other.general.math.tex 1589 | settings 1590 | 1591 | fontStyle 1592 | 1593 | foreground 1594 | #269186 1595 | 1596 | 1597 | 1598 | name 1599 | Tex: \label { } 1600 | scope 1601 | variable.parameter.definition.label.latex 1602 | settings 1603 | 1604 | fontStyle 1605 | 1606 | foreground 1607 | #D01F1E 1608 | 1609 | 1610 | 1611 | name 1612 | Tex: Function 1613 | scope 1614 | support.function.be.latex 1615 | settings 1616 | 1617 | fontStyle 1618 | 1619 | foreground 1620 | #748B00 1621 | 1622 | 1623 | 1624 | name 1625 | Tex: Support Function Section 1626 | scope 1627 | support.function.section.latex 1628 | settings 1629 | 1630 | fontStyle 1631 | 1632 | foreground 1633 | #BD3800 1634 | 1635 | 1636 | 1637 | name 1638 | Tex: Support Function 1639 | scope 1640 | support.function.general.tex 1641 | settings 1642 | 1643 | fontStyle 1644 | 1645 | foreground 1646 | #269186 1647 | 1648 | 1649 | 1650 | name 1651 | Tex: Comment 1652 | scope 1653 | punctuation.definition.comment.tex, comment.line.percentage.tex 1654 | settings 1655 | 1656 | fontStyle 1657 | italic 1658 | 1659 | 1660 | 1661 | name 1662 | Tex: Reference Label 1663 | scope 1664 | keyword.control.ref.latex 1665 | settings 1666 | 1667 | fontStyle 1668 | 1669 | foreground 1670 | #269186 1671 | 1672 | 1673 | 1674 | name 1675 | Python: storage 1676 | scope 1677 | storage.type.class.python, storage.type.function.python, storage.modifier.global.python 1678 | settings 1679 | 1680 | fontStyle 1681 | 1682 | foreground 1683 | #748B00 1684 | 1685 | 1686 | 1687 | name 1688 | Python: import 1689 | scope 1690 | keyword.control.import.python, keyword.control.import.from.python 1691 | settings 1692 | 1693 | foreground 1694 | #BD3800 1695 | 1696 | 1697 | 1698 | name 1699 | Python: Support.exception 1700 | scope 1701 | support.type.exception.python 1702 | settings 1703 | 1704 | foreground 1705 | #A57800 1706 | 1707 | 1708 | 1709 | name 1710 | Shell: builtin 1711 | scope 1712 | support.function.builtin.shell 1713 | settings 1714 | 1715 | foreground 1716 | #748B00 1717 | 1718 | 1719 | 1720 | name 1721 | Shell: variable 1722 | scope 1723 | variable.other.normal.shell 1724 | settings 1725 | 1726 | foreground 1727 | #BD3800 1728 | 1729 | 1730 | 1731 | name 1732 | Shell: DOT_FILES 1733 | scope 1734 | source.shell 1735 | settings 1736 | 1737 | fontStyle 1738 | 1739 | foreground 1740 | #268BD2 1741 | 1742 | 1743 | 1744 | name 1745 | Shell: meta scope in loop 1746 | scope 1747 | meta.scope.for-in-loop.shell, variable.other.loop.shell 1748 | settings 1749 | 1750 | fontStyle 1751 | 1752 | foreground 1753 | #536871 1754 | 1755 | 1756 | 1757 | name 1758 | Shell: "" 1759 | scope 1760 | punctuation.definition.string.end.shell, punctuation.definition.string.begin.shell 1761 | settings 1762 | 1763 | fontStyle 1764 | 1765 | foreground 1766 | #748B00 1767 | 1768 | 1769 | 1770 | name 1771 | Shell: Meta Block 1772 | scope 1773 | meta.scope.case-block.shell, meta.scope.case-body.shell 1774 | settings 1775 | 1776 | fontStyle 1777 | 1778 | foreground 1779 | #536871 1780 | 1781 | 1782 | 1783 | name 1784 | Shell: [] 1785 | scope 1786 | punctuation.definition.logical-expression.shell 1787 | settings 1788 | 1789 | fontStyle 1790 | 1791 | foreground 1792 | #CD1E1D 1793 | 1794 | 1795 | 1796 | name 1797 | Shell: Comment 1798 | scope 1799 | comment.line.number-sign.shell 1800 | settings 1801 | 1802 | fontStyle 1803 | italic 1804 | 1805 | 1806 | 1807 | name 1808 | Java: import 1809 | scope 1810 | keyword.other.import.java 1811 | settings 1812 | 1813 | fontStyle 1814 | 1815 | foreground 1816 | #BD3800 1817 | 1818 | 1819 | 1820 | name 1821 | Java: meta-import 1822 | scope 1823 | storage.modifier.import.java 1824 | settings 1825 | 1826 | fontStyle 1827 | 1828 | foreground 1829 | #586E75 1830 | 1831 | 1832 | 1833 | name 1834 | Java: Class 1835 | scope 1836 | meta.class.java storage.modifier.java 1837 | settings 1838 | 1839 | fontStyle 1840 | 1841 | foreground 1842 | #A57800 1843 | 1844 | 1845 | 1846 | name 1847 | Java: /* comment */ 1848 | scope 1849 | source.java comment.block 1850 | settings 1851 | 1852 | fontStyle 1853 | 1854 | foreground 1855 | #536871 1856 | 1857 | 1858 | 1859 | name 1860 | Java: /* @param */ 1861 | scope 1862 | comment.block meta.documentation.tag.param.javadoc keyword.other.documentation.param.javadoc 1863 | settings 1864 | 1865 | fontStyle 1866 | 1867 | foreground 1868 | #536871 1869 | 1870 | 1871 | 1872 | name 1873 | Perl: variables 1874 | scope 1875 | punctuation.definition.variable.perl, variable.other.readwrite.global.perl, variable.other.predefined.perl, keyword.operator.comparison.perl 1876 | settings 1877 | 1878 | foreground 1879 | #B58900 1880 | 1881 | 1882 | 1883 | name 1884 | Perl: functions 1885 | scope 1886 | support.function.perl 1887 | settings 1888 | 1889 | foreground 1890 | #859900 1891 | 1892 | 1893 | 1894 | name 1895 | Perl: comments 1896 | scope 1897 | comment.line.number-sign.perl 1898 | settings 1899 | 1900 | fontStyle 1901 | italic 1902 | foreground 1903 | #586E75 1904 | 1905 | 1906 | 1907 | name 1908 | Perl: quotes 1909 | scope 1910 | punctuation.definition.string.begin.perl, punctuation.definition.string.end.perl 1911 | settings 1912 | 1913 | foreground 1914 | #2AA198 1915 | 1916 | 1917 | 1918 | name 1919 | Perl: \char 1920 | scope 1921 | constant.character.escape.perl 1922 | settings 1923 | 1924 | foreground 1925 | #DC322F 1926 | 1927 | 1928 | 1929 | uuid 1930 | 8ee3fa8e-c681-4b63-a0c5-b5ad083f93ff 1931 | license 1932 | 1933 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 1934 | 1935 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 1936 | 1937 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1938 | 1939 | 1940 | 1941 | -------------------------------------------------------------------------------- /themes/Tron.tmTheme: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | author 6 | Joshua Wise 7 | name 8 | Tron 9 | settings 10 | 11 | 12 | settings 13 | 14 | background 15 | #141414 16 | caret 17 | #A7A7A7 18 | foreground 19 | #00DEFF 20 | invisibles 21 | #FFFFFF40 22 | lineHighlight 23 | #FFFFFF23 24 | selection 25 | #F0F9FF40 26 | selectionBorder 27 | #FFFFFF00 28 | 29 | findHighlight 30 | #FFFFFFD5 31 | findHighlightForeground 32 | #000000 33 | 34 | bracketsForeground 35 | #FFFFFFAF 36 | bracketsOptions 37 | underline 38 | bracketContentsForeground 39 | #FFFFFFAF 40 | bracketContentsOptions 41 | underline 42 | 43 | tagsOptions 44 | stippled_underline 45 | 46 | 47 | 48 | name 49 | Comment 50 | scope 51 | comment 52 | settings 53 | 54 | fontStyle 55 | italic 56 | foreground 57 | #8C9B9B 58 | 59 | 60 | 61 | name 62 | JavaDoc 63 | scope 64 | comment keyword 65 | settings 66 | 67 | foreground 68 | #DBF5F5 69 | 70 | 71 | 72 | name 73 | Constant 74 | scope 75 | constant 76 | settings 77 | 78 | foreground 79 | #FF9210 80 | 81 | 82 | 83 | name 84 | Entity 85 | scope 86 | entity, markup.deleted, keyword.other.important.css 87 | settings 88 | 89 | fontStyle 90 | 91 | foreground 92 | #FD1312 93 | 94 | 95 | 96 | name 97 | Entity - inherited-class 98 | scope 99 | entity.other.inherited-class 100 | settings 101 | 102 | fontStyle 103 | italic 104 | 105 | 106 | 107 | name 108 | Bitwise 109 | scope 110 | keyword.operator.bitwise 111 | settings 112 | 113 | fontStyle 114 | 115 | foreground 116 | #9A8232 117 | 118 | 119 | 120 | name 121 | Keyword 122 | scope 123 | keyword 124 | settings 125 | 126 | fontStyle 127 | 128 | foreground 129 | #FFAABF 130 | 131 | 132 | 133 | name 134 | Storage 135 | scope 136 | storage 137 | settings 138 | 139 | fontStyle 140 | 141 | foreground 142 | #FEDA2F 143 | 144 | 145 | 146 | name 147 | Variable 148 | scope 149 | variable, source.sass keyword.control.untitled, source.less keyword.control.html.elements, entity.name.tag.css, entity.name.tag.scss, meta.tag entity.other.attribute-name, entity.other.attribute-name.mixin.stylus, markup.changed 150 | settings 151 | 152 | foreground 153 | #0081D1 154 | 155 | 156 | 157 | name 158 | Support 159 | scope 160 | support, entity.other.attribute-name.id.css, entity.other.attribute-name.class.css, entity.other.attribute-name.class.stylus, entity.other.attribute-name.id.sass, entity.other.attribute-name.class.sass, meta.diff, meta.separator.diff 161 | settings 162 | 163 | fontStyle 164 | 165 | foreground 166 | #A93ED0 167 | 168 | 169 | 170 | name 171 | Support - function 172 | scope 173 | support.function, entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-element.stylus, entity.other.attribute-name.pseudo-class.css, entity.other.attribute-name.pseudo-class.stylus, entity.other.attribute-name.pseudo-class.scss, source.sass entity.other.attribute-name.tag.pseudo-class, source.css keyword.control.at-rule, source.scss meta.at-rule 174 | settings 175 | 176 | fontStyle 177 | 178 | foreground 179 | #968BCB 180 | 181 | 182 | 183 | name 184 | Support - constant 185 | scope 186 | support.constant 187 | settings 188 | 189 | fontStyle 190 | 191 | foreground 192 | #FF9210 193 | 194 | 195 | 196 | name 197 | Invalid – Deprecated 198 | scope 199 | invalid.deprecated 200 | settings 201 | 202 | fontStyle 203 | italic underline 204 | foreground 205 | #FE4E8D 206 | 207 | 208 | 209 | name 210 | Invalid – Illegal 211 | scope 212 | invalid.illegal 213 | settings 214 | 215 | background 216 | #FFFFFF 217 | foreground 218 | #777777 219 | 220 | 221 | 222 | name 223 | String 224 | scope 225 | string, markup.inserted 226 | settings 227 | 228 | fontStyle 229 | 230 | foreground 231 | #80D85D 232 | 233 | 234 | 235 | name 236 | String constant 237 | scope 238 | string constant, keyword.other.unit.css, keyword.other.unit.stylus, keyword.other.unit.scss, constant.other.unit.sass, support.constant.property-value.css, support.constant.property-value.scss, constant.string.sass 239 | settings 240 | 241 | foreground 242 | #008055 243 | 244 | 245 | 246 | name 247 | String line-continuation 248 | scope 249 | string constant.character.escape linecontinuation 250 | settings 251 | 252 | background 253 | #80D85D20 254 | fontStyle 255 | italic bold 256 | foreground 257 | #008055 258 | 259 | 260 | 261 | name 262 | String variable 263 | scope 264 | string variable 265 | settings 266 | 267 | foreground 268 | #464BDD 269 | 270 | 271 | 272 | name 273 | Use Strict 274 | scope 275 | string comment.directive 276 | settings 277 | 278 | fontStyle 279 | 280 | 281 | 282 | 283 | 284 | name 285 | Doctype/XML Processing 286 | scope 287 | meta.tag.sgml.doctype, meta.tag.sgml.doctype entity.name.tag, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string 288 | settings 289 | 290 | foreground 291 | #8C9B9B 292 | 293 | 294 | 295 | name 296 | Regexp 297 | scope 298 | string.regexp, support.type.property-name.css, support.type.property-name.stylus, support.type.property-name.scss, support.type.property-name.sass, source.css meta.at-rule support.type.property-name, source.stylus meta.at-rule support.type.property-name 299 | settings 300 | 301 | fontStyle 302 | 303 | foreground 304 | #C15757 305 | 306 | 307 | 308 | name 309 | Regexp characterclass 310 | scope 311 | string.regexp.characterclass 312 | settings 313 | 314 | background 315 | #9000FF50 316 | 317 | 318 | 319 | name 320 | Regexp character class bounds 321 | scope 322 | string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 323 | settings 324 | 325 | background 326 | #FFFFFF00 327 | 328 | 329 | 330 | name 331 | Regexp escape 332 | scope 333 | string.regexp constant.character.escape 334 | settings 335 | 336 | foreground 337 | #FF9210 338 | 339 | 340 | 341 | name 342 | Regexp operator 343 | scope 344 | string.regexp regexp-operator, string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 345 | settings 346 | 347 | foreground 348 | #813AF2 349 | 350 | 351 | 352 | 353 | scope 354 | constant.numeric.line-number.find-in-files 355 | settings 356 | 357 | foreground 358 | #968BCB 359 | 360 | 361 | 362 | uuid 363 | d34f74d4-143d-4716-ae10-2a7eaf65bf86 364 | 365 | 366 | -------------------------------------------------------------------------------- /themes/Twilight JU.tmTheme: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | author 6 | Michael Sheets (forked by Joshua Wise) 7 | name 8 | Twilight JU 9 | settings 10 | 11 | 12 | settings 13 | 14 | background 15 | #141414 16 | caret 17 | #A7A7A7 18 | foreground 19 | #F8F8F8 20 | invisibles 21 | #FFFFFF40 22 | lineHighlight 23 | #FFFFFF08 24 | selection 25 | #DDF0FF33 26 | 27 | 28 | 29 | name 30 | Comment 31 | scope 32 | comment 33 | settings 34 | 35 | fontStyle 36 | italic 37 | foreground 38 | #5F5A60 39 | 40 | 41 | 42 | name 43 | Constant 44 | scope 45 | constant 46 | settings 47 | 48 | foreground 49 | #CF6A4C 50 | 51 | 52 | 53 | name 54 | Entity 55 | scope 56 | entity 57 | settings 58 | 59 | fontStyle 60 | 61 | foreground 62 | #9B703F 63 | 64 | 65 | 66 | 67 | name 68 | Bitwise 69 | scope 70 | keyword.operator.bitwise 71 | settings 72 | 73 | fontStyle 74 | 75 | foreground 76 | #00AAAA 77 | 78 | 79 | 80 | name 81 | Keyword 82 | scope 83 | keyword 84 | settings 85 | 86 | fontStyle 87 | 88 | foreground 89 | #CDA869 90 | 91 | 92 | 93 | name 94 | Storage 95 | scope 96 | storage 97 | settings 98 | 99 | fontStyle 100 | 101 | foreground 102 | #F9EE98 103 | 104 | 105 | 106 | name 107 | String 108 | scope 109 | string 110 | settings 111 | 112 | fontStyle 113 | 114 | foreground 115 | #8F9D6A 116 | 117 | 118 | 119 | name 120 | Support 121 | scope 122 | support 123 | settings 124 | 125 | fontStyle 126 | 127 | foreground 128 | #9B859D 129 | 130 | 131 | 132 | name 133 | Variable 134 | scope 135 | variable 136 | settings 137 | 138 | foreground 139 | #7587A6 140 | 141 | 142 | 143 | name 144 | Invalid – Deprecated 145 | scope 146 | invalid.deprecated 147 | settings 148 | 149 | fontStyle 150 | italic underline 151 | foreground 152 | #D2A8A1 153 | 154 | 155 | 156 | name 157 | Invalid – Illegal 158 | scope 159 | invalid.illegal 160 | settings 161 | 162 | background 163 | #562D56BF 164 | foreground 165 | #F8F8F8 166 | 167 | 168 | 169 | 170 | name 171 | Dev Tools 172 | scope 173 | support.function.js dev.js, support.constant.js dev.js 174 | settings 175 | 176 | foreground 177 | #DB859D 178 | 179 | 180 | 181 | name 182 | ----------------------------------- 183 | settings 184 | 185 | 186 | 187 | name 188 | ♦ Embedded Source 189 | scope 190 | text source 191 | settings 192 | 193 | background 194 | #B0B3BA14 195 | 196 | 197 | 198 | name 199 | ♦ Embedded Source (Bright) 200 | scope 201 | text.html.ruby source 202 | settings 203 | 204 | background 205 | #B1B3BA21 206 | 207 | 208 | 209 | name 210 | ♦ Entity inherited-class 211 | scope 212 | entity.other.inherited-class 213 | settings 214 | 215 | fontStyle 216 | italic 217 | foreground 218 | #9B5C2E 219 | 220 | 221 | 222 | name 223 | ♦ String embedded-source 224 | scope 225 | string source 226 | settings 227 | 228 | fontStyle 229 | 230 | foreground 231 | #DAEFA3 232 | 233 | 234 | 235 | name 236 | ♦ String constant 237 | scope 238 | string constant 239 | settings 240 | 241 | foreground 242 | #DDF2A4 243 | 244 | 245 | 246 | 247 | name 248 | ♦ String.regexp 249 | scope 250 | string.regexp 251 | settings 252 | 253 | fontStyle 254 | 255 | foreground 256 | #90B4B4 257 | 258 | 259 | 260 | 261 | name 262 | ♦ String.regexp characterclass 263 | scope 264 | string.regexp.characterclass 265 | settings 266 | 267 | background 268 | #00FFFF15 269 | 270 | 271 | 272 | 273 | name 274 | ♦ String.regexp character class bounds 275 | scope 276 | string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 277 | settings 278 | 279 | background 280 | #FFFFFF00 281 | 282 | 283 | 284 | 285 | name 286 | ♦ String.regexp escape 287 | scope 288 | string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition 289 | settings 290 | 291 | foreground 292 | #CFFFC1 293 | 294 | 295 | 296 | 297 | name 298 | ♦ String.regexp operator 299 | scope 300 | string.regexp regexp-operator, string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 301 | settings 302 | 303 | foreground 304 | #CDA869 305 | 306 | 307 | 308 | name 309 | ♦ String variable 310 | scope 311 | string variable 312 | settings 313 | 314 | foreground 315 | #8A9A95 316 | 317 | 318 | 319 | name 320 | ♦ Support.function 321 | scope 322 | support.function 323 | settings 324 | 325 | fontStyle 326 | 327 | foreground 328 | #DAD085 329 | 330 | 331 | 332 | name 333 | ♦ Support.constant 334 | scope 335 | support.constant 336 | settings 337 | 338 | fontStyle 339 | 340 | foreground 341 | #CF6A4C 342 | 343 | 344 | 345 | name 346 | c C/C++ Preprocessor Line 347 | scope 348 | meta.preprocessor.c 349 | settings 350 | 351 | foreground 352 | #8996A8 353 | 354 | 355 | 356 | name 357 | c C/C++ Preprocessor Directive 358 | scope 359 | meta.preprocessor.c keyword 360 | settings 361 | 362 | foreground 363 | #AFC4DB 364 | 365 | 366 | 367 | name 368 | ✘ Doctype/XML Processing 369 | scope 370 | meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string 371 | settings 372 | 373 | foreground 374 | #494949 375 | 376 | 377 | 378 | name 379 | ✘ Meta.tag.«all» 380 | scope 381 | declaration.tag, declaration.tag entity, meta.tag, meta.tag entity 382 | settings 383 | 384 | foreground 385 | #AC885B 386 | 387 | 388 | 389 | name 390 | ✘ Meta.tag.inline 391 | scope 392 | declaration.tag.inline, declaration.tag.inline entity, source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity 393 | settings 394 | 395 | foreground 396 | #E0C589 397 | 398 | 399 | 400 | name 401 | § css tag-name 402 | scope 403 | meta.selector.css entity.name.tag 404 | settings 405 | 406 | foreground 407 | #CDA869 408 | 409 | 410 | 411 | name 412 | § css:pseudo-class 413 | scope 414 | meta.selector.css entity.other.attribute-name.tag.pseudo-class 415 | settings 416 | 417 | foreground 418 | #8F9D6A 419 | 420 | 421 | 422 | name 423 | § css#id 424 | scope 425 | meta.selector.css entity.other.attribute-name.id 426 | settings 427 | 428 | foreground 429 | #8B98AB 430 | 431 | 432 | 433 | name 434 | § css.class 435 | scope 436 | meta.selector.css entity.other.attribute-name.class 437 | settings 438 | 439 | foreground 440 | #9B703F 441 | 442 | 443 | 444 | name 445 | § css property-name: 446 | scope 447 | support.type.property-name.css 448 | settings 449 | 450 | foreground 451 | #C5AF75 452 | 453 | 454 | 455 | name 456 | § css property-value; 457 | scope 458 | meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css 459 | settings 460 | 461 | foreground 462 | #F9EE98 463 | 464 | 465 | 466 | name 467 | § css @at-rule 468 | scope 469 | meta.preprocessor.at-rule keyword.control.at-rule 470 | settings 471 | 472 | foreground 473 | #8693A5 474 | 475 | 476 | 477 | name 478 | § css additional-constants 479 | scope 480 | meta.property-value support.constant.named-color.css, meta.property-value constant 481 | settings 482 | 483 | foreground 484 | #CA7840 485 | 486 | 487 | 488 | name 489 | § css constructor.argument 490 | scope 491 | meta.constructor.argument.css 492 | settings 493 | 494 | foreground 495 | #8F9D6A 496 | 497 | 498 | 499 | name 500 | ⎇ diff.header 501 | scope 502 | meta.diff, meta.diff.header, meta.separator 503 | settings 504 | 505 | background 506 | #0E2231 507 | fontStyle 508 | italic 509 | foreground 510 | #F8F8F8 511 | 512 | 513 | 514 | name 515 | ⎇ diff.deleted 516 | scope 517 | markup.deleted 518 | settings 519 | 520 | background 521 | #420E09 522 | foreground 523 | #F8F8F8 524 | 525 | 526 | 527 | name 528 | ⎇ diff.changed 529 | scope 530 | markup.changed 531 | settings 532 | 533 | background 534 | #4A410D 535 | foreground 536 | #F8F8F8 537 | 538 | 539 | 540 | name 541 | ⎇ diff.inserted 542 | scope 543 | markup.inserted 544 | settings 545 | 546 | background 547 | #253B22 548 | foreground 549 | #F8F8F8 550 | 551 | 552 | 553 | name 554 | Markup: List 555 | scope 556 | markup.list 557 | settings 558 | 559 | foreground 560 | #F9EE98 561 | 562 | 563 | 564 | name 565 | Markup: Heading 566 | scope 567 | markup.heading 568 | settings 569 | 570 | foreground 571 | #CF6A4C 572 | 573 | 574 | 575 | uuid 576 | 6ff56d5d-8eb3-464d-91e2-fe680427a6fe 577 | 578 | 579 | -------------------------------------------------------------------------------- /themes/Wes Anderson.tmTheme: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | author 6 | Joshua Wise 7 | name 8 | Wes Anderson (Normal Braces) 9 | settings 10 | 11 | 12 | settings 13 | 14 | background 15 | #FFE2C2 16 | caret 17 | #9A9A9A 18 | foreground 19 | #00B7C5 20 | invisibles 21 | #FFFFFF40 22 | lineHighlight 23 | #FABCCB4E 24 | selection 25 | #FABCCB77 26 | selectionBorder 27 | #FABCCB 28 | 29 | findHighlight 30 | #B1420090 31 | findHighlightForeground 32 | #000000 33 | 34 | bracketsForeground 35 | #0000002C 36 | bracketsOptions 37 | underline 38 | bracketContentsForeground 39 | #0000002C 40 | bracketContentsOptions 41 | underline 42 | 43 | tagsOptions 44 | stippled_underline 45 | 46 | 47 | 48 | name 49 | Comment 50 | scope 51 | comment 52 | settings 53 | 54 | fontStyle 55 | italic 56 | foreground 57 | #8B8377 58 | 59 | 60 | 61 | name 62 | JavaDoc 63 | scope 64 | comment keyword 65 | settings 66 | 67 | foreground 68 | #595145 69 | 70 | 71 | 72 | name 73 | Constant 74 | scope 75 | constant, markup.deleted 76 | settings 77 | 78 | foreground 79 | #FF6363 80 | 81 | 82 | 83 | name 84 | Entity 85 | scope 86 | entity, entity.other.attribute-name.id.css, entity.other.attribute-name.class.css, entity.other.attribute-name.class.stylus, entity.other.attribute-name.id.sass, entity.other.attribute-name.class.sass, meta.diff, meta.separator.diff 87 | settings 88 | 89 | fontStyle 90 | 91 | foreground 92 | #006479 93 | 94 | 95 | 96 | name 97 | Entity - inherited-class 98 | scope 99 | entity.other.inherited-class 100 | settings 101 | 102 | fontStyle 103 | italic 104 | 105 | 106 | 107 | name 108 | Bitwise 109 | scope 110 | keyword.operator.bitwise, keyword.other.important.css 111 | settings 112 | 113 | fontStyle 114 | 115 | foreground 116 | #8833DD 117 | 118 | 119 | 120 | name 121 | Keyword 122 | scope 123 | keyword, entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-element.stylus, entity.other.attribute-name.pseudo-class.css, entity.other.attribute-name.pseudo-class.stylus, entity.other.attribute-name.pseudo-class.scss, source.sass entity.other.attribute-name.tag.pseudo-class, source.css keyword.control.at-rule, source.scss meta.at-rule 124 | settings 125 | 126 | fontStyle 127 | 128 | foreground 129 | #DE8630 130 | 131 | 132 | 133 | name 134 | Storage 135 | scope 136 | storage 137 | settings 138 | 139 | fontStyle 140 | 141 | foreground 142 | #F8967D 143 | 144 | 145 | 146 | name 147 | Variable 148 | scope 149 | variable, source.sass keyword.control.untitled, source.less keyword.control.html.elements, entity.name.tag.css, entity.name.tag.scss, meta.tag entity.other.attribute-name, entity.other.attribute-name.mixin.stylus, markup.inserted 150 | settings 151 | 152 | foreground 153 | #7193D6 154 | 155 | 156 | 157 | name 158 | Support 159 | scope 160 | support, support.type.property-name.css, support.type.property-name.stylus, support.type.property-name.scss, support.type.property-name.sass, source.css meta.at-rule support.type.property-name, source.stylus meta.at-rule support.type.property-name 161 | settings 162 | 163 | fontStyle 164 | 165 | foreground 166 | #88B74B 167 | 168 | 169 | 170 | name 171 | Support - function 172 | scope 173 | support.function 174 | settings 175 | 176 | fontStyle 177 | 178 | foreground 179 | #A55E5F 180 | 181 | 182 | 183 | name 184 | Support - constant 185 | scope 186 | support.constant 187 | settings 188 | 189 | fontStyle 190 | 191 | foreground 192 | #FF6363 193 | 194 | 195 | 196 | name 197 | Invalid – Deprecated 198 | scope 199 | invalid.deprecated 200 | settings 201 | 202 | fontStyle 203 | italic underline 204 | foreground 205 | #A55E5F 206 | 207 | 208 | 209 | name 210 | Invalid – Illegal 211 | scope 212 | invalid.illegal 213 | settings 214 | 215 | background 216 | #CB3200FF 217 | foreground 218 | #F8F8F8 219 | 220 | 221 | 222 | name 223 | String 224 | scope 225 | string, markup.changed 226 | settings 227 | 228 | fontStyle 229 | 230 | foreground 231 | #FE7F9C 232 | 233 | 234 | 235 | name 236 | String constant 237 | scope 238 | string constant, keyword.other.unit.css, keyword.other.unit.stylus, keyword.other.unit.scss, constant.other.unit.sass, support.constant.property-value.css, support.constant.property-value.scss, constant.string.sass 239 | settings 240 | 241 | foreground 242 | #992C0B 243 | 244 | 245 | 246 | name 247 | String line-continuation 248 | scope 249 | string constant.character.escape linecontinuation 250 | settings 251 | 252 | background 253 | #FE7F9C40 254 | fontStyle 255 | italic bold 256 | foreground 257 | #992C0B 258 | 259 | 260 | 261 | name 262 | String variable 263 | scope 264 | string variable 265 | settings 266 | 267 | foreground 268 | #739CA9 269 | 270 | 271 | 272 | name 273 | Use Strict 274 | scope 275 | string comment.directive 276 | settings 277 | 278 | fontStyle 279 | 280 | 281 | 282 | 283 | name 284 | Doctype/XML Processing 285 | scope 286 | meta.tag.sgml.doctype, meta.tag.sgml.doctype entity.name.tag, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string 287 | settings 288 | 289 | foreground 290 | #8B8377 291 | 292 | 293 | 294 | 295 | name 296 | Regexp 297 | scope 298 | string.regexp 299 | settings 300 | 301 | fontStyle 302 | 303 | foreground 304 | #795C34 305 | 306 | 307 | 308 | name 309 | Regexp characterclass 310 | scope 311 | string.regexp.characterclass 312 | settings 313 | 314 | background 315 | #FF000015 316 | 317 | 318 | 319 | name 320 | Regexp character class bounds 321 | scope 322 | string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 323 | settings 324 | 325 | background 326 | #FFFFFF00 327 | 328 | 329 | 330 | name 331 | Regexp escape 332 | scope 333 | string.regexp constant.character.escape 334 | settings 335 | 336 | foreground 337 | #F09C00 338 | 339 | 340 | 341 | name 342 | Regexp operator 343 | scope 344 | string.regexp regexp-operator, string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end 345 | settings 346 | 347 | foreground 348 | #E00004 349 | 350 | 351 | 352 | 353 | scope 354 | constant.numeric.line-number.find-in-files 355 | settings 356 | 357 | foreground 358 | #AE81FFA0 359 | 360 | 361 | 362 | uuid 363 | 0c2a55c7-ab49-4b1a-9ed5-acaae5d4c024 364 | 365 | 366 | -------------------------------------------------------------------------------- /versions/default.yaml: -------------------------------------------------------------------------------- 1 | name: JavaScript Ultimate 2 | scope: source.js 3 | --------------------------------------------------------------------------------