From 230e95c893d022a7bd5e5b342ac7104adc906f66 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 29 Dec 2013 00:41:01 +1100 Subject: [PATCH 001/202] converted to JSON-tmLanguage --- JavaScriptNext.JSON-tmLanguage | 1171 ++++++++++++++++++++++++++++++++ 1 file changed, 1171 insertions(+) create mode 100644 JavaScriptNext.JSON-tmLanguage diff --git a/JavaScriptNext.JSON-tmLanguage b/JavaScriptNext.JSON-tmLanguage new file mode 100644 index 0000000..6473b1d --- /dev/null +++ b/JavaScriptNext.JSON-tmLanguage @@ -0,0 +1,1171 @@ +{ + "fileTypes": [ + "js", + "htc", + "jsx" + ], + "firstLineMatch": "^#!/.*\\b(node|js)", + "keyEquivalent": "^~J", + "name": "JavaScriptNext", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#support" + }, + { + "include": "#core" + }, + { + "include": "#special" + }, + { + "include": "#sugar" + } + ], + "repository": { + "arrow-function": { + "patterns": [ + { + "name": "arrow.function.js", + "patterns": [ + { + "captures": { + "1": { + "name": "entity.arrow.function.js" + }, + "2": { + "name": "punctuation.definition.parameters.begin.js" + }, + "3": { + "name": "variable.parameter.function.arrow.js" + }, + "4": { + "name": "punctuation.definition.parameters.end.js" + }, + "5": { + "name": "variable.parameter.function.arrow.js" + }, + "6": { + "name": "punctuation.definition.arrow.js" + } + }, + "comment": "match stuff like:(args) =>", + "match": "(?x)\\s*(\n (?:(\\() (.*?)? (\\)))\n | ([_$a-zA-Z][_$\\w]*)\n )\\s*(=>)", + "name": "storage.type.function.arrow.js" + } + ] + } + ] + }, + "brackets": { + "patterns": [ + { + "captures": { + "1": { + "name": "entity.name.function.js" + } + }, + "match": "(?x)(?<= \\. ) ([_$a-zA-Z][_$\\w]*)? (?=\\()", + "name": "meta.function-call.method.with-arguments.js" + }, + { + "begin": "(\\()(?!\\))", + "captures": { + "1": { + "name": "punctuation.section.scope.round.js" + } + }, + "end": "(\\))", + "name": "meta.group.braces.round", + "patterns": [ + { + "include": "$base" + } + ] + }, + { + "begin": "(\\[)(?!\\])", + "captures": { + "1": { + "name": "punctuation.section.scope.square.js" + } + }, + "end": "(\\])", + "name": "meta.group.braces.square", + "patterns": [ + { + "include": "$base" + } + ] + } + ] + }, + "comments": { + "patterns": [ + { + "include": "#special-comments-conditional-compilation" + }, + { + "begin": "/\\*\\*", + "captures": { + "0": { + "name": "punctuation.definition.comment.js" + } + }, + "end": "\\*/", + "name": "comment.block.documentation.js" + }, + { + "begin": "/\\*", + "captures": { + "0": { + "name": "punctuation.definition.comment.js" + } + }, + "end": "\\*/", + "name": "comment.block.js" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.comment.js" + } + }, + "match": "(//).*$\\n?", + "name": "comment.line.double-slash.js" + }, + { + "captures": { + "0": { + "name": "punctuation.definition.comment.html.js" + }, + "2": { + "name": "punctuation.definition.comment.html.js" + } + }, + "match": "()", + "name": "comment.block.html.js" + } + ] + }, + "core": { + "patterns": [ + { + "include": "#leading-space" + }, + { + "include": "#brackets" + }, + { + "include": "#literal-method" + }, + { + "include": "#literal-number" + }, + { + "include": "#literal-string" + }, + { + "include": "#arrow-function" + }, + { + "include": "#literal-class" + }, + { + "include": "#literal-quasi" + }, + { + "include": "#literal-regex" + }, + { + "include": "#literal-module" + }, + { + "include": "#literal-keywords" + }, + { + "include": "#literal-function-call" + }, + { + "include": "#literal-function-constructor" + }, + { + "include": "#literal-labels" + }, + { + "include": "#literal-variable" + }, + { + "include": "#literal-punctuation" + } + ] + }, + "literal-class": { + "patterns": [ + { + "captures": { + "1": { + "name": "storage.type.class.js" + }, + "2": { + "name": "entity.name.class.js" + }, + "3": { + "name": "storage.type.extends.js" + }, + "4": { + "name": "entity.name.extends.js" + } + }, + "comment": "match regular class like: class MyClass { }", + "match": "\\b(class)\\b(?:\\s+([a-zA-Z_$]\\w*)\\s*(?:\\b(extends)\\b\\s*([a-zA-Z_$][.\\w]*))?)?\\s*", + "name": "meta.class.js" + }, + { + "captures": { + "1": { + "name": "storage.type.accessor.js" + }, + "2": { + "name": "entity.name.accessor.js" + }, + "3": { + "name": "punctuation.definition.parameters.begin.js" + }, + "4": { + "name": "variable.parameter.accessor.js" + }, + "5": { + "name": "punctuation.definition.parameters.end.js" + } + }, + "comment": "Concise getter and setter", + "match": "\\b([gs]et\\s*)\\b([a-zA-Z_$][\\w?_$]*)\\s*(\\()(.*?)(\\))", + "name": "meta.accessor.js" + } + ] + }, + "literal-function-call": { + "patterns": [ + { + "begin": "(?=[_$a-zA-Z][_$\\w]*\\s*\\()", + "end": "(?=\\()", + "name": "meta.function-call.static.with-arguments.js", + "patterns": [ + { + "match": "([_$a-zA-Z][_$\\w]*)?", + "name": "entity.name.function.js" + } + ] + } + ] + }, + "literal-function-constructor": { + "patterns": [ + { + "captures": { + "1": { + "name": "storage.type.function.js" + }, + "2": { + "name": "entity.name.function.js" + }, + "3": { + "name": "punctuation.definition.parameters.begin.js" + }, + "4": { + "name": "variable.parameter.function.js" + }, + "5": { + "name": "punctuation.definition.parameters.end.js" + } + }, + "comment": "match regular function like: function myFunc(arg) { }", + "match": "\\b(function)(?:\\s+([a-zA-Z_$]\\w*))?\\s*(\\()(.*?)(\\))", + "name": "meta.function.js" + }, + { + "captures": { + "1": { + "name": "support.class.js" + }, + "2": { + "name": "support.constant.js" + } + }, + "comment": "match stuff like: Sound.prototype = { } when extending an object", + "match": "([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)\\s*=\\s*", + "name": "meta.prototype.declaration.js" + }, + { + "captures": { + "1": { + "name": "support.class.js" + }, + "2": { + "name": "support.constant.js" + }, + "3": { + "name": "entity.name.function.js" + }, + "4": { + "name": "storage.type.function.js" + }, + "5": { + "name": "punctuation.definition.parameters.begin.js" + }, + "6": { + "name": "variable.parameter.function.js" + }, + "7": { + "name": "punctuation.definition.parameters.end.js" + } + }, + "comment": "match stuff like: Sound.prototype.play = function() { }", + "match": "([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*=\\s*(function)?\\s*(\\()(.*?)(\\))", + "name": "meta.prototype.function.js" + }, + { + "captures": { + "1": { + "name": "support.class.js" + }, + "2": { + "name": "support.constant.js" + } + }, + "comment": "Sound.prototype", + "match": "([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)", + "name": "meta.prototype.js" + }, + { + "captures": { + "1": { + "name": "support.class.js" + }, + "2": { + "name": "support.constant.js" + }, + "3": { + "name": "entity.name.function.js" + } + }, + "comment": "match stuff like: Sound.prototype.play = myfunc", + "match": "([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*=\\s*", + "name": "meta.function.js" + }, + { + "captures": { + "1": { + "name": "support.object.js" + }, + "2": { + "name": "entity.name.function.js" + }, + "3": { + "name": "storage.type.function.js" + }, + "4": { + "name": "entity.name.function.js" + }, + "5": { + "name": "punctuation.definition.parameters.begin.js" + }, + "6": { + "name": "variable.parameter.function.js" + }, + "7": { + "name": "punctuation.definition.parameters.end.js" + } + }, + "comment": "match stuff like: Sound.play = function() { }", + "match": "([a-zA-Z_?.$][\\w?.$]*)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*=\\s*(function)( [a-zA-Z_?.$][\\w?.$]*)?\\s*(\\()(.*?)(\\))", + "name": "meta.function.js" + }, + { + "captures": { + "1": { + "name": "entity.name.function.js" + }, + "2": { + "name": "punctuation.separator.key-value.js" + }, + "3": { + "name": "storage.type.function.js" + }, + "4": { + "name": "punctuation.definition.parameters.begin.js" + }, + "5": { + "name": "variable.parameter.function.js" + }, + "6": { + "name": "punctuation.definition.parameters.end.js" + } + }, + "comment": "match stuff like: foobar: function() { }", + "match": "\\b([a-zA-Z_?.$][\\w?.$]*)\\s*(:)\\s*\\b(function)?\\s*(\\()(.*?)(\\))", + "name": "meta.function.json.js" + }, + { + "captures": { + "1": { + "name": "string.quoted.single.js" + }, + "10": { + "name": "storage.type.function.js" + }, + "11": { + "name": "punctuation.definition.parameters.begin.js" + }, + "12": { + "name": "variable.parameter.function.js" + }, + "13": { + "name": "punctuation.definition.parameters.end.js" + }, + "2": { + "name": "punctuation.definition.string.begin.js" + }, + "3": { + "name": "entity.name.function.js" + }, + "4": { + "name": "punctuation.definition.string.end.js" + }, + "5": { + "name": "string.quoted.double.js" + }, + "6": { + "name": "punctuation.definition.string.begin.js" + }, + "7": { + "name": "entity.name.function.js" + }, + "8": { + "name": "punctuation.definition.string.end.js" + }, + "9": { + "name": "punctuation.separator.key-value.js" + } + }, + "comment": "Attempt to match \"foo\": function", + "match": "(?:((')(.*?)('))|((\")(.*?)(\")))\\s*(:)\\s*\\b(function)?\\s*(\\()(.*?)(\\))", + "name": "meta.function.json.js" + } + ] + }, + "literal-keywords": { + "patterns": [ + { + "captures": { + "1": { + "name": "keyword.operator.new.js" + }, + "2": { + "name": "entity.name.type.new.js" + } + }, + "match": "(new)\\s+([a-zA-Z_?.$][\\w?.$]*)", + "name": "meta.instance.constructor" + }, + { + "match": "\\b(var|let|const)\\b", + "name": "keyword.control.declaration.js" + }, + { + "match": "\\b(return|yield)\\b", + "name": "keyword.control.flow.js" + }, + { + "match": "\\b(else|if)\\b", + "name": "keyword.control.conditional.js" + }, + { + "match": "\\b(catch|finally|throw|try)\\b", + "name": "keyword.control.trycatch.js" + }, + { + "match": "\\b(break|continue|do|for|goto|while)\\b", + "name": "keyword.control.loop.js" + }, + { + "match": "\\b(case|default|switch)\\b", + "name": "keyword.control.switch.js" + }, + { + "match": "\\b(delete|in(stanceof)?|new|typeof|void|with)\\b", + "name": "keyword.operator.js" + }, + { + "match": "\\btrue\\b", + "name": "constant.language.boolean.true.js" + }, + { + "match": "\\bfalse\\b", + "name": "constant.language.boolean.false.js" + }, + { + "match": "\\bnull\\b", + "name": "constant.language.null.js" + }, + { + "match": "\\bundefined\\b", + "name": "constant.language.undefined.js" + }, + { + "match": "\\bNaN\\b", + "name": "constant.language.nan.js" + }, + { + "match": "(?=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|/=|%=|\\+=|\\-=|&=|\\^=", + "name": "keyword.operator.js" + }, + { + "match": ":", + "name": "punctuation.separator.key-value" + }, + { + "match": "(?x)\n !(?!=)| # logical-not right-to-left right\n && | # logical-and left-to-right both\n \\|\\| # logical-or left-to-right both", + "name": "keyword.operator.logical.js" + }, + { + "match": "(?x)\n %= | # assignment right-to-left both\n &= | # assignment right-to-left both\n \\*= | # assignment right-to-left both\n \\+= | # assignment right-to-left both\n -= | # assignment right-to-left both\n /= | # assignment right-to-left both\n \\^= | # assignment right-to-left both\n \\|= | # assignment right-to-left both\n <<= | # assignment right-to-left both\n >>= | # assignment right-to-left both\n >>>= # assignment right-to-left both", + "name": "keyword.operator.assignment.augmented.js" + }, + { + "match": "(?x)\n ~ | # bitwise-not right-to-left right\n << | # bitwise-shift left-to-right both\n >>> | # bitwise-shift left-to-right both\n >> | # bitwise-shift left-to-right both\n & | # bitwise-and left-to-right both\n \\^ | # bitwise-xor left-to-right both\n \\| # bitwise-or left-to-right both", + "name": "keyword.operator.bitwise.js" + }, + { + "match": "(?x)\n <= | # relational left-to-right both\n >= | # relational left-to-right both\n < | # relational left-to-right both\n > # relational left-to-right both", + "name": "keyword.operator.relational.js" + }, + { + "match": "(?x)\n === | # equality left-to-right both\n !== | # equality left-to-right both\n == | # equality left-to-right both\n != # equality left-to-right both", + "name": "keyword.operator.comparison.js" + }, + { + "match": "(?x)=", + "name": "keyword.operator.assignment.js" + }, + { + "match": "(?x)\n -- | # decrement n/a right-or-left\n \\+\\+ | # increment n/a right-or-left\n / | # division left-to-right both\n % | # modulus left-to-right both\n \\* | # multiplication left-to-right both\n \\+ | # addition left-to-right both\n - # subtraction left-to-right both", + "name": "keyword.operator.arithmetic.js" + } + ] + }, + "literal-labels": { + "patterns": [ + { + "captures": { + "2": { + "name": "punctuation.separator.key-value.js" + } + }, + "match": "(?<=['\"])(\\s*)(:)" + }, + { + "captures": { + "1": { + "name": "string.unquoted.label.js" + }, + "2": { + "name": "punctuation.separator.key-value.js" + } + }, + "match": "(?\\s*\\n)|(?<=[^\\\\]\\n)", + "endCaptures": { + "1": { + "name": "string.regexp.js" + }, + "2": { + "name": "punctuation.definition.string.end.js" + }, + "3": { + "name": "keyword.other.js" + } + }, + "patterns": [ + { + "match": "\\\\\\n", + "name": "constant.character.escape.newline.js" + }, + { + "match": "\\n", + "name": "invalid.illegal.newline.js" + }, + { + "match": "\\\\.", + "name": "constant.character.escape.js" + } + ] + } + ] + }, + "literal-string": { + "patterns": [ + { + "begin": "'", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.js" + } + }, + "end": "(?i)'|(?=\\s*\\n)|(?<=[^\\\\]\\n)", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.js" + } + }, + "name": "string.quoted.single.js", + "patterns": [ + { + "include": "#string-single-innards" + } + ] + }, + { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.js" + } + }, + "end": "(?i)\"|(?=\\s*\\n)|(?<=[^\\\\]\\n)", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.js" + } + }, + "name": "string.quoted.double.js", + "patterns": [ + { + "include": "#string-double-innards" + } + ] + } + ] + }, + "literal-variable": { + "patterns": [ + { + "match": "\\.?[A-Z][_$\\dA-Z]*\\b", + "name": "variable.other.constant.js" + }, + { + "captures": { + "1": { + "name": "variable.other.class.js" + }, + "2": { + "name": "meta.function.call.class.static.js" + }, + "3": { + "name": "variable.other.class.static.js" + } + }, + "match": "\\b([A-Z][_$\\w]*\\.?)\\s*?(?:([a-z$_][\\w_$]*(?=\\())|([a-z$_][\\w_$]*))?", + "name": "meta.entity.static.js" + }, + { + "match": "(?", + "name": "invalid.deprecated.inconsistent.js" + } + ] + }, + "string-single-innards": { + "patterns": [ + { + "match": "\\\\(x\\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)", + "name": "constant.character.escape.js" + }, + { + "match": "\\\\\\n", + "name": "constant.character.escape.newline.js" + }, + { + "match": "\\n", + "name": "invalid.illegal.newline.js" + }, + { + "match": "(?i)", + "name": "invalid.deprecated.inconsistent.js" + } + ] + }, + "sugar": { + "patterns": [ + { + "begin": "^(?=(\\t| ))", + "end": "(?=[^\\t\\s])", + "name": "meta.leading-tabs", + "patterns": [ + { + "captures": { + "1": { + "name": "meta.odd-tab.group1.spaces" + }, + "10": { + "name": "meta.even-tab.group10.spaces" + }, + "11": { + "name": "meta.odd-tab.group11.spaces" + }, + "2": { + "name": "meta.even-tab.group2.spaces" + }, + "3": { + "name": "meta.odd-tab.group3.spaces" + }, + "4": { + "name": "meta.even-tab.group4.spaces" + }, + "5": { + "name": "meta.odd-tab.group5.spaces" + }, + "6": { + "name": "meta.even-tab.group6.spaces" + }, + "7": { + "name": "meta.odd-tab.group7.spaces" + }, + "8": { + "name": "meta.even-tab.group8.spaces" + }, + "9": { + "name": "meta.odd-tab.group9.spaces" + } + }, + "match": "( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )?" + }, + { + "captures": { + "1": { + "name": "meta.odd-tab.group1.tab" + }, + "10": { + "name": "meta.even-tab.group10.tab" + }, + "11": { + "name": "meta.odd-tab.group11.tab" + }, + "2": { + "name": "meta.even-tab.group2.tab" + }, + "3": { + "name": "meta.odd-tab.group3.tab" + }, + "4": { + "name": "meta.even-tab.group4.tab" + }, + "5": { + "name": "meta.odd-tab.group5.tab" + }, + "6": { + "name": "meta.even-tab.group6.tab" + }, + "7": { + "name": "meta.odd-tab.group7.tab" + }, + "8": { + "name": "meta.even-tab.group8.tab" + }, + "9": { + "name": "meta.odd-tab.group9.tab" + } + }, + "match": "(\\t)(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?" + } + ] + } + ] + }, + "support": { + "patterns": [ + { + "match": "\\b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\\b", + "name": "support.class.builtin.js" + }, + { + "match": "\\b((Eval|Range|Reference|Syntax|Type|URI)?Error)\\b", + "name": "support.class.error.js" + }, + { + "match": "\\b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\\b(?=\\()", + "name": "entity.name.function.mutator.js" + }, + { + "match": "\\b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\\b", + "name": "support.module.node.js" + }, + { + "match": "\\b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\\b", + "name": "support.keyword.node.js" + }, + { + "match": "\\b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\\b", + "name": "support.class.node.js" + }, + { + "match": "\\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\\b(?=\\()", + "name": "entity.name.function.js" + }, + { + "match": "\\b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\\b", + "name": "support.constant.dom.js" + } + ] + } + }, + "scopeName": "source.js", + "uuid": "0D2D03B9-F18B-4D9D-A960-716FDEC35331" +} \ No newline at end of file From db2d7b51c65c1d05f871ec15fbdf8c2b77109a19 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 29 Dec 2013 00:53:02 +1100 Subject: [PATCH 002/202] added 'of' --- JavaScriptNext.JSON-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 3359 ++++++++++++++++---------------- 2 files changed, 1679 insertions(+), 1682 deletions(-) diff --git a/JavaScriptNext.JSON-tmLanguage b/JavaScriptNext.JSON-tmLanguage index 6473b1d..6318e2d 100644 --- a/JavaScriptNext.JSON-tmLanguage +++ b/JavaScriptNext.JSON-tmLanguage @@ -496,7 +496,7 @@ "name": "keyword.control.switch.js" }, { - "match": "\\b(delete|in(stanceof)?|new|typeof|void|with)\\b", + "match": "\\b(delete|in(stanceof)?|of|new|typeof|void|with)\\b", "name": "keyword.operator.js" }, { diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 9668791..38998fb 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1,1046 +1,888 @@ - + + + fileTypes + + js + htc + jsx + + firstLineMatch + ^#!/.*\b(node|js) + keyEquivalent + ^~J + name + JavaScriptNext + patterns + + + include + #comments + + + include + #support + + + include + #core + + + include + #special + + + include + #sugar + + + repository - name - JavaScriptNext - fileTypes - - js - htc - jsx - - scopeName - source.js - firstLineMatch - ^#!/.*\b(node|js) - keyEquivalent - ^~J - patterns - - - - include - #comments - - - include - #support - - - include - #core - - - include - #special - - - include - #sugar - - - repository + arrow-function - comments - - patterns - - - include - #special-comments-conditional-compilation - - - begin - /\*\* - captures + patterns + + + name + arrow.function.js + patterns + - 0 + captures - name - punctuation.definition.comment.js + 1 + + name + entity.arrow.function.js + + 2 + + name + punctuation.definition.parameters.begin.js + + 3 + + name + variable.parameter.function.arrow.js + + 4 + + name + punctuation.definition.parameters.end.js + + 5 + + name + variable.parameter.function.arrow.js + + 6 + + name + punctuation.definition.arrow.js + + comment + match stuff like:(args) => + match + (?x)\s*( + (?:(\() (.*?)? (\))) + | ([_$a-zA-Z][_$\w]*) + )\s*(=>) + name + storage.type.function.arrow.js - end - \*/ - name - comment.block.documentation.js - + + + + + brackets + + patterns + + + captures - begin - /\* - captures + 1 - 0 - - name - punctuation.definition.comment.js - + name + entity.name.function.js - end - \*/ - name - comment.block.js - - captures + match + (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*)? (?=\() + name + meta.function-call.method.with-arguments.js + + + begin + (\()(?!\)) + captures + + 1 - 1 - - name - punctuation.definition.comment.js - + name + punctuation.section.scope.round.js - match - (//).*$\n? - name - comment.line.double-slash.js - - captures + end + (\)) + name + meta.group.braces.round + patterns + - 0 - - name - punctuation.definition.comment.html.js - - 2 - - name - punctuation.definition.comment.html.js - + include + $base - match - (<!--|-->) - name - comment.block.html.js - - - - core - - patterns - - - include - #leading-space - - - include - #brackets - - - include - #literal-method - - - include - #literal-number - - - include - #literal-string - - - include - #arrow-function - - - include - #literal-class - - - include - #literal-quasi - - - include - #literal-regex - - - include - #literal-module - - - include - #literal-keywords - - - include - #literal-function-call - - - include - #literal-function-constructor - - - include - #literal-labels - - - include - #literal-variable - - - include - #literal-punctuation - - - - brackets - - patterns - - - captures + + + + begin + (\[)(?!\]) + captures + + 1 - 1 - - name - entity.name.function.js - + name + punctuation.section.scope.square.js - name - meta.function-call.method.with-arguments.js - match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*)? (?=\() - - begin - (\()(?!\)) - captures + end + (\]) + name + meta.group.braces.square + patterns + - 1 - - name - punctuation.section.scope.round.js - + include + $base - name - meta.group.braces.round - patterns - - - include - $base - - - end - (\)) - - - begin - (\[)(?!\]) - captures + + + + + comments + + patterns + + + include + #special-comments-conditional-compilation + + + begin + /\*\* + captures + + 0 - 1 - - name - punctuation.section.scope.square.js - + name + punctuation.definition.comment.js - name - meta.group.braces.square - patterns - - - include - $base - - - end - (\]) - - - - literal-function-call - - patterns - - - begin - (?=[_$a-zA-Z][_$\w]*\s*\() - end - (?=\() - name - meta.function-call.static.with-arguments.js - patterns - - - match - ([_$a-zA-Z][_$\w]*)? - name - entity.name.function.js - - - - - literal-method - - patterns - - - captures + end + \*/ + name + comment.block.documentation.js + + + begin + /\* + captures + + 0 - 1 - - name - entity.name.function.js - + name + punctuation.definition.comment.js - name - meta.function-call.method.with-arguments.js - match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) (?=\() + end + \*/ + name + comment.block.js + + + captures - captures + 1 - 2 - - name - meta.group.braces.round.function.arguments.js - - 1 - - name - entity.name.function.js - - 3 - - name - punctuation.section.scope.round.js - + name + punctuation.definition.comment.js - name - meta.function-call.method.without-arguments.js - match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) ((\( \s* \))) + match + (//).*$\n? + name + comment.line.double-slash.js + + + captures - begin - (?x) - \b(function) - (?= - (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name - \(.*?\) # The properties that the function accepts - ) - comment - function(one,two,...)\n?{...} - beginCaptures + 0 - 1 - - name - storage.type.function.js - + name + punctuation.definition.comment.html.js - name - meta.function.js - patterns - - - include - $base - - - end - (?<=})(\s*\n)? - - - captures + 2 - 1 - - name - entity.name.method.js - - 2 - - name - punctuation.definition.parameters.begin.js - - 3 - - name - variable.parameter.method.js - - 4 - - name - punctuation.definition.parameters.begin.js - + name + punctuation.definition.comment.html.js - name - meta.method.js - match - (?x) - (?<![_$\w] )(?<!function) - ([_$a-zA-Z][_$\w]*) - (\() (\s* - (.*?) - )?\s* (\)) - \s* - (?={) - - - literal-class - - patterns - + match + (<!--|-->) + name + comment.block.html.js + + + + core + + patterns + + + include + #leading-space + + + include + #brackets + + + include + #literal-method + + + include + #literal-number + + + include + #literal-string + + + include + #arrow-function + + + include + #literal-class + + + include + #literal-quasi + + + include + #literal-regex + + + include + #literal-module + + + include + #literal-keywords + + + include + #literal-function-call + + + include + #literal-function-constructor + + + include + #literal-labels + + + include + #literal-variable + + + include + #literal-punctuation + + + + literal-class + + patterns + + + captures - captures + 1 - 1 - - name - storage.type.class.js - - 2 - - name - entity.name.class.js - - 3 - - name - storage.type.extends.js - - 4 - - name - entity.name.extends.js - + name + storage.type.class.js - comment - match regular class like: class MyClass { } - match - \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* - name - meta.class.js - - - captures + 2 - 1 - - name - storage.type.accessor.js - - 2 - - name - entity.name.accessor.js - - 3 - - name - punctuation.definition.parameters.begin.js - - 4 - - name - variable.parameter.accessor.js - - 5 - - name - punctuation.definition.parameters.end.js - + name + entity.name.class.js - comment - Concise getter and setter - match - \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) - name - meta.accessor.js - - - - literal-module - - patterns - - - comment - match module like: module Module { } - match - \b(module)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(?=\{) - name - meta.module.js - captures - - 1 - - name - storage.type.module.js - - 2 - - name - entity.name.module.js - + 3 + + name + storage.type.extends.js - - - comment - match export like: export decl - match - \b(export)\b\s*(?=(?:module|class|function|var|let|const)\b(?:\s+[a-zA-Z_$][_$\w]*)?) - name - meta.module.export.js - captures - - 1 - - name - storage.type.export.js - + 4 + + name + entity.name.extends.js - - - arrow-function - - patterns - - - name - arrow.function.js - patterns - - - match - (?x)\s*( - (?:(\() (.*?)? (\))) - | ([_$a-zA-Z][_$\w]*) - )\s*(=>) - name - storage.type.function.arrow.js - comment - match stuff like:(args) => - captures - - 1 - - name - entity.arrow.function.js - - 2 - - name - punctuation.definition.parameters.begin.js - - 3 - - name - variable.parameter.function.arrow.js - - 4 - - name - punctuation.definition.parameters.end.js - - 5 - - name - variable.parameter.function.arrow.js - - 6 - - name - punctuation.definition.arrow.js - - - - - - - - literal-function-constructor - - patterns - - - captures + comment + match regular class like: class MyClass { } + match + \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* + name + meta.class.js + + + captures + + 1 - 1 - - name - storage.type.function.js - - 2 - - name - entity.name.function.js - - 3 - - name - punctuation.definition.parameters.begin.js - - 4 - - name - variable.parameter.function.js - - 5 - - name - punctuation.definition.parameters.end.js - + name + storage.type.accessor.js - comment - match regular function like: function myFunc(arg) { } - match - \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) - name - meta.function.js - - - captures + 2 - 1 - - name - support.class.js - - 2 - - name - support.constant.js - + name + entity.name.accessor.js - comment - match stuff like: Sound.prototype = { } when extending an object - match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* - name - meta.prototype.declaration.js - - - captures + 3 - 1 - - name - support.class.js - - 2 - - name - support.constant.js - - 3 - - name - entity.name.function.js - - 4 - - name - storage.type.function.js - - 5 - - name - punctuation.definition.parameters.begin.js - - 6 - - name - variable.parameter.function.js - - 7 - - name - punctuation.definition.parameters.end.js - + name + punctuation.definition.parameters.begin.js - comment - match stuff like: Sound.prototype.play = function() { } - match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) - name - meta.prototype.function.js - - - captures + 4 - 1 - - name - support.class.js - - 2 - - name - support.constant.js - + name + variable.parameter.accessor.js - comment - Sound.prototype - match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype) - name - meta.prototype.js - - - captures + 5 - 1 - - name - support.class.js - - 2 - - name - support.constant.js - - 3 - - name - entity.name.function.js - + name + punctuation.definition.parameters.end.js - comment - match stuff like: Sound.prototype.play = myfunc - match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* - name - meta.function.js - - captures + comment + Concise getter and setter + match + \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) + name + meta.accessor.js + + + + literal-function-call + + patterns + + + begin + (?=[_$a-zA-Z][_$\w]*\s*\() + end + (?=\() + name + meta.function-call.static.with-arguments.js + patterns + - 1 - - name - support.object.js - - 2 - - name - entity.name.function.js - - 3 - - name - storage.type.function.js - - 4 - - name - entity.name.function.js - - 5 - - name - punctuation.definition.parameters.begin.js - - 6 - - name - variable.parameter.function.js - - 7 - - name - punctuation.definition.parameters.end.js - + match + ([_$a-zA-Z][_$\w]*)? + name + entity.name.function.js - comment - match stuff like: Sound.play = function() { } - match - ([a-zA-Z_?.$][\w?.$]*)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) - name - meta.function.js - + + + + + literal-function-constructor + + patterns + + + captures - captures + 1 - 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 - - name - storage.type.function.js - - 4 - - name - punctuation.definition.parameters.begin.js - - 5 - - name - variable.parameter.function.js - - 6 - - name - punctuation.definition.parameters.end.js - + name + storage.type.function.js - comment - match stuff like: foobar: function() { } - match - \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) - name - meta.function.json.js - - - captures + 2 - 1 - - name - string.quoted.single.js - - 10 - - name - storage.type.function.js - - 11 - - name - punctuation.definition.parameters.begin.js - - 12 - - name - variable.parameter.function.js - - 13 - - name - punctuation.definition.parameters.end.js - - 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - + name + entity.name.function.js - comment - Attempt to match "foo": function - match - (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) - name - meta.function.json.js - - - - literal-keywords - - patterns - - - captures + 3 - 1 - - name - keyword.operator.new.js - - 2 - - name - entity.name.type.new.js - + name + punctuation.definition.parameters.begin.js + + 4 + + name + variable.parameter.function.js + + 5 + + name + punctuation.definition.parameters.end.js - match - (new)\s+([a-zA-Z_?.$][\w?.$]*) - name - meta.instance.constructor - - - match - \b(var|let|const)\b - name - keyword.control.declaration.js - - - match - \b(return|yield)\b - name - keyword.control.flow.js - - - match - \b(else|if)\b - name - keyword.control.conditional.js - - - match - \b(catch|finally|throw|try)\b - name - keyword.control.trycatch.js - - - match - \b(break|continue|do|for|goto|while)\b - name - keyword.control.loop.js - - - match - \b(case|default|switch)\b - name - keyword.control.switch.js - - - match - \b(delete|in(stanceof)?|new|typeof|void|with)\b - name - keyword.operator.js - - - match - \btrue\b - name - constant.language.boolean.true.js - - - match - \bfalse\b - name - constant.language.boolean.false.js - - - match - \bnull\b - name - constant.language.null.js - - - match - \bundefined\b - name - constant.language.undefined.js - - - match - \bNaN\b - name - constant.language.nan.js - - - match - (?<!\.)\b(arguments)\b - name - variable.language.arguments.js - - match - (?<!\.)\b(super)\b - name - variable.language.super.js + comment + match regular function like: function myFunc(arg) { } + match + \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) + name + meta.function.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + - - match - (?<!\.)\b(this)\b - name - variable.language.this.js + comment + match stuff like: Sound.prototype = { } when extending an object + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* + name + meta.prototype.declaration.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + 3 + + name + entity.name.function.js + + 4 + + name + storage.type.function.js + + 5 + + name + punctuation.definition.parameters.begin.js + + 6 + + name + variable.parameter.function.js + + 7 + + name + punctuation.definition.parameters.end.js + - - match - (?<!\.)\b(self)\b - name - storage.self.js + comment + match stuff like: Sound.prototype.play = function() { } + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) + name + meta.prototype.function.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + - - match - (?<=\.)\b(__proto__)\b - name - variable.language.proto.js + comment + Sound.prototype + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype) + name + meta.prototype.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + 3 + + name + entity.name.function.js + - - match - (?<=\.)\b(constructor)\b - name - variable.language.constructor.js + comment + match stuff like: Sound.prototype.play = myfunc + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* + name + meta.function.js + + + captures + + 1 + + name + support.object.js + + 2 + + name + entity.name.function.js + + 3 + + name + storage.type.function.js + + 4 + + name + entity.name.function.js + + 5 + + name + punctuation.definition.parameters.begin.js + + 6 + + name + variable.parameter.function.js + + 7 + + name + punctuation.definition.parameters.end.js + - - match - (?<=\.)\b(prototype)\b - name - variable.language.prototype.js + comment + match stuff like: Sound.play = function() { } + match + ([a-zA-Z_?.$][\w?.$]*)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) + name + meta.function.js + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + punctuation.separator.key-value.js + + 3 + + name + storage.type.function.js + + 4 + + name + punctuation.definition.parameters.begin.js + + 5 + + name + variable.parameter.function.js + + 6 + + name + punctuation.definition.parameters.end.js + - - match - !|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^= - name - keyword.operator.js + comment + match stuff like: foobar: function() { } + match + \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + name + meta.function.json.js + + + captures + + 1 + + name + string.quoted.single.js + + 10 + + name + storage.type.function.js + + 11 + + name + punctuation.definition.parameters.begin.js + + 12 + + name + variable.parameter.function.js + + 13 + + name + punctuation.definition.parameters.end.js + + 2 + + name + punctuation.definition.string.begin.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + + comment + Attempt to match "foo": function + match + (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + name + meta.function.json.js + + + + literal-keywords + + patterns + + + captures - match - : - name - punctuation.separator.key-value + 1 + + name + keyword.operator.new.js + + 2 + + name + entity.name.type.new.js + - - match - (?x) + match + (new)\s+([a-zA-Z_?.$][\w?.$]*) + name + meta.instance.constructor + + + match + \b(var|let|const)\b + name + keyword.control.declaration.js + + + match + \b(return|yield)\b + name + keyword.control.flow.js + + + match + \b(else|if)\b + name + keyword.control.conditional.js + + + match + \b(catch|finally|throw|try)\b + name + keyword.control.trycatch.js + + + match + \b(break|continue|do|for|goto|while)\b + name + keyword.control.loop.js + + + match + \b(case|default|switch)\b + name + keyword.control.switch.js + + + match + \b(delete|in(stanceof)?|of|new|typeof|void|with)\b + name + keyword.operator.js + + + match + \btrue\b + name + constant.language.boolean.true.js + + + match + \bfalse\b + name + constant.language.boolean.false.js + + + match + \bnull\b + name + constant.language.null.js + + + match + \bundefined\b + name + constant.language.undefined.js + + + match + \bNaN\b + name + constant.language.nan.js + + + match + (?<!\.)\b(arguments)\b + name + variable.language.arguments.js + + + match + (?<!\.)\b(super)\b + name + variable.language.super.js + + + match + (?<!\.)\b(this)\b + name + variable.language.this.js + + + match + (?<!\.)\b(self)\b + name + storage.self.js + + + match + (?<=\.)\b(__proto__)\b + name + variable.language.proto.js + + + match + (?<=\.)\b(constructor)\b + name + variable.language.constructor.js + + + match + (?<=\.)\b(prototype)\b + name + variable.language.prototype.js + + + match + !|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^= + name + keyword.operator.js + + + match + : + name + punctuation.separator.key-value + + + match + (?x) !(?!=)| # logical-not right-to-left right && | # logical-and left-to-right both \|\| # logical-or left-to-right both - name - keyword.operator.logical.js - - - match - (?x) + name + keyword.operator.logical.js + + + match + (?x) %= | # assignment right-to-left both &= | # assignment right-to-left both \*= | # assignment right-to-left both @@ -1052,12 +894,12 @@ <<= | # assignment right-to-left both >>= | # assignment right-to-left both >>>= # assignment right-to-left both - name - keyword.operator.assignment.augmented.js - - - match - (?x) + name + keyword.operator.assignment.augmented.js + + + match + (?x) ~ | # bitwise-not right-to-left right << | # bitwise-shift left-to-right both >>> | # bitwise-shift left-to-right both @@ -1065,38 +907,38 @@ & | # bitwise-and left-to-right both \^ | # bitwise-xor left-to-right both \| # bitwise-or left-to-right both - name - keyword.operator.bitwise.js - - - match - (?x) + name + keyword.operator.bitwise.js + + + match + (?x) <= | # relational left-to-right both >= | # relational left-to-right both < | # relational left-to-right both > # relational left-to-right both - name - keyword.operator.relational.js - - - match - (?x) + name + keyword.operator.relational.js + + + match + (?x) === | # equality left-to-right both !== | # equality left-to-right both == | # equality left-to-right both != # equality left-to-right both - name - keyword.operator.comparison.js - - - match - (?x)= - name - keyword.operator.assignment.js - - - match - (?x) + name + keyword.operator.comparison.js + + + match + (?x)= + name + keyword.operator.assignment.js + + + match + (?x) -- | # decrement n/a right-or-left \+\+ | # increment n/a right-or-left / | # division left-to-right both @@ -1104,780 +946,935 @@ \* | # multiplication left-to-right both \+ | # addition left-to-right both - # subtraction left-to-right both - name - keyword.operator.arithmetic.js + name + keyword.operator.arithmetic.js + + + + literal-labels + + patterns + + + captures + + 2 + + name + punctuation.separator.key-value.js + + + match + (?<=['"])(\s*)(:) + + + captures + + 1 + + name + string.unquoted.label.js + + 2 + + name + punctuation.separator.key-value.js + + + match + (?<!\?|\? |case )(?!\?)([_$a-zA-Z][_$\w]*)\s*(:) + name + constant.other.object.key.js + + + + literal-method + + patterns + + + captures + + 1 + + name + entity.name.function.js + + + match + (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) (?=\() + name + meta.function-call.method.with-arguments.js + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + meta.group.braces.round.function.arguments.js + + 3 + + name + punctuation.section.scope.round.js + - - - literal-labels - - patterns - + match + (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) ((\( \s* \))) + name + meta.function-call.method.without-arguments.js + + + begin + (?x) + \b(function) + (?= + (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name + \(.*?\) # The properties that the function accepts + ) + beginCaptures - captures + 1 - 2 - - name - punctuation.separator.key-value.js - + name + storage.type.function.js - match - (?<=['"])(\s*)(:) + comment + function(one,two,...)\n?{...} + end + (?<=})(\s*\n)? + name + meta.function.js + patterns + + + include + $base + + + + + captures - captures + 1 - 1 - - name - string.unquoted.label.js - - 2 - - name - punctuation.separator.key-value.js - + name + entity.name.method.js + + 2 + + name + punctuation.definition.parameters.begin.js + + 3 + + name + variable.parameter.method.js + + 4 + + name + punctuation.definition.parameters.begin.js - match - (?<!\?|\? |case )(?!\?)([_$a-zA-Z][_$\w]*)\s*(:) - name - constant.other.object.key.js - - - literal-number - - patterns - + match + (?x) + (?<![_$\w] )(?<!function) + ([_$a-zA-Z][_$\w]*) + (\() (\s* + (.*?) + )?\s* (\)) + \s* + (?={) + name + meta.method.js + + + + literal-module + + patterns + + + captures - match - (?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+) - name - invalid.illegal.numeric.hex.js + 1 + + name + storage.type.module.js + + 2 + + name + entity.name.module.js + - - match - (?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+) - name - invalid.illegal.numeric.octal.js + comment + match module like: module Module { } + match + \b(module)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(?=\{) + name + meta.module.js + + + captures + + 1 + + name + storage.type.export.js + - - match - (?xi)(?:\B[-+])?(?: + comment + match export like: export decl + match + \b(export)\b\s*(?=(?:module|class|function|var|let|const)\b(?:\s+[a-zA-Z_$][_$\w]*)?) + name + meta.module.export.js + + + + literal-number + + patterns + + + match + (?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+) + name + invalid.illegal.numeric.hex.js + + + match + (?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+) + name + invalid.illegal.numeric.octal.js + + + match + (?xi)(?:\B[-+])?(?: \b0x[0-9a-f]* # HEX |( \B\.[0-9]+ # EG: .999 | \b[0-9]+ (\.[0-9]*)? # EG: 999.999 or 999. or 999 )(e[-+]?[0-9]+)? # EG: e+123 or E-123 ) - name - constant.numeric.js - - - match - (?:\B[-+]|\b)(Infinity)\b - name - constant.language.infinity.js - - - - literal-punctuation - - patterns - - - match - \; - name - punctuation.terminator.statement.js - - - match - , - name - meta.delimiter.object.comma.js - - - match - \. - name - meta.delimiter.method.period.js - - - match - \{|\} - name - meta.brace.curly.js - - - match - \(|\) - name - meta.brace.round.js - - - match - \[|\] - name - meta.brace.square.js - - - match - (?<=\.)\s - name - meta.complete.method + name + constant.numeric.js + + + match + (?:\B[-+]|\b)(Infinity)\b + name + constant.language.infinity.js + + + + literal-punctuation + + patterns + + + match + \; + name + punctuation.terminator.statement.js + + + match + , + name + meta.delimiter.object.comma.js + + + match + \. + name + meta.delimiter.method.period.js + + + match + \{|\} + name + meta.brace.curly.js + + + match + \(|\) + name + meta.brace.round.js + + + match + \[|\] + name + meta.brace.square.js + + + match + (?<=\.)\s + name + meta.complete.method + + + + literal-quasi + + patterns + + + begin + ([a-zA-Z$_][\w$_]*)?(`) + beginCaptures + + 1 + + name + entity.quasi.tag.name.js + + 2 + + name + punctuation.definition.quasi.begin.js + - - - literal-quasi - - patterns - + end + ` + endCaptures - begin - ([a-zA-Z$_][\w$_]*)?(`) - beginCaptures + 0 - 1 - - name - entity.quasi.tag.name.js - - 2 - - name - punctuation.definition.quasi.begin.js - + name + punctuation.definition.quasi.end.js - end - ` - endCaptures + + name + string.quasi.js + patterns + - 0 + begin + \${ + beginCaptures - name - punctuation.definition.quasi.end.js + 0 + + name + punctuation.quasi.element.begin.js + - - name - string.quasi.js - patterns - + end + } + endCaptures - name - entity.quasi.element.js - begin - \${ - beginCaptures + 0 - 0 - - name - punctuation.quasi.element.begin.js - + name + punctuation.quasi.element.end.js - end - } - endCaptures + + name + entity.quasi.element.js + patterns + - 0 - - name - punctuation.quasi.element.end.js - + include + $base - patterns - - - include - $base - - - - - - - - literal-regex - - patterns - - - begin - (?x) (?<= [\[,=(:] | ^ | && | return )\s*((/)) (?! [/*+{}?] | $ ) - beginCaptures + + + + + + + literal-regex + + patterns + + + begin + (?x) (?<= [\[,=(:] | ^ | && | return )\s*((/)) (?! [/*+{}?] | $ ) + beginCaptures + + 1 - 1 - - name - string.regexp.js - - 2 - - name - punctuation.definition.string.begin.js - + name + string.regexp.js - contentName - string.regexp.js - end - ((/([igm]*)))|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) - endCaptures + 2 - 1 - - name - string.regexp.js - - 2 - - name - punctuation.definition.string.end.js - - 3 - - name - keyword.other.js - + name + punctuation.definition.string.begin.js - patterns - - - match - \\\n - name - constant.character.escape.newline.js - - - match - \n - name - invalid.illegal.newline.js - - - match - \\. - name - constant.character.escape.js - - - - - literal-string - - patterns - + contentName + string.regexp.js + end + ((/([igm]*)))|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + endCaptures - begin - ' - beginCaptures + 1 - 0 - - name - punctuation.definition.string.begin.js - + name + string.regexp.js - end - (?i)'|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) - endCaptures + 2 - 0 - - name - punctuation.definition.string.end.js - + name + punctuation.definition.string.end.js + + 3 + + name + keyword.other.js - name - string.quoted.single.js - patterns - - - include - #string-single-innards - - - - begin - " - beginCaptures + patterns + - 0 - - name - punctuation.definition.string.begin.js - + match + \\\n + name + constant.character.escape.newline.js - end - (?i)"|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) - endCaptures - 0 - - name - punctuation.definition.string.end.js - + match + \n + name + invalid.illegal.newline.js - name - string.quoted.double.js - patterns - - - include - #string-double-innards - - - - - - literal-variable - - patterns - - - match - \.?[A-Z][_$\dA-Z]*\b - name - variable.other.constant.js - - - match - \b([A-Z][_$\w]*\.?)\s*?(?:([a-z$_][\w_$]*(?=\())|([a-z$_][\w_$]*))? - name - meta.entity.static.js - captures - 1 - - name - variable.other.class.js - - 2 - - name - meta.function.call.class.static.js - - 3 - - name - variable.other.class.static.js - + match + \\. + name + constant.character.escape.js - - - match - (?<!\.)[_$a-zA-Z][_$\w]*\s*(?=[\[\.]) - name - variable.other.object.js - - - captures + + + + + literal-string + + patterns + + + begin + ' + beginCaptures + + 0 - 0 - - name - meta.property-name.js - - 1 - - name - variable.other.object.js - + name + punctuation.definition.string.begin.js - match - ([_$a-zA-Z][_$\w]*)\s*(?=[\[\.]) - name - meta.property.js + end + (?i)'|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + endCaptures - captures + 0 - 0 - - name - variable.other.property.js - + name + punctuation.definition.string.end.js - match - (?<=[\.\]])\s*[_$a-zA-Z][_$\w]* - name - meta.property.js - - - match - [_$a-zA-Z][_$\w]* - name - variable.other.readwrite.js - - - special - - patterns - - - match - \b(console)\b - name - entity.name.type.object.js.firebug - - - match - \.(warn|info|log|error|time|timeEnd|assert)\b - name - support.function.js.firebug - - - match - \b(debugger)\b - name - keyword.other.js - - - - special-comments-conditional-compilation - - patterns - - - begin - /\*(?=@) - captures + name + string.quoted.single.js + patterns + - 0 - - name - punctuation.definition.comment.js - + include + #string-single-innards - end - \*/ - endCaptures + + + + begin + " + beginCaptures + + 0 - 1 - - name - keyword.control.conditional.js - - 2 - - name - punctuation.definition.keyword.js - + name + punctuation.definition.string.begin.js - name - comment.block.conditional.js - patterns - - - include - $base - - + end + (?i)"|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + endCaptures - captures + 0 - 1 - - name - punctuation.definition.keyword.js - + name + punctuation.definition.string.end.js - match - (@)(if|elif|else|end) - name - keyword.control.conditional.js - - captures + name + string.quoted.double.js + patterns + - 1 - - name - punctuation.definition.keyword.js - + include + #string-double-innards - match - (@)(cc_on|set) - name - keyword.operator.conditional.js - - - captures + + + + + literal-variable + + patterns + + + match + \.?[A-Z][_$\dA-Z]*\b + name + variable.other.constant.js + + + captures + + 1 - 1 - - name - punctuation.definition.variable.js - + name + variable.other.class.js + + 2 + + name + meta.function.call.class.static.js + + 3 + + name + variable.other.class.static.js - match - (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript_build|_jscript_version|_jscript|_debug|_fast|[a-zA-Z]\w+) - name - variable.other.conditional.js - - - - string-double-innards - - patterns - - - match - \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.) - name - constant.character.escape.js - - match - \\\n - name - constant.character.escape.newline.js + match + \b([A-Z][_$\w]*\.?)\s*?(?:([a-z$_][\w_$]*(?=\())|([a-z$_][\w_$]*))? + name + meta.entity.static.js + + + match + (?<!\.)[_$a-zA-Z][_$\w]*\s*(?=[\[\.]) + name + variable.other.object.js + + + captures + + 0 + + name + meta.property-name.js + + 1 + + name + variable.other.object.js + + match + ([_$a-zA-Z][_$\w]*)\s*(?=[\[\.]) + name + meta.property.js + + + captures - match - \n - name - invalid.illegal.newline.js + 0 + + name + variable.other.property.js + - - match - (?i)</\s*script\s*> - name - invalid.deprecated.inconsistent.js + match + (?<=[\.\]])\s*[_$a-zA-Z][_$\w]* + name + meta.property.js + + + match + [_$a-zA-Z][_$\w]* + name + variable.other.readwrite.js + + + + special + + patterns + + + match + \b(console)\b + name + entity.name.type.object.js.firebug + + + match + \.(warn|info|log|error|time|timeEnd|assert)\b + name + support.function.js.firebug + + + match + \b(debugger)\b + name + keyword.other.js + + + + special-comments-conditional-compilation + + patterns + + + begin + /\*(?=@) + captures + + 0 + + name + punctuation.definition.comment.js + - - - string-single-innards - - patterns - + end + \*/ + endCaptures - match - \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) - name - constant.character.escape.js + 1 + + name + keyword.control.conditional.js + + 2 + + name + punctuation.definition.keyword.js + + name + comment.block.conditional.js + patterns + + + include + $base + + + + + captures - match - \\\n - name - constant.character.escape.newline.js + 1 + + name + punctuation.definition.keyword.js + + match + (@)(if|elif|else|end) + name + keyword.control.conditional.js + + + captures - match - \n - name - invalid.illegal.newline.js + 1 + + name + punctuation.definition.keyword.js + + match + (@)(cc_on|set) + name + keyword.operator.conditional.js + + + captures - match - (?i)</\s*script\s*> - name - invalid.deprecated.inconsistent.js + 1 + + name + punctuation.definition.variable.js + - - - sugar - - patterns - - - begin - ^(?=(\t| )) - end - (?=[^\t\s]) - name - meta.leading-tabs - patterns - + match + (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript_build|_jscript_version|_jscript|_debug|_fast|[a-zA-Z]\w+) + name + variable.other.conditional.js + + + + string-double-innards + + patterns + + + match + \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.) + name + constant.character.escape.js + + + match + \\\n + name + constant.character.escape.newline.js + + + match + \n + name + invalid.illegal.newline.js + + + match + (?i)</\s*script\s*> + name + invalid.deprecated.inconsistent.js + + + + string-single-innards + + patterns + + + match + \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) + name + constant.character.escape.js + + + match + \\\n + name + constant.character.escape.newline.js + + + match + \n + name + invalid.illegal.newline.js + + + match + (?i)</\s*script\s*> + name + invalid.deprecated.inconsistent.js + + + + sugar + + patterns + + + begin + ^(?=(\t| )) + end + (?=[^\t\s]) + name + meta.leading-tabs + patterns + + + captures - captures + 1 + + name + meta.odd-tab.group1.spaces + + 10 + + name + meta.even-tab.group10.spaces + + 11 + + name + meta.odd-tab.group11.spaces + + 2 + + name + meta.even-tab.group2.spaces + + 3 + + name + meta.odd-tab.group3.spaces + + 4 + + name + meta.even-tab.group4.spaces + + 5 + + name + meta.odd-tab.group5.spaces + + 6 - 1 - - name - meta.odd-tab.group1.spaces - - 10 - - name - meta.even-tab.group10.spaces - - 11 - - name - meta.odd-tab.group11.spaces - - 2 - - name - meta.even-tab.group2.spaces - - 3 - - name - meta.odd-tab.group3.spaces - - 4 - - name - meta.even-tab.group4.spaces - - 5 - - name - meta.odd-tab.group5.spaces - - 6 - - name - meta.even-tab.group6.spaces - - 7 - - name - meta.odd-tab.group7.spaces - - 8 - - name - meta.even-tab.group8.spaces - - 9 - - name - meta.odd-tab.group9.spaces - + name + meta.even-tab.group6.spaces + + 7 + + name + meta.odd-tab.group7.spaces + + 8 + + name + meta.even-tab.group8.spaces + + 9 + + name + meta.odd-tab.group9.spaces - match - ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? + match + ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? + + + captures - captures + 1 + + name + meta.odd-tab.group1.tab + + 10 + + name + meta.even-tab.group10.tab + + 11 + + name + meta.odd-tab.group11.tab + + 2 + + name + meta.even-tab.group2.tab + + 3 - 1 - - name - meta.odd-tab.group1.tab - - 10 - - name - meta.even-tab.group10.tab - - 11 - - name - meta.odd-tab.group11.tab - - 2 - - name - meta.even-tab.group2.tab - - 3 - - name - meta.odd-tab.group3.tab - - 4 - - name - meta.even-tab.group4.tab - - 5 - - name - meta.odd-tab.group5.tab - - 6 - - name - meta.even-tab.group6.tab - - 7 - - name - meta.odd-tab.group7.tab - - 8 - - name - meta.even-tab.group8.tab - - 9 - - name - meta.odd-tab.group9.tab - + name + meta.odd-tab.group3.tab + + 4 + + name + meta.even-tab.group4.tab + + 5 + + name + meta.odd-tab.group5.tab + + 6 + + name + meta.even-tab.group6.tab + + 7 + + name + meta.odd-tab.group7.tab + + 8 + + name + meta.even-tab.group8.tab + + 9 + + name + meta.odd-tab.group9.tab - match - (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? - - - - - support - - patterns - - - match - \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b - name - support.class.builtin.js - - - match - \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b - name - support.class.error.js - - - match - \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() - name - entity.name.function.mutator.js - - - match - \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b - name - support.module.node.js - - - match - \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\b - name - support.keyword.node.js - - - match - \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b - name - support.class.node.js - - - match - \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() - name - entity.name.function.js - - - match - \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b - name - support.constant.dom.js - - - + match + (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? + + + + + + support + + patterns + + + match + \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b + name + support.class.builtin.js + + + match + \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b + name + support.class.error.js + + + match + \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() + name + entity.name.function.mutator.js + + + match + \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b + name + support.module.node.js + + + match + \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\b + name + support.keyword.node.js + + + match + \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b + name + support.class.node.js + + + match + \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + name + entity.name.function.js + + + match + \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b + name + support.constant.dom.js + + - uuid - 0D2D03B9-F18B-4D9D-A960-716FDEC35331 + scopeName + source.js + uuid + 0D2D03B9-F18B-4D9D-A960-716FDEC35331 + From f42c21a16b237da3d19181cc77a755a5c5427833 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 29 Dec 2013 06:13:41 +1100 Subject: [PATCH 003/202] fixed scope name --- JavaScriptNext.JSON-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.JSON-tmLanguage b/JavaScriptNext.JSON-tmLanguage index 6318e2d..86dd602 100644 --- a/JavaScriptNext.JSON-tmLanguage +++ b/JavaScriptNext.JSON-tmLanguage @@ -892,7 +892,7 @@ "name": "variable.other.class.js" }, "2": { - "name": "meta.function.call.class.static.js" + "name": "meta.function-call.class.static.js" }, "3": { "name": "variable.other.class.static.js" diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 38998fb..a6a1bf1 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1448,7 +1448,7 @@ 2 name - meta.function.call.class.static.js + meta.function-call.class.static.js 3 From 9a155bda13135fb029f572ee47b3bb9b9f15d6ba Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 29 Dec 2013 06:49:51 +1100 Subject: [PATCH 004/202] moved "literal-keywords" above "literal-methods" so that syntax highlighting works when there are no spaces after keywords, e.g. "for(let i=1;i<10;i++)" --- JavaScriptNext.JSON-tmLanguage | 6 +++--- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/JavaScriptNext.JSON-tmLanguage b/JavaScriptNext.JSON-tmLanguage index 86dd602..574d9ad 100644 --- a/JavaScriptNext.JSON-tmLanguage +++ b/JavaScriptNext.JSON-tmLanguage @@ -158,6 +158,9 @@ { "include": "#brackets" }, + { + "include": "#literal-keywords" + }, { "include": "#literal-method" }, @@ -182,9 +185,6 @@ { "include": "#literal-module" }, - { - "include": "#literal-keywords" - }, { "include": "#literal-function-call" }, diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index a6a1bf1..9c4a97f 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -249,6 +249,10 @@ include #brackets + + include + #literal-keywords + include #literal-method @@ -281,10 +285,6 @@ include #literal-module - - include - #literal-keywords - include #literal-function-call From 8be826ae8af7c2480fbaa7b9996e67aecc7304af Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 29 Dec 2013 06:58:54 +1100 Subject: [PATCH 005/202] fixed expressions like "a().abc = function()" not being highlighted --- JavaScriptNext.JSON-tmLanguage | 17 +++++++---------- JavaScriptNext.tmLanguage | 19 +++++++------------ 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/JavaScriptNext.JSON-tmLanguage b/JavaScriptNext.JSON-tmLanguage index 574d9ad..70df296 100644 --- a/JavaScriptNext.JSON-tmLanguage +++ b/JavaScriptNext.JSON-tmLanguage @@ -359,29 +359,26 @@ { "captures": { "1": { - "name": "support.object.js" - }, - "2": { "name": "entity.name.function.js" }, - "3": { + "2": { "name": "storage.type.function.js" }, - "4": { + "3": { "name": "entity.name.function.js" }, - "5": { + "4": { "name": "punctuation.definition.parameters.begin.js" }, - "6": { + "5": { "name": "variable.parameter.function.js" }, - "7": { + "6": { "name": "punctuation.definition.parameters.end.js" } }, - "comment": "match stuff like: Sound.play = function() { }", - "match": "([a-zA-Z_?.$][\\w?.$]*)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*=\\s*(function)( [a-zA-Z_?.$][\\w?.$]*)?\\s*(\\()(.*?)(\\))", + "comment": "match stuff like: .play = function() { }", + "match": "\\.([a-zA-Z_?.$][\\w?.$]*)\\s*=\\s*(function)( [a-zA-Z_?.$][\\w?.$]*)?\\s*(\\()(.*?)(\\))", "name": "meta.function.js" }, { diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 9c4a97f..343160a 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -561,45 +561,40 @@ captures 1 - - name - support.object.js - - 2 name entity.name.function.js - 3 + 2 name storage.type.function.js - 4 + 3 name entity.name.function.js - 5 + 4 name punctuation.definition.parameters.begin.js - 6 + 5 name variable.parameter.function.js - 7 + 6 name punctuation.definition.parameters.end.js comment - match stuff like: Sound.play = function() { } + match stuff like: .play = function() { } match - ([a-zA-Z_?.$][\w?.$]*)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) + \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) name meta.function.js From 7dcb254bd76681ed7e3c1323959cb368cda652a7 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 2 Jan 2014 11:12:25 +1100 Subject: [PATCH 006/202] comment on what meta.method.js matches --- JavaScriptNext.JSON-tmLanguage | 1 + 1 file changed, 1 insertion(+) diff --git a/JavaScriptNext.JSON-tmLanguage b/JavaScriptNext.JSON-tmLanguage index 70df296..a72c081 100644 --- a/JavaScriptNext.JSON-tmLanguage +++ b/JavaScriptNext.JSON-tmLanguage @@ -649,6 +649,7 @@ ] }, { + //matches things like "abc(x, y, z){" "captures": { "1": { "name": "entity.name.method.js" From 8dce74d53dd74570b6bdc92c7eb6af81dbcea42f Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 2 Jan 2014 11:16:29 +1100 Subject: [PATCH 007/202] use YAML instead of json, as it is more human readable --- JavaScriptNext.JSON-tmLanguage | 1169 ---------- JavaScriptNext.YAML-tmLanguage | 608 ++++++ JavaScriptNext.tmLanguage | 3626 ++++++++++++++++---------------- 3 files changed, 2421 insertions(+), 2982 deletions(-) delete mode 100644 JavaScriptNext.JSON-tmLanguage create mode 100644 JavaScriptNext.YAML-tmLanguage diff --git a/JavaScriptNext.JSON-tmLanguage b/JavaScriptNext.JSON-tmLanguage deleted file mode 100644 index a72c081..0000000 --- a/JavaScriptNext.JSON-tmLanguage +++ /dev/null @@ -1,1169 +0,0 @@ -{ - "fileTypes": [ - "js", - "htc", - "jsx" - ], - "firstLineMatch": "^#!/.*\\b(node|js)", - "keyEquivalent": "^~J", - "name": "JavaScriptNext", - "patterns": [ - { - "include": "#comments" - }, - { - "include": "#support" - }, - { - "include": "#core" - }, - { - "include": "#special" - }, - { - "include": "#sugar" - } - ], - "repository": { - "arrow-function": { - "patterns": [ - { - "name": "arrow.function.js", - "patterns": [ - { - "captures": { - "1": { - "name": "entity.arrow.function.js" - }, - "2": { - "name": "punctuation.definition.parameters.begin.js" - }, - "3": { - "name": "variable.parameter.function.arrow.js" - }, - "4": { - "name": "punctuation.definition.parameters.end.js" - }, - "5": { - "name": "variable.parameter.function.arrow.js" - }, - "6": { - "name": "punctuation.definition.arrow.js" - } - }, - "comment": "match stuff like:(args) =>", - "match": "(?x)\\s*(\n (?:(\\() (.*?)? (\\)))\n | ([_$a-zA-Z][_$\\w]*)\n )\\s*(=>)", - "name": "storage.type.function.arrow.js" - } - ] - } - ] - }, - "brackets": { - "patterns": [ - { - "captures": { - "1": { - "name": "entity.name.function.js" - } - }, - "match": "(?x)(?<= \\. ) ([_$a-zA-Z][_$\\w]*)? (?=\\()", - "name": "meta.function-call.method.with-arguments.js" - }, - { - "begin": "(\\()(?!\\))", - "captures": { - "1": { - "name": "punctuation.section.scope.round.js" - } - }, - "end": "(\\))", - "name": "meta.group.braces.round", - "patterns": [ - { - "include": "$base" - } - ] - }, - { - "begin": "(\\[)(?!\\])", - "captures": { - "1": { - "name": "punctuation.section.scope.square.js" - } - }, - "end": "(\\])", - "name": "meta.group.braces.square", - "patterns": [ - { - "include": "$base" - } - ] - } - ] - }, - "comments": { - "patterns": [ - { - "include": "#special-comments-conditional-compilation" - }, - { - "begin": "/\\*\\*", - "captures": { - "0": { - "name": "punctuation.definition.comment.js" - } - }, - "end": "\\*/", - "name": "comment.block.documentation.js" - }, - { - "begin": "/\\*", - "captures": { - "0": { - "name": "punctuation.definition.comment.js" - } - }, - "end": "\\*/", - "name": "comment.block.js" - }, - { - "captures": { - "1": { - "name": "punctuation.definition.comment.js" - } - }, - "match": "(//).*$\\n?", - "name": "comment.line.double-slash.js" - }, - { - "captures": { - "0": { - "name": "punctuation.definition.comment.html.js" - }, - "2": { - "name": "punctuation.definition.comment.html.js" - } - }, - "match": "()", - "name": "comment.block.html.js" - } - ] - }, - "core": { - "patterns": [ - { - "include": "#leading-space" - }, - { - "include": "#brackets" - }, - { - "include": "#literal-keywords" - }, - { - "include": "#literal-method" - }, - { - "include": "#literal-number" - }, - { - "include": "#literal-string" - }, - { - "include": "#arrow-function" - }, - { - "include": "#literal-class" - }, - { - "include": "#literal-quasi" - }, - { - "include": "#literal-regex" - }, - { - "include": "#literal-module" - }, - { - "include": "#literal-function-call" - }, - { - "include": "#literal-function-constructor" - }, - { - "include": "#literal-labels" - }, - { - "include": "#literal-variable" - }, - { - "include": "#literal-punctuation" - } - ] - }, - "literal-class": { - "patterns": [ - { - "captures": { - "1": { - "name": "storage.type.class.js" - }, - "2": { - "name": "entity.name.class.js" - }, - "3": { - "name": "storage.type.extends.js" - }, - "4": { - "name": "entity.name.extends.js" - } - }, - "comment": "match regular class like: class MyClass { }", - "match": "\\b(class)\\b(?:\\s+([a-zA-Z_$]\\w*)\\s*(?:\\b(extends)\\b\\s*([a-zA-Z_$][.\\w]*))?)?\\s*", - "name": "meta.class.js" - }, - { - "captures": { - "1": { - "name": "storage.type.accessor.js" - }, - "2": { - "name": "entity.name.accessor.js" - }, - "3": { - "name": "punctuation.definition.parameters.begin.js" - }, - "4": { - "name": "variable.parameter.accessor.js" - }, - "5": { - "name": "punctuation.definition.parameters.end.js" - } - }, - "comment": "Concise getter and setter", - "match": "\\b([gs]et\\s*)\\b([a-zA-Z_$][\\w?_$]*)\\s*(\\()(.*?)(\\))", - "name": "meta.accessor.js" - } - ] - }, - "literal-function-call": { - "patterns": [ - { - "begin": "(?=[_$a-zA-Z][_$\\w]*\\s*\\()", - "end": "(?=\\()", - "name": "meta.function-call.static.with-arguments.js", - "patterns": [ - { - "match": "([_$a-zA-Z][_$\\w]*)?", - "name": "entity.name.function.js" - } - ] - } - ] - }, - "literal-function-constructor": { - "patterns": [ - { - "captures": { - "1": { - "name": "storage.type.function.js" - }, - "2": { - "name": "entity.name.function.js" - }, - "3": { - "name": "punctuation.definition.parameters.begin.js" - }, - "4": { - "name": "variable.parameter.function.js" - }, - "5": { - "name": "punctuation.definition.parameters.end.js" - } - }, - "comment": "match regular function like: function myFunc(arg) { }", - "match": "\\b(function)(?:\\s+([a-zA-Z_$]\\w*))?\\s*(\\()(.*?)(\\))", - "name": "meta.function.js" - }, - { - "captures": { - "1": { - "name": "support.class.js" - }, - "2": { - "name": "support.constant.js" - } - }, - "comment": "match stuff like: Sound.prototype = { } when extending an object", - "match": "([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)\\s*=\\s*", - "name": "meta.prototype.declaration.js" - }, - { - "captures": { - "1": { - "name": "support.class.js" - }, - "2": { - "name": "support.constant.js" - }, - "3": { - "name": "entity.name.function.js" - }, - "4": { - "name": "storage.type.function.js" - }, - "5": { - "name": "punctuation.definition.parameters.begin.js" - }, - "6": { - "name": "variable.parameter.function.js" - }, - "7": { - "name": "punctuation.definition.parameters.end.js" - } - }, - "comment": "match stuff like: Sound.prototype.play = function() { }", - "match": "([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*=\\s*(function)?\\s*(\\()(.*?)(\\))", - "name": "meta.prototype.function.js" - }, - { - "captures": { - "1": { - "name": "support.class.js" - }, - "2": { - "name": "support.constant.js" - } - }, - "comment": "Sound.prototype", - "match": "([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)", - "name": "meta.prototype.js" - }, - { - "captures": { - "1": { - "name": "support.class.js" - }, - "2": { - "name": "support.constant.js" - }, - "3": { - "name": "entity.name.function.js" - } - }, - "comment": "match stuff like: Sound.prototype.play = myfunc", - "match": "([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*=\\s*", - "name": "meta.function.js" - }, - { - "captures": { - "1": { - "name": "entity.name.function.js" - }, - "2": { - "name": "storage.type.function.js" - }, - "3": { - "name": "entity.name.function.js" - }, - "4": { - "name": "punctuation.definition.parameters.begin.js" - }, - "5": { - "name": "variable.parameter.function.js" - }, - "6": { - "name": "punctuation.definition.parameters.end.js" - } - }, - "comment": "match stuff like: .play = function() { }", - "match": "\\.([a-zA-Z_?.$][\\w?.$]*)\\s*=\\s*(function)( [a-zA-Z_?.$][\\w?.$]*)?\\s*(\\()(.*?)(\\))", - "name": "meta.function.js" - }, - { - "captures": { - "1": { - "name": "entity.name.function.js" - }, - "2": { - "name": "punctuation.separator.key-value.js" - }, - "3": { - "name": "storage.type.function.js" - }, - "4": { - "name": "punctuation.definition.parameters.begin.js" - }, - "5": { - "name": "variable.parameter.function.js" - }, - "6": { - "name": "punctuation.definition.parameters.end.js" - } - }, - "comment": "match stuff like: foobar: function() { }", - "match": "\\b([a-zA-Z_?.$][\\w?.$]*)\\s*(:)\\s*\\b(function)?\\s*(\\()(.*?)(\\))", - "name": "meta.function.json.js" - }, - { - "captures": { - "1": { - "name": "string.quoted.single.js" - }, - "10": { - "name": "storage.type.function.js" - }, - "11": { - "name": "punctuation.definition.parameters.begin.js" - }, - "12": { - "name": "variable.parameter.function.js" - }, - "13": { - "name": "punctuation.definition.parameters.end.js" - }, - "2": { - "name": "punctuation.definition.string.begin.js" - }, - "3": { - "name": "entity.name.function.js" - }, - "4": { - "name": "punctuation.definition.string.end.js" - }, - "5": { - "name": "string.quoted.double.js" - }, - "6": { - "name": "punctuation.definition.string.begin.js" - }, - "7": { - "name": "entity.name.function.js" - }, - "8": { - "name": "punctuation.definition.string.end.js" - }, - "9": { - "name": "punctuation.separator.key-value.js" - } - }, - "comment": "Attempt to match \"foo\": function", - "match": "(?:((')(.*?)('))|((\")(.*?)(\")))\\s*(:)\\s*\\b(function)?\\s*(\\()(.*?)(\\))", - "name": "meta.function.json.js" - } - ] - }, - "literal-keywords": { - "patterns": [ - { - "captures": { - "1": { - "name": "keyword.operator.new.js" - }, - "2": { - "name": "entity.name.type.new.js" - } - }, - "match": "(new)\\s+([a-zA-Z_?.$][\\w?.$]*)", - "name": "meta.instance.constructor" - }, - { - "match": "\\b(var|let|const)\\b", - "name": "keyword.control.declaration.js" - }, - { - "match": "\\b(return|yield)\\b", - "name": "keyword.control.flow.js" - }, - { - "match": "\\b(else|if)\\b", - "name": "keyword.control.conditional.js" - }, - { - "match": "\\b(catch|finally|throw|try)\\b", - "name": "keyword.control.trycatch.js" - }, - { - "match": "\\b(break|continue|do|for|goto|while)\\b", - "name": "keyword.control.loop.js" - }, - { - "match": "\\b(case|default|switch)\\b", - "name": "keyword.control.switch.js" - }, - { - "match": "\\b(delete|in(stanceof)?|of|new|typeof|void|with)\\b", - "name": "keyword.operator.js" - }, - { - "match": "\\btrue\\b", - "name": "constant.language.boolean.true.js" - }, - { - "match": "\\bfalse\\b", - "name": "constant.language.boolean.false.js" - }, - { - "match": "\\bnull\\b", - "name": "constant.language.null.js" - }, - { - "match": "\\bundefined\\b", - "name": "constant.language.undefined.js" - }, - { - "match": "\\bNaN\\b", - "name": "constant.language.nan.js" - }, - { - "match": "(?=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|/=|%=|\\+=|\\-=|&=|\\^=", - "name": "keyword.operator.js" - }, - { - "match": ":", - "name": "punctuation.separator.key-value" - }, - { - "match": "(?x)\n !(?!=)| # logical-not right-to-left right\n && | # logical-and left-to-right both\n \\|\\| # logical-or left-to-right both", - "name": "keyword.operator.logical.js" - }, - { - "match": "(?x)\n %= | # assignment right-to-left both\n &= | # assignment right-to-left both\n \\*= | # assignment right-to-left both\n \\+= | # assignment right-to-left both\n -= | # assignment right-to-left both\n /= | # assignment right-to-left both\n \\^= | # assignment right-to-left both\n \\|= | # assignment right-to-left both\n <<= | # assignment right-to-left both\n >>= | # assignment right-to-left both\n >>>= # assignment right-to-left both", - "name": "keyword.operator.assignment.augmented.js" - }, - { - "match": "(?x)\n ~ | # bitwise-not right-to-left right\n << | # bitwise-shift left-to-right both\n >>> | # bitwise-shift left-to-right both\n >> | # bitwise-shift left-to-right both\n & | # bitwise-and left-to-right both\n \\^ | # bitwise-xor left-to-right both\n \\| # bitwise-or left-to-right both", - "name": "keyword.operator.bitwise.js" - }, - { - "match": "(?x)\n <= | # relational left-to-right both\n >= | # relational left-to-right both\n < | # relational left-to-right both\n > # relational left-to-right both", - "name": "keyword.operator.relational.js" - }, - { - "match": "(?x)\n === | # equality left-to-right both\n !== | # equality left-to-right both\n == | # equality left-to-right both\n != # equality left-to-right both", - "name": "keyword.operator.comparison.js" - }, - { - "match": "(?x)=", - "name": "keyword.operator.assignment.js" - }, - { - "match": "(?x)\n -- | # decrement n/a right-or-left\n \\+\\+ | # increment n/a right-or-left\n / | # division left-to-right both\n % | # modulus left-to-right both\n \\* | # multiplication left-to-right both\n \\+ | # addition left-to-right both\n - # subtraction left-to-right both", - "name": "keyword.operator.arithmetic.js" - } - ] - }, - "literal-labels": { - "patterns": [ - { - "captures": { - "2": { - "name": "punctuation.separator.key-value.js" - } - }, - "match": "(?<=['\"])(\\s*)(:)" - }, - { - "captures": { - "1": { - "name": "string.unquoted.label.js" - }, - "2": { - "name": "punctuation.separator.key-value.js" - } - }, - "match": "(?\\s*\\n)|(?<=[^\\\\]\\n)", - "endCaptures": { - "1": { - "name": "string.regexp.js" - }, - "2": { - "name": "punctuation.definition.string.end.js" - }, - "3": { - "name": "keyword.other.js" - } - }, - "patterns": [ - { - "match": "\\\\\\n", - "name": "constant.character.escape.newline.js" - }, - { - "match": "\\n", - "name": "invalid.illegal.newline.js" - }, - { - "match": "\\\\.", - "name": "constant.character.escape.js" - } - ] - } - ] - }, - "literal-string": { - "patterns": [ - { - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.js" - } - }, - "end": "(?i)'|(?=\\s*\\n)|(?<=[^\\\\]\\n)", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.js" - } - }, - "name": "string.quoted.single.js", - "patterns": [ - { - "include": "#string-single-innards" - } - ] - }, - { - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.js" - } - }, - "end": "(?i)\"|(?=\\s*\\n)|(?<=[^\\\\]\\n)", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.js" - } - }, - "name": "string.quoted.double.js", - "patterns": [ - { - "include": "#string-double-innards" - } - ] - } - ] - }, - "literal-variable": { - "patterns": [ - { - "match": "\\.?[A-Z][_$\\dA-Z]*\\b", - "name": "variable.other.constant.js" - }, - { - "captures": { - "1": { - "name": "variable.other.class.js" - }, - "2": { - "name": "meta.function-call.class.static.js" - }, - "3": { - "name": "variable.other.class.static.js" - } - }, - "match": "\\b([A-Z][_$\\w]*\\.?)\\s*?(?:([a-z$_][\\w_$]*(?=\\())|([a-z$_][\\w_$]*))?", - "name": "meta.entity.static.js" - }, - { - "match": "(?", - "name": "invalid.deprecated.inconsistent.js" - } - ] - }, - "string-single-innards": { - "patterns": [ - { - "match": "\\\\(x\\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)", - "name": "constant.character.escape.js" - }, - { - "match": "\\\\\\n", - "name": "constant.character.escape.newline.js" - }, - { - "match": "\\n", - "name": "invalid.illegal.newline.js" - }, - { - "match": "(?i)", - "name": "invalid.deprecated.inconsistent.js" - } - ] - }, - "sugar": { - "patterns": [ - { - "begin": "^(?=(\\t| ))", - "end": "(?=[^\\t\\s])", - "name": "meta.leading-tabs", - "patterns": [ - { - "captures": { - "1": { - "name": "meta.odd-tab.group1.spaces" - }, - "10": { - "name": "meta.even-tab.group10.spaces" - }, - "11": { - "name": "meta.odd-tab.group11.spaces" - }, - "2": { - "name": "meta.even-tab.group2.spaces" - }, - "3": { - "name": "meta.odd-tab.group3.spaces" - }, - "4": { - "name": "meta.even-tab.group4.spaces" - }, - "5": { - "name": "meta.odd-tab.group5.spaces" - }, - "6": { - "name": "meta.even-tab.group6.spaces" - }, - "7": { - "name": "meta.odd-tab.group7.spaces" - }, - "8": { - "name": "meta.even-tab.group8.spaces" - }, - "9": { - "name": "meta.odd-tab.group9.spaces" - } - }, - "match": "( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )?" - }, - { - "captures": { - "1": { - "name": "meta.odd-tab.group1.tab" - }, - "10": { - "name": "meta.even-tab.group10.tab" - }, - "11": { - "name": "meta.odd-tab.group11.tab" - }, - "2": { - "name": "meta.even-tab.group2.tab" - }, - "3": { - "name": "meta.odd-tab.group3.tab" - }, - "4": { - "name": "meta.even-tab.group4.tab" - }, - "5": { - "name": "meta.odd-tab.group5.tab" - }, - "6": { - "name": "meta.even-tab.group6.tab" - }, - "7": { - "name": "meta.odd-tab.group7.tab" - }, - "8": { - "name": "meta.even-tab.group8.tab" - }, - "9": { - "name": "meta.odd-tab.group9.tab" - } - }, - "match": "(\\t)(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?(\\t)?" - } - ] - } - ] - }, - "support": { - "patterns": [ - { - "match": "\\b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\\b", - "name": "support.class.builtin.js" - }, - { - "match": "\\b((Eval|Range|Reference|Syntax|Type|URI)?Error)\\b", - "name": "support.class.error.js" - }, - { - "match": "\\b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\\b(?=\\()", - "name": "entity.name.function.mutator.js" - }, - { - "match": "\\b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\\b", - "name": "support.module.node.js" - }, - { - "match": "\\b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\\b", - "name": "support.keyword.node.js" - }, - { - "match": "\\b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\\b", - "name": "support.class.node.js" - }, - { - "match": "\\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\\b(?=\\()", - "name": "entity.name.function.js" - }, - { - "match": "\\b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\\b", - "name": "support.constant.dom.js" - } - ] - } - }, - "scopeName": "source.js", - "uuid": "0D2D03B9-F18B-4D9D-A960-716FDEC35331" -} \ No newline at end of file diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage new file mode 100644 index 0000000..29d9bcf --- /dev/null +++ b/JavaScriptNext.YAML-tmLanguage @@ -0,0 +1,608 @@ +# [PackageDev] target_format: plist, ext: tmLanguage +name: JavaScriptNext +scopeName: source.js +fileTypes: [js, htc, jsx] +uuid: 0D2D03B9-F18B-4D9D-A960-716FDEC35331 +firstLineMatch: ^#!/.*\b(node|js) +keyEquivalent: ^~J + +patterns: +- include: '#comments' +- include: '#support' +- include: '#core' +- include: '#special' +- include: '#sugar' + +repository: + arrow-function: + patterns: + - name: arrow.function.js + patterns: + - comment: match stuff like:(args) => + name: storage.type.function.arrow.js + match: |- + (?x)\s*( + (?:(\() (.*?)? (\))) + | ([_$a-zA-Z][_$\w]*) + )\s*(=>) + captures: + '1': {name: entity.arrow.function.js} + '2': {name: punctuation.definition.parameters.begin.js} + '3': {name: variable.parameter.function.arrow.js} + '4': {name: punctuation.definition.parameters.end.js} + '5': {name: variable.parameter.function.arrow.js} + '6': {name: punctuation.definition.arrow.js} + + brackets: + patterns: + - name: meta.function-call.method.with-arguments.js + match: (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*)? (?=\() + captures: + '1': {name: entity.name.function.js} + - name: meta.group.braces.round + begin: (\()(?!\)) + end: (\)) + captures: + '1': {name: punctuation.section.scope.round.js} + patterns: + - include: $base + - name: meta.group.braces.square + begin: (\[)(?!\]) + end: (\]) + captures: + '1': {name: punctuation.section.scope.square.js} + patterns: + - include: $base + + comments: + patterns: + - include: '#special-comments-conditional-compilation' + - name: comment.block.documentation.js + begin: /\*\* + end: \*/ + captures: + '0': {name: punctuation.definition.comment.js} + - name: comment.block.js + begin: /\* + end: \*/ + captures: + '0': {name: punctuation.definition.comment.js} + - name: comment.line.double-slash.js + match: (//).*$\n? + captures: + '1': {name: punctuation.definition.comment.js} + - name: comment.block.html.js + match: () + captures: + '0': {name: punctuation.definition.comment.html.js} + '2': {name: punctuation.definition.comment.html.js} + + core: + patterns: + - include: '#leading-space' + - include: '#brackets' + - include: '#literal-keywords' + - include: '#literal-method' + - include: '#literal-number' + - include: '#literal-string' + - include: '#arrow-function' + - include: '#literal-class' + - include: '#literal-quasi' + - include: '#literal-regex' + - include: '#literal-module' + - include: '#literal-function-call' + - include: '#literal-function-constructor' + - include: '#literal-labels' + - include: '#literal-variable' + - include: '#literal-punctuation' + + literal-class: + patterns: + - comment: 'match regular class like: class MyClass { }' + name: meta.class.js + match: \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* + captures: + '1': {name: storage.type.class.js} + '2': {name: entity.name.class.js} + '3': {name: storage.type.extends.js} + '4': {name: entity.name.extends.js} + - comment: Concise getter and setter + name: meta.accessor.js + match: \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) + captures: + '1': {name: storage.type.accessor.js} + '2': {name: entity.name.accessor.js} + '3': {name: punctuation.definition.parameters.begin.js} + '4': {name: variable.parameter.accessor.js} + '5': {name: punctuation.definition.parameters.end.js} + + literal-function-call: + patterns: + - name: meta.function-call.static.with-arguments.js + begin: (?=[_$a-zA-Z][_$\w]*\s*\() + end: (?=\() + patterns: + - name: entity.name.function.js + match: ([_$a-zA-Z][_$\w]*)? + + literal-function-constructor: + patterns: + - comment: 'match regular function like: function myFunc(arg) { }' + name: meta.function.js + match: \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) + captures: + '1': {name: storage.type.function.js} + '2': {name: entity.name.function.js} + '3': {name: punctuation.definition.parameters.begin.js} + '4': {name: variable.parameter.function.js} + '5': {name: punctuation.definition.parameters.end.js} + - comment: 'match stuff like: Sound.prototype = { } when extending an object' + name: meta.prototype.declaration.js + match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* + captures: + '1': {name: support.class.js} + '2': {name: support.constant.js} + - comment: 'match stuff like: Sound.prototype.play = function() { }' + name: meta.prototype.function.js + match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) + captures: + '1': {name: support.class.js} + '2': {name: support.constant.js} + '3': {name: entity.name.function.js} + '4': {name: storage.type.function.js} + '5': {name: punctuation.definition.parameters.begin.js} + '6': {name: variable.parameter.function.js} + '7': {name: punctuation.definition.parameters.end.js} + - comment: Sound.prototype + name: meta.prototype.js + match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype) + captures: + '1': {name: support.class.js} + '2': {name: support.constant.js} + - comment: 'match stuff like: Sound.prototype.play = myfunc' + name: meta.function.js + match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* + captures: + '1': {name: support.class.js} + '2': {name: support.constant.js} + '3': {name: entity.name.function.js} + - comment: 'match stuff like: .play = function() { }' + name: meta.function.js + match: \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) + captures: + '1': {name: entity.name.function.js} + '2': {name: storage.type.function.js} + '3': {name: entity.name.function.js} + '4': {name: punctuation.definition.parameters.begin.js} + '5': {name: variable.parameter.function.js} + '6': {name: punctuation.definition.parameters.end.js} + - comment: 'match stuff like: foobar: function() { }' + name: meta.function.json.js + match: \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + captures: + '1': {name: entity.name.function.js} + '2': {name: punctuation.separator.key-value.js} + '3': {name: storage.type.function.js} + '4': {name: punctuation.definition.parameters.begin.js} + '5': {name: variable.parameter.function.js} + '6': {name: punctuation.definition.parameters.end.js} + - comment: 'Attempt to match "foo": function' + name: meta.function.json.js + match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + captures: + '1': {name: string.quoted.single.js} + '2': {name: punctuation.definition.string.begin.js} + '3': {name: entity.name.function.js} + '4': {name: punctuation.definition.string.end.js} + '5': {name: string.quoted.double.js} + '6': {name: punctuation.definition.string.begin.js} + '7': {name: entity.name.function.js} + '8': {name: punctuation.definition.string.end.js} + '9': {name: punctuation.separator.key-value.js} + '10': {name: storage.type.function.js} + '11': {name: punctuation.definition.parameters.begin.js} + '12': {name: variable.parameter.function.js} + '13': {name: punctuation.definition.parameters.end.js} + + literal-keywords: + patterns: + - name: meta.instance.constructor + match: (new)\s+([a-zA-Z_?.$][\w?.$]*) + captures: + '1': {name: keyword.operator.new.js} + '2': {name: entity.name.type.new.js} + - name: keyword.control.declaration.js + match: \b(var|let|const)\b + - name: keyword.control.flow.js + match: \b(return|yield)\b + - name: keyword.control.conditional.js + match: \b(else|if)\b + - name: keyword.control.trycatch.js + match: \b(catch|finally|throw|try)\b + - name: keyword.control.loop.js + match: \b(break|continue|do|for|goto|while)\b + - name: keyword.control.switch.js + match: \b(case|default|switch)\b + - name: keyword.operator.js + match: \b(delete|in(stanceof)?|of|new|typeof|void|with)\b + - name: constant.language.boolean.true.js + match: \btrue\b + - name: constant.language.boolean.false.js + match: \bfalse\b + - name: constant.language.null.js + match: \bnull\b + - name: constant.language.undefined.js + match: \bundefined\b + - name: constant.language.nan.js + match: \bNaN\b + - name: variable.language.arguments.js + match: (?=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^=' + - name: punctuation.separator.key-value + match: ':' + - name: keyword.operator.logical.js + match: |- + (?x) + !(?!=)| # logical-not right-to-left right + && | # logical-and left-to-right both + \|\| # logical-or left-to-right both + - name: keyword.operator.assignment.augmented.js + match: |- + (?x) + %= | # assignment right-to-left both + &= | # assignment right-to-left both + \*= | # assignment right-to-left both + \+= | # assignment right-to-left both + -= | # assignment right-to-left both + /= | # assignment right-to-left both + \^= | # assignment right-to-left both + \|= | # assignment right-to-left both + <<= | # assignment right-to-left both + >>= | # assignment right-to-left both + >>>= # assignment right-to-left both + - name: keyword.operator.bitwise.js + match: |- + (?x) + ~ | # bitwise-not right-to-left right + << | # bitwise-shift left-to-right both + >>> | # bitwise-shift left-to-right both + >> | # bitwise-shift left-to-right both + & | # bitwise-and left-to-right both + \^ | # bitwise-xor left-to-right both + \| # bitwise-or left-to-right both + - name: keyword.operator.relational.js + match: |- + (?x) + <= | # relational left-to-right both + >= | # relational left-to-right both + < | # relational left-to-right both + > # relational left-to-right both + - name: keyword.operator.comparison.js + match: |- + (?x) + === | # equality left-to-right both + !== | # equality left-to-right both + == | # equality left-to-right both + != # equality left-to-right both + - name: keyword.operator.assignment.js + match: (?x)= + - name: keyword.operator.arithmetic.js + match: |- + (?x) + -- | # decrement n/a right-or-left + \+\+ | # increment n/a right-or-left + / | # division left-to-right both + % | # modulus left-to-right both + \* | # multiplication left-to-right both + \+ | # addition left-to-right both + - # subtraction left-to-right both + + literal-labels: + patterns: + - match: (?<=['"])(\s*)(:) + captures: + '2': {name: punctuation.separator.key-value.js} + - name: constant.other.object.key.js + match: (?\s*\n)|(?<=[^\\]\n) + endCaptures: + '1': {name: string.regexp.js} + '2': {name: punctuation.definition.string.end.js} + '3': {name: keyword.other.js} + patterns: + - name: constant.character.escape.newline.js + match: \\\n + - name: invalid.illegal.newline.js + match: \n + - name: constant.character.escape.js + match: \\. + + literal-string: + patterns: + - name: string.quoted.single.js + begin: "'" + beginCaptures: + '0': {name: punctuation.definition.string.begin.js} + end: (?i)'|(?=\s*\n)|(?<=[^\\]\n) + endCaptures: + '0': {name: punctuation.definition.string.end.js} + patterns: + - include: '#string-single-innards' + - name: string.quoted.double.js + begin: '"' + beginCaptures: + '0': {name: punctuation.definition.string.begin.js} + end: (?i)"|(?=\s*\n)|(?<=[^\\]\n) + endCaptures: + '0': {name: punctuation.definition.string.end.js} + patterns: + - include: '#string-double-innards' + + literal-variable: + patterns: + - name: variable.other.constant.js + match: \.?[A-Z][_$\dA-Z]*\b + - name: meta.entity.static.js + match: \b([A-Z][_$\w]*\.?)\s*?(?:([a-z$_][\w_$]*(?=\())|([a-z$_][\w_$]*))? + captures: + '1': {name: variable.other.class.js} + '2': {name: meta.function-call.class.static.js} + '3': {name: variable.other.class.static.js} + - name: variable.other.object.js + match: (? + + string-single-innards: + patterns: + - name: constant.character.escape.js + match: \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) + - name: constant.character.escape.newline.js + match: \\\n + - name: invalid.illegal.newline.js + match: \n + - name: invalid.deprecated.inconsistent.js + match: (?i) + + sugar: + patterns: + - name: meta.leading-tabs + begin: ^(?=(\t| )) + end: (?=[^\t\s]) + patterns: + - match: ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? + captures: + '1': {name: meta.odd-tab.group1.spaces} + '2': {name: meta.even-tab.group2.spaces} + '3': {name: meta.odd-tab.group3.spaces} + '4': {name: meta.even-tab.group4.spaces} + '5': {name: meta.odd-tab.group5.spaces} + '6': {name: meta.even-tab.group6.spaces} + '7': {name: meta.odd-tab.group7.spaces} + '8': {name: meta.even-tab.group8.spaces} + '9': {name: meta.odd-tab.group9.spaces} + '10': {name: meta.even-tab.group10.spaces} + '11': {name: meta.odd-tab.group11.spaces} + - match: (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? + captures: + '1': {name: meta.odd-tab.group1.tab} + '2': {name: meta.even-tab.group2.tab} + '3': {name: meta.odd-tab.group3.tab} + '4': {name: meta.even-tab.group4.tab} + '5': {name: meta.odd-tab.group5.tab} + '6': {name: meta.even-tab.group6.tab} + '7': {name: meta.odd-tab.group7.tab} + '8': {name: meta.even-tab.group8.tab} + '9': {name: meta.odd-tab.group9.tab} + '10': {name: meta.even-tab.group10.tab} + '11': {name: meta.odd-tab.group11.tab} + + support: + patterns: + - name: support.class.builtin.js + match: \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b + - name: support.class.error.js + match: \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b + - name: entity.name.function.mutator.js + match: \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() + - name: support.module.node.js + match: \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b + - name: support.keyword.node.js + match: \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\b + - name: support.class.node.js + match: \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b + - name: entity.name.function.js + match: \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + - name: support.constant.dom.js + match: \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 343160a..c09dde6 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -2,882 +2,882 @@ - fileTypes - - js - htc - jsx - - firstLineMatch - ^#!/.*\b(node|js) - keyEquivalent - ^~J - name - JavaScriptNext - patterns - - - include - #comments - - - include - #support - - - include - #core - - - include - #special - - - include - #sugar - - - repository - - arrow-function - - patterns - - - name - arrow.function.js - patterns - - - captures - - 1 - - name - entity.arrow.function.js - - 2 - - name - punctuation.definition.parameters.begin.js - - 3 - - name - variable.parameter.function.arrow.js - - 4 - - name - punctuation.definition.parameters.end.js - - 5 - - name - variable.parameter.function.arrow.js - - 6 - - name - punctuation.definition.arrow.js - - - comment - match stuff like:(args) => - match - (?x)\s*( + fileTypes + + js + htc + jsx + + firstLineMatch + ^#!/.*\b(node|js) + keyEquivalent + ^~J + name + JavaScriptNext + patterns + + + include + #comments + + + include + #support + + + include + #core + + + include + #special + + + include + #sugar + + + repository + + arrow-function + + patterns + + + name + arrow.function.js + patterns + + + captures + + 1 + + name + entity.arrow.function.js + + 2 + + name + punctuation.definition.parameters.begin.js + + 3 + + name + variable.parameter.function.arrow.js + + 4 + + name + punctuation.definition.parameters.end.js + + 5 + + name + variable.parameter.function.arrow.js + + 6 + + name + punctuation.definition.arrow.js + + + comment + match stuff like:(args) => + match + (?x)\s*( (?:(\() (.*?)? (\))) | ([_$a-zA-Z][_$\w]*) )\s*(=>) - name - storage.type.function.arrow.js - - - - - - brackets - - patterns - - - captures - - 1 - - name - entity.name.function.js - - - match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*)? (?=\() - name - meta.function-call.method.with-arguments.js - - - begin - (\()(?!\)) - captures - - 1 - - name - punctuation.section.scope.round.js - - - end - (\)) - name - meta.group.braces.round - patterns - - - include - $base - - - - - begin - (\[)(?!\]) - captures - - 1 - - name - punctuation.section.scope.square.js - - - end - (\]) - name - meta.group.braces.square - patterns - - - include - $base - - - - - - comments - - patterns - - - include - #special-comments-conditional-compilation - - - begin - /\*\* - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - name - comment.block.documentation.js - - - begin - /\* - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - name - comment.block.js - - - captures - - 1 - - name - punctuation.definition.comment.js - - - match - (//).*$\n? - name - comment.line.double-slash.js - - - captures - - 0 - - name - punctuation.definition.comment.html.js - - 2 - - name - punctuation.definition.comment.html.js - - - match - (<!--|-->) - name - comment.block.html.js - - - - core - - patterns - - - include - #leading-space - - - include - #brackets - - - include - #literal-keywords - - - include - #literal-method - - - include - #literal-number - - - include - #literal-string - - - include - #arrow-function - - - include - #literal-class - - - include - #literal-quasi - - - include - #literal-regex - - - include - #literal-module - - - include - #literal-function-call - - - include - #literal-function-constructor - - - include - #literal-labels - - - include - #literal-variable - - - include - #literal-punctuation - - - - literal-class - - patterns - - - captures - - 1 - - name - storage.type.class.js - - 2 - - name - entity.name.class.js - - 3 - - name - storage.type.extends.js - - 4 - - name - entity.name.extends.js - - - comment - match regular class like: class MyClass { } - match - \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* - name - meta.class.js - - - captures - - 1 - - name - storage.type.accessor.js - - 2 - - name - entity.name.accessor.js - - 3 - - name - punctuation.definition.parameters.begin.js - - 4 - - name - variable.parameter.accessor.js - - 5 - - name - punctuation.definition.parameters.end.js - - - comment - Concise getter and setter - match - \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) - name - meta.accessor.js - - - - literal-function-call - - patterns - - - begin - (?=[_$a-zA-Z][_$\w]*\s*\() - end - (?=\() - name - meta.function-call.static.with-arguments.js - patterns - - - match - ([_$a-zA-Z][_$\w]*)? - name - entity.name.function.js - - - - - - literal-function-constructor - - patterns - - - captures - - 1 - - name - storage.type.function.js - - 2 - - name - entity.name.function.js - - 3 - - name - punctuation.definition.parameters.begin.js - - 4 - - name - variable.parameter.function.js - - 5 - - name - punctuation.definition.parameters.end.js - - - comment - match regular function like: function myFunc(arg) { } - match - \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) - name - meta.function.js - - - captures - - 1 - - name - support.class.js - - 2 - - name - support.constant.js - - - comment - match stuff like: Sound.prototype = { } when extending an object - match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* - name - meta.prototype.declaration.js - - - captures - - 1 - - name - support.class.js - - 2 - - name - support.constant.js - - 3 - - name - entity.name.function.js - - 4 - - name - storage.type.function.js - - 5 - - name - punctuation.definition.parameters.begin.js - - 6 - - name - variable.parameter.function.js - - 7 - - name - punctuation.definition.parameters.end.js - - - comment - match stuff like: Sound.prototype.play = function() { } - match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) - name - meta.prototype.function.js - - - captures - - 1 - - name - support.class.js - - 2 - - name - support.constant.js - - - comment - Sound.prototype - match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype) - name - meta.prototype.js - - - captures - - 1 - - name - support.class.js - - 2 - - name - support.constant.js - - 3 - - name - entity.name.function.js - - - comment - match stuff like: Sound.prototype.play = myfunc - match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* - name - meta.function.js - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - storage.type.function.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.parameters.begin.js - - 5 - - name - variable.parameter.function.js - - 6 - - name - punctuation.definition.parameters.end.js - - - comment - match stuff like: .play = function() { } - match - \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) - name - meta.function.js - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 - - name - storage.type.function.js - - 4 - - name - punctuation.definition.parameters.begin.js - - 5 - - name - variable.parameter.function.js - - 6 - - name - punctuation.definition.parameters.end.js - - - comment - match stuff like: foobar: function() { } - match - \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) - name - meta.function.json.js - - - captures - - 1 - - name - string.quoted.single.js - - 10 - - name - storage.type.function.js - - 11 - - name - punctuation.definition.parameters.begin.js - - 12 - - name - variable.parameter.function.js - - 13 - - name - punctuation.definition.parameters.end.js - - 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - - - comment - Attempt to match "foo": function - match - (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) - name - meta.function.json.js - - - - literal-keywords - - patterns - - - captures - - 1 - - name - keyword.operator.new.js - - 2 - - name - entity.name.type.new.js - - - match - (new)\s+([a-zA-Z_?.$][\w?.$]*) - name - meta.instance.constructor - - - match - \b(var|let|const)\b - name - keyword.control.declaration.js - - - match - \b(return|yield)\b - name - keyword.control.flow.js - - - match - \b(else|if)\b - name - keyword.control.conditional.js - - - match - \b(catch|finally|throw|try)\b - name - keyword.control.trycatch.js - - - match - \b(break|continue|do|for|goto|while)\b - name - keyword.control.loop.js - - - match - \b(case|default|switch)\b - name - keyword.control.switch.js - - - match - \b(delete|in(stanceof)?|of|new|typeof|void|with)\b - name - keyword.operator.js - - - match - \btrue\b - name - constant.language.boolean.true.js - - - match - \bfalse\b - name - constant.language.boolean.false.js - - - match - \bnull\b - name - constant.language.null.js - - - match - \bundefined\b - name - constant.language.undefined.js - - - match - \bNaN\b - name - constant.language.nan.js - - - match - (?<!\.)\b(arguments)\b - name - variable.language.arguments.js - - - match - (?<!\.)\b(super)\b - name - variable.language.super.js - - - match - (?<!\.)\b(this)\b - name - variable.language.this.js - - - match - (?<!\.)\b(self)\b - name - storage.self.js - - - match - (?<=\.)\b(__proto__)\b - name - variable.language.proto.js - - - match - (?<=\.)\b(constructor)\b - name - variable.language.constructor.js - - - match - (?<=\.)\b(prototype)\b - name - variable.language.prototype.js - - - match - !|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^= - name - keyword.operator.js - - - match - : - name - punctuation.separator.key-value - - - match - (?x) + name + storage.type.function.arrow.js + + + + + + brackets + + patterns + + + captures + + 1 + + name + entity.name.function.js + + + match + (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*)? (?=\() + name + meta.function-call.method.with-arguments.js + + + begin + (\()(?!\)) + captures + + 1 + + name + punctuation.section.scope.round.js + + + end + (\)) + name + meta.group.braces.round + patterns + + + include + $base + + + + + begin + (\[)(?!\]) + captures + + 1 + + name + punctuation.section.scope.square.js + + + end + (\]) + name + meta.group.braces.square + patterns + + + include + $base + + + + + + comments + + patterns + + + include + #special-comments-conditional-compilation + + + begin + /\*\* + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/ + name + comment.block.documentation.js + + + begin + /\* + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/ + name + comment.block.js + + + captures + + 1 + + name + punctuation.definition.comment.js + + + match + (//).*$\n? + name + comment.line.double-slash.js + + + captures + + 0 + + name + punctuation.definition.comment.html.js + + 2 + + name + punctuation.definition.comment.html.js + + + match + (<!--|-->) + name + comment.block.html.js + + + + core + + patterns + + + include + #leading-space + + + include + #brackets + + + include + #literal-keywords + + + include + #literal-method + + + include + #literal-number + + + include + #literal-string + + + include + #arrow-function + + + include + #literal-class + + + include + #literal-quasi + + + include + #literal-regex + + + include + #literal-module + + + include + #literal-function-call + + + include + #literal-function-constructor + + + include + #literal-labels + + + include + #literal-variable + + + include + #literal-punctuation + + + + literal-class + + patterns + + + captures + + 1 + + name + storage.type.class.js + + 2 + + name + entity.name.class.js + + 3 + + name + storage.type.extends.js + + 4 + + name + entity.name.extends.js + + + comment + match regular class like: class MyClass { } + match + \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* + name + meta.class.js + + + captures + + 1 + + name + storage.type.accessor.js + + 2 + + name + entity.name.accessor.js + + 3 + + name + punctuation.definition.parameters.begin.js + + 4 + + name + variable.parameter.accessor.js + + 5 + + name + punctuation.definition.parameters.end.js + + + comment + Concise getter and setter + match + \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) + name + meta.accessor.js + + + + literal-function-call + + patterns + + + begin + (?=[_$a-zA-Z][_$\w]*\s*\() + end + (?=\() + name + meta.function-call.static.with-arguments.js + patterns + + + match + ([_$a-zA-Z][_$\w]*)? + name + entity.name.function.js + + + + + + literal-function-constructor + + patterns + + + captures + + 1 + + name + storage.type.function.js + + 2 + + name + entity.name.function.js + + 3 + + name + punctuation.definition.parameters.begin.js + + 4 + + name + variable.parameter.function.js + + 5 + + name + punctuation.definition.parameters.end.js + + + comment + match regular function like: function myFunc(arg) { } + match + \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) + name + meta.function.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + + comment + match stuff like: Sound.prototype = { } when extending an object + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* + name + meta.prototype.declaration.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + 3 + + name + entity.name.function.js + + 4 + + name + storage.type.function.js + + 5 + + name + punctuation.definition.parameters.begin.js + + 6 + + name + variable.parameter.function.js + + 7 + + name + punctuation.definition.parameters.end.js + + + comment + match stuff like: Sound.prototype.play = function() { } + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) + name + meta.prototype.function.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + + comment + Sound.prototype + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype) + name + meta.prototype.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + 3 + + name + entity.name.function.js + + + comment + match stuff like: Sound.prototype.play = myfunc + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* + name + meta.function.js + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + storage.type.function.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.parameters.begin.js + + 5 + + name + variable.parameter.function.js + + 6 + + name + punctuation.definition.parameters.end.js + + + comment + match stuff like: .play = function() { } + match + \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) + name + meta.function.js + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + punctuation.separator.key-value.js + + 3 + + name + storage.type.function.js + + 4 + + name + punctuation.definition.parameters.begin.js + + 5 + + name + variable.parameter.function.js + + 6 + + name + punctuation.definition.parameters.end.js + + + comment + match stuff like: foobar: function() { } + match + \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + name + meta.function.json.js + + + captures + + 1 + + name + string.quoted.single.js + + 10 + + name + storage.type.function.js + + 11 + + name + punctuation.definition.parameters.begin.js + + 12 + + name + variable.parameter.function.js + + 13 + + name + punctuation.definition.parameters.end.js + + 2 + + name + punctuation.definition.string.begin.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + + + comment + Attempt to match "foo": function + match + (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + name + meta.function.json.js + + + + literal-keywords + + patterns + + + captures + + 1 + + name + keyword.operator.new.js + + 2 + + name + entity.name.type.new.js + + + match + (new)\s+([a-zA-Z_?.$][\w?.$]*) + name + meta.instance.constructor + + + match + \b(var|let|const)\b + name + keyword.control.declaration.js + + + match + \b(return|yield)\b + name + keyword.control.flow.js + + + match + \b(else|if)\b + name + keyword.control.conditional.js + + + match + \b(catch|finally|throw|try)\b + name + keyword.control.trycatch.js + + + match + \b(break|continue|do|for|goto|while)\b + name + keyword.control.loop.js + + + match + \b(case|default|switch)\b + name + keyword.control.switch.js + + + match + \b(delete|in(stanceof)?|of|new|typeof|void|with)\b + name + keyword.operator.js + + + match + \btrue\b + name + constant.language.boolean.true.js + + + match + \bfalse\b + name + constant.language.boolean.false.js + + + match + \bnull\b + name + constant.language.null.js + + + match + \bundefined\b + name + constant.language.undefined.js + + + match + \bNaN\b + name + constant.language.nan.js + + + match + (?<!\.)\b(arguments)\b + name + variable.language.arguments.js + + + match + (?<!\.)\b(super)\b + name + variable.language.super.js + + + match + (?<!\.)\b(this)\b + name + variable.language.this.js + + + match + (?<!\.)\b(self)\b + name + storage.self.js + + + match + (?<=\.)\b(__proto__)\b + name + variable.language.proto.js + + + match + (?<=\.)\b(constructor)\b + name + variable.language.constructor.js + + + match + (?<=\.)\b(prototype)\b + name + variable.language.prototype.js + + + match + !|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^= + name + keyword.operator.js + + + match + : + name + punctuation.separator.key-value + + + match + (?x) !(?!=)| # logical-not right-to-left right && | # logical-and left-to-right both \|\| # logical-or left-to-right both - name - keyword.operator.logical.js - - - match - (?x) + name + keyword.operator.logical.js + + + match + (?x) %= | # assignment right-to-left both &= | # assignment right-to-left both \*= | # assignment right-to-left both @@ -889,12 +889,12 @@ <<= | # assignment right-to-left both >>= | # assignment right-to-left both >>>= # assignment right-to-left both - name - keyword.operator.assignment.augmented.js - - - match - (?x) + name + keyword.operator.assignment.augmented.js + + + match + (?x) ~ | # bitwise-not right-to-left right << | # bitwise-shift left-to-right both >>> | # bitwise-shift left-to-right both @@ -902,38 +902,38 @@ & | # bitwise-and left-to-right both \^ | # bitwise-xor left-to-right both \| # bitwise-or left-to-right both - name - keyword.operator.bitwise.js - - - match - (?x) + name + keyword.operator.bitwise.js + + + match + (?x) <= | # relational left-to-right both >= | # relational left-to-right both < | # relational left-to-right both > # relational left-to-right both - name - keyword.operator.relational.js - - - match - (?x) + name + keyword.operator.relational.js + + + match + (?x) === | # equality left-to-right both !== | # equality left-to-right both == | # equality left-to-right both != # equality left-to-right both - name - keyword.operator.comparison.js - - - match - (?x)= - name - keyword.operator.assignment.js - - - match - (?x) + name + keyword.operator.comparison.js + + + match + (?x)= + name + keyword.operator.assignment.js + + + match + (?x) -- | # decrement n/a right-or-left \+\+ | # increment n/a right-or-left / | # division left-to-right both @@ -941,146 +941,146 @@ \* | # multiplication left-to-right both \+ | # addition left-to-right both - # subtraction left-to-right both - name - keyword.operator.arithmetic.js - - - - literal-labels - - patterns - - - captures - - 2 - - name - punctuation.separator.key-value.js - - - match - (?<=['"])(\s*)(:) - - - captures - - 1 - - name - string.unquoted.label.js - - 2 - - name - punctuation.separator.key-value.js - - - match - (?<!\?|\? |case )(?!\?)([_$a-zA-Z][_$\w]*)\s*(:) - name - constant.other.object.key.js - - - - literal-method - - patterns - - - captures - - 1 - - name - entity.name.function.js - - - match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) (?=\() - name - meta.function-call.method.with-arguments.js - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - meta.group.braces.round.function.arguments.js - - 3 - - name - punctuation.section.scope.round.js - - - match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) ((\( \s* \))) - name - meta.function-call.method.without-arguments.js - - - begin - (?x) + name + keyword.operator.arithmetic.js + + + + literal-labels + + patterns + + + captures + + 2 + + name + punctuation.separator.key-value.js + + + match + (?<=['"])(\s*)(:) + + + captures + + 1 + + name + string.unquoted.label.js + + 2 + + name + punctuation.separator.key-value.js + + + match + (?<!\?|\? |case )(?!\?)([_$a-zA-Z][_$\w]*)\s*(:) + name + constant.other.object.key.js + + + + literal-method + + patterns + + + captures + + 1 + + name + entity.name.function.js + + + match + (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) (?=\() + name + meta.function-call.method.with-arguments.js + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + meta.group.braces.round.function.arguments.js + + 3 + + name + punctuation.section.scope.round.js + + + match + (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) ((\( \s* \))) + name + meta.function-call.method.without-arguments.js + + + begin + (?x) \b(function) (?= (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name \(.*?\) # The properties that the function accepts ) - beginCaptures - - 1 - - name - storage.type.function.js - - - comment - function(one,two,...)\n?{...} - end - (?<=})(\s*\n)? - name - meta.function.js - patterns - - - include - $base - - - - - captures - - 1 - - name - entity.name.method.js - - 2 - - name - punctuation.definition.parameters.begin.js - - 3 - - name - variable.parameter.method.js - - 4 - - name - punctuation.definition.parameters.begin.js - - - match - (?x) + beginCaptures + + 1 + + name + storage.type.function.js + + + comment + function(one,two,...)\n?{...} + end + (?<=})(\s*\n)? + name + meta.function.js + patterns + + + include + $base + + + + + captures + + 1 + + name + entity.name.method.js + + 2 + + name + punctuation.definition.parameters.begin.js + + 3 + + name + variable.parameter.method.js + + 4 + + name + punctuation.definition.parameters.begin.js + + + match + (?x) (?<![_$\w] )(?<!function) ([_$a-zA-Z][_$\w]*) (\() (\s* @@ -1088,788 +1088,788 @@ )?\s* (\)) \s* (?={) - name - meta.method.js - - - - literal-module - - patterns - - - captures - - 1 - - name - storage.type.module.js - - 2 - - name - entity.name.module.js - - - comment - match module like: module Module { } - match - \b(module)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(?=\{) - name - meta.module.js - - - captures - - 1 - - name - storage.type.export.js - - - comment - match export like: export decl - match - \b(export)\b\s*(?=(?:module|class|function|var|let|const)\b(?:\s+[a-zA-Z_$][_$\w]*)?) - name - meta.module.export.js - - - - literal-number - - patterns - - - match - (?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+) - name - invalid.illegal.numeric.hex.js - - - match - (?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+) - name - invalid.illegal.numeric.octal.js - - - match - (?xi)(?:\B[-+])?(?: + name + meta.method.js + + + + literal-module + + patterns + + + captures + + 1 + + name + storage.type.module.js + + 2 + + name + entity.name.module.js + + + comment + match module like: module Module { } + match + \b(module)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(?=\{) + name + meta.module.js + + + captures + + 1 + + name + storage.type.export.js + + + comment + match export like: export decl + match + \b(export)\b\s*(?=(?:module|class|function|var|let|const)\b(?:\s+[a-zA-Z_$][_$\w]*)?) + name + meta.module.export.js + + + + literal-number + + patterns + + + match + (?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+) + name + invalid.illegal.numeric.hex.js + + + match + (?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+) + name + invalid.illegal.numeric.octal.js + + + match + (?xi)(?:\B[-+])?(?: \b0x[0-9a-f]* # HEX |( \B\.[0-9]+ # EG: .999 | \b[0-9]+ (\.[0-9]*)? # EG: 999.999 or 999. or 999 )(e[-+]?[0-9]+)? # EG: e+123 or E-123 ) - name - constant.numeric.js - - - match - (?:\B[-+]|\b)(Infinity)\b - name - constant.language.infinity.js - - - - literal-punctuation - - patterns - - - match - \; - name - punctuation.terminator.statement.js - - - match - , - name - meta.delimiter.object.comma.js - - - match - \. - name - meta.delimiter.method.period.js - - - match - \{|\} - name - meta.brace.curly.js - - - match - \(|\) - name - meta.brace.round.js - - - match - \[|\] - name - meta.brace.square.js - - - match - (?<=\.)\s - name - meta.complete.method - - - - literal-quasi - - patterns - - - begin - ([a-zA-Z$_][\w$_]*)?(`) - beginCaptures - - 1 - - name - entity.quasi.tag.name.js - - 2 - - name - punctuation.definition.quasi.begin.js - - - end - ` - endCaptures - - 0 - - name - punctuation.definition.quasi.end.js - - - name - string.quasi.js - patterns - - - begin - \${ - beginCaptures - - 0 - - name - punctuation.quasi.element.begin.js - - - end - } - endCaptures - - 0 - - name - punctuation.quasi.element.end.js - - - name - entity.quasi.element.js - patterns - - - include - $base - - - - - - - - literal-regex - - patterns - - - begin - (?x) (?<= [\[,=(:] | ^ | && | return )\s*((/)) (?! [/*+{}?] | $ ) - beginCaptures - - 1 - - name - string.regexp.js - - 2 - - name - punctuation.definition.string.begin.js - - - contentName - string.regexp.js - end - ((/([igm]*)))|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) - endCaptures - - 1 - - name - string.regexp.js - - 2 - - name - punctuation.definition.string.end.js - - 3 - - name - keyword.other.js - - - patterns - - - match - \\\n - name - constant.character.escape.newline.js - - - match - \n - name - invalid.illegal.newline.js - - - match - \\. - name - constant.character.escape.js - - - - - - literal-string - - patterns - - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.js - - - end - (?i)'|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) - endCaptures - - 0 - - name - punctuation.definition.string.end.js - - - name - string.quoted.single.js - patterns - - - include - #string-single-innards - - - - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.js - - - end - (?i)"|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) - endCaptures - - 0 - - name - punctuation.definition.string.end.js - - - name - string.quoted.double.js - patterns - - - include - #string-double-innards - - - - - - literal-variable - - patterns - - - match - \.?[A-Z][_$\dA-Z]*\b - name - variable.other.constant.js - - - captures - - 1 - - name - variable.other.class.js - - 2 - - name - meta.function-call.class.static.js - - 3 - - name - variable.other.class.static.js - - - match - \b([A-Z][_$\w]*\.?)\s*?(?:([a-z$_][\w_$]*(?=\())|([a-z$_][\w_$]*))? - name - meta.entity.static.js - - - match - (?<!\.)[_$a-zA-Z][_$\w]*\s*(?=[\[\.]) - name - variable.other.object.js - - - captures - - 0 - - name - meta.property-name.js - - 1 - - name - variable.other.object.js - - - match - ([_$a-zA-Z][_$\w]*)\s*(?=[\[\.]) - name - meta.property.js - - - captures - - 0 - - name - variable.other.property.js - - - match - (?<=[\.\]])\s*[_$a-zA-Z][_$\w]* - name - meta.property.js - - - match - [_$a-zA-Z][_$\w]* - name - variable.other.readwrite.js - - - - special - - patterns - - - match - \b(console)\b - name - entity.name.type.object.js.firebug - - - match - \.(warn|info|log|error|time|timeEnd|assert)\b - name - support.function.js.firebug - - - match - \b(debugger)\b - name - keyword.other.js - - - - special-comments-conditional-compilation - - patterns - - - begin - /\*(?=@) - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - endCaptures - - 1 - - name - keyword.control.conditional.js - - 2 - - name - punctuation.definition.keyword.js - - - name - comment.block.conditional.js - patterns - - - include - $base - - - - - captures - - 1 - - name - punctuation.definition.keyword.js - - - match - (@)(if|elif|else|end) - name - keyword.control.conditional.js - - - captures - - 1 - - name - punctuation.definition.keyword.js - - - match - (@)(cc_on|set) - name - keyword.operator.conditional.js - - - captures - - 1 - - name - punctuation.definition.variable.js - - - match - (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript_build|_jscript_version|_jscript|_debug|_fast|[a-zA-Z]\w+) - name - variable.other.conditional.js - - - - string-double-innards - - patterns - - - match - \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.) - name - constant.character.escape.js - - - match - \\\n - name - constant.character.escape.newline.js - - - match - \n - name - invalid.illegal.newline.js - - - match - (?i)</\s*script\s*> - name - invalid.deprecated.inconsistent.js - - - - string-single-innards - - patterns - - - match - \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) - name - constant.character.escape.js - - - match - \\\n - name - constant.character.escape.newline.js - - - match - \n - name - invalid.illegal.newline.js - - - match - (?i)</\s*script\s*> - name - invalid.deprecated.inconsistent.js - - - - sugar - - patterns - - - begin - ^(?=(\t| )) - end - (?=[^\t\s]) - name - meta.leading-tabs - patterns - - - captures - - 1 - - name - meta.odd-tab.group1.spaces - - 10 - - name - meta.even-tab.group10.spaces - - 11 - - name - meta.odd-tab.group11.spaces - - 2 - - name - meta.even-tab.group2.spaces - - 3 - - name - meta.odd-tab.group3.spaces - - 4 - - name - meta.even-tab.group4.spaces - - 5 - - name - meta.odd-tab.group5.spaces - - 6 - - name - meta.even-tab.group6.spaces - - 7 - - name - meta.odd-tab.group7.spaces - - 8 - - name - meta.even-tab.group8.spaces - - 9 - - name - meta.odd-tab.group9.spaces - - - match - ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? - - - captures - - 1 - - name - meta.odd-tab.group1.tab - - 10 - - name - meta.even-tab.group10.tab - - 11 - - name - meta.odd-tab.group11.tab - - 2 - - name - meta.even-tab.group2.tab - - 3 - - name - meta.odd-tab.group3.tab - - 4 - - name - meta.even-tab.group4.tab - - 5 - - name - meta.odd-tab.group5.tab - - 6 - - name - meta.even-tab.group6.tab - - 7 - - name - meta.odd-tab.group7.tab - - 8 - - name - meta.even-tab.group8.tab - - 9 - - name - meta.odd-tab.group9.tab - - - match - (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? - - - - - - support - - patterns - - - match - \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b - name - support.class.builtin.js - - - match - \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b - name - support.class.error.js - - - match - \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() - name - entity.name.function.mutator.js - - - match - \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b - name - support.module.node.js - - - match - \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\b - name - support.keyword.node.js - - - match - \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b - name - support.class.node.js - - - match - \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() - name - entity.name.function.js - - - match - \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b - name - support.constant.dom.js - - - - - scopeName - source.js - uuid - 0D2D03B9-F18B-4D9D-A960-716FDEC35331 + name + constant.numeric.js + + + match + (?:\B[-+]|\b)(Infinity)\b + name + constant.language.infinity.js + + + + literal-punctuation + + patterns + + + match + \; + name + punctuation.terminator.statement.js + + + match + , + name + meta.delimiter.object.comma.js + + + match + \. + name + meta.delimiter.method.period.js + + + match + \{|\} + name + meta.brace.curly.js + + + match + \(|\) + name + meta.brace.round.js + + + match + \[|\] + name + meta.brace.square.js + + + match + (?<=\.)\s + name + meta.complete.method + + + + literal-quasi + + patterns + + + begin + ([a-zA-Z$_][\w$_]*)?(`) + beginCaptures + + 1 + + name + entity.quasi.tag.name.js + + 2 + + name + punctuation.definition.quasi.begin.js + + + end + ` + endCaptures + + 0 + + name + punctuation.definition.quasi.end.js + + + name + string.quasi.js + patterns + + + begin + \${ + beginCaptures + + 0 + + name + punctuation.quasi.element.begin.js + + + end + } + endCaptures + + 0 + + name + punctuation.quasi.element.end.js + + + name + entity.quasi.element.js + patterns + + + include + $base + + + + + + + + literal-regex + + patterns + + + begin + (?x) (?<= [\[,=(:] | ^ | && | return )\s*((/)) (?! [/*+{}?] | $ ) + beginCaptures + + 1 + + name + string.regexp.js + + 2 + + name + punctuation.definition.string.begin.js + + + contentName + string.regexp.js + end + ((/([igm]*)))|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + endCaptures + + 1 + + name + string.regexp.js + + 2 + + name + punctuation.definition.string.end.js + + 3 + + name + keyword.other.js + + + patterns + + + match + \\\n + name + constant.character.escape.newline.js + + + match + \n + name + invalid.illegal.newline.js + + + match + \\. + name + constant.character.escape.js + + + + + + literal-string + + patterns + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.js + + + end + (?i)'|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + endCaptures + + 0 + + name + punctuation.definition.string.end.js + + + name + string.quoted.single.js + patterns + + + include + #string-single-innards + + + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.js + + + end + (?i)"|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + endCaptures + + 0 + + name + punctuation.definition.string.end.js + + + name + string.quoted.double.js + patterns + + + include + #string-double-innards + + + + + + literal-variable + + patterns + + + match + \.?[A-Z][_$\dA-Z]*\b + name + variable.other.constant.js + + + captures + + 1 + + name + variable.other.class.js + + 2 + + name + meta.function-call.class.static.js + + 3 + + name + variable.other.class.static.js + + + match + \b([A-Z][_$\w]*\.?)\s*?(?:([a-z$_][\w_$]*(?=\())|([a-z$_][\w_$]*))? + name + meta.entity.static.js + + + match + (?<!\.)[_$a-zA-Z][_$\w]*\s*(?=[\[\.]) + name + variable.other.object.js + + + captures + + 0 + + name + meta.property-name.js + + 1 + + name + variable.other.object.js + + + match + ([_$a-zA-Z][_$\w]*)\s*(?=[\[\.]) + name + meta.property.js + + + captures + + 0 + + name + variable.other.property.js + + + match + (?<=[\.\]])\s*[_$a-zA-Z][_$\w]* + name + meta.property.js + + + match + [_$a-zA-Z][_$\w]* + name + variable.other.readwrite.js + + + + special + + patterns + + + match + \b(console)\b + name + entity.name.type.object.js.firebug + + + match + \.(warn|info|log|error|time|timeEnd|assert)\b + name + support.function.js.firebug + + + match + \b(debugger)\b + name + keyword.other.js + + + + special-comments-conditional-compilation + + patterns + + + begin + /\*(?=@) + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/ + endCaptures + + 1 + + name + keyword.control.conditional.js + + 2 + + name + punctuation.definition.keyword.js + + + name + comment.block.conditional.js + patterns + + + include + $base + + + + + captures + + 1 + + name + punctuation.definition.keyword.js + + + match + (@)(if|elif|else|end) + name + keyword.control.conditional.js + + + captures + + 1 + + name + punctuation.definition.keyword.js + + + match + (@)(cc_on|set) + name + keyword.operator.conditional.js + + + captures + + 1 + + name + punctuation.definition.variable.js + + + match + (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript_build|_jscript_version|_jscript|_debug|_fast|[a-zA-Z]\w+) + name + variable.other.conditional.js + + + + string-double-innards + + patterns + + + match + \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.) + name + constant.character.escape.js + + + match + \\\n + name + constant.character.escape.newline.js + + + match + \n + name + invalid.illegal.newline.js + + + match + (?i)</\s*script\s*> + name + invalid.deprecated.inconsistent.js + + + + string-single-innards + + patterns + + + match + \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) + name + constant.character.escape.js + + + match + \\\n + name + constant.character.escape.newline.js + + + match + \n + name + invalid.illegal.newline.js + + + match + (?i)</\s*script\s*> + name + invalid.deprecated.inconsistent.js + + + + sugar + + patterns + + + begin + ^(?=(\t| )) + end + (?=[^\t\s]) + name + meta.leading-tabs + patterns + + + captures + + 1 + + name + meta.odd-tab.group1.spaces + + 10 + + name + meta.even-tab.group10.spaces + + 11 + + name + meta.odd-tab.group11.spaces + + 2 + + name + meta.even-tab.group2.spaces + + 3 + + name + meta.odd-tab.group3.spaces + + 4 + + name + meta.even-tab.group4.spaces + + 5 + + name + meta.odd-tab.group5.spaces + + 6 + + name + meta.even-tab.group6.spaces + + 7 + + name + meta.odd-tab.group7.spaces + + 8 + + name + meta.even-tab.group8.spaces + + 9 + + name + meta.odd-tab.group9.spaces + + + match + ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? + + + captures + + 1 + + name + meta.odd-tab.group1.tab + + 10 + + name + meta.even-tab.group10.tab + + 11 + + name + meta.odd-tab.group11.tab + + 2 + + name + meta.even-tab.group2.tab + + 3 + + name + meta.odd-tab.group3.tab + + 4 + + name + meta.even-tab.group4.tab + + 5 + + name + meta.odd-tab.group5.tab + + 6 + + name + meta.even-tab.group6.tab + + 7 + + name + meta.odd-tab.group7.tab + + 8 + + name + meta.even-tab.group8.tab + + 9 + + name + meta.odd-tab.group9.tab + + + match + (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? + + + + + + support + + patterns + + + match + \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b + name + support.class.builtin.js + + + match + \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b + name + support.class.error.js + + + match + \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() + name + entity.name.function.mutator.js + + + match + \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b + name + support.module.node.js + + + match + \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\b + name + support.keyword.node.js + + + match + \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b + name + support.class.node.js + + + match + \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + name + entity.name.function.js + + + match + \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b + name + support.constant.dom.js + + + + + scopeName + source.js + uuid + 0D2D03B9-F18B-4D9D-A960-716FDEC35331 From 2a9af7de2664ca098496ba6230a9478b84dc6efb Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 05:15:02 +1100 Subject: [PATCH 008/202] converted comments to actual yaml comments; tidied up yaml --- JavaScriptNext.YAML-tmLanguage | 148 ++++++++++++++++++++++++++------- JavaScriptNext.tmLanguage | 36 ++------ 2 files changed, 125 insertions(+), 59 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 29d9bcf..7b7a104 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -18,8 +18,8 @@ repository: patterns: - name: arrow.function.js patterns: - - comment: match stuff like:(args) => - name: storage.type.function.arrow.js + # match stuff like:(args) => + - name: storage.type.function.arrow.js match: |- (?x)\s*( (?:(\() (.*?)? (\))) @@ -39,6 +39,7 @@ repository: match: (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*)? (?=\() captures: '1': {name: entity.name.function.js} + - name: meta.group.braces.round begin: (\()(?!\)) end: (\)) @@ -46,6 +47,7 @@ repository: '1': {name: punctuation.section.scope.round.js} patterns: - include: $base + - name: meta.group.braces.square begin: (\[)(?!\]) end: (\]) @@ -57,20 +59,24 @@ repository: comments: patterns: - include: '#special-comments-conditional-compilation' + - name: comment.block.documentation.js begin: /\*\* end: \*/ captures: '0': {name: punctuation.definition.comment.js} + - name: comment.block.js begin: /\* end: \*/ captures: '0': {name: punctuation.definition.comment.js} + - name: comment.line.double-slash.js match: (//).*$\n? captures: '1': {name: punctuation.definition.comment.js} + - name: comment.block.html.js match: () captures: @@ -98,16 +104,17 @@ repository: literal-class: patterns: - - comment: 'match regular class like: class MyClass { }' - name: meta.class.js + # match regular class like: class MyClass { } + - name: meta.class.js match: \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* captures: '1': {name: storage.type.class.js} '2': {name: entity.name.class.js} '3': {name: storage.type.extends.js} '4': {name: entity.name.extends.js} - - comment: Concise getter and setter - name: meta.accessor.js + + # Concise getter and setter + - name: meta.accessor.js match: \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) captures: '1': {name: storage.type.accessor.js} @@ -127,8 +134,8 @@ repository: literal-function-constructor: patterns: - - comment: 'match regular function like: function myFunc(arg) { }' - name: meta.function.js + # match regular function like: function myFunc(arg) { } + - name: meta.function.js match: \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) captures: '1': {name: storage.type.function.js} @@ -136,14 +143,16 @@ repository: '3': {name: punctuation.definition.parameters.begin.js} '4': {name: variable.parameter.function.js} '5': {name: punctuation.definition.parameters.end.js} - - comment: 'match stuff like: Sound.prototype = { } when extending an object' - name: meta.prototype.declaration.js + + # match stuff like: Sound.prototype = { } when extending an object + - name: meta.prototype.declaration.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* captures: '1': {name: support.class.js} '2': {name: support.constant.js} - - comment: 'match stuff like: Sound.prototype.play = function() { }' - name: meta.prototype.function.js + + # match stuff like: Sound.prototype.play = function() { } + - name: meta.prototype.function.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) captures: '1': {name: support.class.js} @@ -153,21 +162,24 @@ repository: '5': {name: punctuation.definition.parameters.begin.js} '6': {name: variable.parameter.function.js} '7': {name: punctuation.definition.parameters.end.js} - - comment: Sound.prototype - name: meta.prototype.js + + # Sound.prototype + - name: meta.prototype.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype) captures: '1': {name: support.class.js} '2': {name: support.constant.js} - - comment: 'match stuff like: Sound.prototype.play = myfunc' - name: meta.function.js + + # match stuff like: Sound.prototype.play = myfunc + - name: meta.function.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* captures: '1': {name: support.class.js} '2': {name: support.constant.js} '3': {name: entity.name.function.js} - - comment: 'match stuff like: .play = function() { }' - name: meta.function.js + + # match stuff like: .play = function() { } + - name: meta.function.js match: \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) captures: '1': {name: entity.name.function.js} @@ -176,8 +188,9 @@ repository: '4': {name: punctuation.definition.parameters.begin.js} '5': {name: variable.parameter.function.js} '6': {name: punctuation.definition.parameters.end.js} - - comment: 'match stuff like: foobar: function() { }' - name: meta.function.json.js + + # match stuff like: foobar: function() { } + - name: meta.function.json.js match: \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) captures: '1': {name: entity.name.function.js} @@ -186,8 +199,9 @@ repository: '4': {name: punctuation.definition.parameters.begin.js} '5': {name: variable.parameter.function.js} '6': {name: punctuation.definition.parameters.end.js} - - comment: 'Attempt to match "foo": function' - name: meta.function.json.js + + # Attempt to match "foo": function + - name: meta.function.json.js match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) captures: '1': {name: string.quoted.single.js} @@ -211,54 +225,77 @@ repository: captures: '1': {name: keyword.operator.new.js} '2': {name: entity.name.type.new.js} + - name: keyword.control.declaration.js match: \b(var|let|const)\b + - name: keyword.control.flow.js match: \b(return|yield)\b + - name: keyword.control.conditional.js match: \b(else|if)\b + - name: keyword.control.trycatch.js match: \b(catch|finally|throw|try)\b + - name: keyword.control.loop.js match: \b(break|continue|do|for|goto|while)\b + - name: keyword.control.switch.js match: \b(case|default|switch)\b + - name: keyword.operator.js match: \b(delete|in(stanceof)?|of|new|typeof|void|with)\b + - name: constant.language.boolean.true.js match: \btrue\b + - name: constant.language.boolean.false.js match: \bfalse\b + - name: constant.language.null.js match: \bnull\b + - name: constant.language.undefined.js match: \bundefined\b + - name: constant.language.nan.js match: \bNaN\b + - name: variable.language.arguments.js match: (?=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^=' + - name: punctuation.separator.key-value match: ':' + - name: keyword.operator.logical.js match: |- (?x) !(?!=)| # logical-not right-to-left right && | # logical-and left-to-right both \|\| # logical-or left-to-right both + - name: keyword.operator.assignment.augmented.js match: |- (?x) @@ -273,6 +310,7 @@ repository: <<= | # assignment right-to-left both >>= | # assignment right-to-left both >>>= # assignment right-to-left both + - name: keyword.operator.bitwise.js match: |- (?x) @@ -283,6 +321,7 @@ repository: & | # bitwise-and left-to-right both \^ | # bitwise-xor left-to-right both \| # bitwise-or left-to-right both + - name: keyword.operator.relational.js match: |- (?x) @@ -290,6 +329,7 @@ repository: >= | # relational left-to-right both < | # relational left-to-right both > # relational left-to-right both + - name: keyword.operator.comparison.js match: |- (?x) @@ -297,8 +337,10 @@ repository: !== | # equality left-to-right both == | # equality left-to-right both != # equality left-to-right both + - name: keyword.operator.assignment.js match: (?x)= + - name: keyword.operator.arithmetic.js match: |- (?x) @@ -315,6 +357,7 @@ repository: - match: (?<=['"])(\s*)(:) captures: '2': {name: punctuation.separator.key-value.js} + - name: constant.other.object.key.js match: (? @@ -548,10 +619,13 @@ repository: patterns: - name: constant.character.escape.js match: \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) + - name: constant.character.escape.newline.js match: \\\n + - name: invalid.illegal.newline.js match: \n + - name: invalid.deprecated.inconsistent.js match: (?i) @@ -574,6 +648,7 @@ repository: '9': {name: meta.odd-tab.group9.spaces} '10': {name: meta.even-tab.group10.spaces} '11': {name: meta.odd-tab.group11.spaces} + - match: (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? captures: '1': {name: meta.odd-tab.group1.tab} @@ -592,17 +667,30 @@ repository: patterns: - name: support.class.builtin.js match: \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b + - name: support.class.error.js match: \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b + - name: entity.name.function.mutator.js match: \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() + - name: support.module.node.js match: \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b + - name: support.keyword.node.js match: \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\b + - name: support.class.node.js match: \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b + - name: entity.name.function.js match: \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + - name: support.constant.dom.js - match: \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b + match: > + (?x) + \b( + ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| + DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| + WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR + )\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index c09dde6..a3632c7 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -82,8 +82,6 @@ punctuation.definition.arrow.js - comment - match stuff like:(args) => match (?x)\s*( (?:(\() (.*?)? (\))) @@ -335,8 +333,6 @@ entity.name.extends.js - comment - match regular class like: class MyClass { } match \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* name @@ -371,8 +367,6 @@ punctuation.definition.parameters.end.js - comment - Concise getter and setter match \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) name @@ -436,8 +430,6 @@ punctuation.definition.parameters.end.js - comment - match regular function like: function myFunc(arg) { } match \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) name @@ -457,8 +449,6 @@ support.constant.js - comment - match stuff like: Sound.prototype = { } when extending an object match ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* name @@ -503,8 +493,6 @@ punctuation.definition.parameters.end.js - comment - match stuff like: Sound.prototype.play = function() { } match ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) name @@ -524,8 +512,6 @@ support.constant.js - comment - Sound.prototype match ([a-zA-Z_?.$][\w?.$]*)\.(prototype) name @@ -550,8 +536,6 @@ entity.name.function.js - comment - match stuff like: Sound.prototype.play = myfunc match ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* name @@ -591,8 +575,6 @@ punctuation.definition.parameters.end.js - comment - match stuff like: .play = function() { } match \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) name @@ -632,8 +614,6 @@ punctuation.definition.parameters.end.js - comment - match stuff like: foobar: function() { } match \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) name @@ -708,8 +688,6 @@ punctuation.separator.key-value.js - comment - Attempt to match "foo": function match (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) name @@ -1041,8 +1019,6 @@ storage.type.function.js - comment - function(one,two,...)\n?{...} end (?<=})(\s*\n)? name @@ -1111,8 +1087,6 @@ entity.name.module.js - comment - match module like: module Module { } match \b(module)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(?=\{) name @@ -1127,8 +1101,6 @@ storage.type.export.js - comment - match export like: export decl match \b(export)\b\s*(?=(?:module|class|function|var|let|const)\b(?:\s+[a-zA-Z_$][_$\w]*)?) name @@ -1860,7 +1832,13 @@ match - \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b + (?x) + \b( + ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| + DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| + WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR + )\b + name support.constant.dom.js From 7dec340f972480bdcf718980bfdc7fbd918275fa Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 05:28:41 +1100 Subject: [PATCH 009/202] tidied up yaml flow expressions --- JavaScriptNext.YAML-tmLanguage | 128 +++++++++++++++++---------------- JavaScriptNext.tmLanguage | 124 +++++++++++++++++--------------- 2 files changed, 134 insertions(+), 118 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7b7a104..f27e512 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -21,10 +21,14 @@ repository: # match stuff like:(args) => - name: storage.type.function.arrow.js match: |- - (?x)\s*( - (?:(\() (.*?)? (\))) - | ([_$a-zA-Z][_$\w]*) - )\s*(=>) + (?x) + \s* + ( + (?: + (\() (.*?)? (\)))| + ([_$a-zA-Z][_$\w]* + ) + )\s*(=>) captures: '1': {name: entity.arrow.function.js} '2': {name: punctuation.definition.parameters.begin.js} @@ -292,51 +296,51 @@ repository: - name: keyword.operator.logical.js match: |- (?x) - !(?!=)| # logical-not right-to-left right - && | # logical-and left-to-right both - \|\| # logical-or left-to-right both + !(?!=)| # logical-not right-to-left right + && | # logical-and left-to-right both + \|\| # logical-or left-to-right both - name: keyword.operator.assignment.augmented.js match: |- (?x) - %= | # assignment right-to-left both - &= | # assignment right-to-left both - \*= | # assignment right-to-left both - \+= | # assignment right-to-left both - -= | # assignment right-to-left both - /= | # assignment right-to-left both - \^= | # assignment right-to-left both - \|= | # assignment right-to-left both - <<= | # assignment right-to-left both - >>= | # assignment right-to-left both - >>>= # assignment right-to-left both + %= | # assignment right-to-left both + &= | # assignment right-to-left both + \*= | # assignment right-to-left both + \+= | # assignment right-to-left both + -= | # assignment right-to-left both + /= | # assignment right-to-left both + \^= | # assignment right-to-left both + \|= | # assignment right-to-left both + <<= | # assignment right-to-left both + >>= | # assignment right-to-left both + >>>= # assignment right-to-left both - name: keyword.operator.bitwise.js match: |- (?x) - ~ | # bitwise-not right-to-left right - << | # bitwise-shift left-to-right both - >>> | # bitwise-shift left-to-right both - >> | # bitwise-shift left-to-right both - & | # bitwise-and left-to-right both - \^ | # bitwise-xor left-to-right both - \| # bitwise-or left-to-right both + ~ | # bitwise-not right-to-left right + << | # bitwise-shift left-to-right both + >>> | # bitwise-shift left-to-right both + >> | # bitwise-shift left-to-right both + & | # bitwise-and left-to-right both + \^ | # bitwise-xor left-to-right both + \| # bitwise-or left-to-right both - name: keyword.operator.relational.js match: |- (?x) - <= | # relational left-to-right both - >= | # relational left-to-right both - < | # relational left-to-right both - > # relational left-to-right both + <= | # relational left-to-right both + >= | # relational left-to-right both + < | # relational left-to-right both + > # relational left-to-right both - name: keyword.operator.comparison.js match: |- (?x) - === | # equality left-to-right both - !== | # equality left-to-right both - == | # equality left-to-right both - != # equality left-to-right both + === | # equality left-to-right both + !== | # equality left-to-right both + == | # equality left-to-right both + != # equality left-to-right both - name: keyword.operator.assignment.js match: (?x)= @@ -344,13 +348,13 @@ repository: - name: keyword.operator.arithmetic.js match: |- (?x) - -- | # decrement n/a right-or-left - \+\+ | # increment n/a right-or-left - / | # division left-to-right both - % | # modulus left-to-right both - \* | # multiplication left-to-right both - \+ | # addition left-to-right both - - # subtraction left-to-right both + -- | # decrement n/a right-or-left + \+\+ | # increment n/a right-or-left + / | # division left-to-right both + % | # modulus left-to-right both + \* | # multiplication left-to-right both + \+ | # addition left-to-right both + - # subtraction left-to-right both literal-labels: patterns: @@ -378,32 +382,33 @@ repository: '2': {name: meta.group.braces.round.function.arguments.js} '3': {name: punctuation.section.scope.round.js} - # function(one,two,...)\n?{...} + # matches things like: function(one,two,...)\n?{...} - name: meta.function.js begin: |- (?x) - \b(function) - (?= - (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name - \(.*?\) # The properties that the function accepts - ) + \b(function) + (?= + (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name + \(.*?\) # The properties that the function accepts + ) beginCaptures: '1': {name: storage.type.function.js} end: (?<=})(\s*\n)? patterns: - include: $base - # matches things like "abc(x, y, z){" + # matches things like: abc(x, y, z){ - name: meta.method.js match: |- (?x) - (? match - (?x)\s*( - (?:(\() (.*?)? (\))) - | ([_$a-zA-Z][_$\w]*) - )\s*(=>) + (?x) + \s* + ( + (?: + (\() (.*?)? (\)))| + ([_$a-zA-Z][_$\w]* + ) + )\s*(=>) name storage.type.function.arrow.js @@ -847,59 +851,59 @@ match (?x) - !(?!=)| # logical-not right-to-left right - && | # logical-and left-to-right both - \|\| # logical-or left-to-right both + !(?!=)| # logical-not right-to-left right + && | # logical-and left-to-right both + \|\| # logical-or left-to-right both name keyword.operator.logical.js match (?x) - %= | # assignment right-to-left both - &= | # assignment right-to-left both - \*= | # assignment right-to-left both - \+= | # assignment right-to-left both - -= | # assignment right-to-left both - /= | # assignment right-to-left both - \^= | # assignment right-to-left both - \|= | # assignment right-to-left both - <<= | # assignment right-to-left both - >>= | # assignment right-to-left both - >>>= # assignment right-to-left both + %= | # assignment right-to-left both + &= | # assignment right-to-left both + \*= | # assignment right-to-left both + \+= | # assignment right-to-left both + -= | # assignment right-to-left both + /= | # assignment right-to-left both + \^= | # assignment right-to-left both + \|= | # assignment right-to-left both + <<= | # assignment right-to-left both + >>= | # assignment right-to-left both + >>>= # assignment right-to-left both name keyword.operator.assignment.augmented.js match (?x) - ~ | # bitwise-not right-to-left right - << | # bitwise-shift left-to-right both - >>> | # bitwise-shift left-to-right both - >> | # bitwise-shift left-to-right both - & | # bitwise-and left-to-right both - \^ | # bitwise-xor left-to-right both - \| # bitwise-or left-to-right both + ~ | # bitwise-not right-to-left right + << | # bitwise-shift left-to-right both + >>> | # bitwise-shift left-to-right both + >> | # bitwise-shift left-to-right both + & | # bitwise-and left-to-right both + \^ | # bitwise-xor left-to-right both + \| # bitwise-or left-to-right both name keyword.operator.bitwise.js match (?x) - <= | # relational left-to-right both - >= | # relational left-to-right both - < | # relational left-to-right both - > # relational left-to-right both + <= | # relational left-to-right both + >= | # relational left-to-right both + < | # relational left-to-right both + > # relational left-to-right both name keyword.operator.relational.js match (?x) - === | # equality left-to-right both - !== | # equality left-to-right both - == | # equality left-to-right both - != # equality left-to-right both + === | # equality left-to-right both + !== | # equality left-to-right both + == | # equality left-to-right both + != # equality left-to-right both name keyword.operator.comparison.js @@ -912,13 +916,13 @@ match (?x) - -- | # decrement n/a right-or-left - \+\+ | # increment n/a right-or-left - / | # division left-to-right both - % | # modulus left-to-right both - \* | # multiplication left-to-right both - \+ | # addition left-to-right both - - # subtraction left-to-right both + -- | # decrement n/a right-or-left + \+\+ | # increment n/a right-or-left + / | # division left-to-right both + % | # modulus left-to-right both + \* | # multiplication left-to-right both + \+ | # addition left-to-right both + - # subtraction left-to-right both name keyword.operator.arithmetic.js @@ -1006,11 +1010,11 @@ begin (?x) - \b(function) - (?= - (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name - \(.*?\) # The properties that the function accepts - ) + \b(function) + (?= + (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name + \(.*?\) # The properties that the function accepts + ) beginCaptures 1 @@ -1057,13 +1061,14 @@ match (?x) - (?<![_$\w] )(?<!function) - ([_$a-zA-Z][_$\w]*) - (\() (\s* - (.*?) - )?\s* (\)) - \s* - (?={) + (?<![_$\w]) + (?<!function) + ([_$a-zA-Z][_$\w]*) + (\() + (\s*(.*?))?\s* + (\)) + \s* + (?={) name meta.method.js @@ -1126,12 +1131,15 @@ match - (?xi)(?:\B[-+])?(?: - \b0x[0-9a-f]* # HEX - |( \B\.[0-9]+ # EG: .999 - | \b[0-9]+ (\.[0-9]*)? # EG: 999.999 or 999. or 999 - )(e[-+]?[0-9]+)? # EG: e+123 or E-123 - ) + (?xi) + (?:\B[-+])? + (?: + \b0x[0-9a-f]*| # hex + ( + \B\.[0-9]+| # e.g. .999 + \b[0-9]+(\.[0-9]*)? # e.g. 999.999, 999. or 999 + )(e[-+]?[0-9]+)? # e.g. e+123, E-123 + ) name constant.numeric.js From 2c775c472737e07ed1746b79024d3b0f936f19da Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 05:34:38 +1100 Subject: [PATCH 010/202] better ordering sub-pattern definitions to be more human-readable --- JavaScriptNext.YAML-tmLanguage | 124 ++++++++++++++++----------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index f27e512..f7737e8 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -106,6 +106,21 @@ repository: - include: '#literal-variable' - include: '#literal-punctuation' + literal-module: + patterns: + # match module like: module Module { } + - name: meta.module.js + match: \b(module)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(?=\{) + captures: + '1': {name: storage.type.module.js} + '2': {name: entity.name.module.js} + + # match export like: export decl + - name: meta.module.export.js + match: \b(export)\b\s*(?=(?:module|class|function|var|let|const)\b(?:\s+[a-zA-Z_$][_$\w]*)?) + captures: + '1': {name: storage.type.export.js} + literal-class: patterns: # match regular class like: class MyClass { } @@ -222,6 +237,53 @@ repository: '12': {name: variable.parameter.function.js} '13': {name: punctuation.definition.parameters.end.js} + literal-method: + patterns: + - name: meta.function-call.method.with-arguments.js + match: (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) (?=\() + captures: + '1': {name: entity.name.function.js} + + - name: meta.function-call.method.without-arguments.js + match: (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) ((\( \s* \))) + captures: + '1': {name: entity.name.function.js} + '2': {name: meta.group.braces.round.function.arguments.js} + '3': {name: punctuation.section.scope.round.js} + + # matches things like: function(one,two,...)\n?{...} + - name: meta.function.js + begin: |- + (?x) + \b(function) + (?= + (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name + \(.*?\) # The properties that the function accepts + ) + beginCaptures: + '1': {name: storage.type.function.js} + end: (?<=})(\s*\n)? + patterns: + - include: $base + + # matches things like: abc(x, y, z){ + - name: meta.method.js + match: |- + (?x) + (? Date: Fri, 3 Jan 2014 05:54:20 +1100 Subject: [PATCH 011/202] fixed bugs in meta.method.js --- JavaScriptNext.YAML-tmLanguage | 3 ++- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index f7737e8..bd83a6b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -267,11 +267,12 @@ repository: - include: $base # matches things like: abc(x, y, z){ + # (ES6 methods) - name: meta.method.js match: |- (?x) (?match (?x) (?<![_$\w]) - (?<!function) + (?<!function\s) # An approximation due to fixed width look-behind, but usually good enough ([_$a-zA-Z][_$\w]*) (\() (\s*(.*?))?\s* From c92960bdc229264d966c7c584e22dd7927638e7e Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 06:01:05 +1100 Subject: [PATCH 012/202] fixed bugs in literal-method --- JavaScriptNext.YAML-tmLanguage | 10 +++++++--- JavaScriptNext.tmLanguage | 20 ++++++++++---------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index bd83a6b..7959291 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -92,16 +92,20 @@ repository: - include: '#leading-space' - include: '#brackets' - include: '#literal-keywords' - - include: '#literal-method' - include: '#literal-number' - include: '#literal-string' - include: '#arrow-function' - - include: '#literal-class' - include: '#literal-quasi' - include: '#literal-regex' - - include: '#literal-module' + - include: '#literal-function-call' - include: '#literal-function-constructor' + - include: '#literal-class' + - include: '#literal-module' + #later than function definitions, as matching for methods is only an approximation: + # anything looking like abc(){ with no 'function' in front will be a method + - include: '#literal-method' + - include: '#literal-labels' - include: '#literal-variable' - include: '#literal-punctuation' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 368725e..a1a5aed 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -255,10 +255,6 @@ include #literal-keywords - - include - #literal-method - include #literal-number @@ -273,27 +269,31 @@ include - #literal-class + #literal-quasi include - #literal-quasi + #literal-regex include - #literal-regex + #literal-function-call include - #literal-module + #literal-function-constructor include - #literal-function-call + #literal-class include - #literal-function-constructor + #literal-module + + + include + #literal-method include From 4b4af7e43d87e489da9ee3c733a3288f7267804b Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 06:24:58 +1100 Subject: [PATCH 013/202] more fixes to meta.method.js --- JavaScriptNext.YAML-tmLanguage | 12 ++++++------ JavaScriptNext.tmLanguage | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7959291..c22fc3b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -98,14 +98,14 @@ repository: - include: '#literal-quasi' - include: '#literal-regex' - - include: '#literal-function-call' - - include: '#literal-function-constructor' - include: '#literal-class' - include: '#literal-module' - #later than function definitions, as matching for methods is only an approximation: - # anything looking like abc(){ with no 'function' in front will be a method + # before function calls, to differentiate methods from them - include: '#literal-method' + - include: '#literal-function-call' + - include: '#literal-function-constructor' + - include: '#literal-labels' - include: '#literal-variable' - include: '#literal-punctuation' @@ -279,7 +279,7 @@ repository: (? include - #literal-function-call + #literal-class include - #literal-function-constructor + #literal-module include - #literal-class + #literal-method include - #literal-module + #literal-function-call include - #literal-method + #literal-function-constructor include @@ -1056,7 +1056,7 @@ 4 name - punctuation.definition.parameters.begin.js + punctuation.definition.parameters.end.js match @@ -1065,7 +1065,7 @@ (?<!function\s) # An approximation due to fixed width look-behind, but usually good enough ([_$a-zA-Z][_$\w]*) (\() - (\s*(.*?))?\s* + (?:\s*([^()]*?))?\s* (\)) \s* (?={) From b2cff929b27b8ec255d1dd510c1260df08706fe4 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 07:38:09 +1100 Subject: [PATCH 014/202] fixed bugs in meta.instance.constructor not including built-in classes --- JavaScriptNext.YAML-tmLanguage | 10 +++++++--- JavaScriptNext.tmLanguage | 24 +++++++++++++++++------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c22fc3b..d8e42d9 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -292,10 +292,14 @@ repository: literal-keywords: patterns: - name: meta.instance.constructor - match: (new)\s+([a-zA-Z_?.$][\w?.$]*) - captures: + begin: (new)\s+*(?=[a-zA-Z_?.$][\w?.$]*) + beginCaptures: '1': {name: keyword.operator.new.js} - '2': {name: entity.name.type.new.js} + end: (?![a-zA-Z_?.$][\w?.$]*) + patterns: + - include: '#support' + - name: entity.name.type.new.js + match: ([a-zA-Z_?.$][\w?.$]*) - name: keyword.control.declaration.js match: \b(var|let|const)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index baa728d..ad036bd 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -704,23 +704,33 @@ patterns - captures + begin + (new)\s+*(?=[a-zA-Z_?.$][\w?.$]*) + beginCaptures 1 name keyword.operator.new.js - 2 + + end + (?![a-zA-Z_?.$][\w?.$]*) + name + meta.instance.constructor + patterns + + include + #support + + + match + ([a-zA-Z_?.$][\w?.$]*) name entity.name.type.new.js - - match - (new)\s+([a-zA-Z_?.$][\w?.$]*) - name - meta.instance.constructor + match From d49196cd7339b2872d8359271babb6f3a5963c04 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 07:58:27 +1100 Subject: [PATCH 015/202] more support definitions --- JavaScriptNext.YAML-tmLanguage | 36 ++++++++++++++++--------- JavaScriptNext.tmLanguage | 48 +++++++++++++++++++++------------- 2 files changed, 53 insertions(+), 31 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index d8e42d9..a38d054 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -682,26 +682,22 @@ repository: support: patterns: + # built-ins - name: support.class.builtin.js match: \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b - - name: support.class.error.js - match: \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b + - name: support.function.js + match: \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() - - name: entity.name.function.mutator.js + - name: support.function.mutator.js match: \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() - - name: support.module.node.js - match: \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b - - - name: support.keyword.node.js - match: \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\b + - name: support.class.error.js + match: \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b - - name: support.class.node.js - match: \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b - - - name: entity.name.function.js - match: \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + # dom + - name: support.type.object.dom.js + match: \b(document|window)\b - name: support.constant.dom.js match: > @@ -711,3 +707,17 @@ repository: DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR )\b + + # firebug + - name: support.type.object.firebug.js + match: \b(console)\b + + # node + - name: support.module.node.js + match: \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b + + - name: support.type.object.node.js + match: \b(module|process(.env)?|global|GLOBAL|root|std(out|in|err)|exports|__dirname|__filename|console)\b + + - name: support.class.node.js + match: \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index ad036bd..54ccef9 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1812,6 +1812,18 @@ name support.class.builtin.js + + match + \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + name + support.function.js + + + match + \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() + name + support.function.mutator.js + match \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b @@ -1820,45 +1832,45 @@ match - \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() + \b(document|window)\b name - entity.name.function.mutator.js + support.type.object.dom.js match - \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b + (?x) + \b( + ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| + DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| + WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR + )\b + name - support.module.node.js + support.constant.dom.js match - \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports)\b + \b(console)\b name - support.keyword.node.js + support.type.object.firebug.js match - \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b + \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b name - support.class.node.js + support.module.node.js match - \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + \b(module|process(.env)?|global|GLOBAL|root|std(out|in|err)|exports|__dirname|__filename|console)\b name - entity.name.function.js + support.type.object.node.js match - (?x) - \b( - ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| - DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| - WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR - )\b - + \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b name - support.constant.dom.js + support.class.node.js From 526f6c9c2f424b1c31ab2c1eca462ed973858b4e Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 08:13:42 +1100 Subject: [PATCH 016/202] added storage.modifier.js & fixed the name of storage.type.js --- JavaScriptNext.YAML-tmLanguage | 5 ++++- JavaScriptNext.tmLanguage | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index a38d054..da8637c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -301,9 +301,12 @@ repository: - name: entity.name.type.new.js match: ([a-zA-Z_?.$][\w?.$]*) - - name: keyword.control.declaration.js + - name: storage.type.js match: \b(var|let|const)\b + - name: storage.modifier.js + match: \b(public|private|static)\b + - name: keyword.control.flow.js match: \b(return|yield)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 54ccef9..1a07abf 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -736,7 +736,13 @@ match \b(var|let|const)\b name - keyword.control.declaration.js + storage.type.js + + + match + \b(public|private|static)\b + name + storage.modifier.js match From 4860242abbe649e868eb426e6a2cf8d2fd5f2cd4 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 08:26:01 +1100 Subject: [PATCH 017/202] fixed name 'entity.name.class.js' --- JavaScriptNext.YAML-tmLanguage | 8 ++++---- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index da8637c..1efb00c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -171,14 +171,14 @@ repository: - name: meta.prototype.declaration.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* captures: - '1': {name: support.class.js} + '1': {name: entity.name.class.js} '2': {name: support.constant.js} # match stuff like: Sound.prototype.play = function() { } - name: meta.prototype.function.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) captures: - '1': {name: support.class.js} + '1': {name: entity.name.class.js} '2': {name: support.constant.js} '3': {name: entity.name.function.js} '4': {name: storage.type.function.js} @@ -190,14 +190,14 @@ repository: - name: meta.prototype.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype) captures: - '1': {name: support.class.js} + '1': {name: entity.name.class.js} '2': {name: support.constant.js} # match stuff like: Sound.prototype.play = myfunc - name: meta.function.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* captures: - '1': {name: support.class.js} + '1': {name: entity.name.class.js} '2': {name: support.constant.js} '3': {name: entity.name.function.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 1a07abf..9826ea8 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -445,7 +445,7 @@ 1 name - support.class.js + entity.name.class.js 2 @@ -464,7 +464,7 @@ 1 name - support.class.js + entity.name.class.js 2 @@ -508,7 +508,7 @@ 1 name - support.class.js + entity.name.class.js 2 @@ -527,7 +527,7 @@ 1 name - support.class.js + entity.name.class.js 2 From e09d72d6881de9ee38ef86209f3da5d0e96885ef Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 08:38:10 +1100 Subject: [PATCH 018/202] fixed bugs & added new keywords to 'literal-module' --- JavaScriptNext.YAML-tmLanguage | 18 ++++++------------ JavaScriptNext.tmLanguage | 31 +++++-------------------------- 2 files changed, 11 insertions(+), 38 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 1efb00c..0f5cb8d 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -112,18 +112,12 @@ repository: literal-module: patterns: - # match module like: module Module { } - - name: meta.module.js - match: \b(module)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(?=\{) - captures: - '1': {name: storage.type.module.js} - '2': {name: entity.name.module.js} + # module names are defined using strings + - name: storage.type.module.js + match: \b(module)\b - # match export like: export decl - - name: meta.module.export.js - match: \b(export)\b\s*(?=(?:module|class|function|var|let|const)\b(?:\s+[a-zA-Z_$][_$\w]*)?) - captures: - '1': {name: storage.type.export.js} + - name: keyword.operator.module.js + match: \b(import|export|from|as)\b literal-class: patterns: @@ -720,7 +714,7 @@ repository: match: \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b - name: support.type.object.node.js - match: \b(module|process(.env)?|global|GLOBAL|root|std(out|in|err)|exports|__dirname|__filename|console)\b + match: \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports|__dirname|__filename|console)\b - name: support.class.node.js match: \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 9826ea8..0df1a44 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1095,37 +1095,16 @@ patterns - captures - - 1 - - name - storage.type.module.js - - 2 - - name - entity.name.module.js - - match - \b(module)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(?=\{) + \b(module)\b name - meta.module.js + storage.type.module.js - captures - - 1 - - name - storage.type.export.js - - match - \b(export)\b\s*(?=(?:module|class|function|var|let|const)\b(?:\s+[a-zA-Z_$][_$\w]*)?) + \b(import|export|from|as)\b name - meta.module.export.js + keyword.operator.module.js @@ -1868,7 +1847,7 @@ match - \b(module|process(.env)?|global|GLOBAL|root|std(out|in|err)|exports|__dirname|__filename|console)\b + \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports|__dirname|__filename|console)\b name support.type.object.node.js From 1e20f6f4174a96563e733db8c74b336d331f2b2f Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 08:59:52 +1100 Subject: [PATCH 019/202] removed the ugly theme, does not really belong in the package --- JavaScriptNext.tmTheme | 1899 ---------------------------------------- 1 file changed, 1899 deletions(-) delete mode 100644 JavaScriptNext.tmTheme diff --git a/JavaScriptNext.tmTheme b/JavaScriptNext.tmTheme deleted file mode 100644 index 2e05217..0000000 --- a/JavaScriptNext.tmTheme +++ /dev/null @@ -1,1899 +0,0 @@ - - - - - name - JavaScriptNext - settings - - - settings - - activeGuide - #3333FFFF - background - #000000 - bracketsBackground - #ff00aa66 - bracketsOptions - background - caret - #ff0099 - foreground - #e6e6e6 - guide - #33333388 - gutter - #6600ff33 - invisibles - #404040 - lineHighlight - #ff009933 - multiEditHighlight - #00ff0022 - searchHighlight - #FF00AA99 - selection - #00ffff44 - stackGuide - #333333CC - - - - name - bracket.curly - scope - bracket.curly - settings - - background - #FF44AA - foreground - #3399FF - - - - name - bracket.square - scope - bracket.square - settings - - background - #2266CC - foreground - #FF8800 - - - - name - bracket.round - scope - bracket.round - settings - - background - #9922FF - foreground - #00FF00 - - - - name - bracket.quote - scope - bracket.quote - settings - - background - #00FF00 - - - - name - comment - scope - comment - settings - - fontStyle - italic - foreground - #646464ff - - - - name - Invalid - scope - invalid - settings - - background - #ff000022 - - - - name - constant - scope - constant - settings - - foreground - #3387ccff - - - - name - Keyword - scope - keyword - settings - - foreground - #e28964 - - - - name - constant.numeric - scope - constant.numeric - settings - - foreground - #ffff66 - - - - name - Storage - scope - storage - settings - - foreground - #99cf50 - - - - name - storage.modifier - scope - storage.modifier - settings - - foreground - #cf5099 - - - - name - storage.self - scope - storage.self - settings - - fontStyle - bold - foreground - #cc0033 - - - - name - storage.type - scope - storage.type - settings - - foreground - #cf9950 - - - - name - Support - scope - support - settings - - foreground - #8a5c8dff - - - - name - entity.name.function - scope - entity.name.function - settings - - foreground - #bb00ff - - - - name - keyword control - scope - keyword.control - settings - - foreground - #ff00ff - - - - name - keyword.control.declaration - scope - keyword.control.declaration - settings - - foreground - #8888aa - - - - name - keyword.control.module - scope - keyword.control.module - settings - - foreground - #ffff33 - background - #ffff3333 - options - underline - - - - name - keyword.control.flow - scope - keyword.control.flow - settings - - fontStyle - bold - foreground - #ff6600 - background - #110300 - - - - - name - keyword.control.conditional - scope - keyword.control.conditional - settings - - foreground - #ff00ff - - - - name - keyword.control.trycatch - scope - keyword.control.trycatch - settings - - foreground - #ff0033 - - - - name - keyword.control.loop - scope - keyword.control.loop - settings - - foreground - #009999 - - - - name - keyword.control.switch - scope - keyword.control.switch - settings - - foreground - #999999 - - - - name - keyword operator - scope - keyword.operator - settings - - foreground - #ff0080 - - - - name - Function arg - scope - meta.function.argument, variable.parameter, meta.parens.c - settings - - foreground - #77ff11 - - - - name - - scope - punctuation.section.embedded - settings - - background - #0D0D0D37 - foreground - #00d3ffff - - - - name - keyword.other.unit - scope - keyword.other.unit, keyword.unit.css - settings - - foreground - #80ff00ff - - - - name - invalid.illegal - scope - invalid.illegal - settings - - background - #562d56bf - foreground - #fd5ff1ff - - - - name - string.quoted source - scope - string.quoted source - settings - - foreground - #daefa3 - - - - name - string constant - scope - string constant - settings - - foreground - #cfed81 - - - - name - string.regexp - scope - string.regexp - settings - - foreground - #6fff17 - - - - name - punctuation.definition.string - scope - punctuation.definition.string - settings - - background - #15151501 - foreground - #b4ff82 - - - - name - string.regexp.special - scope - - string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - - settings - - foreground - #00d505 - - - - name - string.regexp punctuation keyword - scope - string.regexp punctuation keyword - settings - - foreground - #c559ff - - - - name - string variable - scope - string variable - settings - - foreground - #8a9a95 - - - - name - support.function - scope - support.function - settings - - foreground - #fcf352ff - - - - name - meta.tag - scope - meta.tag - settings - - foreground - #4f9effff - - - - name - meta.tag entity - scope - meta.tag entity - settings - - foreground - #157eff - - - - name - HTML/XML tag attribute value - scope - meta.tag string.quoted.double.html - settings - - foreground - #E07D2C - - - - name - html5 tag - scope - meta.tag.block.any.html.html5 - settings - - foreground - #e88bfcff - - - - name - html5 tag entity - scope - meta.tag.block.any.html.html5 entity - settings - - foreground - #d730faff - - - - name - meta.tag.inline - scope - - source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity - - settings - - foreground - #87a7e2ff - - - - name - html js tag - scope - source.js.embedded.html entity.name.tag.script.html - settings - - foreground - #FF3535 - - - - name - html js tag braces - scope - source.js.embedded.html punctuation.definition.tag.html - settings - - foreground - #FF1E1E - - - - name - html js tag url - scope - source.js.embedded.html string.quoted.double.html - settings - - foreground - #FF9D9D - - - - name - Attribute - scope - entity.other.attribute-name - settings - - foreground - #7349beff - - - - name - Meta Toc List - scope - meta.toc-list - settings - - background - #162c1aff - foreground - #BEFEC7FF - options - underline - - - - name - js variable readwrite - scope - meta.initialization, variable.other.readwrite.js - settings - - foreground - #ff9122 - - - - name - js object - scope - variable.other.object.js - settings - - foreground - #ffee00 - - - - name - js object with parent - scope - meta.property-name.js variable.other.object.js - settings - - foreground - #ffff88 - - - - name - support.variable.property.js - scope - support.variable.property.js - settings - - foreground - #3399ff - - - - name - variable.other.dot-access - scope - variable.other.dot-access - settings - - foreground - #66ffdd - - - - name - variable.other.property.js - scope - variable.other.property.js - settings - - foreground - #37C1BE - - - - name - punctuation.section.scope.square.js - scope - punctuation.section.scope.square.js - settings - - foreground - #ff2404 - - - - name - punctuation.section.scope.round.js, meta.brace.round - scope - punctuation.section.scope.round.js, meta.brace.round - settings - - foreground - #1c38ff - - - - name - punctuation.definition.arrow.js - scope - punctuation.definition.arrow.js - settings - - fontStyle - bold - foreground - #aa00ff - background - #001133 - - - - name - entity.arrow.function.js - scope - entity.arrow.function.js - settings - - fontStyle - bold - foreground - #aa00ff - background - #001133 - - - - name - variable.language - scope - variable.language - settings - - foreground - #aa0044 - - - - name - variable.language.prototype - scope - variable.language.prototype - settings - - foreground - #ff6600 - - - - name - support.class.error.js - scope - support.class.error.js - settings - - foreground - #ff5522 - - - - name - support.class.builtin.js - scope - support.class.builtin.js - settings - - fontStyle - italic - foreground - #ffee00 - - - - name - support.class.node.js - scope - support.class.node.js - settings - - foreground - #1224fe - - - - name - entity.name.function.node.js - scope - entity.name.function.node.js - settings - - foreground - #d84014 - - - - name - support.keyword.node.js - scope - support.keyword.node.js - settings - - fontStyle - bold - foreground - #99ef25 - - - - name - variable.import.destructuring.js - scope - variable.import.destructuring.js - settings - - foreground - #00bbff - - - - name - other.object.key.js - scope - other.object.key.js - settings - - foreground - #1C98C1 - - - - name - meta.accessor.js punctuation.definition.parameters - scope - meta.accessor.js punctuation.definition.parameters - settings - - foreground - #005588 - - - - name - storage.type.accessor.js - scope - storage.type.accessor.js - settings - - fontStyle - bold italic - foreground - #0066aa - background - #001122 - - - - name - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - scope - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - settings - - foreground - #ff0044 - background - #220011 - - - - name - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - scope - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - settings - - foreground - #cccc44 - background - #222211 - - - - name - storage.type.class.js, storage.type.extends.js - scope - storage.type.class.js, storage.type.extends.js - settings - - foreground - #0044aa - background - #001122 - - - - name - meta.function.call.class.static.js - scope - meta.function.call.class.static.js - settings - - foreground - #880011 - - - - name - variable.other.class.static.js - scope - variable.other.class.static.js - settings - - foreground - #aa0066 - - - - name - entity.name.accessor.js - scope - entity.name.accessor.js - settings - - fontStyle - bold italic - foreground - #00ffcc - background - #001122 - - - - name - entity.name.method.js - scope - entity.name.method.js - settings - - fontStyle - italic bold - foreground - #aa00ff - background - #110022 - - - - name - meta.method.js - scope - meta.method.js - settings - - fontStyle - bold - foreground - #660099 - - - - name - storage.type.function.js - scope - storage.type.function.js - settings - - fontStyle - bold - foreground - #99cc44 - - - - name - string.quoted.single - scope - string.quoted.single - settings - - foreground - #88FFAAAA - - - - name - variable.other.quasi.js - scope - variable.other.quasi.js - settings - - foreground - #ff0099 - - - - name - string.quasi.js - scope - string.quasi.js - settings - - foreground - #00FF00 - - - - name - punctuation.quasi.element - scope - punctuation.quasi.element - settings - - foreground - #008800 - - - - name - entity.quasi.tag.name.js - scope - entity.quasi.tag.name.js - settings - - foreground - #ffff00 - - - - name - meta.group.braces.square, punctuation.destructuring - scope - meta.group.braces.square string.quoted.single, punctuation.destructuring - settings - - foreground - #47E9AC - - - - name - string.quoted.double - scope - string.quoted.double - settings - - foreground - #11bb11 - - - - name - punctuation.section.scope.curly.js - scope - punctuation.section.scope.curly.js - settings - - foreground - #F9044E - - - - name - meta.delimiter.object.comma.js - scope - meta.delimiter.object.comma.js - settings - - foreground - #00ffff - - - - name - meta.group.braces.curly string.quoted.single - scope - meta.group.braces.curly string.quoted.single - settings - - foreground - #16B853 - - - - name - support.function - scope - support.function - settings - - foreground - #B532ff - - - - name - punctuation.definition.string.begin.js - scope - punctuation.definition.string.begin.js - settings - - foreground - #D2E20C - - - - name - punctuation.definition.string.end.js - scope - punctuation.definition.string.end.js - settings - - foreground - #CEA30D - - - - name - instance constructor - scope - meta.class.inheritance, meta.instance.constructor - settings - - fontStyle - italic underline - foreground - #e81e41 - - - - name - entity.name.class.js - scope - entity.name.class.js - settings - - fontStyle - italic - background - #00ffff33 - foreground - #00ffff - - - - name - entity.name.extends.js - scope - entity.name.extends.js - settings - - background - #00ff9933 - foreground - #00ff99 - fontStyle - italic - - - - name - function call - scope - meta.function-call entity.name.function - settings - - foreground - #5b24ff - - - - name - function call with args - scope - meta.function-call.function.with-arguments.js - settings - - foreground - #33ff00 - - - - name - js brace - scope - meta.brace.curly.js - settings - - foreground - #ff0099 - - - - name - js paren - scope - meta.brace.round.js - settings - - background - #000000ff - foreground - #d0c5feff - - - - name - js constant escape - scope - constant.character.escape - settings - - foreground - #10cf62ff - - - - name - pseudo-class - scope - - meta.selector.css entity.other.attribute-name.tag.pseudo-class - - settings - - foreground - #4fbc4b - - - - name - css selectors - scope - entity.namespace.unicode.css - settings - - foreground - #FF4F4F - - - - name - entity.other.attribute-name.id - scope - entity.other.attribute-name.id - settings - - background - #0b0028ff - foreground - #f20073ff - - - - name - class name - scope - meta.prototype support.class - settings - - foreground - #ff0099 - - - - name - support object - scope - support.object - settings - - fontStyle - bold - foreground - #ffee00 - - - - name - class name prototype - scope - meta.prototype support.constant - settings - - foreground - #ff6600 - - - - name - prototype declaration - scope - meta.prototype.declaration.js - settings - - fontStyle - bold - - - - name - js undefined - scope - constant.language.undefined.js - settings - - foreground - #555588 - - - - name - variable.other.constant.js - scope - variable.other.constant.js - settings - - foreground - #00ff33 - background - #003311 - - - - name - false - scope - constant.language.boolean.false - settings - - foreground - #aaaa55 - - - - name - true - scope - constant.language.boolean.true - settings - - foreground - #cc7744 - - - - name - js null - scope - constant.language.null.js - settings - - foreground - #558855 - - - - name - css#id punctuation - scope - punctuation.definition.entity.id.css - settings - - background - #0b0028 - foreground - #ff489f - - - - name - css.class - scope - - entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css - - settings - - background - #0b0028 - foreground - #9529b8 - - - - name - css.class puntuation - scope - punctuation.definition.entity.class.css - settings - - background - #0b0028ff - foreground - #cd87e4ff - - - - name - css pseudo element - scope - entity.other.attribute-name.pseudo-element.css - settings - - background - #0b0028ff - foreground - #ff00ffff - - - - name - css property-name - scope - support.type.property-name.css - settings - - foreground - #b8efecff - - - - name - css @at-rule - scope - meta.preprocessor.at-rule keyword.control.at-rule - settings - - foreground - #d7c271ff - - - - name - css color - scope - - constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css - - settings - - foreground - #fb7720ff - - - - name - css constants - scope - support.constant.property-value.css - settings - - foreground - #7ce85eff - - - - name - Puncation Termination - scope - punctuation.terminator, punctuation.separator - settings - - foreground - #4bfcf8ff - - - - name - css constructor.argument - scope - meta.constructor.argument.css - settings - - foreground - #8f9d6aff - - - - name - diff.header - scope - meta.diff, meta.diff.header, entity.name.namespace - settings - - background - #0e2231ff - foreground - #f8f8f8ff - - - - name - diff.deleted - scope - markup.deleted - settings - - background - #420e09ff - foreground - #f8f8f8ff - - - - name - diff.changed - scope - markup.changed - settings - - background - #4a410dff - foreground - #f8f8f8ff - - - - name - diff.inserted - scope - markup.inserted - settings - - background - #253b22ff - foreground - #f8f8f8ff - - - - name - Markup: Italic - scope - markup.italic - settings - - fontStyle - italic - foreground - #6ad500ff - - - - name - Markup: Underline - scope - markup.underline - settings - - foreground - #e18964ff - options - underline - - - - name - Markup: Quote - scope - markup.quote - settings - - background - #fee09c12 - fontStyle - italic - foreground - #e1d4b9ff - - - - name - Markup: Heading - scope - markup.heading, markup.heading entity - settings - - background - #de3280ff - foreground - #ffffffff - - - - name - Markup: List - scope - markup.list - settings - - foreground - #6657eaff - - - - name - Markup: Raw - scope - markup.raw - settings - - background - #b1b3ba08 - foreground - #578bb3ff - - - - name - Markup: Comment - scope - markup comment - settings - - foreground - #f67b37ff - - - - name - Markup: Separator - scope - meta.separator - settings - - background - #242424ff - foreground - #60a633ff - - - - name - Log Entry - scope - meta.line.entry.logfile, meta.line.exit.logfile - settings - - background - #eeeeee29 - foreground - #f8f8f8ff - - - - name - Log Entry Error - scope - meta.line.error.logfile - settings - - background - #751012 - foreground - #f8f8f8 - - - - name - JSON property top - scope - meta.structure.dictionary.json string.quoted.double - settings - - background - #111111 - foreground - #1144bb - - - - name - JSON property level 2 - scope - - meta.structure meta.structure.dictionary.json string.quoted.double - - settings - - foreground - #1122bb - - - - name - JSON property level 3 - scope - - meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - - settings - - foreground - #2938eb - - - - name - JSON property level 4 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - - settings - - foreground - #6d7ef1 - - - - name - JSON property level 5 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - - settings - - foreground - #b3bbf7 - - - - name - JSON value - scope - meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #aa00aa - - - - name - JSON value level 2 - scope - - meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - - settings - - foreground - #bf00bf - - - - name - JSON value level 3 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - - settings - - foreground - #ff00ff - - - - name - JSON value level 4 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - - settings - - foreground - #ff40ff - - - - name - JSON value level 5 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - - settings - - foreground - #ff80ff - - - - name - JSON value string punctuation - scope - - meta.structure.dictionary.value.json string punctuation.definition.string.double - - settings - - foreground - #8409ff - - - - name - JSON array value - scope - meta.structure.array.json string.quoted.double - settings - - foreground - #5522aa - - - - name - JSON array value level 1 - scope - - meta.structure meta.structure meta.structure.array.json string.quoted.double - - settings - - foreground - #7017c8ff - - - - name - JSON array value level 2 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - - settings - - foreground - #9541e9ff - - - - name - JSON array value level 3 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - - settings - - foreground - #ba83f1ff - - - - name - JSON array value level 4 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - - settings - - foreground - #dfc6f9ff - - - - name - JSON prop string punctuation - scope - - meta.structure.dictionary.json string punctuation.definition.string - - settings - - foreground - #66bbddff - - - - name - JSON array string puntuation - scope - - meta.structure.array.json string punctuation.definition.string - - settings - - foreground - #416be9ff - - - - name - JSON array brackets - scope - meta.structure.array.json punctuation.definition.array - settings - - foreground - #fcc401ff - - - - name - JSON object braces - scope - - meta.structure.dictionary.json punctuation.definition.dictionary - - settings - - foreground - #fedf76ff - - - - uuid - b238c753-1549-3f12-a519-0faa5dcd4f65 - - From 45a3b9758c9ca071b80518c1b7cd7efce935d383 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 09:07:38 +1100 Subject: [PATCH 020/202] fixed the braces scoping issue --- JavaScriptNext.YAML-tmLanguage | 14 +++++++++----- JavaScriptNext.tmLanguage | 26 +++++++++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 0f5cb8d..96741c1 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -47,16 +47,20 @@ repository: - name: meta.group.braces.round begin: (\()(?!\)) end: (\)) - captures: - '1': {name: punctuation.section.scope.round.js} + beginCaptures: + '1': {name: meta.brace.round.js} + endCaptures: + '1': {name: meta.brace.round.js} patterns: - include: $base - name: meta.group.braces.square begin: (\[)(?!\]) end: (\]) - captures: - '1': {name: punctuation.section.scope.square.js} + beginCaptures: + '1': {name: meta.brace.round.js} + endCaptures: + '1': {name: meta.brace.round.js} patterns: - include: $base @@ -247,7 +251,7 @@ repository: captures: '1': {name: entity.name.function.js} '2': {name: meta.group.braces.round.function.arguments.js} - '3': {name: punctuation.section.scope.round.js} + '3': {name: meta.brace.round.js} # matches things like: function(one,two,...)\n?{...} - name: meta.function.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 0df1a44..a894948 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -119,16 +119,24 @@ begin (\()(?!\)) - captures + beginCaptures 1 name - punctuation.section.scope.round.js + meta.brace.round.js end (\)) + endCaptures + + 1 + + name + meta.brace.round.js + + name meta.group.braces.round patterns @@ -142,16 +150,24 @@ begin (\[)(?!\]) - captures + beginCaptures 1 name - punctuation.section.scope.square.js + meta.brace.round.js end (\]) + endCaptures + + 1 + + name + meta.brace.round.js + + name meta.group.braces.square patterns @@ -1015,7 +1031,7 @@ 3 name - punctuation.section.scope.round.js + meta.brace.round.js match From a81d5e20eea50b73e52b60224a2ac197aff7cbfd Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 09:12:39 +1100 Subject: [PATCH 021/202] better comments --- JavaScriptNext.YAML-tmLanguage | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 96741c1..c6f95b0 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -18,7 +18,7 @@ repository: patterns: - name: arrow.function.js patterns: - # match stuff like:(args) => + # e.g. (args) => - name: storage.type.function.arrow.js match: |- (?x) @@ -125,7 +125,7 @@ repository: literal-class: patterns: - # match regular class like: class MyClass { } + # e.g. class MyClass { } - name: meta.class.js match: \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* captures: @@ -134,7 +134,7 @@ repository: '3': {name: storage.type.extends.js} '4': {name: entity.name.extends.js} - # Concise getter and setter + # getter/setter - name: meta.accessor.js match: \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) captures: @@ -155,7 +155,7 @@ repository: literal-function-constructor: patterns: - # match regular function like: function myFunc(arg) { } + # e.g. function myFunc(arg) { } - name: meta.function.js match: \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) captures: @@ -165,14 +165,14 @@ repository: '4': {name: variable.parameter.function.js} '5': {name: punctuation.definition.parameters.end.js} - # match stuff like: Sound.prototype = { } when extending an object + # e.g. Sound.prototype = { } when extending an object - name: meta.prototype.declaration.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* captures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} - # match stuff like: Sound.prototype.play = function() { } + # e.g. Sound.prototype.play = function() { } - name: meta.prototype.function.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) captures: @@ -184,14 +184,14 @@ repository: '6': {name: variable.parameter.function.js} '7': {name: punctuation.definition.parameters.end.js} - # Sound.prototype + # e.g. Sound.prototype - name: meta.prototype.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype) captures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} - # match stuff like: Sound.prototype.play = myfunc + # e.g. Sound.prototype.play = myfunc - name: meta.function.js match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* captures: @@ -199,7 +199,7 @@ repository: '2': {name: support.constant.js} '3': {name: entity.name.function.js} - # match stuff like: .play = function() { } + # e.g. .play = function() { } - name: meta.function.js match: \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) captures: @@ -210,7 +210,7 @@ repository: '5': {name: variable.parameter.function.js} '6': {name: punctuation.definition.parameters.end.js} - # match stuff like: foobar: function() { } + # e.g. foobar: function() { } - name: meta.function.json.js match: \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) captures: @@ -221,7 +221,7 @@ repository: '5': {name: variable.parameter.function.js} '6': {name: punctuation.definition.parameters.end.js} - # Attempt to match "foo": function + # e.g. "foo": function - name: meta.function.json.js match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) captures: @@ -253,7 +253,7 @@ repository: '2': {name: meta.group.braces.round.function.arguments.js} '3': {name: meta.brace.round.js} - # matches things like: function(one,two,...)\n?{...} + # e.g. function(one,two,...)\n?{...} - name: meta.function.js begin: |- (?x) @@ -268,8 +268,7 @@ repository: patterns: - include: $base - # matches things like: abc(x, y, z){ - # (ES6 methods) + # ES6 methods, e.g. abc(x, y, z){ - name: meta.method.js match: |- (?x) From 1881f594149c75bad6c5f6375ba41c3cc27501ac Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 09:22:34 +1100 Subject: [PATCH 022/202] added generator support --- JavaScriptNext.YAML-tmLanguage | 12 ++++++------ JavaScriptNext.tmLanguage | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c6f95b0..a57d4dd 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -157,7 +157,7 @@ repository: patterns: # e.g. function myFunc(arg) { } - name: meta.function.js - match: \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) + match: \b(function\*?)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) captures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} @@ -174,7 +174,7 @@ repository: # e.g. Sound.prototype.play = function() { } - name: meta.prototype.function.js - match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) + match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) captures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} @@ -201,7 +201,7 @@ repository: # e.g. .play = function() { } - name: meta.function.js - match: \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) + match: \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function\*?)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) captures: '1': {name: entity.name.function.js} '2': {name: storage.type.function.js} @@ -212,7 +212,7 @@ repository: # e.g. foobar: function() { } - name: meta.function.json.js - match: \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + match: \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) captures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} @@ -223,7 +223,7 @@ repository: # e.g. "foo": function - name: meta.function.json.js - match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) captures: '1': {name: string.quoted.single.js} '2': {name: punctuation.definition.string.begin.js} @@ -257,7 +257,7 @@ repository: - name: meta.function.js begin: |- (?x) - \b(function) + \b(function\*?) (?= (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name \(.*?\) # The properties that the function accepts diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index a894948..e674864 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -451,7 +451,7 @@ match - \b(function)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) + \b(function\*?)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) name meta.function.js @@ -514,7 +514,7 @@ match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) name meta.prototype.function.js @@ -596,7 +596,7 @@ match - \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) + \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function\*?)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) name meta.function.js @@ -635,7 +635,7 @@ match - \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) name meta.function.json.js @@ -709,7 +709,7 @@ match - (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function)?\s*(\()(.*?)(\)) + (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) name meta.function.json.js @@ -1042,7 +1042,7 @@ begin (?x) - \b(function) + \b(function\*?) (?= (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name \(.*?\) # The properties that the function accepts From fd64c3564a8871c3435845cec07d97b68c72fd3c Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 09:37:00 +1100 Subject: [PATCH 023/202] re-organized package & renamed to "javascript improved" --- .gitignore | 1 - ...nguage => JavaScriptImproved.YAML-tmLanguage | 4 ++-- ....tmLanguage => JavaScriptImproved.tmLanguage | 4 ++-- README.md | 11 +++-------- ss-es5.png | Bin 69316 -> 0 bytes ss-es6.png | Bin 85404 -> 0 bytes 6 files changed, 7 insertions(+), 13 deletions(-) delete mode 100644 .gitignore rename JavaScriptNext.YAML-tmLanguage => JavaScriptImproved.YAML-tmLanguage (96%) rename JavaScriptNext.tmLanguage => JavaScriptImproved.tmLanguage (99%) delete mode 100644 ss-es5.png delete mode 100644 ss-es6.png diff --git a/.gitignore b/.gitignore deleted file mode 100644 index affff01..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/*.cache diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage similarity index 96% rename from JavaScriptNext.YAML-tmLanguage rename to JavaScriptImproved.YAML-tmLanguage index a57d4dd..3259760 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -1,8 +1,8 @@ # [PackageDev] target_format: plist, ext: tmLanguage -name: JavaScriptNext +name: JavaScriptImproved scopeName: source.js fileTypes: [js, htc, jsx] -uuid: 0D2D03B9-F18B-4D9D-A960-716FDEC35331 +uuid: 487CF323-A3F9-48FA-B140-DCE8C893E664 firstLineMatch: ^#!/.*\b(node|js) keyEquivalent: ^~J diff --git a/JavaScriptNext.tmLanguage b/JavaScriptImproved.tmLanguage similarity index 99% rename from JavaScriptNext.tmLanguage rename to JavaScriptImproved.tmLanguage index e674864..2ce4294 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptImproved.tmLanguage @@ -13,7 +13,7 @@ keyEquivalent ^~J name - JavaScriptNext + JavaScriptImproved patterns @@ -1879,6 +1879,6 @@ scopeName source.js uuid - 0D2D03B9-F18B-4D9D-A960-716FDEC35331 + 487CF323-A3F9-48FA-B140-DCE8C893E664 diff --git a/README.md b/README.md index e220a8c..0adc5a5 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,5 @@ # JavaScript.tmLanguage -Better JavaScript language definition for TextMate and SublimeText2. This builds on the language files commonly used and adds more fine grained matching and also includes new features from ECMAScript 6 like modules, succinct methods, arrow functions, classes, and accessors (ES5). +ECMAScript 6 JavaScript language definition for TextMate and SublimeText. This builds on [Benvie's work](https://github.com/Benvie/JavaScriptNext.tmLanguage +). -__ES6__ - -![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/ss-es6.png) - -__ES5__ - -![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/ss-es5.png) +Highlighted features include modules, succinct methods, arrow functions, classes, generators, and accessors. diff --git a/ss-es5.png b/ss-es5.png deleted file mode 100644 index 591f92c94fa476a1dcf78a54402e0cd75c4d33bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69316 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 diff --git a/ss-es6.png b/ss-es6.png deleted file mode 100644 index 5a2efef8839577e0b6f4ade21f19b4791e6c62cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85404 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 From e7630daab3c4bc39b222bdd03adca7be00a09e42 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 3 Jan 2014 09:59:27 +1100 Subject: [PATCH 024/202] updated readme & added some screenshots --- README.md | 17 +++++++++++++++++ screenshots/classes.png | Bin 0 -> 14897 bytes screenshots/code.png | Bin 0 -> 19343 bytes screenshots/module.png | Bin 0 -> 10037 bytes 4 files changed, 17 insertions(+) create mode 100644 screenshots/classes.png create mode 100644 screenshots/code.png create mode 100644 screenshots/module.png diff --git a/README.md b/README.md index 0adc5a5..f851018 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,20 @@ ECMAScript 6 JavaScript language definition for TextMate and SublimeText. This b ). Highlighted features include modules, succinct methods, arrow functions, classes, generators, and accessors. + +## Installation and Use + +If you haven't already, [install Package Control](https://sublime.wbond.net/installation), then select `JavaScript Improved` from the `Package Control: Install Package` dropdown list in the Command Palette. + +To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptImproved`. + +# Screenshots +![screenshot](https://raw.github.com/simonzack/JavaScriptImproved/master/screenshots/code.png) + +__Classes__ + +![screenshot](https://raw.github.com/simonzack/JavaScriptImproved/master/screenshots/classes.png) + +__Modules__ + +![screenshot](https://raw.github.com/simonzack/JavaScriptImproved/master/screenshots/module.png) diff --git a/screenshots/classes.png b/screenshots/classes.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f5916b319606f0f38b6643414a66d065cda100 GIT binary patch literal 14897 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 literal 0 HcmV?d00001 diff --git a/screenshots/code.png b/screenshots/code.png new file mode 100644 index 0000000000000000000000000000000000000000..63f64de5dd3acae0a5227f314f2092af51a0eced GIT binary patch literal 19343 zcmb`vcUY6z);=6$lu<;+Q9(gqY*;`+1*9{Ih)RbXlrl5qD&_feK4-g=9zMZHubLPxB@B99)?+-6Yp0>01+H2kGUiW%JZ)vOZ>=M`o zfk1d}T)(OZfo#)-KsY6S+y=f0y!`W1@E?blp86F?cGKZ;@Zkr$%UYKqki1Clb?fcm z^G^5crd|-po@&-Vj(WF@yAX)R@f%k!8~9mH_i4STzWyR%gYa84{XwDl^u3nJ7Ns

f}WGr zH1*!F8e;hgLm*OqZSyS7buYtUvYDHVS*tT%B5ob(^Y$0!;a%RPD$;Jm^j9UdxkhEb zDt4?4qR-!o#~_mgFrH^b{T-;r(;V@2zv#Ir6`)hP4fj=w`|q(i zhbiT4JdNspx?3r9(P-7=x#NM!3>0TcR3h&L7aWc8d4A9pr-m7pJd=Lsf}U^GT1f`- zX8Mqd&GQt3ImPrBZviNNPC04Iq{YfA@bQ_Rrza(R-Y(DH$5P_00hPL)#o&yQ=$@!AMizbbFPcX#YYmZ3mIhH{E` zf)JByHYniMT#~8-4tl?-HeFU&4_|ZuB)y&{E*((<|WF6wHZSUTXdeM&0x0;b$(6A=s_xX7$4tR zasRR3?J}rqQzy3vUpm-btK7*@_G=2e@kXoKknH;Wib#>CE>Qkp&F7Zhp_wwa#B`20YB7Vy$vF}YimsiY~Uu=gt|AecC{C4FUPUA`am3OgVR{sT9&oz&$lz6{YQ;P z8!ts{2ZT02S_TJWp^hWtk6SuHx zDSQu+1XG`O-B^37(%4l#ofn>de`%v{KoCE?p}1xY(R3Z-q&VJ=uk$e=Da6jaDATQj z!t{8E6oRVEg;YH9{mX;9w4&6w!^)VtZ?K*jq5L;Pnpz(&$MWU;!?qVry>zm|BG1U7 z#BtIe61zLFs%VM8DM%G;f>q%0OR~???q}TigdIA!RDMhbX`6^CZFhL}Bx5&1#2kJ- zYi(WVam;7DVN9*N(^);C5M8+gFQ0d#=z5Ev4Tjw^yUT>DL{&v{wTRPINTzT_4oWai zG{_Wc*45HgI~3KScO31c+iLs1j?|ziid)@HW}ZcwIX$0{ecF)u>S=rS>bV=84LE^Z zhx5TgNM)O0CHgFqiAE%(uR*)}hJyH=o+AU}!^O2>eb7q(ggLId6hr2?!n1R+PS|r{ zgB1BLDb{cd`%mmND>bw!%I3=b*v#deORF6m{7g3}!>9J06?Kr|S!+GV7eX$>PlorV zuXbL@QZ_1_NH*v%{_4*zoHdBkbC`3SmZ#gVH>)}Ugk&=|7JchgUan6TdsHR-fl8ANsG=btvNj#bT zNolT8)R8&PYv}Ja)N{ZIg~YN3xKl*(cEP)*!kh;!OTi5Djka25?!a%_(=bR=wcXGE z3;VmLLi33DAsF^`pQBdhQ*A1ppN7nfWkn&%4ZVv-YPULJlWmz=q*D6n9UsN!#D?HH zkOf>oH|}BhVv($-etF+oTygn%LcZ48#RwI=PYgJ9P2CJ-dF}9wpP9X1l>t(D7Po`q z;HGumOYRG}8zx~`?68xo*bUK&BUNN7I1^V&7A`y)L>iX@8xcIX`U#Os^Jo$?^quIB zD0V3?rU@Z9Vg;_Qw%mV}txbLYufut$B(W!Q0#>Zs_gTGYS&ucE3NV_8%HXj3A*|aL z8Q&mrrsdB+hyklD|Ey=(_L3~k!6wXDI!dD>=VnhKD->epPNK}}oNCe%?6FN@hqmU( z6fkrFk>#8kZ3{fzW$^P4qaKSoYc89C)V$6#te+WVAx|9wx%W!HP6;g8ao=W90TF%xPiCBdzWd-IkbJyH9 zBPX}Y9@jpeLowYq5`0&t4TB;Bj8zNgE$x{<%LL^XQaYuww5O}&+^*t@eI+#fljIt~ zAO}*<0+xBUHO#4O-YHCZQ9h>Ma)f!E6o#aR8F7kv=|oJxOj3!TB{aA^bENr|N30L~ zgR%ZL%oO~1E5}iYJN#lPm14>#!ZVga52kIGZ?Eyvxg!)NJN4MfXwsx+@bS%J zKi9KHXYss^S5T8}+jM!m3D6wK2*{{hH4GmB^&Ln zF8qbZa5phR?XXXcw5?E1$uB(W3q7A4&#IM4@k8scqCzpFr=M0+0u8)*1$tu_cr;@^ z3*mZA5WYiPVP!)Xa@uULPCGuXerP2!#f@Fd(ti)7K{H;Rd=qBEE3h*By5_l(ggj=@ zqe)P=ulvp`;5eRG<0Guq%_*2;Br|TPeEhwXeglzgsDAAH{yOVPWlWjU*|TodMfmaf z-t|V`4U>)5wyZ1hcvM;qa1h<%Uk(@ssNuy>{8InhR!b}W+Gd+VO z%Oiz6OtE~nXuhn8`){5H=?9izviWf#28{g?z3Ql*mnVl6I?{YS6Dap^*Oo>~>L!~4 zq27kjIHVCzZ#_y(eP-Ny#T~`BCOLY;4wL$Q+OpOQTg#4W^pxf=JT9u2b9*MUyMJ6> zHAl&V+#7N_r&YQlOM2nzvgAl$tIR^a$1P-qtX6Gry51>c>5f~4p1PlH4tm8by)6-| zEpuCs@3roFy@lK7(^+PlYKS*;7!nsMsmx6sJdH_Qw&=STCam|$(RP@oV774E!9$Ga z5i)yUHfFQy>6TpI$NMUht~t)f$rMl9eKS{Y4ZAp-Pm&y(R0^W- z_6fQ(N-boFbb5#gVQ)(i-Tw&j9!;Eof&iN2-wv=`Z}DT`dc$qD?u{=jyItWJ*k!bI zXVRj&Kf_d1qU^I=WDyrc#CKhebVe~5?DTq}eny;H&LDshvJLN8Yd+n#!-W^3JUOAn zati~e)RzdG?w%lVSS~?@o2(k$9XD}pabkIni1*jl_ed#1N`AxAYm4Q;H_8zVE;cgx zS10lxy$d+N_Ab}6UWy6YBqt=OjO24b27VD!BKaG)5XEucc*l~SIGQ3zUg8D^yr_9R zbm77W4!jzlKczzxX&whBCk%FPKq*V>;tf#LPDnufFdSVlCe4(k)z%G9*S|CflQKB3 z$$dW~l!i_zt1gFjQKO^PNu0BN5pp3^rx%8TkiG~bRXLuGw2cGPgTBV0PDG_MHhKl zw_N6-@1QA8UkWlUvmZ%%10OR!l!hW(8%{aq@j3hmv3l|+(Cbp#3q`x4fx97AHy$V@h z3G&CoBVZm}ph|S+R{jlzAA-$Hx<01@BwOTVC|Vx46sKOz8LVKfxxFtC^#aF|)2?S%G+XY&ieMpfX*KhA-=g@xdF0EF5X6BrO+YWv9?MWNVs* zTP7^s#$ax5X>yg~7Gt?@ViIQw@@6lTx=rt&8b9IhfJ>Y`j=b_xI~xGkeU(ziBez}_ z>V*WE3Z#6)r9VPins=P+M1PUvBa@t#=7Tgk%90l74yI{4^_da;??n>?Hw7ii&l9J`T5_PaKtALx9@NJI>Z zKhu9mM_wOt3)=My%R(bY_=uw}TY>1pQ$*+WxElFA#;Pab9^Ma)ES-Y(kBbDE?tgDk zZ@pXXj+4G0y(gqj?vsD(-(WSum{dw^RJ0)}U3f8lrTj zGEX0Iw{*q0GBv&fu|!%-rJK=&%F|FCj?>t_9%sTBFB3+Sqw6CkjlDJ!jIFF!f_l@{%vr&0yxRghm46mHl8S-xWKXq&vcPN|A|T z)f4_AY3BArF{xakmlTt!mxX6y)FPY1JkLB5A}=auje?Dwfqc)99jT7u)@m>}tkzm( z>I9gUTE2{`KTbIZg8gezT;>HghqFt-)G+6ktQ#JQo{p@Zh!XX{Xl6T)od^OeH67Qn z>Jra1)AU`kKG`A9*Z6dN_r?*ZQ)26_1^$}Ec4cvH6q4Dt0!uxISZ`XzH2G%+zVgI6 zwmRFLVgZZP#8WS|jObP`K0d%xxx|zhl$za*hEBO;-}KVo3&G*@00h;=-5ZC;klYlc5r z%#Y|aSjLM>#b;tDLq>qY3UR=Qq?O5|<_}_|rowz@lTyvIybssi8qeK5Z0m3=vf2b} zHU-Qi*4k?E2ncMl3pKEVcK9U%SUuC2AP;)WDv!nbC9Z(Rgt0~DW#>g=Wiz&N<`ROJ zd-iPM^MG24YIQl+*2}dCt5b-u{{>aR-ko8IXyc%mS3&PyvDg>xunJ25*8HVX=UZ(F z(`%-k1H{c?m8~N&JeJL+k=iS^#?u{y+5NJVXfu=Vt0>4REpET2OO3El+5%`DzD zHd}nhv-(W=_$u=dBASc>up#7N_c8gt$tg5*hd-Lp*!pM>7ItVC30n~A+B~n5I+&Ld zGxnW4kT0bO?9y3pHAksxwcZq3wRLz#Jsenm6=Rr{T)4X`4(ap2h&geoRMnqaPl72M zX5YAhFu7Uoj!@rRSt%emXCGOLY}X#j6*rIuq?!I+ly!h#98S3xMc1SSIuXNP6sJKx z+1T@E_~cvw@CP_em0E(izSeqv##xtlA@mRb;F#y*LqB%89Sc@C)cuQ5Ppo`0&4SiX zLpiO6yWpo?y0hAL>VV{WOzMSWr3222NLuE!X~k%eeXmt}Vzy+qz3Oe=(c*9q2R+=% zpeB=hp!l0N5U1cC-4XgP?pehMd<2(Cqo1!Ch?pVC^-qj&82VG>h{2>w6hV6XZDFzU z;00X9zB7R6`ZsSKvt%yfctlDidV#l6e3vyKK#@uN>dFoqRU2S0c;GIjzbSt2xaYQv z^AF40aN76Cs@Oc>ursjq?I1{Bb%b6pkO?}q5AwM4*nbSxf0D**IuGE>`LLRWp4#8T z6Y%qW%WmNukQ}q|6WyJ^hx2=wXrC4o2?6-hucgTgjn!@e1Qq{+9;xR|C5wmlYuQA1 zI5^uaC|>U2gb?o7ktTid7g-cBWHw0&WW?C%aBy15Thz6qePR>8HzaXsME(j;2w_Y? zU?=M=dHf z4jB+Y0yG2Zh5U_R|L=oiZ@K5Mg38%ju0C+CbBo_(;nOIea{K8-K;AqMls5w@D1UkF z`y}aDzTx94D(ezg23(Dl$&`0!xXIy&c8Lk8VA<41qDRSR_SjJOip)RJVs;fSKis5~ zw(=Z5Q5Hq6R&%;K(Bw$?G-@+L4`7_5WaV~fO1J4k^G*v*z3GOl_8H=szFyP9+_9B$ z!q~IAWMVxxYTgsGug=_nanOjt&Z%D;-(cQ!PI7WT6ilDjBVk8>E~3!ey6dr}>>HM) znistB6JnTPFNC%_3t$e`LC0>{$Bwt1f0L5GFN6DeuavJ>D(2nzw_%r(w6AKE zF1#hFEF)8&;7{dI0+Vr6H0k0~HN4T+$4;EgL{hi5Udd`F zZW6UeT{xB!_dA*ku%%pPto28!sb3=0jPmg*UEZEHij&O2}0T0K(0pLHY#Qz6#0)P>*$w)BbfXu%6i#IQ5+V5(!qE}!g6Lilj zEGh-s@zGDvr@V zokeA+k$H#(jgtoJcH%cL957vd_QDfXYp~3{FRp$o^sq)_mp^5R-I&TiGDp2Er8+NO z6IRX_#V8lyO$^fYOo+5F%o^M-xxY|(WF()w{hYQ7QD-af4q&rIq!wOl@`&#-BTi?4 zxQC-kc3$+!;U7QJMN+rr&8;Bl7!XG7{y#dXU1S`j4hrofUOnzdimimAROsvI*9{e0_a= zJVvd4ymzV7PIK$I_f}=;Xyu0;v!}(%BNwx2GY3NAGgZyE;+Qu{3Pp2KO%;`bZ09Q? zRmkBj-_-?><3dSVUt`z>78P>@zWSjkyYH06c{g&<26ZG+-jGL4+F-;$bD>ocvq`{R zvi|a!BlsnuozY|~;z`O;vd2M`{`o_heSW0mL5}6DcqO-# z1R)U11Df{rQyEEG?1O1b*LpZ-FT?#U0Uq}NN%q6e!jvUzkdslwy4vcC7q4-5QQ&t# zr6R^5aVY9$n6Z=b2F%Ru{cu=Rae%|yU zJaDmyRWEbSK94nqK0~5QE--5(Vl(>ERSd`p#fzd(333qkpJm>P%Si6N8K2ePX%B}e zk4%)4Vo5M5LZHkdAaC|BiGHsU{eAuZQcilc5eIDj_*S0)1lYf@dC<2wbum_9Y_fhP zrJDf_f3{;Mq#oL3g!5&^QNv^*sQ2#*@r(vx(HjJFF)k3^RyMNwoX`@c|od_ zB^C)6Vronm-t@#VR>N^|E+dfOKIBrnBc~Zpq$8XOf_!kKV7Gqb40*yXgh>F-$ld}3 zTQHsJc|ugi%maW6jC1o3Y4kslPb^q?i}VE?2tWkqe%n~S4}4_FV=TR%xy%Hdw%EY# zZR{lUPu9e}=|9jZ-wps0WrRO;yf_T_L-AeCcU)CSTOw5ri%*(_b((F7P;bLga@qUTJLZiKa8Sd0= zZ3}4VM|-40OEIDq%1>Z%i;BpkH*1n3LS^~*irvF^BnT0qv(`>$MBjr{akI@U$7b7r z3{trnAZjGiH`WX7mZqx-JjIr-Zi5-q;jGihl?h6|9!(ij@T;T9o^xU-eO&FFa$d7M zA7sXQtj*lz_C_`+(v^o$D2Mjt82ffoev2wb0>Z)DlYf%0@}cF8o6zc}d?{2^0dA2D z_t^#McLkTpdSi2NSind-swvB(f~cy zb-wKY?C12th)^&w(9c98meC(SVB5Dhrgo9_cM3qUufm?6=HHjIF@K92!mLU^)N$n@ zhdUbUCdpd!v9^6EONhJh(m}R?|0_fKAE;C6i6+>(uLERuhbr7<#o|t53@Def6QJ2< z2WMbWeh*PZN_U4BXIQn-*;aQ}d|VK`wtlnW2Z%c|ak{9D*faz4ZJlsoof{eBZ~0nd zNZkK3D7BzvWcI)yvzOQ4mWR^5WPth+IAytn#x&&#~R}`=bG+ z2_Xh<__YTuh;^FEm;84=$0P>mh?Q7#nT&B##n2+t4i;%eypf>%==!2jxyZr5wSLtt zt%ERFr{jnce#tN(GtF=s)X0_N7}-@SuPqnwl&6Y58=3&p5%CKF5 zd=jfrr)$FH6FpnP@^0^s&?99hl$nwXmiNm#fOqfNSYOXH#-L7;o1H!@d~st@bCm_4 zYTS@SyJb?=Z2h`;Z0ku!V^Y1a@#y<%&zmVHQQ_j2(dX`)d~UquXBmHXT;Z*_|EZU_ zg*}Z#goB^>->x=5ltN=lXLI9z9>1Ybc~!`WabZ8&*lu6op+@+uhN`is*|}rV!H)5WYmMJ}`N}v|rEAkFw_naurX!8{bn7XrUNdr>nMo0dkvT1rwjnkO z&5+tZa-$WhCU(K?)#lF&`K2;MI{-5b4yTBBfi#-*OkEI_Q zK_-P-MN^EH#znFV7G(WN%Q}l|cORsZoRXePKX&Fpjh`v^ zMYQ<*f@M^n6Fb<=%+VQz4^n0L1kC`rUUFG|HWuGz>*X?sw)908FA7|vloaZ$%~2d1ZAf3zG(=@vMz$9*X6xT~Jt8YpVBCwzP}2_N&7 z?p!Y&%2g3WiJ7%Fyi<44BO-PI*-RevgXD?v7-0n6;mmNP1q<1%7R(@Wh_k=@;phO(m?;YP2%7_ zP_n&my_XLZ7Z~(|*rp=Fw8~A?$qB`dikLjQE@ZY0)mQ&l_n5#aDw6j#=s5`Es9yrU zE0|ZHJD5%T_;Pj|>-mNzTFDfrISam!4coC>Ihm^Oc24TPZELZ&66CPGJtxLTVy8Y; zWX3Dj%My=uar8ci58upnY-2R=3@f#5w7IiN+wN}@c{19FL+yu@=rS0Wd-`+_+n#5~ z^9%3QUrZBR3JHwmNdlW>z91HY;Y-b#NR-^XxG?!G6p zDBLkFub18x@h)APsmau-HZ<$tta@N1^UJu|^VB27>_}kg_0S6~Q{-o;T6%v2lkajp zi9iV;PcT;d3V(W2eqp?)Oc=7KX2$~RT&vs?ad)?HuukbJ_yvdr->jS&;L=Y|nX+lP zwFXwfh6?}^R_X3PW0AuOaNgF^bnTsj3DxM~Iq^K@P~}ItKyhHY za@)yfpNwUVwOp$6`h_Og!=|3(HDBfOOHoXO&Lw|R0mQE$k=G|Z#4vr&6zrfuU-F6j zd@kvc&w8>z*-QO&otrEnBDLPP2nlU!&;Dp{!7Y`#H#v&}tFHG!(li`5qDWJqR|?Va2) zE#7wukf@60uq{rjU`3hy`_GXqWb$z19U9bNZJCSwd~H3m?r)8pIK1S)u;;zgXSFN~ zDCfZBEJsDC7JTjjoTdDP*COX%GNirz@;)cmxtdsX5HNz{Xj)z+(*#q$_ol249xcOSWN-#u7<=ZeD^66zrLSgXUxm!v5*7`$@S}QmmlJHP~OO6Xn_hYJG&1M z&V{_ma2&&w=18Q=>j^d|uIsauVlN{!BoYrsR9wM(D+QYgbpMFq(R{D9qTC7{knxExLgOo8gUyXzV5gU)CWgOltA^@x6%lhr zW6QVNn5#xWC5bnxYZRrV$TW)-Is4aXwKDjt6JyeW7O%b8a`qkC_aP#IW^n``0;Ebw zn(fOChJecyO2fYNO`%C3RV7F*OOVHj;lD`d${x-IUjDrFD$EyksLdynC*$hUGvT67BDJiRWY%~GHk zy9BmseKA}{J+1uuyYC!()g9yWTcAX25!b*(c@=;x#xjP0DqY&c#=u&EKqip+T`TyX z^#j*|A>Sg2RcdHf-q!3~HnrQ;KVoOi30d|O>v`=XVLhw{P)p*C*Ys*Rx0+0sP&C(o zj1QV&{$_qqSBV!J{j#&t)c-Isooa4B25Oh)ZJX$m*014u+S9BH{5s~g==?*VP@0KN zrQIxmxZ46_exk2;Qs%+S_-^mk&*ScpijF^&Cg-Ukt!y$K=$A{vS!5k)26k}oTJxaN z4cE?6#GCEGVrE^q6mPX?WN#hGdFHF2V@cS0_~Eh={--zC3mm~>Hr4Ngq!c0jBNK2w z_6}X{AO9a5@865HHtGo20J2cq@;vHdFL5aMqW6zY zFl;vEBB3X|SP2UmxU1TumHrZhncSQ3I=Y8L;$Yqs1rRMui;Be3=4L}xNT;3srA(g- zI~&baZCNr3+)azb{v#>8sF=^vDS}J%ob{rI%t%&HDuB#BN$g8$t6I_;{MGhl?u4vH z|H>r|K^bYq=dLCG2uP=kJ!0iHX*jOfQJ>VT90k;eogFXNi%#~5Kzt5%Tj?>MfaGP* zILzdP*3qTVYWTIXm4S^*iv&N?{VgeONRCOD7ON5rCX+Y%oVY&^jiBtd6WCj%ZSfwR z6j;Lj@;PMsqh@m;tRVcxv%N#Dn$tZCOFzxR66%8pb)f(Kui~-4>pqbFmMdy^R;TX( z-KF!)+Z+*2$iPo5tw)C!7^>8XhA#&|N)b$laJusARZM3;!{E)6>f~-=BZpy+ zXkpq@__nGw3nI|xnV|&qDpgYVp+OwGMgoudPBG-3kvX188q*m+odp%w@ms&Rt?H1G zkJwi@;Bk8&mo)IR#|r0u%#l`kMm6g6(-j5g>}=8*iR2n6HxDEYvApxHErqX2-G4(? zfB4bre}G&PKexH@gII2|zq4jxx#DM_s6i1sfdZx{%dz7q53}@}Y^RtJM_ba;dJNbQ zk>X0)jm~k$_)IOf6vvYyN6$d}o-9;?ENAKaQy=hrRqwDEDKtPm582n`@6}+k{SBzz zu*HA>e@S>y{U?e7=$#TE2AAdj$b;Bw?EjK~SqmYv0?VDNw%S@X#zy?&t8q!3?v^wB zB?rB-veG6I7SUEZokw~_P2G(3Su)%8>Gp{J-M`cnl~^@Jd?t1gFH@6$l4y^oW$IrV zvk}x8pIR%QLj&>29w6PHxSvx1r}B)!nm{F1K5Nt#@X~gd78Q4*I>_d#iHXfnRTOe2 zMG0E2TXu(v*;pkus(NDto;YRzsqa`S%pfofN*7e(1)34A%x>awaW5W}T2ASP94Wm) z`t&$&J={_=WoeLNo|-7wo2+lc%49H&|3V~=!K&7H0-wqAh-;_Xs^f`*r`BGxa-cWM zwk_4m=uSr{ZbrKE%L{$x*dILLH^p)|6M$uRz^=D)!KsQ{$~oq3{!upzthyP6hf=;j zNn1v%_HK$#Y`37x*I~AO0_+2`dBOz;O-)hh?O*_|@spbLmc<4kYouMNtmR74BHAR( zpxzdmA)DGdMDA{31T)Q6e!0>AE!RWoy?q=h#j^84>&VRE?MX6C?r;_Rp*N zO?MHnt?vxaEe+oQS}DwTQKw$t3n)}hb0_4mD}tnNn-C^m`w??iz1pwqs&AkvOH-D0 z?v#U#SM;{3^25E1BvpT58euOvx@}w)JK6Rd`}lRemq20XSIG)w>xhwi^LiA3!w&!yxJ_%9Ydlu3>36w1E_YhnFH0z+hUF?I~IPG^}a?LX7N=Ko{MN-K^&U7hUiKW+E!(jHC4pwTmdp%S2)mB z^{%l+WWIN*14E2#0K;CTU=c_nenY4i{~r+QqS_rC{h$-B{_S7nggWJKay{N!zkyOV z^XD2z6=|S0J+K?Z7_O3-&{1?&y%hF#23e z1VEQN&o=*?t&}8yS{^*3C~kjRcSv5wH$mcy&M!eaFg0#qjREl}3(Yd)yP(LzPEsXG z-pT2#g9c;Zjlft$9guHMZ1Ms}()|uX;jr(>5yUE%Jn!tC5&owRN1fMC{2?$D%A!`hV0gu=DP3O$q(y z(?WBB4j_iD10egqLV92fD_I4Qfm1ANDD>|Ez!v0Fhx-}FPgnP`V{3jo&A~X#`Dg|b z0;(b!TW%&-ohC9sA`9}WsAF(T><*yZH1bCmW`Ahq(nv6i2PVe8@WOo{*BsaZgwE`b z@4*HCu76}r!yi)5?`8_x;K>YF^HAlt3gVct^b*=s5)h*jGb5BXxHr9+4y^yafx z$#K%QDwvUv$h77Ax(7fuBGylfrxBP;!e680>}5cHVDoCP;OBF0Eh#FkJIri7tu{H; z)uvwLJ$-Hb2@Jb5$vnqP&U8G5Nd!%FNin0ki!>MF&SP$SAaP%S2J|6~AR8qwBZsre z`?S6~?N{C7j}NQ)YwL|6f=Y>%+#H2e4K6Jx9unPHH>;tXXl;gB@|j6PKNL~-{n=jQ zN}vHDN&p3o=EtW+IQsF+(bV|qu$DAd?~SWI9Hha^Z^2gZonR8Qv0-AiIwJiP!LxVG z=%M)Q-sWkKp6H)BYl*X9k8v1`@vy5c=L^s&0rG$MifW)mYAqbH9rr^2oP#$JMS$Yp z|E_@c%i&+V^Mh>MijXT?cE$es2{=*u5hjibiR(F=XglX3w&o|nFhBcON z4KrEUZu3S~!=obM5zo2tKPYze1Pbjtk}#>V$q@1E`sF&}jKZd;<(AdX^a{7e^udX( zhr%Lx^LExmEQKhgsZU1b48&cUkr$b#xGuiytF#GN+ssbTut=l@ehEybB|46glBVvW zGwvH}cOj>KGbm=5K&@z~$>0nEph5Hex+BO1A@b-wx#py4V$#`7mv zJ6a;&GbWsGL^^d738%bx)WnR*m+aPs+KR=1EV_Bc+WQ;XuC;J-bwl5TmFeA+Trlfz zX9>qk-^r1fkD7LT?bcdrwUgZw!&|~bjHtb!KbUhIz-&r)o5iGERPR^tr7^#+R^-e^umd0C;3_VC zN7~u5`Jr~W0GSHuDERN}jxM>Rbpx}-PmFxon@%do2239%6WENzXMV6@i|iRSpjuRRmZ34BpML7YMS^t~?G8 zADdkRl=mKi^=EKPz7v5bSeXVTdOx@fam=i5bO&Pn?(9iDk(JWyE{0wU^EuO{zn|09 zZH#_9H!syTWPt#04wrWM>HLiX2ic6RBTVabFir_4@|hDGiGHn94Lf>K9+^jX}K^<7H8@W zU+m4f(2fdR$f(pK)+(keT@UV zy2}dTwZfyY-Dj}EvbFM({4`kp+EL_Om z{?u=6i<3$qH46ZsKBuj-wVl;Cu%JkbN#*`t1Tt$tr-!I~-betlAHFX9zSxYGf9_8f zHbk^;Mq0623Xg!M0TyW4{4NF;%7oV@wx5DK#$l_a10xf%yN)ZuGDlyJ=v$m%OP z(CBoQ&C*bLX!AeRhW5WYTHv%tVWtKjv*SCjnk7GSo>a>Ft1@ByLnK}1><;(006pH+ z2Q_inW}szhT7PF<5A}wUTgcZuBHsB8OUPhJhy7Lrek&PHRVws1W1EXDuZv6a1`ynN zJB&;U{DbcdbS18w1!S0PO#_z>tF7ZlNBd$rF7p#ojw;} zB`*O;4rUG)?D{{H=f6?ntR4ptx~o5kx}P6mIuJjT-tU0STC!y%P-d$nNV~}DF12#> z-6B&kpfw!OXQ7dCsUq-5BL~hl;pjK7b?{e6!;%zo=D}5bmXO{OVPuM_;iMCAkQ@I= z=9axZv4}C6oF|AwZYLya0SJ?A_ zj{2ahN;z#4LpL*re}Y`gni6OwvOqI##E1wwP|o~YQ%RW28N2TRZz~>BCF*>5Ss5e< zYvzG;HgUXb3x0@=KK>c_fwqjef1oCyU-SC5DA9(aAId*5k&vqGSyQ!?3P&EzYFSjY zp$MJ~)|SOOl*H2%bwFBL-0}^~DMd`dt{}f|7gmQ!aaS9oFjWl=gzi5r$N-uGT)>~+ zGzME=V-e{9CAlV(89`eTv4yG-zc5sv(O0V^xsZT#1kOf+v)axj^k#OqiC;RFUiz); z$m{>1CXTPTp0yrv9yBa>&VV-{0DxuLSe)pw%H^&jRvwGbfpWHevny%PUjX#;0M+)A zfw1)?P@f4l??_V;m%fx?fQY6XBK<3Ejka5SvqPdk0 zi#Osoz9|&KDn69I_zGD?N_qI+5N7_VS?TX~m705g&=1&E$Nfd(xbT)TfWX_==^pGNI7>Xj%I1mGZetwH^gs$|8pIaIGk}Q69ll0_ z8Ev;)AQXciRy7UCzosNFkZZFH#%GD}!HzTrqhIae42GBc10s}FAVH%$1kf#@DWA+Z zo(?ijrL3t@R>qm&_4Q=|pMi25{D2Z3nFXtO`LmQ}#Zn9J&cRJ8v7o3%{dFxG-BXYconL z+4D@c1ovM4jQ)sA1TEw8>${8pRJ<7*_J_<}QvZ5`DVVMt{5A<5*{))+3+r_ClR71; zp=&~^Eq_yK4RiMRU%ThAARb964rGHJoegUWyQ7?+X3%6re;vI@?=p5da=sUOGBypo zsUydqNZZ*h?5+VwO2jEpq@?F%)?e4PkhnIXCubJuysItwZlrL38ur`mOEkF;q#Hm9 z&>Tz!@3310DPf9mRGqh{1vl>tH zklpG9JJawmz^e%q_@{1n7z+h0#_Rc^-GQss6%%Wc^P^WmKwRDxkXvau0eh?mD%@4} z@Tv{-4gJr|+^a!N$%BhP`UmOdg>(E#Q^U^@>y~ViOLjTzkxx8^YeKFr7d{Riq+@-A0()M%5f|oR9aX%1F=r*a)IC6 zj`YnS1fPuThlc5_hh%@W;bqXU=<|vZ=bMQ>c}ECOSy%R(R?eFdwCZAR+7Sd+N*B}_ zcgSg#)sz{ZciBbbwE5!3Fd-im_qa+$2_uUw=GqK8eFxm~J`js>xZGYX9(gpMX*32q zTvsN4K(#U&FShRWLRpeb(xIuI`2L2L*ZHSTsal*ajIcH>cLb`ZJ&!=+2p``gTI&`2 z?1mIoezCA_XN%kWTq^F}%@bH}+?ziKUZ(O#-^U3ho>O6zr(5QC>eq}~>l;*1NTH&0 zxuG&v7xPWPkg%2d8zZ}TETpG;SiPy2fldr;_-Xl7+6dwWRz z#bfO&=Ho0W?~ACIMtSZOu$N@0>I))btCMY6lbRre~kkitJQ1y?7#}->shQD7)7ypnnSzlIMbyd2{p+hMYMOpV*;SW1f0^ zPs|8v?Z+IOQ_#tMuO~iT^XOVmZYmllrQw-u70#_9LX)ToP>IZYJg!6NJB$n@H!U5g z?0>ajr=FD+&C1N<%-Sv2p9sb=3j3FB$CFTDjx&i?wy%tgLSo14r1L``sgXqPp+NKW zk{01{Y3r>{KkJrDPU8O+PQu_6%2Pcajg`?_0Z*-#m@+y<{D z4hA0k@5+pSYP$WZ7iI0|VTn9?C5;Ob5Ca03ya_9S)#R4l4*6>UlRgYY^GFtZ1*$f3 zVZxX}S2p?8)x}7fn0nwscVWdkH)A^N>(^}zX!R?RKd#Ad(EwFqwuifKUd@hjy975R zfI#rmzyw_B>pNm-g5SBLzj&apJRW%PU*7@6s^XtJzwz67yKzl72+={a!UnKQY*l`qcjU7ZD@#=5N`vba6O#yDXf6Y8;MHlo- z2OA&mVjKkn8gN`%AZ*?u;%FP2Rx%DDkYEn6zAI3`SbDkY-rg5dM08}4ypXy;^=f-* z8F0nz!%Cb0mx5bg)Y7rs z&|CmlFq@(@B~39o3NoaaiiilvBK(fceDC}I-gmxl-ai02o^v?Q^W4{cUH5fAH;x@~ zTR7inJ^%m<4<2wn4gh*$==J2gIna?Yr%gG~hhEfiw|ziKtMOOp%dC*ShxYFPd(tkRa(pR``8@d`_+wWfQx6o!vMhDwRL}Su-Y%4kW>dv zj$cQ6b1q#_p1+Knhd7B^PL2hD)>C2e9^UFP$L$Rs{59maXa;N#0EBFpp`~%fmDmGI zP^-Z5Fv?6IaznGD)Umk`5sIyBTKVnL(+A_tOnLyI=lxx)ViS`dvKKTs`1UDl%$lBJ zx*qTVqoTFccj~nkt^p!dUSj%qJ02VT*)&%p);UvuFQ@IIQrOJR@AmFuZ-?6G!xiGTu*r5ykC>Q zl@_?X*T~G(Gaj){aXpQ+jUKL}glA%CQTh4A>=Vv1at(JIa8c^5g1+)b6*`DchiBA#_s@9QfqpjrUW(?`)=#W|#qyi!xLn5Zz;UEK~-N+NRx&>HeJ z1d5GQjwLVW{AaK%_!dY19zmkUJvBM20N^1Md%4=22QFJ@0;8wCE#NYaQ4e+Gpo8Hr zvw<@^9qM>xzo-AqK1K}&fRe%O*$KmikD!I^8+xwwDr>)~zD}xIC>~t7lnY!e@>Xr! z%ag23ywW!Z@Ov-P7D2zzZ8=qXTF#3L?1a|(Q6A=Tw%+urKWb*6k3ex=a+UR0LHd`G z`w*W@8N84mGAZ~GirzPO$2Jt}0p8cXh5lJ3I8fXO1sO_-G!USp0bt;FG=$;14~@9R zFQLP3UHcy#vBS~8>@Vb&Dapz(eLTxsFhb| zw%v;Q)W!^6a7$K{A_>Z#k^?gk zC8uj;?o=aoqFHc#HXWyyo9pd*bmc=SroZbc4BMPlW+9r&%dy3?&;jGu4yMfy=fm&V zJ_xfo^fd$&(HGOWLC#T=WsNLe4&TAtj(W4z%8tMn7WCTMTv!vlzVKCeb5rR_l&Jl= zn!Z^>&u=knS+7aTVQ(}?sM4Cgn7N&LKl`Q%5zE-Y%3>ONizM~ho^Xod`oL{FvLZNm z*rlL2Dbq~c$w{nys}^K5xesrVQk4PgEZ!{340`LAWq-CDJ@uiM*(5D3v+zW4PdCT= zECemfg>{J$*^YF8UT)#ZF!#z+1z?$CuRZkQI??klqn}OQ{!hPFNMs zQ^S-)v=)!On=n&hh=OpXW4agvdPF5qksaKi9d)@;ClVJq2$3~YzE)~apUGO|3r>|D*KHX`O{P08Qu!x>6tHRegW&74*mgDPQPUXnc z+vAaDGK);X-Lcl+uC{iUjgRWTBd@LL${O2Hb>4NEG38|##f-l|IJStk2*b!(v3j58 zh^C3Qv8vNkPn#ArV{%D}JFY}NLGp-c6u#b-Zzba46FCoKW|h2D7v5xM-GM)$2RQ*4>Hl*CHSe3Zq0 z`_!Em9Gq$#%c-2WgHaRcTCxDu@?mb>}=jJha5O9&JHN7Na_c(1?P~NxbxY4C;ub zG}$KTjE${3>=K1^$|_;xj5McaDVAxr*DRYvJn>tJbFNpxdXZ-~yDGh2fEww^6Wq^= zYY3>f=y=54O*KVzYTA*oj@T4u=@xyl5Ht4GQ5tY?1~bC#uAx5;JfZD(ne_W{tBfpa z2iXm^2cCB9E9gwyUN0VDr;updf`WU3#OHHZ&xjMFg6vG)E#*0jG%Mn6;vU#0vMt;j zS6nY8-a^WgDeGWdqs!%YQ=1ya`iyaMssTQ!v^}1nS*gnjH7g&SO_{ju&dVp;GRkpD zSk~kL5uV(u&}uDu8GpipIu;lTZ}q&L4rAwe#i8-R>PdN)#6~qKhh}P#|LXKg4r)jK znYx9RPRJGKI80*7z)!LpoKCKiLU#MQs!cNDNMNa5!}u+q`liD84n|eh5=~VpYzc)U z9?Vx?8KdjfZkI2PBQInQ`r9z98}xn~3G+6VHUAO)Nr4OhPgOLX>-{ylP`R(@L5NBx zm1j6R3=!{rZboLc6h{f%;lp2DP@~aKtoVR#kJg*kQ^rHd5nq1TNlh|vrkuU$*F zJm2foP7u#N7RG$CO?T&cNu4Zl0KeyQo%fS%RUy?;kzi2+IbGt&#p>Rnxz^XF`X`2* zu33C88qD;u=y83G*|8~P77CrVT51+L)U;>*aHn2?I+aKBX=hPEobLBe*jwioIl(5C z*pYb{U1PYg%~m~Qlo-TBIf<618vZK+SW7Zbh>SH7lz?)0n1nI(%sy9_Wi|Ws0 zwViK^Lb$MWgTnoj31Loq!oGwYX!L~VP>aLkhlV=khQ6gqwbxb7f|%l$QzWz@{b)x? z3^m+^mFZdW8Zo#^30Lk;w7(q4YR-*tb9b zaHTw%9f~W!5y^|acC>cAr<124V3A{IF@#Y{$Xe^vtdx9;TJl3-MUFPzj5ox1leOEI zg+X^YQcKB(bYxMFpgKODL{E3A!UP^sO5w+R2whh-uM(9(KW{5`9--Df`pqkRl~wsRxyaFuz;jyRU`M!g{9Mr*E6 zd%{O-_K*<+%6(8c%mvXHrtgf?r#=R}heXR3{PAYhOJ|N^_5HZfoX^(ETv<+rVV6&L>*A=zY!^}`( z%{sv+9lY%Lk|snH2WF0-6Z_SmyxlKLWJsaCTg+u&Ggm$9tPX$Np~Uf-pftZlbnqJ( zZ?-m@xAeYdk=1tDPELWueh`JuiOy=@8CKL%8lK&*vB?YSa%SQ3Sdy%4Vmm8?-HboE z5?^AOtGdN@%kvSdi}tKvm@?zAdh&dm zeV(IdEoTpdD%)g|Yr_=jvS>KZUA2~0FGG&o>FQ}HR?4S`#We(97>i&?88cnj^H6S2 zCx36WuyD_=A;;>Ncr|a*uayc7YH&LE+6y3=}wWkUeY}?jfX#zDs~NJJOoQ2 zn7+Ge1?j%q|0}C~tCyap=$u*ticF-xGVBZOq@?zZ zsV0tCWx#d2eP0E*h?;!)wnq5ey}Q?WqoO|iaha!g>7p^t%~$_GZs-4x+z1G{YXI%8 z*gE+qh~@a8OUFi|(x7BfX*ib15p0w@x@wJcrB=O;flL%b0#*fo$i~oaW-*SxP|LMH z^)ei!irbMLq^0iQZR4fmQ4^KjyL|=0Jh{&{ zMmqMhq%p0?RHr=iU_kjRmZV) znp1vt82V(?RUVg=npqqDgv?4=kO7R$7{&Rbl{W@5wP0Qh_U#uX>?bcbc%vK;N@tSZU(1rj%-juWKls z1Ms#4*-g`Rfo4&t2}wckTy0%0*cPQmoJsRhq23ojW^Z_EFX(P^Ix}@Jjwmu zl3eUjG|JI5$t5BO0ct{7)}K(8QL@0pS7c*!ay$2GdbZX49U=kKMS5T5ED95AIPBc$ zTZ8ejIyr#_((|A6rW+1g|CC9PgR+PoLR3d1c1L7LqEGc-8HzkDLg}e5N3zeCAY0~nd!1Ene)-+@SP{>0CQI>MuR*q(uIV{V>D z_K@sD%rAb|&uEDL@mS$U30CN{cgvM$hOb}t7gec5Ghb%u-kjT2hk6#iAB>2%T8OGn zd=fF}_IU>3%G?b1%u+?~d;%|m-srpHLw!tzlJx7}+0Pi!SeQBQ`~-|FLLdaea)ngQ=6#PD%`N*j>~l)+c{b z9aqEb@Wb}x^Z1B=fzRk)!e_nH%{_SIOL?ZeVO9&2hHqJ>5{KNiDbnGxxTG)J`IeW0XhqdSBD>3fvYOG)#Vf;dI_Vi7L^};A@6S>= z6*XT71{D^OwH)?X3T)7`*F2Y5{_OBYX7+xwPzVXu7`4z-&v-vUdHZman2lZZ8tJVz zO;UbfE9LpRaK{C?x3_eDrCTBLl*!X|(HPTVUvz{!>zPpFK|>A)JDKY{b**&VENa?4 zzrDSwrgEqRA~G``*P4FSs)%06cnU(QQPTb0)!C0#zGSxsHO}UwhO02 z`s$(*@=9**r9Jnq?0l7KeYfv=qbr3|+E+}Iu=yhR{mV-jS%1(@gR%qmn>bcYf{d(g zzwzmc%5U{w`6>V4qNg6w6sw}nv;^C0al_>=-27JB=vS{g6utL>C$ZNe#I5Hof%sA==_4TEkraSo*P&*-=F%;DLsb>a4W1F42P4XjAMA zzt_GctuNN7mQr_DZduL=b1VLz*ycRk*Haoj@#YiTEhfDZGz=`-!5CwXML9F2QpIN@ zZr-u-D5axz7g_Ew5!)Sf%NPmzMpX_b+`4XxFmTYeNvCBX%fx2f_-(lWClxUaD4lOJ1|CU_t1BS!hwBO} zy;GJa@tk^BmiQK&I<7mOeH<#p6k+Ieaoj_z;`iq3eG5K&-J-e`rQabPy3x8VXbY;j zaO*t|`krm|RBXyfJz-*(1vwF4`4_xloRFk&bbFbGMEjPHS3d3sqbtJD``~ZNNv*lD zcn5hJ(QiXt|LnF1_yy;ePe?rxIKIDfMlti%u6c)WsM-mt&3Iw*qjMDT`Y82b7j(G~ zSzf$FiF`9Mzo&$1(~)bCc#_t1hiP~73XhH4>iQP#Fh`|iJs?tlpTuTmSJ_VW@3;Ml zfe`OrKnN6J$JXzFrVIJ%THuQIJiA^+@bo&P8;OS6s@yNhANJIyJ4pTxve~I#2Y6QBnQHkPQG;+yBP*{l*7b?)4Fn(@FP-++97< zeo#CUxHxqc&ZYdkAs_PiFx?^C;u`3Wpo8(tAt$=n+M#Y9bOHO35!bP5-g(Fr1ZC)` zycmit0BoI0U`;#a={V3BI(6@~v;Gep1MmN7xBvUW3gvv%h3-%6{$myXMlyi_Q`#<& z40j;|^6d7wPNc1o2$)0`fdM&sc_X2ZuXAWa4)|s!lPT5mFXMriU1LqPD>(bWk@WZJ zeWYy`GqCrs6wWG)2-zPwv%&rooXZ{p6h#5ebHY$D#iHY8B$rA|_xUW7jX91sMjz;# zqt}mgswN}Fp;jggLns+7KNydZBjq3jb~08JP&)S3lw&*IXD^TF(rD{Msl9 zTKda7t2wc?%jZSRiv${sPrTj(x`SZNcGH*+Xga%gXp$+Lo}&E=>Mmb>T6`wAd`#U~ znuH2UHsclT;F=ML>*z0SXJRs;kv(Rh7v1`yLGRQeN9o(Z?;?N)zx+4tii0LxhEA(4 zngulA!WW6zc}MebvVKp3T111-v$>GKCTGNVmRS$HJEEn!Pbj=99m8f`G`RY@cH@2G zcM-3eunyIW)E`h~A?sfm`+t9AIA&dgo^ha*(&C|q9`?YMye&1)bvkfdwQjvThthH_ zI26w(@`cyaghH{W-Oe^FKJ3e+>V>l`bVxxw^$VE3E>9l!Waq`<->t=&;rXGPIxipT z*6w>dDao;AY-)KnLeC6Jzas@NXf}-`&OFwdTS@*nKNffp92W0pF-o!!TjK`&=g(eq zj$=Ce^SOMNX--Zx@71pUu{gNjP6dDe1-}VhAD}lClH_P0XhyX#?*%P znun-9U{SmL-mJzjwELE#>wm<|`$d zBH=wXGsMA!hhyMo$10B(FT}<`!vctSQ(*1n8m}UZPeS(E2HdL9U7uCQGe_0sUXPHI zwtS{Op~tkXC%yH=9w$ow#`{1-6L+LB19k4Nwxe@L5SzjiUu zko3t(Do!y*;6x;%!SN&5hG2Zon**>0R}HeI;E znobQ3nSKM)wB9rO|D^Rl(?P}VIz)y8DYh2?8tiLJ&;j$$?t_LD17#rcsSVI=y;1K& zphm!zT>v1pT#T7v3|y?9q(V>eM>?q(1_zqDx^Y}c2cIh8L*WmI-+%*u>(l;g2k_7A z!wL2zZ_YR{H8}|uO~h+dvJ7}ZYueI!fvaXxB9QVhJUZ?tEN4TGoSaDHjY}kwIzrV` zGhoD~Zai%t*e-`LtU1f-wx4x5MZ9~A^mC^ud>WD=knvQ${kN&YuJTJ9UlUYqhZ|&X zB4VF}FmL1^O`TI=rSCrvOL27U!E!v9Vwd=t4bIEB2zz7$GOs+#5&PHKXI%Q9+2^$( z`&OHQb+31zTtB1U~#%$^O?xVje*^%>DA!D=-iLHdU=#i!V>oIJSv?OUZok-M8X%tCGZT8*Mqr?kq}l`L~` zO-u-`E-ts!XE3}_S*w|McIQZ9M+bLdvuOzC;?g>gXO@*Mn4*{Cj%@a+m#=cb%@x9w zVtbuWYhplsiE+2jZ6RkY!!)8g0qFK>Dy3cW&h zf&<-ndT*E7kshwVQr?Evis2kuOd}h#MG6(z&ve9FR{j#9aP`a;(6+f9XD@RIat zyWr6_f=FI3QtIr-Hn7%=nd8>WVi8}(1f9BQ!g0EJbQs;+Rdc*{{Lki5a&{N1lVj-V ze?ts%;CYFjsNrqf6k=m}bgV{wKMNl$QOsv*tQ_~3cTA`Qfml4p8x5f2s z>D6S=Jj5pT$l0Y0+xz;AgVn4g&46)18~e9bXv}daFZC zl8n$ArZnQpevv}>gUHLgw8ler`fXEuUKU8pu-Cc4#Yte&vU#?(y)A68^pbOxhf~aoKe|_F9|?JX|^3HYPqhv>)AVaAw7kw)xU`UP5+|EN#y? zHT=$$rWLOh+gkha>X*UBf5-o3wW}?pch?KP&U|J4!ieD{brY>6xF2^FP*^?pJdiOI z&C4LSYZ__uoB}2VY1dml2krBuDXoXQqc+KgAHH}Vy#Rr%P-w`5)cX<0Xnda3%A}V4 zLgA-L=zz^dz!tHyB#x)1nkeiD@K-vu)OEm+yjztfaf@_Qc&@0Di!i)Vo)JydzCqmv z3K6F3)V5W{;ZyYMTyt7cU$=tJ?bJD8K0LEZ*CsF9l{@HiR;-`#$Y!zp zr({~+HdRHv;yqhZ@LIjuLQKx_TD~^TIwjy-{9YEBvYi%RtQ+xH%=<!fQz->Dyp(gZxPU7G6E4syB#m~Ok@Q_Pd#tem;AvfUzYLy;EqOu!OXw& zG5*|qaki`96P4la$(Lp|F0~W2F=9c)ye+DZ4HRI(VT zSU|3`xh)zX4Z-hi-5nIk`r(!3B{Fzt#LCP^95T;q-pO9z`wB>*m(G@Xt_?seRoQx| zx?^j_uL~5b+KlnVW74kAoz!46TOQNtSF-%>V2@X{ItR4U*i+Q5sXcE0CUTKqgI)@l z3jr-(dAj_)boS7081`T^c%OSU3q;oFDg)$@T#ib$`&}Pp znW$T=$=Cb2vjp=Pd1>LoQ?ut`F0W}gG~MU@VFe^7`bHuc(?V)Z33}1r?D2S?q{&B~ zuIO9@yu(cD5Xzi1@$&pT(>#PHnGzXVA*0Sc$_3tRH$LBYSu2B1B6fx;c8s{a zb%qFKSL+~p=Edf_W23T`snpT7DUw#k(+zw1TGTYp5x;GLtS4qDB_rHKNVapb8MfE^ zzV;cd1!3_u7tYxS18aU~m-}DRM~Fe^B7YL>^YIsiq#S1s0>?cJqt@)BPVXA%8dB=@ zU2t5N^b5OC_0Eg7iCp*13!sI?!G}xk%T3}G?Ox@5(v*C5_VQp+%~fZ0wk>d?&$y0Lz9yPSzybK>OTG{R01@ Date: Fri, 3 Jan 2014 12:14:34 +1100 Subject: [PATCH 025/202] better pattern ordering by putting literals ahead of keywords, to fix the regex-at-start-of-line bug --- JavaScriptImproved.YAML-tmLanguage | 19 ++++++++++++++++--- JavaScriptImproved.tmLanguage | 23 ++++++++++++++++------- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage index 3259760..1645169 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -95,13 +95,17 @@ repository: patterns: - include: '#leading-space' - include: '#brackets' - - include: '#literal-keywords' + + # literals should precede operators to avoid ambiguoties - include: '#literal-number' - include: '#literal-string' - - include: '#arrow-function' - include: '#literal-quasi' - include: '#literal-regex' + - include: '#literal-keywords' + + - include: '#arrow-function' + - include: '#literal-class' - include: '#literal-module' # before function calls, to differentiate methods from them @@ -509,7 +513,16 @@ repository: literal-regex: patterns: - contentName: string.regexp.js - begin: (?x) (?<= [\[,=(:] | ^ | && | return )\s*((/)) (?! [/*+{}?] | $ ) + begin: > + (?x) + (?<= + [\[,=(:]| + ^| + &&| + return + )\s* + (/) + (?![/*+{}?]|$) beginCaptures: '1': {name: string.regexp.js} '2': {name: punctuation.definition.string.begin.js} diff --git a/JavaScriptImproved.tmLanguage b/JavaScriptImproved.tmLanguage index 2ce4294..a1860bd 100644 --- a/JavaScriptImproved.tmLanguage +++ b/JavaScriptImproved.tmLanguage @@ -269,27 +269,27 @@ include - #literal-keywords + #literal-number include - #literal-number + #literal-string include - #literal-string + #literal-quasi include - #arrow-function + #literal-regex include - #literal-quasi + #literal-keywords include - #literal-regex + #arrow-function include @@ -1285,7 +1285,16 @@ begin - (?x) (?<= [\[,=(:] | ^ | && | return )\s*((/)) (?! [/*+{}?] | $ ) + (?x) + (?<= + [\[,=(:]| + ^| + &&| + return + )\s* + (/) + (?![/*+{}?]|$) + beginCaptures 1 From 94471ee019da48a3b3953e0196c44382a62fef12 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 07:24:15 +1100 Subject: [PATCH 026/202] added "Regular Expressions (JavaScriptImproved).YAML-tmLanguage" (based on the default sublime text package "Regular Expressions (Python).YAML-tmLanguage") for better javascript regexp highlighting --- JavaScriptImproved.YAML-tmLanguage | 11 +- JavaScriptImproved.tmLanguage | 20 +- ...sions (JavaScriptImproved).YAML-tmLanguage | 105 ++++++ ...xpressions (JavaScriptImproved).tmLanguage | 307 ++++++++++++++++++ 4 files changed, 417 insertions(+), 26 deletions(-) create mode 100644 Regular Expressions (JavaScriptImproved).YAML-tmLanguage create mode 100644 Regular Expressions (JavaScriptImproved).tmLanguage diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage index 1645169..307d074 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -1,5 +1,5 @@ # [PackageDev] target_format: plist, ext: tmLanguage -name: JavaScriptImproved +name: JavaScript Improved scopeName: source.js fileTypes: [js, htc, jsx] uuid: 487CF323-A3F9-48FA-B140-DCE8C893E664 @@ -532,14 +532,7 @@ repository: '2': {name: punctuation.definition.string.end.js} '3': {name: keyword.other.js} patterns: - - name: constant.character.escape.newline.js - match: \\\n - - - name: invalid.illegal.newline.js - match: \n - - - name: constant.character.escape.js - match: \\. + - include: source.regexp.js literal-string: patterns: diff --git a/JavaScriptImproved.tmLanguage b/JavaScriptImproved.tmLanguage index a1860bd..a618e16 100644 --- a/JavaScriptImproved.tmLanguage +++ b/JavaScriptImproved.tmLanguage @@ -13,7 +13,7 @@ keyEquivalent ^~J name - JavaScriptImproved + JavaScript Improved patterns @@ -1333,22 +1333,8 @@ patterns - match - \\\n - name - constant.character.escape.newline.js - - - match - \n - name - invalid.illegal.newline.js - - - match - \\. - name - constant.character.escape.js + include + source.regexp.js diff --git a/Regular Expressions (JavaScriptImproved).YAML-tmLanguage b/Regular Expressions (JavaScriptImproved).YAML-tmLanguage new file mode 100644 index 0000000..0282320 --- /dev/null +++ b/Regular Expressions (JavaScriptImproved).YAML-tmLanguage @@ -0,0 +1,105 @@ +# [PackageDev] target_format: plist, ext: tmLanguage +name: Regular Expressions (Javascript Improved) +scopeName: source.regexp.js +fileTypes: [re] +uuid: 6D74161E-E1A2-4AF3-922D-759E88DEFF63 +foldingStartMarker: (/\*|\{|\() +foldingStopMarker: (\*/|\}|\)) + +patterns: +- include: '#anchor' +- include: '#backref' +- include: '#quantifier' +- include: '#operator' +- include: '#group-assertion' +- include: '#group-definition' +- include: '#character-class' +- include: '#character-class-definition' + +repository: + anchor: + patterns: + - name: keyword.control.anchor.regexp + match: \\[bB]|\^|\$ + + backref: + patterns: + - name: keyword.other.back-reference.regexp + match: \\[1-9][0-9]* + + quantifier: + patterns: + - name: keyword.operator.quantifier.regexp + match: '(\?|\*\??|\+\??)|\{(\d+,\d+|\d+,|\d+)\}' + + operator: + patterns: + - name: keyword.operator.or.regexp + match: \| + + group-assertion: + patterns: + - name: meta.group.assertion.regexp + begin: (\()((\?=)|(\?!)) + beginCaptures: + '1': {name: punctuation.definition.group.regexp} + '2': {name: punctuation.definition.group.assertion.regexp} + '3': {name: meta.assertion.look-ahead.regexp} + '4': {name: meta.assertion.negative-look-ahead.regexp} + end: (\)) + endCaptures: + '1': {name: punctuation.definition.group.regexp} + patterns: + - include: $self + + group-definition: + patterns: + - name: meta.group.regexp + begin: (\()((\?:))? + beginCaptures: + '1': {name: punctuation.definition.group.regexp} + '3': {name: punctuation.definition.group.capture.regexp} + '5': {name: punctuation.definition.group.capture.regexp} + '6': {name: punctuation.definition.group.no-capture.regexp} + end: (\)) + endCaptures: + '1': {name: punctuation.definition.group.regexp} + patterns: + - include: $self + + character-class: + patterns: + - name: constant.character.character-class.regexp + match: \\[wWsSdD]|\. + + - name: constant.character.escape.backslash.regexp + match: \\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) + + character-class-definition: + patterns: + - name: constant.other.character-class.set.regexp + begin: (\[)(\^)? + beginCaptures: + '1': {name: punctuation.definition.character-class.regexp} + '2': {name: keyword.operator.negation.regexp} + end: (\]) + endCaptures: + '1': {name: punctuation.definition.character-class.regexp} + patterns: + - include: '#character-class' + - name: constant.other.character-class.range.regexp + match: >- + (?x) + ( + (\\[wWsSdD]|\.)| + (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) + )\- + ( + (\\[wWsSdD]|\.)| + (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) + ) + captures: + '2': {name: constant.character.character-class.regexp} + '3': {name: constant.character.escape.backslash.regexp} + '5': {name: constant.character.character-class.regexp} + '6': {name: constant.character.escape.backslash.regexp} diff --git a/Regular Expressions (JavaScriptImproved).tmLanguage b/Regular Expressions (JavaScriptImproved).tmLanguage new file mode 100644 index 0000000..acc86d5 --- /dev/null +++ b/Regular Expressions (JavaScriptImproved).tmLanguage @@ -0,0 +1,307 @@ + + + + + fileTypes + + re + + foldingStartMarker + (/\*|\{|\() + foldingStopMarker + (\*/|\}|\)) + name + Regular Expressions (Javascript Improved) + patterns + + + include + #anchor + + + include + #backref + + + include + #quantifier + + + include + #operator + + + include + #group-assertion + + + include + #group-definition + + + include + #character-class + + + include + #character-class-definition + + + repository + + anchor + + patterns + + + match + \\[bB]|\^|\$ + name + keyword.control.anchor.regexp + + + + backref + + patterns + + + match + \\[1-9][0-9]* + name + keyword.other.back-reference.regexp + + + + character-class + + patterns + + + match + \\[wWsSdD]|\. + name + constant.character.character-class.regexp + + + match + \\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) + name + constant.character.escape.backslash.regexp + + + + character-class-definition + + patterns + + + begin + (\[)(\^)? + beginCaptures + + 1 + + name + punctuation.definition.character-class.regexp + + 2 + + name + keyword.operator.negation.regexp + + + end + (\]) + endCaptures + + 1 + + name + punctuation.definition.character-class.regexp + + + name + constant.other.character-class.set.regexp + patterns + + + include + #character-class + + + captures + + 2 + + name + constant.character.character-class.regexp + + 3 + + name + constant.character.escape.backslash.regexp + + 5 + + name + constant.character.character-class.regexp + + 6 + + name + constant.character.escape.backslash.regexp + + + match + (?x) + ( + (\\[wWsSdD]|\.)| + (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) + )\- + ( + (\\[wWsSdD]|\.)| + (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) + ) + name + constant.other.character-class.range.regexp + + + + + + group-assertion + + patterns + + + begin + (\()((\?=)|(\?!)) + beginCaptures + + 1 + + name + punctuation.definition.group.regexp + + 2 + + name + punctuation.definition.group.assertion.regexp + + 3 + + name + meta.assertion.look-ahead.regexp + + 4 + + name + meta.assertion.negative-look-ahead.regexp + + + end + (\)) + endCaptures + + 1 + + name + punctuation.definition.group.regexp + + + name + meta.group.assertion.regexp + patterns + + + include + $self + + + + + + group-definition + + patterns + + + begin + (\()((\?:))? + beginCaptures + + 1 + + name + punctuation.definition.group.regexp + + 3 + + name + punctuation.definition.group.capture.regexp + + 5 + + name + punctuation.definition.group.capture.regexp + + 6 + + name + punctuation.definition.group.no-capture.regexp + + + end + (\)) + endCaptures + + 1 + + name + punctuation.definition.group.regexp + + + name + meta.group.regexp + patterns + + + include + $self + + + + + + operator + + patterns + + + match + \| + name + keyword.operator.or.regexp + + + + quantifier + + patterns + + + match + (\?|\*\??|\+\??)|\{(\d+,\d+|\d+,|\d+)\} + name + keyword.operator.quantifier.regexp + + + + + scopeName + source.regexp.js + uuid + 6D74161E-E1A2-4AF3-922D-759E88DEFF63 + + From c450375fa7c839e26f462af91324e56bcac15f68 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 07:41:39 +1100 Subject: [PATCH 027/202] better character class scope names --- Regular Expressions (JavaScriptImproved).YAML-tmLanguage | 6 +++--- Regular Expressions (JavaScriptImproved).tmLanguage | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Regular Expressions (JavaScriptImproved).YAML-tmLanguage b/Regular Expressions (JavaScriptImproved).YAML-tmLanguage index 0282320..99b6143 100644 --- a/Regular Expressions (JavaScriptImproved).YAML-tmLanguage +++ b/Regular Expressions (JavaScriptImproved).YAML-tmLanguage @@ -69,7 +69,7 @@ repository: character-class: patterns: - - name: constant.character.character-class.regexp + - name: constant.other.character-class.escape.backslash.regexp match: \\[wWsSdD]|\. - name: constant.character.escape.backslash.regexp @@ -99,7 +99,7 @@ repository: (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) ) captures: - '2': {name: constant.character.character-class.regexp} + '2': {name: constant.other.character-class.escape.backslash.regexp} '3': {name: constant.character.escape.backslash.regexp} - '5': {name: constant.character.character-class.regexp} + '5': {name: constant.other.character-class.escape.backslash.regexp} '6': {name: constant.character.escape.backslash.regexp} diff --git a/Regular Expressions (JavaScriptImproved).tmLanguage b/Regular Expressions (JavaScriptImproved).tmLanguage index acc86d5..e05eab6 100644 --- a/Regular Expressions (JavaScriptImproved).tmLanguage +++ b/Regular Expressions (JavaScriptImproved).tmLanguage @@ -81,7 +81,7 @@ match \\[wWsSdD]|\. name - constant.character.character-class.regexp + constant.other.character-class.escape.backslash.regexp match @@ -135,7 +135,7 @@ 2 name - constant.character.character-class.regexp + constant.other.character-class.escape.backslash.regexp 3 @@ -145,7 +145,7 @@ 5 name - constant.character.character-class.regexp + constant.other.character-class.escape.backslash.regexp 6 From 3039d1e967a4a9fe41adb2a24f753a2786042c0f Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 08:14:38 +1100 Subject: [PATCH 028/202] renamed back to "javascript next" and added some things back for a pull request --- ...Language => JavaScriptNext.YAML-tmLanguage | 2 +- ...ed.tmLanguage => JavaScriptNext.tmLanguage | 2 +- JavaScriptNext.tmTheme | 1899 +++++++++++++++++ README.md | 16 +- ...pressions (JavaScriptNext).YAML-tmLanguage | 2 +- ...ar Expressions (JavaScriptNext).tmLanguage | 2 +- screenshots/classes.png | Bin 14897 -> 0 bytes screenshots/code.png | Bin 19343 -> 0 bytes screenshots/es5.png | Bin 0 -> 69316 bytes screenshots/es6.png | Bin 0 -> 85404 bytes screenshots/module.png | Bin 10037 -> 0 bytes 11 files changed, 1909 insertions(+), 14 deletions(-) rename JavaScriptImproved.YAML-tmLanguage => JavaScriptNext.YAML-tmLanguage (96%) rename JavaScriptImproved.tmLanguage => JavaScriptNext.tmLanguage (99%) create mode 100644 JavaScriptNext.tmTheme rename Regular Expressions (JavaScriptImproved).YAML-tmLanguage => Regular Expressions (JavaScriptNext).YAML-tmLanguage (95%) rename Regular Expressions (JavaScriptImproved).tmLanguage => Regular Expressions (JavaScriptNext).tmLanguage (99%) delete mode 100644 screenshots/classes.png delete mode 100644 screenshots/code.png create mode 100644 screenshots/es5.png create mode 100644 screenshots/es6.png delete mode 100644 screenshots/module.png diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage similarity index 96% rename from JavaScriptImproved.YAML-tmLanguage rename to JavaScriptNext.YAML-tmLanguage index 307d074..fc1d58d 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -1,5 +1,5 @@ # [PackageDev] target_format: plist, ext: tmLanguage -name: JavaScript Improved +name: JavaScript Next scopeName: source.js fileTypes: [js, htc, jsx] uuid: 487CF323-A3F9-48FA-B140-DCE8C893E664 diff --git a/JavaScriptImproved.tmLanguage b/JavaScriptNext.tmLanguage similarity index 99% rename from JavaScriptImproved.tmLanguage rename to JavaScriptNext.tmLanguage index a618e16..2a517b1 100644 --- a/JavaScriptImproved.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -13,7 +13,7 @@ keyEquivalent ^~J name - JavaScript Improved + JavaScript Next patterns diff --git a/JavaScriptNext.tmTheme b/JavaScriptNext.tmTheme new file mode 100644 index 0000000..2e05217 --- /dev/null +++ b/JavaScriptNext.tmTheme @@ -0,0 +1,1899 @@ + + + + + name + JavaScriptNext + settings + + + settings + + activeGuide + #3333FFFF + background + #000000 + bracketsBackground + #ff00aa66 + bracketsOptions + background + caret + #ff0099 + foreground + #e6e6e6 + guide + #33333388 + gutter + #6600ff33 + invisibles + #404040 + lineHighlight + #ff009933 + multiEditHighlight + #00ff0022 + searchHighlight + #FF00AA99 + selection + #00ffff44 + stackGuide + #333333CC + + + + name + bracket.curly + scope + bracket.curly + settings + + background + #FF44AA + foreground + #3399FF + + + + name + bracket.square + scope + bracket.square + settings + + background + #2266CC + foreground + #FF8800 + + + + name + bracket.round + scope + bracket.round + settings + + background + #9922FF + foreground + #00FF00 + + + + name + bracket.quote + scope + bracket.quote + settings + + background + #00FF00 + + + + name + comment + scope + comment + settings + + fontStyle + italic + foreground + #646464ff + + + + name + Invalid + scope + invalid + settings + + background + #ff000022 + + + + name + constant + scope + constant + settings + + foreground + #3387ccff + + + + name + Keyword + scope + keyword + settings + + foreground + #e28964 + + + + name + constant.numeric + scope + constant.numeric + settings + + foreground + #ffff66 + + + + name + Storage + scope + storage + settings + + foreground + #99cf50 + + + + name + storage.modifier + scope + storage.modifier + settings + + foreground + #cf5099 + + + + name + storage.self + scope + storage.self + settings + + fontStyle + bold + foreground + #cc0033 + + + + name + storage.type + scope + storage.type + settings + + foreground + #cf9950 + + + + name + Support + scope + support + settings + + foreground + #8a5c8dff + + + + name + entity.name.function + scope + entity.name.function + settings + + foreground + #bb00ff + + + + name + keyword control + scope + keyword.control + settings + + foreground + #ff00ff + + + + name + keyword.control.declaration + scope + keyword.control.declaration + settings + + foreground + #8888aa + + + + name + keyword.control.module + scope + keyword.control.module + settings + + foreground + #ffff33 + background + #ffff3333 + options + underline + + + + name + keyword.control.flow + scope + keyword.control.flow + settings + + fontStyle + bold + foreground + #ff6600 + background + #110300 + + + + + name + keyword.control.conditional + scope + keyword.control.conditional + settings + + foreground + #ff00ff + + + + name + keyword.control.trycatch + scope + keyword.control.trycatch + settings + + foreground + #ff0033 + + + + name + keyword.control.loop + scope + keyword.control.loop + settings + + foreground + #009999 + + + + name + keyword.control.switch + scope + keyword.control.switch + settings + + foreground + #999999 + + + + name + keyword operator + scope + keyword.operator + settings + + foreground + #ff0080 + + + + name + Function arg + scope + meta.function.argument, variable.parameter, meta.parens.c + settings + + foreground + #77ff11 + + + + name + + scope + punctuation.section.embedded + settings + + background + #0D0D0D37 + foreground + #00d3ffff + + + + name + keyword.other.unit + scope + keyword.other.unit, keyword.unit.css + settings + + foreground + #80ff00ff + + + + name + invalid.illegal + scope + invalid.illegal + settings + + background + #562d56bf + foreground + #fd5ff1ff + + + + name + string.quoted source + scope + string.quoted source + settings + + foreground + #daefa3 + + + + name + string constant + scope + string constant + settings + + foreground + #cfed81 + + + + name + string.regexp + scope + string.regexp + settings + + foreground + #6fff17 + + + + name + punctuation.definition.string + scope + punctuation.definition.string + settings + + background + #15151501 + foreground + #b4ff82 + + + + name + string.regexp.special + scope + + string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition + + settings + + foreground + #00d505 + + + + name + string.regexp punctuation keyword + scope + string.regexp punctuation keyword + settings + + foreground + #c559ff + + + + name + string variable + scope + string variable + settings + + foreground + #8a9a95 + + + + name + support.function + scope + support.function + settings + + foreground + #fcf352ff + + + + name + meta.tag + scope + meta.tag + settings + + foreground + #4f9effff + + + + name + meta.tag entity + scope + meta.tag entity + settings + + foreground + #157eff + + + + name + HTML/XML tag attribute value + scope + meta.tag string.quoted.double.html + settings + + foreground + #E07D2C + + + + name + html5 tag + scope + meta.tag.block.any.html.html5 + settings + + foreground + #e88bfcff + + + + name + html5 tag entity + scope + meta.tag.block.any.html.html5 entity + settings + + foreground + #d730faff + + + + name + meta.tag.inline + scope + + source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity + + settings + + foreground + #87a7e2ff + + + + name + html js tag + scope + source.js.embedded.html entity.name.tag.script.html + settings + + foreground + #FF3535 + + + + name + html js tag braces + scope + source.js.embedded.html punctuation.definition.tag.html + settings + + foreground + #FF1E1E + + + + name + html js tag url + scope + source.js.embedded.html string.quoted.double.html + settings + + foreground + #FF9D9D + + + + name + Attribute + scope + entity.other.attribute-name + settings + + foreground + #7349beff + + + + name + Meta Toc List + scope + meta.toc-list + settings + + background + #162c1aff + foreground + #BEFEC7FF + options + underline + + + + name + js variable readwrite + scope + meta.initialization, variable.other.readwrite.js + settings + + foreground + #ff9122 + + + + name + js object + scope + variable.other.object.js + settings + + foreground + #ffee00 + + + + name + js object with parent + scope + meta.property-name.js variable.other.object.js + settings + + foreground + #ffff88 + + + + name + support.variable.property.js + scope + support.variable.property.js + settings + + foreground + #3399ff + + + + name + variable.other.dot-access + scope + variable.other.dot-access + settings + + foreground + #66ffdd + + + + name + variable.other.property.js + scope + variable.other.property.js + settings + + foreground + #37C1BE + + + + name + punctuation.section.scope.square.js + scope + punctuation.section.scope.square.js + settings + + foreground + #ff2404 + + + + name + punctuation.section.scope.round.js, meta.brace.round + scope + punctuation.section.scope.round.js, meta.brace.round + settings + + foreground + #1c38ff + + + + name + punctuation.definition.arrow.js + scope + punctuation.definition.arrow.js + settings + + fontStyle + bold + foreground + #aa00ff + background + #001133 + + + + name + entity.arrow.function.js + scope + entity.arrow.function.js + settings + + fontStyle + bold + foreground + #aa00ff + background + #001133 + + + + name + variable.language + scope + variable.language + settings + + foreground + #aa0044 + + + + name + variable.language.prototype + scope + variable.language.prototype + settings + + foreground + #ff6600 + + + + name + support.class.error.js + scope + support.class.error.js + settings + + foreground + #ff5522 + + + + name + support.class.builtin.js + scope + support.class.builtin.js + settings + + fontStyle + italic + foreground + #ffee00 + + + + name + support.class.node.js + scope + support.class.node.js + settings + + foreground + #1224fe + + + + name + entity.name.function.node.js + scope + entity.name.function.node.js + settings + + foreground + #d84014 + + + + name + support.keyword.node.js + scope + support.keyword.node.js + settings + + fontStyle + bold + foreground + #99ef25 + + + + name + variable.import.destructuring.js + scope + variable.import.destructuring.js + settings + + foreground + #00bbff + + + + name + other.object.key.js + scope + other.object.key.js + settings + + foreground + #1C98C1 + + + + name + meta.accessor.js punctuation.definition.parameters + scope + meta.accessor.js punctuation.definition.parameters + settings + + foreground + #005588 + + + + name + storage.type.accessor.js + scope + storage.type.accessor.js + settings + + fontStyle + bold italic + foreground + #0066aa + background + #001122 + + + + name + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + scope + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + settings + + foreground + #ff0044 + background + #220011 + + + + name + storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + scope + storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + settings + + foreground + #cccc44 + background + #222211 + + + + name + storage.type.class.js, storage.type.extends.js + scope + storage.type.class.js, storage.type.extends.js + settings + + foreground + #0044aa + background + #001122 + + + + name + meta.function.call.class.static.js + scope + meta.function.call.class.static.js + settings + + foreground + #880011 + + + + name + variable.other.class.static.js + scope + variable.other.class.static.js + settings + + foreground + #aa0066 + + + + name + entity.name.accessor.js + scope + entity.name.accessor.js + settings + + fontStyle + bold italic + foreground + #00ffcc + background + #001122 + + + + name + entity.name.method.js + scope + entity.name.method.js + settings + + fontStyle + italic bold + foreground + #aa00ff + background + #110022 + + + + name + meta.method.js + scope + meta.method.js + settings + + fontStyle + bold + foreground + #660099 + + + + name + storage.type.function.js + scope + storage.type.function.js + settings + + fontStyle + bold + foreground + #99cc44 + + + + name + string.quoted.single + scope + string.quoted.single + settings + + foreground + #88FFAAAA + + + + name + variable.other.quasi.js + scope + variable.other.quasi.js + settings + + foreground + #ff0099 + + + + name + string.quasi.js + scope + string.quasi.js + settings + + foreground + #00FF00 + + + + name + punctuation.quasi.element + scope + punctuation.quasi.element + settings + + foreground + #008800 + + + + name + entity.quasi.tag.name.js + scope + entity.quasi.tag.name.js + settings + + foreground + #ffff00 + + + + name + meta.group.braces.square, punctuation.destructuring + scope + meta.group.braces.square string.quoted.single, punctuation.destructuring + settings + + foreground + #47E9AC + + + + name + string.quoted.double + scope + string.quoted.double + settings + + foreground + #11bb11 + + + + name + punctuation.section.scope.curly.js + scope + punctuation.section.scope.curly.js + settings + + foreground + #F9044E + + + + name + meta.delimiter.object.comma.js + scope + meta.delimiter.object.comma.js + settings + + foreground + #00ffff + + + + name + meta.group.braces.curly string.quoted.single + scope + meta.group.braces.curly string.quoted.single + settings + + foreground + #16B853 + + + + name + support.function + scope + support.function + settings + + foreground + #B532ff + + + + name + punctuation.definition.string.begin.js + scope + punctuation.definition.string.begin.js + settings + + foreground + #D2E20C + + + + name + punctuation.definition.string.end.js + scope + punctuation.definition.string.end.js + settings + + foreground + #CEA30D + + + + name + instance constructor + scope + meta.class.inheritance, meta.instance.constructor + settings + + fontStyle + italic underline + foreground + #e81e41 + + + + name + entity.name.class.js + scope + entity.name.class.js + settings + + fontStyle + italic + background + #00ffff33 + foreground + #00ffff + + + + name + entity.name.extends.js + scope + entity.name.extends.js + settings + + background + #00ff9933 + foreground + #00ff99 + fontStyle + italic + + + + name + function call + scope + meta.function-call entity.name.function + settings + + foreground + #5b24ff + + + + name + function call with args + scope + meta.function-call.function.with-arguments.js + settings + + foreground + #33ff00 + + + + name + js brace + scope + meta.brace.curly.js + settings + + foreground + #ff0099 + + + + name + js paren + scope + meta.brace.round.js + settings + + background + #000000ff + foreground + #d0c5feff + + + + name + js constant escape + scope + constant.character.escape + settings + + foreground + #10cf62ff + + + + name + pseudo-class + scope + + meta.selector.css entity.other.attribute-name.tag.pseudo-class + + settings + + foreground + #4fbc4b + + + + name + css selectors + scope + entity.namespace.unicode.css + settings + + foreground + #FF4F4F + + + + name + entity.other.attribute-name.id + scope + entity.other.attribute-name.id + settings + + background + #0b0028ff + foreground + #f20073ff + + + + name + class name + scope + meta.prototype support.class + settings + + foreground + #ff0099 + + + + name + support object + scope + support.object + settings + + fontStyle + bold + foreground + #ffee00 + + + + name + class name prototype + scope + meta.prototype support.constant + settings + + foreground + #ff6600 + + + + name + prototype declaration + scope + meta.prototype.declaration.js + settings + + fontStyle + bold + + + + name + js undefined + scope + constant.language.undefined.js + settings + + foreground + #555588 + + + + name + variable.other.constant.js + scope + variable.other.constant.js + settings + + foreground + #00ff33 + background + #003311 + + + + name + false + scope + constant.language.boolean.false + settings + + foreground + #aaaa55 + + + + name + true + scope + constant.language.boolean.true + settings + + foreground + #cc7744 + + + + name + js null + scope + constant.language.null.js + settings + + foreground + #558855 + + + + name + css#id punctuation + scope + punctuation.definition.entity.id.css + settings + + background + #0b0028 + foreground + #ff489f + + + + name + css.class + scope + + entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css + + settings + + background + #0b0028 + foreground + #9529b8 + + + + name + css.class puntuation + scope + punctuation.definition.entity.class.css + settings + + background + #0b0028ff + foreground + #cd87e4ff + + + + name + css pseudo element + scope + entity.other.attribute-name.pseudo-element.css + settings + + background + #0b0028ff + foreground + #ff00ffff + + + + name + css property-name + scope + support.type.property-name.css + settings + + foreground + #b8efecff + + + + name + css @at-rule + scope + meta.preprocessor.at-rule keyword.control.at-rule + settings + + foreground + #d7c271ff + + + + name + css color + scope + + constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css + + settings + + foreground + #fb7720ff + + + + name + css constants + scope + support.constant.property-value.css + settings + + foreground + #7ce85eff + + + + name + Puncation Termination + scope + punctuation.terminator, punctuation.separator + settings + + foreground + #4bfcf8ff + + + + name + css constructor.argument + scope + meta.constructor.argument.css + settings + + foreground + #8f9d6aff + + + + name + diff.header + scope + meta.diff, meta.diff.header, entity.name.namespace + settings + + background + #0e2231ff + foreground + #f8f8f8ff + + + + name + diff.deleted + scope + markup.deleted + settings + + background + #420e09ff + foreground + #f8f8f8ff + + + + name + diff.changed + scope + markup.changed + settings + + background + #4a410dff + foreground + #f8f8f8ff + + + + name + diff.inserted + scope + markup.inserted + settings + + background + #253b22ff + foreground + #f8f8f8ff + + + + name + Markup: Italic + scope + markup.italic + settings + + fontStyle + italic + foreground + #6ad500ff + + + + name + Markup: Underline + scope + markup.underline + settings + + foreground + #e18964ff + options + underline + + + + name + Markup: Quote + scope + markup.quote + settings + + background + #fee09c12 + fontStyle + italic + foreground + #e1d4b9ff + + + + name + Markup: Heading + scope + markup.heading, markup.heading entity + settings + + background + #de3280ff + foreground + #ffffffff + + + + name + Markup: List + scope + markup.list + settings + + foreground + #6657eaff + + + + name + Markup: Raw + scope + markup.raw + settings + + background + #b1b3ba08 + foreground + #578bb3ff + + + + name + Markup: Comment + scope + markup comment + settings + + foreground + #f67b37ff + + + + name + Markup: Separator + scope + meta.separator + settings + + background + #242424ff + foreground + #60a633ff + + + + name + Log Entry + scope + meta.line.entry.logfile, meta.line.exit.logfile + settings + + background + #eeeeee29 + foreground + #f8f8f8ff + + + + name + Log Entry Error + scope + meta.line.error.logfile + settings + + background + #751012 + foreground + #f8f8f8 + + + + name + JSON property top + scope + meta.structure.dictionary.json string.quoted.double + settings + + background + #111111 + foreground + #1144bb + + + + name + JSON property level 2 + scope + + meta.structure meta.structure.dictionary.json string.quoted.double + + settings + + foreground + #1122bb + + + + name + JSON property level 3 + scope + + meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + + settings + + foreground + #2938eb + + + + name + JSON property level 4 + scope + + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + + settings + + foreground + #6d7ef1 + + + + name + JSON property level 5 + scope + + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + + settings + + foreground + #b3bbf7 + + + + name + JSON value + scope + meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #aa00aa + + + + name + JSON value level 2 + scope + + meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + + settings + + foreground + #bf00bf + + + + name + JSON value level 3 + scope + + meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + + settings + + foreground + #ff00ff + + + + name + JSON value level 4 + scope + + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + + settings + + foreground + #ff40ff + + + + name + JSON value level 5 + scope + + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + + settings + + foreground + #ff80ff + + + + name + JSON value string punctuation + scope + + meta.structure.dictionary.value.json string punctuation.definition.string.double + + settings + + foreground + #8409ff + + + + name + JSON array value + scope + meta.structure.array.json string.quoted.double + settings + + foreground + #5522aa + + + + name + JSON array value level 1 + scope + + meta.structure meta.structure meta.structure.array.json string.quoted.double + + settings + + foreground + #7017c8ff + + + + name + JSON array value level 2 + scope + + meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + + settings + + foreground + #9541e9ff + + + + name + JSON array value level 3 + scope + + meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + + settings + + foreground + #ba83f1ff + + + + name + JSON array value level 4 + scope + + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + + settings + + foreground + #dfc6f9ff + + + + name + JSON prop string punctuation + scope + + meta.structure.dictionary.json string punctuation.definition.string + + settings + + foreground + #66bbddff + + + + name + JSON array string puntuation + scope + + meta.structure.array.json string punctuation.definition.string + + settings + + foreground + #416be9ff + + + + name + JSON array brackets + scope + meta.structure.array.json punctuation.definition.array + settings + + foreground + #fcc401ff + + + + name + JSON object braces + scope + + meta.structure.dictionary.json punctuation.definition.dictionary + + settings + + foreground + #fedf76ff + + + + uuid + b238c753-1549-3f12-a519-0faa5dcd4f65 + + diff --git a/README.md b/README.md index f851018..f4c0ad0 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,5 @@ # JavaScript.tmLanguage -ECMAScript 6 JavaScript language definition for TextMate and SublimeText. This builds on [Benvie's work](https://github.com/Benvie/JavaScriptNext.tmLanguage -). - -Highlighted features include modules, succinct methods, arrow functions, classes, generators, and accessors. +Better JavaScript language definition for TextMate and SublimeText. This builds on the language files commonly used and adds more fine grained matching and also includes new features from ECMAScript 6 like modules, succinct methods, arrow functions, classes, generators, and accessors (ES5). ## Installation and Use @@ -10,13 +7,12 @@ If you haven't already, [install Package Control](https://sublime.wbond.net/inst To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptImproved`. -# Screenshots -![screenshot](https://raw.github.com/simonzack/JavaScriptImproved/master/screenshots/code.png) +# JavaScript.tmLanguage -__Classes__ +__ES6__ -![screenshot](https://raw.github.com/simonzack/JavaScriptImproved/master/screenshots/classes.png) +![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es6.png) -__Modules__ +__ES5__ -![screenshot](https://raw.github.com/simonzack/JavaScriptImproved/master/screenshots/module.png) +![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es5.png) diff --git a/Regular Expressions (JavaScriptImproved).YAML-tmLanguage b/Regular Expressions (JavaScriptNext).YAML-tmLanguage similarity index 95% rename from Regular Expressions (JavaScriptImproved).YAML-tmLanguage rename to Regular Expressions (JavaScriptNext).YAML-tmLanguage index 99b6143..11233e0 100644 --- a/Regular Expressions (JavaScriptImproved).YAML-tmLanguage +++ b/Regular Expressions (JavaScriptNext).YAML-tmLanguage @@ -1,5 +1,5 @@ # [PackageDev] target_format: plist, ext: tmLanguage -name: Regular Expressions (Javascript Improved) +name: Regular Expressions (Javascript Next) scopeName: source.regexp.js fileTypes: [re] uuid: 6D74161E-E1A2-4AF3-922D-759E88DEFF63 diff --git a/Regular Expressions (JavaScriptImproved).tmLanguage b/Regular Expressions (JavaScriptNext).tmLanguage similarity index 99% rename from Regular Expressions (JavaScriptImproved).tmLanguage rename to Regular Expressions (JavaScriptNext).tmLanguage index e05eab6..faa4f1e 100644 --- a/Regular Expressions (JavaScriptImproved).tmLanguage +++ b/Regular Expressions (JavaScriptNext).tmLanguage @@ -11,7 +11,7 @@ foldingStopMarker (\*/|\}|\)) name - Regular Expressions (Javascript Improved) + Regular Expressions (Javascript Next) patterns diff --git a/screenshots/classes.png b/screenshots/classes.png deleted file mode 100644 index e4f5916b319606f0f38b6643414a66d065cda100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14897 zcmd6Oc_5T~-}j|XbqZ~cQ6#5L*;AIXo

pw*iGf&MnJv^b7fodZW6xjFN;&V$!OUp{d=JVvwPCvq*PnA z*xpuh{kJnJrN#pLpbV=IH{!dWA2Mwtw|AX@vZB*_Jh~#MZBQHW$fkn(Q00AL#wgVU z*ICU17OI3qN_^2mOpHGl+j+3Ju8nn@s{s=krpn1IHn_yIRs5p zYG?CKX-pXu2P{hFT!b|NUgV3fj$4TqBc-=<4Z}CZ} zcd+(np9?w8=B>3!4bC>9F<(|KSug^b^EK8!pGJ`CIzurwqe)VFtO-)?YQ}8L_+V4* zz|Z$cY+S?mXB`SyrcsZW#6NMy9FegBt>X_{I| z7^cd7T)iXaJp5ji1>tiGZJ*aw>wkb|Rd{W`rd{o8O*c*#Y6a1gi|HFnzbRnZdbT_A z3Yw`>#MzpVDUouliD9r4i*Bp>0>zmaJvihfkM&MT%WlV_JsgYEf_M}Y#B1nPK>*(; z^4|B*A4&4B!|xyWQR!Zi(`?8uckyEOeh3miW{b)`l#jgzvQ1rd$YHOm=TVSu7i*}l zN}0Q$(n`E5)j=5!Xu+6GJ?3=mxE|ym%)6D2cnYV6)plx74@3T`mLM)21Ufs3)OqlDC)tGM7(OB1ag z%0O3}36>(#o>rX!g%EM6pL|+P5@9D8d#yxy>YQjW%BFzD1#dN~*L_SeLn)S>k1t4{ z;rt+XLA21yyfybr9;iuzk67ubWOF8iJthCD4E-YxcB<;0ZmRs&idH%VRZ#y34C{}S zFeUfhGwV!<`FxG_`KR)v-1$Ma=h-FD3DM>0?Q`Jcrps!fwpQ!pGm7gLzErGeN-Z@A zB+xuJyGqTc3!$H1&h9NK!GuLHOhicHKgGwG3BKm_b-6xNB}OF%92B4HRVWifQhS3& zqg18SSj6W(SSQ^{3OJ8`Y)3H=Q*;nXNDj^c_f?zpb3pMY!{S!6m!X#?q)Sd#@}UN9 zZ)}R;F|4o2!@k^wGkM|i7@DaA^~}d~U8aN)7b+{r%n&WJc9#sSBy^z+mg1aXoPQB!E|#oOz$t|{yq)+i1w zRO@@j=I@M~G)1bHQK*s&e*o1|ANR`I<&|bby$rkc2K$`$Xu~-^kr-|j_*9u&XDlmsbsFs;D%UI~wh2t}yLiSG_6AfyWGbI&KOS0%m2`9OmVyIjWeuFc;r zkQa(wywJwN^z%2d+Hxs>UM7WIDOzp}fsy#;u($pjBSz^J_GBcMp@JNXPcim5W|{vq zIDPD7txTY(+vtr9oxWI|c&oXx;(}VdSx~=#4tJ2Mg4xJDwR&7&ebThTBh6p~9!FPM ze_i*78winp^$N*NT;WW%i0_2Mad#)?(voFlD4$7bB)QzN&E4Ov%IheU1!=ANFKrlA28tG`DlbE?=r!@0zB0I?fmF|% zRbv8?Gt}6n?gTM)vu>RJQQ`bmsR?;Bli4+EiclnkXSc=+;vy)c9-S{^NJ^)V(b2uFNcfF?v#(g~_mL1TH%mMpyko9oy!)pWK8z_TeOCNQ zcc^NuI_5$J%PE(agbzV_mwHU0!N?~SJ$QCLt{K5T1LsBoEmWG{j~c|7=5Hu{!U95@ z)yVlFBF$cdPb+WP1Y>kLLUv&;bVB`)m&ugFm31SmTa4R!kHP`>XH zt(hu&hW(OuL5Ru;fX4pq>DKn(b~+<^<^0R}1a>XY-#=-cmD3#HqQdr?vrtz{#-HEp+{TOk5jYPf6ZOSe_Kx=7j`>%Oe> z)k?!-I{2|l2JSrR;#d-{aQqv;-&-GjHn_-#DP23@@-o*sx$05^e$iVaN{K5}0WDp0Ooof}i&iD6v=e3|jD((ur}_ci=;Ed21)entZ=L zk``qeEfGJ{u$~iK@a}kquNz8C<*Q znjC%=GcohDQX=fU4hTa%j3{G{^UTN<4mboyLscd4ag3zTcnY zm|usAf(~5Dau#gpshj)(7d%zp0Ts9y1d5M*5<BW(hzG{DTC++5VC>=h2{Ju?VPCXp?aI zUsZzd!|HY^rYlG=U;fd@TKPv>JdnTErFVond*_t$JIl^Wb-Vn-Ma>i(^6`cY>@fgX z-kEf;(#6w{3pOTlVkN6q2lw_O0Uekp<1W-w@)4?(xrozL|tcez_m zl$z9lG`k4!*e>W^;ht{zuKrRs|J}M^j2Di^dUxtrPCneA^K3n9*vo2a>aZbyq_(_N za_cSR?f)LbTac6^WPK?e(qI`T5*sCY(63HBuznFTe%nFW?1XCET_u}qpOj9#O-sG3=i(|0v4HQa zE?DR*KiO5?V9hbtK)JzjBu>WUBvxBhAo9MY17q>|&1eZ4p(SX*O^#w*Ej6Kz1MSz} zjO|;jzE&(Xy?@;qH;%NqR#b#4T>GhZC~c8igS912f);!1;=9&reP_24&ch`E?bcS* z2T}o4;}nau$Mtctye5Q;tfT{!T|Bii!MfIlU&zGm+gQGF1{}(AL}TN)f%(?mH_psu zr8MK}wA9$Ti%p)O7FFHXN4mN0$AtmBX2#!J&|;7$(ss*g9F*XNVMFv`T-k@{w2+(96|(Q{8qID>I>q6z&;M1HBxs5M?re9$0FJreb>>9X02#o% z-&(2I(h}w}*56zz@Y`67(UVqDji+;#_V*@iWv;4y^t=0Xjb+omMlQ;evVd5uZ==$C zsBOcI8|@uko_&U<&DAsXspRtV&4Nk)1nePF2Ocvd$L3o&ZI8-C76{1Rp8%*RaMX5D zqo=E&o=@X*vlu=&C-r^DvZ@H&SUpRXm1hs;_yX{w9Qqqo(TO~ zGx{lN>Ei2!N-_0-$N9=t(GMGX7u)m>jNFbH5@6Y`;G<0bsOfXDBv4Tzp~1hY3Yf>Grl;_|E?gU zTCCm)(zP~8B}EMfdPKf&TLEo02p_h{w=lF67cRz;ttq8j$Z|AvS7h?biw(jw zm{2U6cWUI?i8WEKi>kXBs*`zOrFGFT^e^(`2o+b!x4ui`R)N6#S8Soh^XWasF@?LyMuTqS zvhvgqS}3Z?Id{K1r{?LCf}Ho~T;Dt#5c(59{=011VY^sw%JasJUdz4n2?Dz+&mZq? z+a~C}!s6b=N#;zIbuY3K31bTn&l4X3R?9O&2^5Y?v(@C}4illWSv=jG6)>wx zOM^EUN6;=ZZAn4wE&`Ep%@8x5J zz##g=0L#=u3Lofq{%Q=>;?_UfT^J$V5Pq+un_9ioI95#a@0}n)5L;LRIpq{MLhR^n zxZm)uH~s=a(*-+S=X*5%KWyeP2h{3*br`ltB1nUDx6>I=ryZ%Ov>zQ+M&ME6u!Q#7v z&ZC&~E^qXOD6?&vtTQsGeS)E3|eY*J_Ol`(nQ69X5tbRc1ksuWO5qa z%;%&vjHJ7|m0|WvA^ds7-ZAB)+qoH7|D}^crH5+JDN@31!)fj3rK)`0_}KIsOR zU2no`m}6B&19SmUr&7n0jaLu)eedubl~PZ{0{(t^ee%(1-t4DU$3pal>lK&lCk25n zF)8P_TdMzooDo*Sye#PH9sr%P){L)WTGM-@KupR9$T9;FG+Y)OqTK#}5U9UDvJpnT zoaMykAu~@c=8b*7>z20<1)W%#iP-ugzo{n7)xKbvth=?6D=3#=KC|5RH1h;+_!9Fn z%fpI>KM(E81XlHs!S5NaRIE%Lm(DWQw)8jXW2$otKhzC5Ehd5TIT^Dy1 zbB{lLR zCE&~G)JM(PGJ{QZH|r$9ZiBq+3(ASYPSN(x24mdRgnN3PzlzGtB~`AyTQCynOC3m{ z-1}ssiE?aS^m!kN3>8C)sxv#M27if9DOTzj&&iY1uuhe6bF_%PZ%r(|6d1N=g+nkO z!BL`F#CvXID6P!Br`XQNFqKdw{rtj5A7cJn;y=|PE|Z=lqE^?7M3ku6YIlf$0&BF2UoY>HrLGHM*N zJ9N&*GQ+$Jru0TOXrlb&1=*R;BM&6Shd7GbBH!kv1AuLtMW15U>LBd-%cbKeXGa|^ z0QM(hkKwo+yD-R44dSE{WUOrd8mi|8eg7Xifsu`>mfs-1?9A-QgF=br&=YI7($5Py z=N+Yn{Tz_?%}kJ(udKjcHTj$3_HM8yPeujug{#DB=$fR6>oe-Z-ch5``Kl^@ofC&g zk?N(wF==`4jA>d=+qp->3(v`B9`ns*%6d9CfS$NfUkfuQ%(vg#aP}p>hQ-#SNwHqz zsN-*OR5P52vVhBY3|>h%MkCL($*ICN$uTsD4@I@pE)F%3@KwLV9i*ku(H&ZdSv6B- ziZ#5=I->X$n?mUhb}_1 zB@G1h1%@7IMc;rL_I9w0^`B&ezmNKDh2dQ{xxU$mqG-6lw%n}5G#F{z-Ijl`S?aBbWx={%tj`~{sV<}JI;9QK!ZOsTl#32ZAF-PDWQ zydj;dSnRCD$g>}JTElWDYn;g*DB;%!vT<4f!r%LW>3+20J7TeTVLY(3kAXBS-l z(;2GW&vP7=qwpLsqfv)1^M6AgsIGdxl;^x3YD1TSAS28r^L1cr^IQz8u=Hl$8G(v& zvai|vBfdk~lTYZG%!9g^ZtlGEHBIfrO!vl#Nzm%qdT$StDf*W4ws z+hpxY0Z)aX&nF?Q$aG7=DZjUyi67^TT@W$4tCsb8y>oc|jl`C-s%FLrn?!*A$m*+2 zT7*?uW%PObIS2*sLGW8LZH_^7h8InEtg zrJLnnBgXhy*8rcGW!C6CGd-W~`~Fsg5rZ+|&Zcth%U%)sGQqJvZoTR>1VJX=^8HS#E&CU(dK({Eu^A z?rNiU36H*=`dy@x7ViB}DKzIgi+8{RKeW46^5D!3Qh``Hrp({I%X;K#qN&7^dT+#c z=ghRPB6;EWJMP2mHDD8eu9bYMS@JxEC8%u5SOT+|sOrS7VH6n3TnuV40P z@}Mu)$c@Tv_#vv!?5cp&$AWb&QjOuhiu{G;JMPoepb9ip(M1hY@C3OhR5T7qKSO1X z72yV-S6(d1VDzNh2n7O1 zjM{s^-&OQink$cJmoqD9FLX24bWJ~Vt-j|`TEttUZa&$1Qp$xdXs?$KE;v^qDErKd zR5Z(XXr#r4Tfau!v#a{;C;0!aR-vk4s)6xdeIEnPTZ}8c)}cx|E!y!^A*Dfou@gL? zliKha&&3_>@v&pM-T(=*zGJ_%bC@s!fNu#z{>mkh*T6uTUgb9(3usd`%*#%Frv|7+ z);6}vuL0HKa~e%mil)n)m#(CRvVH)Y3y}tOrw>XG#}ZrwhqE%fl(C6cLIqgBjurtG z36W{PF5B1_p{O#gOA>G5sJrvZ<6R+V$Yku9UmX|wkA;Y3toq(^EaBikSb>s^*3;|o zN+cGwQ;n<5VpXLi5Ab}8$!CC78FGpPuuuC9DZo1OF!7cGDPu&Jbow zmX?=Fmo{4VZ7kv9L8E5vx`B_5B9D7ilZxQQgYT~?&97bgP4kovL$Eu=%#_|g6C_6| zJwu+8>NCKc8D3R%(k2z2J0#O_y=JIj@{n4n(ewMX$c1Osyn!v`_}JOqz$-8;n~c;% zNp#j^q3g2F2-{F2zL56db?sD;Uw;BD`0Au*3FWkk$9Bo;M~`@4BOE4uIbo=aL#)lV zDX0r0^UrR?$i#-eEYV(NS@!bk;I}0Xf40tEeuc9!>2NY;u|RzdelV{SKA$) zg8QvRy_b(?)_A^7UP6&)k}4W8wE)Nf^Zx2+v_!<*VcS;;=^@elwjpgIGRZ#+W#eS-p0g+cQcVArt`KTt2?7 z*}(Mdzl;vhc>nM>{?hKZt&r{VYOTU%IngsB-?rP|&DA=bX1}A#ts4x$h#NsftdB~NQpIpg%GJn1h)<2iT%-p77GPunQ@0X}GXP8aE2=XqdQ1&P3&Iq8)063M<^A-$jS0Sb5j9Dvj4_J~ zG9s2*jH2SdWegn?mzDf3hz08$i>X16-!lB+_T|m!@$KCcxq_*weI}(COS$DSJzOs~ zNwP6e2MSyBCHba`amCZZreG7IsM1Q{DrT7BS+kZfRAB}&4{^}KlJ#~Bl5#~`ndaGIIxNk_z-CwsPfuRdw#zc469W9U=swJFqnAU87_MbS6_lHQy z!tVgNz(3s4yab5GaJT~kV67Ca@dI_XX50XpJE^Zlg1DY_4tQrX450Ir*`8QN zTGIA94BD7KjB(!(kn%9BfY$fM^wYba-7!)X!m8GJzMmitxc8HUT%sD2shW55U-DR^ zCdB=Q)u37Ih=a3(60mG@^Gd892FJbqlno*D(DYTg$`B^$>!=@QM`{PCA~vYqg!E3KJ3ZqaQcsHb*%qBG z7RhI)Nsf^u+JIW26r$%-;iV(iX@uaP!>?KdXtHqQHgH z=@BOH$NL=?^tD#gl5vkqOnNt0^ADPn>lI}&hGhc5MjrXmr)gTuqQ-=**w8B(sjZU(0b3BP6SW2T-S2fRNrU|A?2`V7VrcuIm|^8Yonp9fB0#!46T7#?P>TnO;!i zaSHvAtOMK_$JG4C`IJ3QA9XiEroEIPdHUsn&V40&7}U2aM8+V-s~ zU;9x%^ia6rw|AT@5XyiIO2d{|Bw#!6VQ+Uhr_H-RLr@`r9k7VH-7x>&ar;NK?gaLe zLV>l{c-TJhFakqFbc>Nnf>f@AJ1W#WV!-yWm9Wl6*XAl+B;ECSluUQy9u=8mep0cu#tIx@02!?Ml1J`h#?WgQ5!%PGI%B6bak+Tf>ZK>aCb8+0 zNb#vQ@*6=kMEv<>ltRM+C$mtW~W} z4_~B_)fL5mD%?C;PMDiIj=$4gvf-{Z#szy8=Xj#p(L7%TfJaik z(8Ci%lDr}AAbVc+BCBqq^RcZb0mb4m#j&Ac>I>%+gkRCIc3Mfr?>!6<{H$sN;hnVV z4_nTT%VqXF(O^PF48KZmvo$p~?RP(WgfD}vGR&DN-E2)I!VBpUxjQ2{`}Na`eZv^A z-dP_TRpHQoS;2^ly0Q3F%aVVta|6k<{o|QK`4=WG0Z)i`PD|)$V*qR(Y-@y8UlI}g zW5Hu0Z3Ba)ps)U|MKeC&1%v_V(Bk1snQdiM@zX+V7Qb0Ftubh>Km#f^Nx!6BhbqXU z)vYUf;uzu`9|4;mRcfqN$`0&jctw-+ZoG~3ZM&!(=@<}Gw}!`O{Q$t#)7)1ISY z=#($jX6aAk$<}=rq;&N*I;5UQ9rR@_78KT$EO<+~B;zv7;K18206g2rJuK0h>2l2J zj}Z}V8=p^^?WZ-YTaOl+r?s^Zce@-&FM3=hU}H@0KU36BnCH>9zei=vOvxGSctra2 zP=!&YqtE#~7sOK&g_#UyqVAH!(oE!f zObz2GMvCH7RwR+HO)WNBN%|)E8K$B9vFkywiVsRe$QLWpc8M5ocTAN6_!m~Iht3g; z0uTsp1+$5>0D>>)M_YqY257l)oauiWQ2u`0@z0ucs!$X- z{}?Pve~)O2IatrjUh-*B`ff*W*GP=`576ySP$HAMUjx+PZ@4`M%~Fuw9^!q>Y5Q|4 zK!Q3A5d7_U@Ec&%(g>)Qe?KJs{ThIh05JpW=9{(}m^Y!`E6&WU*vJ|8-73g_FZYu~ z{O6~Z(dFgK0|F53UK++wuO*EmPhjz%2P}O{=DqDp=5>)>uVJ%7jQ#5sYQ0*wvLX=} z-WEw>C=djRU{+82$1+-JxGR`&1obr6YNRU4Gy<)RJ-@M+&9a%M*L_Hl=;K}nOX|k} z$xqA=^Z}d8{4&?927$Bk)rN;Lkz7v#eQ}ArL>vlF9;_NdTMtW_{mK@$$PM=22JBms zVVNoz#<|KBNt>FJnX4W2!;0P#02MOdB8ijOgk%QJ`t`k%8SNn^z5nxgWx1J(@)ZY0kY1J% z;6~p~QvU7M1L1b#Yr<9@m?$?213l^)=uwPyjT0*`@Ts|*Q^`%M-JL&QZ~{2l@BG?k zl~!eK#j@otZ~r;Td+F>N4%$vyC`+$TeX?np`Bl*?1zdhXCZAmDE;~?GbvRZLP*m+e zC4fWbd5z1|{d(fzW&(v)9EAEVikm~1;ZH~f?XjNS|j{>anu1 zSig+mKZyTkW|(?KU6)uP*BBBN#e90h49v(Cqr(}WNqo?Zc~eOq_2pfcj9e)$WAUHL z<%E>0QeUg8&})^KR4pgS>c~H?Bb}dX6&a`+qa@L4AmaQo$Etu9IRhYy$i*+L-Zmwi zo0h0+0ApSt>Yn(Smk(Q2n-M=(!EG##1v1PX9Omap<7ZGgGk|9k|^vqVCyI?XZ zeX;Y5=~4ee@#VdmKEDT%)@z1o(FH|fqe}UpDKg{qL!wf;bb5cm3oo@@(%!(C5G<(T zcWA4rQn(LI3{>999$<+>{dLPFNOS~TQfrfJcI4P;Vo{K9m!e(SdEc(;ktiihG3r33 zE?ErN-S~@C#|xk=3e$}8duW?x6Xy1%PPzGNR zdou1kSmIB>KF}=>SL5R9I0`ikv9kQ9{sx@QSK(}q-fXdihmAhLCC|)01|B1NF+jee z%>=!D^;L4W5NxQ8bHeoH>K0LHN}a?BY=a#-;Q!tgx7tF25g8~hss>U!w)Ll#R}Ubl z7yG~!o<90}j`c6cIGv(hskf{)o4^zat)cdTmdjnc*}dfw67Inr6-kjXi_Db{aE)P4 zxu;t4ZwSM}8PfPoO;k4~?|rqV?mt7S;HkypKCi@KAhp?E_B(*P8_*u{C#2G5oLkWP z;*l~W2=w85n*zI*9YeFZNM%+yYoR>493P4jTXkmg}FsdnHej4tR#{a*qro z#}-c8$tsQ`Eg!f`tZgW$#Waeid~xA9G^oH*-l{8EoDcBQ|Bf<4?iAsyJ>*s2WU|Le@}AfTrCoE^Kusg51GZ%cg7ihvE1mo+4seCYdOdy z&7`%XqiW_?&XZ!U9Y^HnIWXnixXI?0Ro8lBU}!eat~yu_3zUxu@c4ycB~^!jwYcQ$ z;##s2!La@Xi{jK=$k~kXo!QsFx3JvFcXH`kIp0Qk=?nT(%aa|RijhK@}YJ7Q9I%Z_<_cDCxNZfM<;3je&* zmaVc3EMO9D5Ax2Wm`yCN-se9@;!1vJQ^zPluMLC5)JH0C1nB@tiB3AON^dZdqU$Y6 zZcg!N7sIy zqf))FRqG>w+JsbT!lUtGNXKjwxC;?OF<_CjCG`~!ZL4DkEe`&Cv0zSc?drj@J}~RZMnxb0<61z)Po!AD4}>sd-U>?nEJW)$^UB?L!i7c2 z#>e^BM#qkX7RfIYzzqXWFKp!s^!-S2eFm=oXMa=c%}=1+JfO|0rEeXM2SBK1}JxzQf*saTG<)BOWG{YMODPT{6G~vdTbOjd`u>(|L?2p4Y zn@CbeqXJcd{Jp!mb@fdyeP8e9u1da%7~d(`+27m_&W@2wnVb68V%>Uo&0yuI!zh)C zC9#u(S3D}Ngv$Ns#q_US*YB_+klgC!?oEs}n;qp@F)d?)4i>lXt`Cel3iFtdxxKgS zlmJ$)iKXCv6 diff --git a/screenshots/code.png b/screenshots/code.png deleted file mode 100644 index 63f64de5dd3acae0a5227f314f2092af51a0eced..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19343 zcmb`vcUY6z);=6$lu<;+Q9(gqY*;`+1*9{Ih)RbXlrl5qD&_feK4-g=9zMZHubLPxB@B99)?+-6Yp0>01+H2kGUiW%JZ)vOZ>=M`o zfk1d}T)(OZfo#)-KsY6S+y=f0y!`W1@E?blp86F?cGKZ;@Zkr$%UYKqki1Clb?fcm z^G^5crd|-po@&-Vj(WF@yAX)R@f%k!8~9mH_i4STzWyR%gYa84{XwDl^u3nJ7Ns

f}WGr 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 literal 0 HcmV?d00001 diff --git a/screenshots/es6.png b/screenshots/es6.png new file mode 100644 index 0000000000000000000000000000000000000000..5a2efef8839577e0b6f4ade21f19b4791e6c62cc GIT binary patch literal 85404 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 literal 0 HcmV?d00001 diff --git a/screenshots/module.png b/screenshots/module.png deleted file mode 100644 index 70127984f81665947be225104c4bde7c437d8d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10037 zcma)ic|cNW+y1e2%JwqLT&8JSMl&nZ%3P*$DQ&Y7R8%rEQ$#Fx5vV5HOld>g)Y7rs z&|CmlFq@(@B~39o3NoaaiiilvBK(fceDC}I-gmxl-ai02o^v?Q^W4{cUH5fAH;x@~ zTR7inJ^%m<4<2wn4gh*$==J2gIna?Yr%gG~hhEfiw|ziKtMOOp%dC*ShxYFPd(tkRa(pR``8@d`_+wWfQx6o!vMhDwRL}Su-Y%4kW>dv zj$cQ6b1q#_p1+Knhd7B^PL2hD)>C2e9^UFP$L$Rs{59maXa;N#0EBFpp`~%fmDmGI zP^-Z5Fv?6IaznGD)Umk`5sIyBTKVnL(+A_tOnLyI=lxx)ViS`dvKKTs`1UDl%$lBJ zx*qTVqoTFccj~nkt^p!dUSj%qJ02VT*)&%p);UvuFQ@IIQrOJR@AmFuZ-?6G!xiGTu*r5ykC>Q zl@_?X*T~G(Gaj){aXpQ+jUKL}glA%CQTh4A>=Vv1at(JIa8c^5g1+)b6*`DchiBA#_s@9QfqpjrUW(?`)=#W|#qyi!xLn5Zz;UEK~-N+NRx&>HeJ z1d5GQjwLVW{AaK%_!dY19zmkUJvBM20N^1Md%4=22QFJ@0;8wCE#NYaQ4e+Gpo8Hr zvw<@^9qM>xzo-AqK1K}&fRe%O*$KmikD!I^8+xwwDr>)~zD}xIC>~t7lnY!e@>Xr! z%ag23ywW!Z@Ov-P7D2zzZ8=qXTF#3L?1a|(Q6A=Tw%+urKWb*6k3ex=a+UR0LHd`G z`w*W@8N84mGAZ~GirzPO$2Jt}0p8cXh5lJ3I8fXO1sO_-G!USp0bt;FG=$;14~@9R zFQLP3UHcy#vBS~8>@Vb&Dapz(eLTxsFhb| zw%v;Q)W!^6a7$K{A_>Z#k^?gk zC8uj;?o=aoqFHc#HXWyyo9pd*bmc=SroZbc4BMPlW+9r&%dy3?&;jGu4yMfy=fm&V zJ_xfo^fd$&(HGOWLC#T=WsNLe4&TAtj(W4z%8tMn7WCTMTv!vlzVKCeb5rR_l&Jl= zn!Z^>&u=knS+7aTVQ(}?sM4Cgn7N&LKl`Q%5zE-Y%3>ONizM~ho^Xod`oL{FvLZNm z*rlL2Dbq~c$w{nys}^K5xesrVQk4PgEZ!{340`LAWq-CDJ@uiM*(5D3v+zW4PdCT= zECemfg>{J$*^YF8UT)#ZF!#z+1z?$CuRZkQI??klqn}OQ{!hPFNMs zQ^S-)v=)!On=n&hh=OpXW4agvdPF5qksaKi9d)@;ClVJq2$3~YzE)~apUGO|3r>|D*KHX`O{P08Qu!x>6tHRegW&74*mgDPQPUXnc z+vAaDGK);X-Lcl+uC{iUjgRWTBd@LL${O2Hb>4NEG38|##f-l|IJStk2*b!(v3j58 zh^C3Qv8vNkPn#ArV{%D}JFY}NLGp-c6u#b-Zzba46FCoKW|h2D7v5xM-GM)$2RQ*4>Hl*CHSe3Zq0 z`_!Em9Gq$#%c-2WgHaRcTCxDu@?mb>}=jJha5O9&JHN7Na_c(1?P~NxbxY4C;ub zG}$KTjE${3>=K1^$|_;xj5McaDVAxr*DRYvJn>tJbFNpxdXZ-~yDGh2fEww^6Wq^= zYY3>f=y=54O*KVzYTA*oj@T4u=@xyl5Ht4GQ5tY?1~bC#uAx5;JfZD(ne_W{tBfpa z2iXm^2cCB9E9gwyUN0VDr;updf`WU3#OHHZ&xjMFg6vG)E#*0jG%Mn6;vU#0vMt;j zS6nY8-a^WgDeGWdqs!%YQ=1ya`iyaMssTQ!v^}1nS*gnjH7g&SO_{ju&dVp;GRkpD zSk~kL5uV(u&}uDu8GpipIu;lTZ}q&L4rAwe#i8-R>PdN)#6~qKhh}P#|LXKg4r)jK znYx9RPRJGKI80*7z)!LpoKCKiLU#MQs!cNDNMNa5!}u+q`liD84n|eh5=~VpYzc)U z9?Vx?8KdjfZkI2PBQInQ`r9z98}xn~3G+6VHUAO)Nr4OhPgOLX>-{ylP`R(@L5NBx zm1j6R3=!{rZboLc6h{f%;lp2DP@~aKtoVR#kJg*kQ^rHd5nq1TNlh|vrkuU$*F zJm2foP7u#N7RG$CO?T&cNu4Zl0KeyQo%fS%RUy?;kzi2+IbGt&#p>Rnxz^XF`X`2* zu33C88qD;u=y83G*|8~P77CrVT51+L)U;>*aHn2?I+aKBX=hPEobLBe*jwioIl(5C z*pYb{U1PYg%~m~Qlo-TBIf<618vZK+SW7Zbh>SH7lz?)0n1nI(%sy9_Wi|Ws0 zwViK^Lb$MWgTnoj31Loq!oGwYX!L~VP>aLkhlV=khQ6gqwbxb7f|%l$QzWz@{b)x? z3^m+^mFZdW8Zo#^30Lk;w7(q4YR-*tb9b zaHTw%9f~W!5y^|acC>cAr<124V3A{IF@#Y{$Xe^vtdx9;TJl3-MUFPzj5ox1leOEI zg+X^YQcKB(bYxMFpgKODL{E3A!UP^sO5w+R2whh-uM(9(KW{5`9--Df`pqkRl~wsRxyaFuz;jyRU`M!g{9Mr*E6 zd%{O-_K*<+%6(8c%mvXHrtgf?r#=R}heXR3{PAYhOJ|N^_5HZfoX^(ETv<+rVV6&L>*A=zY!^}`( z%{sv+9lY%Lk|snH2WF0-6Z_SmyxlKLWJsaCTg+u&Ggm$9tPX$Np~Uf-pftZlbnqJ( zZ?-m@xAeYdk=1tDPELWueh`JuiOy=@8CKL%8lK&*vB?YSa%SQ3Sdy%4Vmm8?-HboE z5?^AOtGdN@%kvSdi}tKvm@?zAdh&dm zeV(IdEoTpdD%)g|Yr_=jvS>KZUA2~0FGG&o>FQ}HR?4S`#We(97>i&?88cnj^H6S2 zCx36WuyD_=A;;>Ncr|a*uayc7YH&LE+6y3=}wWkUeY}?jfX#zDs~NJJOoQ2 zn7+Ge1?j%q|0}C~tCyap=$u*ticF-xGVBZOq@?zZ zsV0tCWx#d2eP0E*h?;!)wnq5ey}Q?WqoO|iaha!g>7p^t%~$_GZs-4x+z1G{YXI%8 z*gE+qh~@a8OUFi|(x7BfX*ib15p0w@x@wJcrB=O;flL%b0#*fo$i~oaW-*SxP|LMH z^)ei!irbMLq^0iQZR4fmQ4^KjyL|=0Jh{&{ zMmqMhq%p0?RHr=iU_kjRmZV) znp1vt82V(?RUVg=npqqDgv?4=kO7R$7{&Rbl{W@5wP0Qh_U#uX>?bcbc%vK;N@tSZU(1rj%-juWKls z1Ms#4*-g`Rfo4&t2}wckTy0%0*cPQmoJsRhq23ojW^Z_EFX(P^Ix}@Jjwmu zl3eUjG|JI5$t5BO0ct{7)}K(8QL@0pS7c*!ay$2GdbZX49U=kKMS5T5ED95AIPBc$ zTZ8ejIyr#_((|A6rW+1g|CC9PgR+PoLR3d1c1L7LqEGc-8HzkDLg}e5N3zeCAY0~nd!1Ene)-+@SP{>0CQI>MuR*q(uIV{V>D z_K@sD%rAb|&uEDL@mS$U30CN{cgvM$hOb}t7gec5Ghb%u-kjT2hk6#iAB>2%T8OGn zd=fF}_IU>3%G?b1%u+?~d;%|m-srpHLw!tzlJx7}+0Pi!SeQBQ`~-|FLLdaea)ngQ=6#PD%`N*j>~l)+c{b z9aqEb@Wb}x^Z1B=fzRk)!e_nH%{_SIOL?ZeVO9&2hHqJ>5{KNiDbnGxxTG)J`IeW0XhqdSBD>3fvYOG)#Vf;dI_Vi7L^};A@6S>= z6*XT71{D^OwH)?X3T)7`*F2Y5{_OBYX7+xwPzVXu7`4z-&v-vUdHZman2lZZ8tJVz zO;UbfE9LpRaK{C?x3_eDrCTBLl*!X|(HPTVUvz{!>zPpFK|>A)JDKY{b**&VENa?4 zzrDSwrgEqRA~G``*P4FSs)%06cnU(QQPTb0)!C0#zGSxsHO}UwhO02 z`s$(*@=9**r9Jnq?0l7KeYfv=qbr3|+E+}Iu=yhR{mV-jS%1(@gR%qmn>bcYf{d(g zzwzmc%5U{w`6>V4qNg6w6sw}nv;^C0al_>=-27JB=vS{g6utL>C$ZNe#I5Hof%sA==_4TEkraSo*P&*-=F%;DLsb>a4W1F42P4XjAMA zzt_GctuNN7mQr_DZduL=b1VLz*ycRk*Haoj@#YiTEhfDZGz=`-!5CwXML9F2QpIN@ zZr-u-D5axz7g_Ew5!)Sf%NPmzMpX_b+`4XxFmTYeNvCBX%fx2f_-(lWClxUaD4lOJ1|CU_t1BS!hwBO} zy;GJa@tk^BmiQK&I<7mOeH<#p6k+Ieaoj_z;`iq3eG5K&-J-e`rQabPy3x8VXbY;j zaO*t|`krm|RBXyfJz-*(1vwF4`4_xloRFk&bbFbGMEjPHS3d3sqbtJD``~ZNNv*lD zcn5hJ(QiXt|LnF1_yy;ePe?rxIKIDfMlti%u6c)WsM-mt&3Iw*qjMDT`Y82b7j(G~ zSzf$FiF`9Mzo&$1(~)bCc#_t1hiP~73XhH4>iQP#Fh`|iJs?tlpTuTmSJ_VW@3;Ml zfe`OrKnN6J$JXzFrVIJ%THuQIJiA^+@bo&P8;OS6s@yNhANJIyJ4pTxve~I#2Y6QBnQHkPQG;+yBP*{l*7b?)4Fn(@FP-++97< zeo#CUxHxqc&ZYdkAs_PiFx?^C;u`3Wpo8(tAt$=n+M#Y9bOHO35!bP5-g(Fr1ZC)` zycmit0BoI0U`;#a={V3BI(6@~v;Gep1MmN7xBvUW3gvv%h3-%6{$myXMlyi_Q`#<& z40j;|^6d7wPNc1o2$)0`fdM&sc_X2ZuXAWa4)|s!lPT5mFXMriU1LqPD>(bWk@WZJ zeWYy`GqCrs6wWG)2-zPwv%&rooXZ{p6h#5ebHY$D#iHY8B$rA|_xUW7jX91sMjz;# zqt}mgswN}Fp;jggLns+7KNydZBjq3jb~08JP&)S3lw&*IXD^TF(rD{Msl9 zTKda7t2wc?%jZSRiv${sPrTj(x`SZNcGH*+Xga%gXp$+Lo}&E=>Mmb>T6`wAd`#U~ znuH2UHsclT;F=ML>*z0SXJRs;kv(Rh7v1`yLGRQeN9o(Z?;?N)zx+4tii0LxhEA(4 zngulA!WW6zc}MebvVKp3T111-v$>GKCTGNVmRS$HJEEn!Pbj=99m8f`G`RY@cH@2G zcM-3eunyIW)E`h~A?sfm`+t9AIA&dgo^ha*(&C|q9`?YMye&1)bvkfdwQjvThthH_ zI26w(@`cyaghH{W-Oe^FKJ3e+>V>l`bVxxw^$VE3E>9l!Waq`<->t=&;rXGPIxipT z*6w>dDao;AY-)KnLeC6Jzas@NXf}-`&OFwdTS@*nKNffp92W0pF-o!!TjK`&=g(eq zj$=Ce^SOMNX--Zx@71pUu{gNjP6dDe1-}VhAD}lClH_P0XhyX#?*%P znun-9U{SmL-mJzjwELE#>wm<|`$d zBH=wXGsMA!hhyMo$10B(FT}<`!vctSQ(*1n8m}UZPeS(E2HdL9U7uCQGe_0sUXPHI zwtS{Op~tkXC%yH=9w$ow#`{1-6L+LB19k4Nwxe@L5SzjiUu zko3t(Do!y*;6x;%!SN&5hG2Zon**>0R}HeI;E znobQ3nSKM)wB9rO|D^Rl(?P}VIz)y8DYh2?8tiLJ&;j$$?t_LD17#rcsSVI=y;1K& zphm!zT>v1pT#T7v3|y?9q(V>eM>?q(1_zqDx^Y}c2cIh8L*WmI-+%*u>(l;g2k_7A z!wL2zZ_YR{H8}|uO~h+dvJ7}ZYueI!fvaXxB9QVhJUZ?tEN4TGoSaDHjY}kwIzrV` zGhoD~Zai%t*e-`LtU1f-wx4x5MZ9~A^mC^ud>WD=knvQ${kN&YuJTJ9UlUYqhZ|&X zB4VF}FmL1^O`TI=rSCrvOL27U!E!v9Vwd=t4bIEB2zz7$GOs+#5&PHKXI%Q9+2^$( z`&OHQb+31zTtB1U~#%$^O?xVje*^%>DA!D=-iLHdU=#i!V>oIJSv?OUZok-M8X%tCGZT8*Mqr?kq}l`L~` zO-u-`E-ts!XE3}_S*w|McIQZ9M+bLdvuOzC;?g>gXO@*Mn4*{Cj%@a+m#=cb%@x9w zVtbuWYhplsiE+2jZ6RkY!!)8g0qFK>Dy3cW&h zf&<-ndT*E7kshwVQr?Evis2kuOd}h#MG6(z&ve9FR{j#9aP`a;(6+f9XD@RIat zyWr6_f=FI3QtIr-Hn7%=nd8>WVi8}(1f9BQ!g0EJbQs;+Rdc*{{Lki5a&{N1lVj-V ze?ts%;CYFjsNrqf6k=m}bgV{wKMNl$QOsv*tQ_~3cTA`Qfml4p8x5f2s z>D6S=Jj5pT$l0Y0+xz;AgVn4g&46)18~e9bXv}daFZC zl8n$ArZnQpevv}>gUHLgw8ler`fXEuUKU8pu-Cc4#Yte&vU#?(y)A68^pbOxhf~aoKe|_F9|?JX|^3HYPqhv>)AVaAw7kw)xU`UP5+|EN#y? zHT=$$rWLOh+gkha>X*UBf5-o3wW}?pch?KP&U|J4!ieD{brY>6xF2^FP*^?pJdiOI z&C4LSYZ__uoB}2VY1dml2krBuDXoXQqc+KgAHH}Vy#Rr%P-w`5)cX<0Xnda3%A}V4 zLgA-L=zz^dz!tHyB#x)1nkeiD@K-vu)OEm+yjztfaf@_Qc&@0Di!i)Vo)JydzCqmv z3K6F3)V5W{;ZyYMTyt7cU$=tJ?bJD8K0LEZ*CsF9l{@HiR;-`#$Y!zp zr({~+HdRHv;yqhZ@LIjuLQKx_TD~^TIwjy-{9YEBvYi%RtQ+xH%=<!fQz->Dyp(gZxPU7G6E4syB#m~Ok@Q_Pd#tem;AvfUzYLy;EqOu!OXw& zG5*|qaki`96P4la$(Lp|F0~W2F=9c)ye+DZ4HRI(VT zSU|3`xh)zX4Z-hi-5nIk`r(!3B{Fzt#LCP^95T;q-pO9z`wB>*m(G@Xt_?seRoQx| zx?^j_uL~5b+KlnVW74kAoz!46TOQNtSF-%>V2@X{ItR4U*i+Q5sXcE0CUTKqgI)@l z3jr-(dAj_)boS7081`T^c%OSU3q;oFDg)$@T#ib$`&}Pp znW$T=$=Cb2vjp=Pd1>LoQ?ut`F0W}gG~MU@VFe^7`bHuc(?V)Z33}1r?D2S?q{&B~ zuIO9@yu(cD5Xzi1@$&pT(>#PHnGzXVA*0Sc$_3tRH$LBYSu2B1B6fx;c8s{a zb%qFKSL+~p=Edf_W23T`snpT7DUw#k(+zw1TGTYp5x;GLtS4qDB_rHKNVapb8MfE^ zzV;cd1!3_u7tYxS18aU~m-}DRM~Fe^B7YL>^YIsiq#S1s0>?cJqt@)BPVXA%8dB=@ zU2t5N^b5OC_0Eg7iCp*13!sI?!G}xk%T3}G?Ox@5(v*C5_VQp+%~fZ0wk>d?&$y0Lz9yPSzybK>OTG{R01@ Date: Sat, 4 Jan 2014 09:07:17 +1100 Subject: [PATCH 029/202] tidied up some rules --- JavaScriptImproved.YAML-tmLanguage | 6 +++++- JavaScriptImproved.tmLanguage | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage index 307d074..96fffdd 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -40,7 +40,11 @@ repository: brackets: patterns: - name: meta.function-call.method.with-arguments.js - match: (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*)? (?=\() + match: >- + (?x) + (?<=\.) + ([_$a-zA-Z][_$\w]*)? + (?=\() captures: '1': {name: entity.name.function.js} diff --git a/JavaScriptImproved.tmLanguage b/JavaScriptImproved.tmLanguage index a618e16..5b75910 100644 --- a/JavaScriptImproved.tmLanguage +++ b/JavaScriptImproved.tmLanguage @@ -112,7 +112,10 @@ match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*)? (?=\() + (?x) + (?<=\.) + ([_$a-zA-Z][_$\w]*)? + (?=\() name meta.function-call.method.with-arguments.js From da320563748451e92928472b6e152d5154c6ac08 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 16:40:27 +1100 Subject: [PATCH 030/202] tidied up some syntax --- JavaScriptImproved.YAML-tmLanguage | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage index 96fffdd..866088f 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -50,9 +50,9 @@ repository: - name: meta.group.braces.round begin: (\()(?!\)) - end: (\)) beginCaptures: '1': {name: meta.brace.round.js} + end: (\)) endCaptures: '1': {name: meta.brace.round.js} patterns: @@ -60,9 +60,9 @@ repository: - name: meta.group.braces.square begin: (\[)(?!\]) - end: (\]) beginCaptures: '1': {name: meta.brace.round.js} + end: (\]) endCaptures: '1': {name: meta.brace.round.js} patterns: From e30210a26c4a70cec69cb5d6f6ad3c9dddb18848 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 16:50:48 +1100 Subject: [PATCH 031/202] fixed some scope name errors --- JavaScriptImproved.YAML-tmLanguage | 3 +- JavaScriptImproved.tmLanguage | 286 ++++++++++++++--------------- 2 files changed, 142 insertions(+), 147 deletions(-) diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage index 866088f..4c3b03c 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -11,7 +11,6 @@ patterns: - include: '#support' - include: '#core' - include: '#special' -- include: '#sugar' repository: arrow-function: @@ -656,7 +655,7 @@ repository: - name: invalid.deprecated.inconsistent.js match: (?i) - sugar: + leading-space: patterns: - name: meta.leading-tabs begin: ^(?=(\t| )) diff --git a/JavaScriptImproved.tmLanguage b/JavaScriptImproved.tmLanguage index 5b75910..e6c9ad0 100644 --- a/JavaScriptImproved.tmLanguage +++ b/JavaScriptImproved.tmLanguage @@ -32,10 +32,6 @@ include #special - - include - #sugar - repository @@ -328,6 +324,147 @@ + leading-space + + patterns + + + begin + ^(?=(\t| )) + end + (?=[^\t\s]) + name + meta.leading-tabs + patterns + + + captures + + 1 + + name + meta.odd-tab.group1.spaces + + 10 + + name + meta.even-tab.group10.spaces + + 11 + + name + meta.odd-tab.group11.spaces + + 2 + + name + meta.even-tab.group2.spaces + + 3 + + name + meta.odd-tab.group3.spaces + + 4 + + name + meta.even-tab.group4.spaces + + 5 + + name + meta.odd-tab.group5.spaces + + 6 + + name + meta.even-tab.group6.spaces + + 7 + + name + meta.odd-tab.group7.spaces + + 8 + + name + meta.even-tab.group8.spaces + + 9 + + name + meta.odd-tab.group9.spaces + + + match + ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? + + + captures + + 1 + + name + meta.odd-tab.group1.tab + + 10 + + name + meta.even-tab.group10.tab + + 11 + + name + meta.odd-tab.group11.tab + + 2 + + name + meta.even-tab.group2.tab + + 3 + + name + meta.odd-tab.group3.tab + + 4 + + name + meta.even-tab.group4.tab + + 5 + + name + meta.odd-tab.group5.tab + + 6 + + name + meta.even-tab.group6.tab + + 7 + + name + meta.odd-tab.group7.tab + + 8 + + name + meta.even-tab.group8.tab + + 9 + + name + meta.odd-tab.group9.tab + + + match + (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? + + + + + literal-class patterns @@ -1660,147 +1797,6 @@ - sugar - - patterns - - - begin - ^(?=(\t| )) - end - (?=[^\t\s]) - name - meta.leading-tabs - patterns - - - captures - - 1 - - name - meta.odd-tab.group1.spaces - - 10 - - name - meta.even-tab.group10.spaces - - 11 - - name - meta.odd-tab.group11.spaces - - 2 - - name - meta.even-tab.group2.spaces - - 3 - - name - meta.odd-tab.group3.spaces - - 4 - - name - meta.even-tab.group4.spaces - - 5 - - name - meta.odd-tab.group5.spaces - - 6 - - name - meta.even-tab.group6.spaces - - 7 - - name - meta.odd-tab.group7.spaces - - 8 - - name - meta.even-tab.group8.spaces - - 9 - - name - meta.odd-tab.group9.spaces - - - match - ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? - - - captures - - 1 - - name - meta.odd-tab.group1.tab - - 10 - - name - meta.even-tab.group10.tab - - 11 - - name - meta.odd-tab.group11.tab - - 2 - - name - meta.even-tab.group2.tab - - 3 - - name - meta.odd-tab.group3.tab - - 4 - - name - meta.even-tab.group4.tab - - 5 - - name - meta.odd-tab.group5.tab - - 6 - - name - meta.even-tab.group6.tab - - 7 - - name - meta.odd-tab.group7.tab - - 8 - - name - meta.even-tab.group8.tab - - 9 - - name - meta.odd-tab.group9.tab - - - match - (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? - - - - - support patterns From e7695a2432348007bc5b7798028d3ed6f0e85b76 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 16:52:05 +1100 Subject: [PATCH 032/202] fixed some bugs in meta.instance.constructor --- JavaScriptImproved.YAML-tmLanguage | 6 +++--- JavaScriptImproved.tmLanguage | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage index 4c3b03c..1af010c 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -296,14 +296,14 @@ repository: literal-keywords: patterns: - name: meta.instance.constructor - begin: (new)\s+*(?=[a-zA-Z_?.$][\w?.$]*) + begin: (new)\s+(?=[_$a-zA-Z][_$\w.]*) beginCaptures: '1': {name: keyword.operator.new.js} - end: (?![a-zA-Z_?.$][\w?.$]*) + end: (?![_$a-zA-Z][_$\w.]*) patterns: - include: '#support' - name: entity.name.type.new.js - match: ([a-zA-Z_?.$][\w?.$]*) + match: ([_$a-zA-Z][_$\w.]*) - name: storage.type.js match: \b(var|let|const)\b diff --git a/JavaScriptImproved.tmLanguage b/JavaScriptImproved.tmLanguage index e6c9ad0..55f11a1 100644 --- a/JavaScriptImproved.tmLanguage +++ b/JavaScriptImproved.tmLanguage @@ -861,7 +861,7 @@ begin - (new)\s+*(?=[a-zA-Z_?.$][\w?.$]*) + (new)\s+(?=[_$a-zA-Z][_$\w.]*) beginCaptures 1 @@ -871,7 +871,7 @@ end - (?![a-zA-Z_?.$][\w?.$]*) + (?![_$a-zA-Z][_$\w.]*) name meta.instance.constructor patterns @@ -882,7 +882,7 @@ match - ([a-zA-Z_?.$][\w?.$]*) + ([_$a-zA-Z][_$\w.]*) name entity.name.type.new.js From 4a08d3f9103943a9140c59cca5e5f7da0df3caf3 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 16:53:33 +1100 Subject: [PATCH 033/202] fixed scope name bugs in meta.group.braces.square --- JavaScriptImproved.YAML-tmLanguage | 4 ++-- JavaScriptImproved.tmLanguage | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage index 1af010c..ce11add 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -60,10 +60,10 @@ repository: - name: meta.group.braces.square begin: (\[)(?!\]) beginCaptures: - '1': {name: meta.brace.round.js} + '1': {name: meta.brace.square.js} end: (\]) endCaptures: - '1': {name: meta.brace.round.js} + '1': {name: meta.brace.square.js} patterns: - include: $base diff --git a/JavaScriptImproved.tmLanguage b/JavaScriptImproved.tmLanguage index 55f11a1..4cfdcff 100644 --- a/JavaScriptImproved.tmLanguage +++ b/JavaScriptImproved.tmLanguage @@ -154,7 +154,7 @@ 1 name - meta.brace.round.js + meta.brace.square.js end @@ -164,7 +164,7 @@ 1 name - meta.brace.round.js + meta.brace.square.js name From ec205cda7d4ea900c5a53fb42add9d326166fc16 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 17:03:06 +1100 Subject: [PATCH 034/202] fixed bugs in meta.group.braces.round and meta.group.braces.square, c.f. https://github.com/Benvie/JavaScriptNext.tmLanguage/issues/6 --- JavaScriptImproved.YAML-tmLanguage | 4 ++-- JavaScriptImproved.tmLanguage | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/JavaScriptImproved.YAML-tmLanguage b/JavaScriptImproved.YAML-tmLanguage index ce11add..ce677db 100644 --- a/JavaScriptImproved.YAML-tmLanguage +++ b/JavaScriptImproved.YAML-tmLanguage @@ -48,7 +48,7 @@ repository: '1': {name: entity.name.function.js} - name: meta.group.braces.round - begin: (\()(?!\)) + begin: (\() beginCaptures: '1': {name: meta.brace.round.js} end: (\)) @@ -58,7 +58,7 @@ repository: - include: $base - name: meta.group.braces.square - begin: (\[)(?!\]) + begin: (\[) beginCaptures: '1': {name: meta.brace.square.js} end: (\]) diff --git a/JavaScriptImproved.tmLanguage b/JavaScriptImproved.tmLanguage index 4cfdcff..e4e9f9d 100644 --- a/JavaScriptImproved.tmLanguage +++ b/JavaScriptImproved.tmLanguage @@ -117,7 +117,7 @@ begin - (\()(?!\)) + (\() beginCaptures 1 @@ -148,7 +148,7 @@ begin - (\[)(?!\]) + (\[) beginCaptures 1 From dead6be221f7584dae96ae996ab51c61209a750b Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 17:22:16 +1100 Subject: [PATCH 035/202] fixed up some names in the readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f4c0ad0..33bdd35 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ Better JavaScript language definition for TextMate and SublimeText. This builds ## Installation and Use -If you haven't already, [install Package Control](https://sublime.wbond.net/installation), then select `JavaScript Improved` from the `Package Control: Install Package` dropdown list in the Command Palette. +If you haven't already, [install Package Control](https://sublime.wbond.net/installation), then select `JavaScript Next` from the `Package Control: Install Package` dropdown list in the Command Palette. -To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptImproved`. +To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptNext`. # JavaScript.tmLanguage From 206a2721711b7a8b38c805b2644921b0f4363e33 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 4 Jan 2014 17:30:12 +1100 Subject: [PATCH 036/202] better readme titles --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 33bdd35..e7ac0a7 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ If you haven't already, [install Package Control](https://sublime.wbond.net/inst To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptNext`. -# JavaScript.tmLanguage +## Screenshots __ES6__ From de84587d045b344492f5c72a51b6fc99ba8adf03 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 5 Jan 2014 07:53:08 +1100 Subject: [PATCH 037/202] some bug fixes; added class field definition matching --- JavaScriptNext.YAML-tmLanguage | 17 ++++++++++----- JavaScriptNext.tmLanguage | 38 +++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c761ed3..0376e1a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -134,16 +134,26 @@ repository: patterns: # e.g. class MyClass { } - name: meta.class.js - match: \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* + match: \b(class)\b(?:\s+([_$a-zA-Z][_$\w]*)\s*(?:\b(extends)\b\s*([_$a-zA-Z][_$\w]*))?)?\s* captures: '1': {name: storage.type.class.js} '2': {name: entity.name.class.js} '3': {name: storage.type.extends.js} '4': {name: entity.name.extends.js} + # definitions here don't include field modifications (e.g. this.a = 'b'), as modifications can occur outside the class + - match: \b(?:(public|private|static)\s+)(?:(var|let|const)\s+)?([_$a-zA-Z][_$\w]*\s*)(?=\=) + captures: + '1': {name: storage.modifier.js} + '2': {name: storage.type.js} + '3': {name: entity.name.field.js} + + - name: storage.modifier.js + match: \b(public|private|static)\b + # getter/setter - name: meta.accessor.js - match: \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) + match: \b([gs]et\s*)\b([_$a-zA-Z][_$\w]*)\s*(\()(.*?)(\)) captures: '1': {name: storage.type.accessor.js} '2': {name: entity.name.accessor.js} @@ -308,9 +318,6 @@ repository: - name: storage.type.js match: \b(var|let|const)\b - - name: storage.modifier.js - match: \b(public|private|static)\b - - name: keyword.control.flow.js match: \b(return|yield)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 10cbc25..7aab47f 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -494,10 +494,38 @@ match - \b(class)\b(?:\s+([a-zA-Z_$]\w*)\s*(?:\b(extends)\b\s*([a-zA-Z_$][.\w]*))?)?\s* + \b(class)\b(?:\s+([_$a-zA-Z][_$\w]*)\s*(?:\b(extends)\b\s*([_$a-zA-Z][_$\w]*))?)?\s* name meta.class.js + + captures + + 1 + + name + storage.modifier.js + + 2 + + name + storage.type.js + + 3 + + name + entity.name.field.js + + + match + \b(?:(public|private|static)\s+)(?:(var|let|const)\s+)?([_$a-zA-Z][_$\w]*\s*)(?=\=) + + + match + \b(public|private|static)\b + name + storage.modifier.js + captures @@ -528,7 +556,7 @@ match - \b([gs]et\s*)\b([a-zA-Z_$][\w?_$]*)\s*(\()(.*?)(\)) + \b([gs]et\s*)\b([_$a-zA-Z][_$\w]*)\s*(\()(.*?)(\)) name meta.accessor.js @@ -894,12 +922,6 @@ name storage.type.js - - match - \b(public|private|static)\b - name - storage.modifier.js - match \b(return|yield)\b From da94c39053097bc709afedeb718aa3f4ec592f76 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 5 Jan 2014 08:30:31 +1100 Subject: [PATCH 038/202] differentiate between private definitions and private functions --- JavaScriptNext.YAML-tmLanguage | 4 ++++ JavaScriptNext.tmLanguage | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 0376e1a..114c59c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -148,6 +148,10 @@ repository: '2': {name: storage.type.js} '3': {name: entity.name.field.js} + - match: \b(private)(?=\s*\() + captures: + '1': {name: support.function.private.js} + - name: storage.modifier.js match: \b(public|private|static)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 7aab47f..ef1a990 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -520,6 +520,18 @@ match \b(?:(public|private|static)\s+)(?:(var|let|const)\s+)?([_$a-zA-Z][_$\w]*\s*)(?=\=) + + captures + + 1 + + name + support.function.private.js + + + match + \b(private)(?=\s*\() + match \b(public|private|static)\b From 1e655097a7fc0120126dc9e032cbe8f0fc74fe73 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 5 Jan 2014 08:56:52 +1100 Subject: [PATCH 039/202] fixed bugs in 'string-content' --- JavaScriptNext.YAML-tmLanguage | 25 ++++--------------- JavaScriptNext.tmLanguage | 44 ++++------------------------------ 2 files changed, 8 insertions(+), 61 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 114c59c..ea489ce 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -558,7 +558,7 @@ repository: endCaptures: '0': {name: punctuation.definition.string.end.js} patterns: - - include: '#string-single-innards' + - include: '#string-content' - name: string.quoted.double.js begin: '"' @@ -568,7 +568,7 @@ repository: endCaptures: '0': {name: punctuation.definition.string.end.js} patterns: - - include: '#string-double-innards' + - include: '#string-content' literal-variable: patterns: @@ -638,10 +638,10 @@ repository: captures: '1': {name: punctuation.definition.variable.js} - string-double-innards: + string-content: patterns: - name: constant.character.escape.js - match: \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.) + match: \\(x[\da-fA-F]{2}|\u[\da-fA-F]{4}) - name: constant.character.escape.newline.js match: \\\n @@ -649,23 +649,6 @@ repository: - name: invalid.illegal.newline.js match: \n - - name: invalid.deprecated.inconsistent.js - match: (?i) - - string-single-innards: - patterns: - - name: constant.character.escape.js - match: \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) - - - name: constant.character.escape.newline.js - match: \\\n - - - name: invalid.illegal.newline.js - match: \n - - - name: invalid.deprecated.inconsistent.js - match: (?i) - leading-space: patterns: - name: meta.leading-tabs diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index ef1a990..b1e9c9e 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1545,7 +1545,7 @@ include - #string-single-innards + #string-content @@ -1576,7 +1576,7 @@ include - #string-double-innards + #string-content @@ -1771,13 +1771,13 @@ - string-double-innards + string-content patterns match - \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.) + \\(x[\da-fA-F]{2}|\u[\da-fA-F]{4}) name constant.character.escape.js @@ -1793,42 +1793,6 @@ name invalid.illegal.newline.js - - match - (?i)</\s*script\s*> - name - invalid.deprecated.inconsistent.js - - - - string-single-innards - - patterns - - - match - \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) - name - constant.character.escape.js - - - match - \\\n - name - constant.character.escape.newline.js - - - match - \n - name - invalid.illegal.newline.js - - - match - (?i)</\s*script\s*> - name - invalid.deprecated.inconsistent.js - support From 9f2d507efea3e076330685ba25dcb0d8a14ee192 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 5 Jan 2014 09:01:04 +1100 Subject: [PATCH 040/202] fixed bugs in string.regexp.js --- JavaScriptNext.YAML-tmLanguage | 11 +---------- JavaScriptNext.tmLanguage | 11 +---------- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index ea489ce..b4868b5 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -527,16 +527,7 @@ repository: literal-regex: patterns: - contentName: string.regexp.js - begin: > - (?x) - (?<= - [\[,=(:]| - ^| - &&| - return - )\s* - (/) - (?![/*+{}?]|$) + begin: ((/)) beginCaptures: '1': {name: string.regexp.js} '2': {name: punctuation.definition.string.begin.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index b1e9c9e..4b873fa 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1459,16 +1459,7 @@ begin - (?x) - (?<= - [\[,=(:]| - ^| - &&| - return - )\s* - (/) - (?![/*+{}?]|$) - + ((/)) beginCaptures 1 From 636757bfa700727f9ce845b92cd01987fefaa589 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 5 Jan 2014 09:16:09 +1100 Subject: [PATCH 041/202] fixed string & regex highlighting bugs --- JavaScriptNext.YAML-tmLanguage | 16 ++++++++++++---- JavaScriptNext.tmLanguage | 15 +++++++++++---- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index b4868b5..d09e764 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -527,11 +527,19 @@ repository: literal-regex: patterns: - contentName: string.regexp.js - begin: ((/)) + begin: >- + (?x) + (?<= + [\[,=(:?]| + ^|&&| + return + )\s* + (/) + (?![/*+{}?]|$) beginCaptures: '1': {name: string.regexp.js} '2': {name: punctuation.definition.string.begin.js} - end: ((/([igm]*)))|(?=\s*\n)|(?<=[^\\]\n) + end: ((/)([gimy]*)) endCaptures: '1': {name: string.regexp.js} '2': {name: punctuation.definition.string.end.js} @@ -545,7 +553,7 @@ repository: begin: "'" beginCaptures: '0': {name: punctuation.definition.string.begin.js} - end: (?i)'|(?=\s*\n)|(?<=[^\\]\n) + end: "'" endCaptures: '0': {name: punctuation.definition.string.end.js} patterns: @@ -555,7 +563,7 @@ repository: begin: '"' beginCaptures: '0': {name: punctuation.definition.string.begin.js} - end: (?i)"|(?=\s*\n)|(?<=[^\\]\n) + end: '"' endCaptures: '0': {name: punctuation.definition.string.end.js} patterns: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 4b873fa..693e23a 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1459,7 +1459,14 @@ begin - ((/)) + (?x) + (?<= + [\[,=(:?]| + ^|&&| + return + )\s* + (/) + (?![/*+{}?]|$) beginCaptures 1 @@ -1476,7 +1483,7 @@ contentName string.regexp.js end - ((/([igm]*)))|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + ((/)([gimy]*)) endCaptures 1 @@ -1521,7 +1528,7 @@ end - (?i)'|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + ' endCaptures 0 @@ -1552,7 +1559,7 @@ end - (?i)"|(?=</\s*script\s*>\s*\n)|(?<=[^\\]\n) + " endCaptures 0 From dfcf3915d11fca5d4191a071b191aa7009f6b0c5 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 5 Jan 2014 09:27:17 +1100 Subject: [PATCH 042/202] fixed function & class name regexes --- JavaScriptNext.YAML-tmLanguage | 12 ++++++------ JavaScriptNext.tmLanguage | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index d09e764..ac775b4 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -188,14 +188,14 @@ repository: # e.g. Sound.prototype = { } when extending an object - name: meta.prototype.declaration.js - match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* + match: ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* captures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} # e.g. Sound.prototype.play = function() { } - name: meta.prototype.function.js - match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) + match: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) captures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} @@ -207,14 +207,14 @@ repository: # e.g. Sound.prototype - name: meta.prototype.js - match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype) + match: ([_$a-zA-Z][_$\w]*)\.(prototype) captures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} # e.g. Sound.prototype.play = myfunc - name: meta.function.js - match: ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* + match: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s* captures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} @@ -222,7 +222,7 @@ repository: # e.g. .play = function() { } - name: meta.function.js - match: \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function\*?)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) + match: \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s*(\()(.*?)(\)) captures: '1': {name: entity.name.function.js} '2': {name: storage.type.function.js} @@ -233,7 +233,7 @@ repository: # e.g. foobar: function() { } - name: meta.function.json.js - match: \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) + match: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) captures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 693e23a..b733eb8 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -650,7 +650,7 @@ match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* + ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* name meta.prototype.declaration.js @@ -694,7 +694,7 @@ match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) + ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) name meta.prototype.function.js @@ -713,7 +713,7 @@ match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype) + ([_$a-zA-Z][_$\w]*)\.(prototype) name meta.prototype.js @@ -737,7 +737,7 @@ match - ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* + ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s* name meta.function.js @@ -776,7 +776,7 @@ match - \.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function\*?)( [a-zA-Z_?.$][\w?.$]*)?\s*(\()(.*?)(\)) + \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s*(\()(.*?)(\)) name meta.function.js @@ -815,7 +815,7 @@ match - \b([a-zA-Z_?.$][\w?.$]*)\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) + \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) name meta.function.json.js From d97c18c4366569a469f96f7f363b99dc0eddf8e6 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 5 Jan 2014 11:32:39 +1100 Subject: [PATCH 043/202] fixed string escaping issue, c.f. https://github.com/Benvie/JavaScriptNext.tmLanguage/issues/20 --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index ac775b4..cf4684f 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -640,7 +640,7 @@ repository: string-content: patterns: - name: constant.character.escape.js - match: \\(x[\da-fA-F]{2}|\u[\da-fA-F]{4}) + match: \\(x[\da-fA-F]{2}|\u[\da-fA-F]{4}|.) - name: constant.character.escape.newline.js match: \\\n diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index b733eb8..1178db7 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1775,7 +1775,7 @@ match - \\(x[\da-fA-F]{2}|\u[\da-fA-F]{4}) + \\(x[\da-fA-F]{2}|\u[\da-fA-F]{4}|.) name constant.character.escape.js From 94ccc3b3e2ee5eab4705024847a090bc7a0b527d Mon Sep 17 00:00:00 2001 From: Brandon Benvie Date: Sat, 4 Jan 2014 17:04:52 -0800 Subject: [PATCH 044/202] Convert the tmTheme file to YAML. Add .gitignore. --- .gitignore | 1 + JavaScriptNext.YAML-tmTheme | 848 ++++++++ JavaScriptNext.tmTheme | 3743 +++++++++++++++++------------------ 3 files changed, 2699 insertions(+), 1893 deletions(-) create mode 100644 .gitignore create mode 100644 JavaScriptNext.YAML-tmTheme diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..affff01 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/*.cache diff --git a/JavaScriptNext.YAML-tmTheme b/JavaScriptNext.YAML-tmTheme new file mode 100644 index 0000000..4164c46 --- /dev/null +++ b/JavaScriptNext.YAML-tmTheme @@ -0,0 +1,848 @@ +# [PackageDev] target_format: plist, ext: tmTheme +name: JavaScriptNext +uuid: b238c753-1549-3f12-a519-0faa5dcd4f65 + +settings: +- settings: + activeGuide: '#3333FFFF' + background: '#000000' + bracketsBackground: '#ff00aa66' + bracketsOptions: background + caret: '#ff0099' + foreground: '#e6e6e6' + guide: '#33333388' + gutter: '#6600ff33' + invisibles: '#404040' + lineHighlight: '#ff009933' + multiEditHighlight: '#00ff0022' + searchHighlight: '#FF00AA99' + selection: '#00ffff44' + stackGuide: '#333333CC' + +- name: bracket.curly + scope: bracket.curly + settings: + background: '#FF44AA' + foreground: '#3399FF' + +- name: bracket.square + scope: bracket.square + settings: + background: '#2266CC' + foreground: '#FF8800' + +- name: bracket.round + scope: bracket.round + settings: + background: '#9922FF' + foreground: '#00FF00' + +- name: bracket.quote + scope: bracket.quote + settings: + background: '#00FF00' + +- name: comment + scope: comment + settings: + fontStyle: italic + foreground: '#646464ff' + +- name: Invalid + scope: invalid + settings: + background: '#ff000022' + +- name: constant + scope: constant + settings: + foreground: '#3387ccff' + +- name: Keyword + scope: keyword + settings: + foreground: '#e28964' + +- name: constant.numeric + scope: constant.numeric + settings: + foreground: '#ffff66' + +- name: Storage + scope: storage + settings: + foreground: '#99cf50' + +- name: storage.modifier + scope: storage.modifier + settings: + foreground: '#cf5099' + +- name: storage.self + scope: storage.self + settings: + fontStyle: bold + foreground: '#cc0033' + +- name: storage.type + scope: storage.type + settings: + foreground: '#cf9950' + +- name: Support + scope: support + settings: + foreground: '#8a5c8dff' + +- name: entity.name.function + scope: entity.name.function + settings: + foreground: '#bb00ff' + +- name: keyword control + scope: keyword.control + settings: + foreground: '#ff00ff' + +- name: keyword.control.declaration + scope: keyword.control.declaration + settings: + foreground: '#8888aa' + +- name: keyword.control.module + scope: keyword.control.module + settings: + background: '#ffff3333' + foreground: '#ffff33' + options: underline + +- name: keyword.control.flow + scope: keyword.control.flow + settings: + background: '#110300' + fontStyle: bold + foreground: '#ff6600' + +- name: keyword.control.conditional + scope: keyword.control.conditional + settings: + foreground: '#ff00ff' + +- name: keyword.control.trycatch + scope: keyword.control.trycatch + settings: + foreground: '#ff0033' + +- name: keyword.control.loop + scope: keyword.control.loop + settings: + foreground: '#009999' + +- name: keyword.control.switch + scope: keyword.control.switch + settings: + foreground: '#999999' + +- name: keyword operator + scope: keyword.operator + settings: + foreground: '#ff0080' + +- name: Function arg + scope: meta.function.argument, variable.parameter, meta.parens.c + settings: + foreground: '#77ff11' + +- name: '' + scope: punctuation.section.embedded + settings: + background: '#0D0D0D37' + foreground: '#00d3ffff' + +- name: keyword.other.unit + scope: keyword.other.unit, keyword.unit.css + settings: + foreground: '#80ff00ff' + +- name: invalid.illegal + scope: invalid.illegal + settings: + background: '#562d56bf' + foreground: '#fd5ff1ff' + +- name: string.quoted source + scope: string.quoted source + settings: + foreground: '#daefa3' + +- name: string constant + scope: string constant + settings: + foreground: '#cfed81' + +- name: string.regexp + scope: string.regexp + settings: + foreground: '#6fff17' + +- name: punctuation.definition.string + scope: punctuation.definition.string + settings: + background: '#15151501' + foreground: '#b4ff82' + +- name: string.regexp.special + scope: "string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition" + settings: + foreground: '#00d505' + +- name: string.regexp punctuation keyword + scope: string.regexp punctuation keyword + settings: + foreground: '#c559ff' + +- name: string variable + scope: string variable + settings: + foreground: '#8a9a95' + +- name: support.function + scope: support.function + settings: + foreground: '#fcf352ff' + +- name: meta.tag + scope: meta.tag + settings: + foreground: '#4f9effff' + +- name: meta.tag entity + scope: meta.tag entity + settings: + foreground: '#157eff' + +- name: HTML/XML tag attribute value + scope: meta.tag string.quoted.double.html + settings: + foreground: '#E07D2C' + +- name: html5 tag + scope: meta.tag.block.any.html.html5 + settings: + foreground: '#e88bfcff' + +- name: html5 tag entity + scope: meta.tag.block.any.html.html5 entity + settings: + foreground: '#d730faff' + +- name: meta.tag.inline + scope: "source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity" + settings: + foreground: '#87a7e2ff' + +- name: html js tag + scope: source.js.embedded.html entity.name.tag.script.html + settings: + foreground: '#FF3535' + +- name: html js tag braces + scope: source.js.embedded.html punctuation.definition.tag.html + settings: + foreground: '#FF1E1E' + +- name: html js tag url + scope: source.js.embedded.html string.quoted.double.html + settings: + foreground: '#FF9D9D' + +- name: Attribute + scope: entity.other.attribute-name + settings: + foreground: '#7349beff' + +- name: Meta Toc List + scope: meta.toc-list + settings: + background: '#162c1aff' + foreground: '#BEFEC7FF' + options: underline + +- name: js variable readwrite + scope: meta.initialization, variable.other.readwrite.js + settings: + foreground: '#ff9122' + +- name: js object + scope: variable.other.object.js + settings: + foreground: '#ffee00' + +- name: js object with parent + scope: meta.property-name.js variable.other.object.js + settings: + foreground: '#ffff88' + +- name: support.variable.property.js + scope: support.variable.property.js + settings: + foreground: '#3399ff' + +- name: variable.other.dot-access + scope: variable.other.dot-access + settings: + foreground: '#66ffdd' + +- name: variable.other.property.js + scope: variable.other.property.js + settings: + foreground: '#37C1BE' + +- name: punctuation.section.scope.square.js + scope: punctuation.section.scope.square.js + settings: + foreground: '#ff2404' + +- name: punctuation.section.scope.round.js, meta.brace.round + scope: punctuation.section.scope.round.js, meta.brace.round + settings: + foreground: '#1c38ff' + +- name: punctuation.definition.arrow.js + scope: punctuation.definition.arrow.js + settings: + background: '#001133' + fontStyle: bold + foreground: '#aa00ff' + +- name: entity.arrow.function.js + scope: entity.arrow.function.js + settings: + background: '#001133' + fontStyle: bold + foreground: '#aa00ff' + +- name: variable.language + scope: variable.language + settings: + foreground: '#aa0044' + +- name: variable.language.prototype + scope: variable.language.prototype + settings: + foreground: '#ff6600' + +- name: support.class.error.js + scope: support.class.error.js + settings: + foreground: '#ff5522' + +- name: support.class.builtin.js + scope: support.class.builtin.js + settings: + fontStyle: italic + foreground: '#ffee00' + +- name: support.class.node.js + scope: support.class.node.js + settings: + foreground: '#1224fe' + +- name: entity.name.function.node.js + scope: entity.name.function.node.js + settings: + foreground: '#d84014' + +- name: support.keyword.node.js + scope: support.keyword.node.js + settings: + fontStyle: bold + foreground: '#99ef25' + +- name: variable.import.destructuring.js + scope: variable.import.destructuring.js + settings: + foreground: '#00bbff' + +- name: other.object.key.js + scope: other.object.key.js + settings: + foreground: '#1C98C1' + +- name: meta.accessor.js punctuation.definition.parameters + scope: meta.accessor.js punctuation.definition.parameters + settings: + foreground: '#005588' + +- name: storage.type.accessor.js + scope: storage.type.accessor.js + settings: + background: '#001122' + fontStyle: bold italic + foreground: '#0066aa' + +- name: entity.name.module.js, variable.import.parameter.js, variable.other.class.js + scope: entity.name.module.js, variable.import.parameter.js, variable.other.class.js + settings: + background: '#220011' + foreground: '#ff0044' + +- name: storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + scope: storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + settings: + background: '#222211' + foreground: '#cccc44' + +- name: storage.type.class.js, storage.type.extends.js + scope: storage.type.class.js, storage.type.extends.js + settings: + background: '#001122' + foreground: '#0044aa' + +- name: 'meta.function.call.class.static.js ' + scope: 'meta.function.call.class.static.js ' + settings: + foreground: '#880011' + +- name: variable.other.class.static.js + scope: variable.other.class.static.js + settings: + foreground: '#aa0066' + +- name: entity.name.accessor.js + scope: entity.name.accessor.js + settings: + background: '#001122' + fontStyle: bold italic + foreground: '#00ffcc' + +- name: entity.name.method.js + scope: entity.name.method.js + settings: + background: '#110022' + fontStyle: italic bold + foreground: '#aa00ff' + +- name: meta.method.js + scope: meta.method.js + settings: + fontStyle: bold + foreground: '#660099' + +- name: storage.type.function.js + scope: storage.type.function.js + settings: + fontStyle: bold + foreground: '#99cc44' + +- name: string.quoted.single + scope: string.quoted.single + settings: + foreground: '#88FFAAAA' + +- name: variable.other.quasi.js + scope: variable.other.quasi.js + settings: + foreground: '#ff0099' + +- name: string.quasi.js + scope: string.quasi.js + settings: + foreground: '#00FF00' + +- name: punctuation.quasi.element + scope: punctuation.quasi.element + settings: + foreground: '#008800' + +- name: entity.quasi.tag.name.js + scope: entity.quasi.tag.name.js + settings: + foreground: '#ffff00' + +- name: meta.group.braces.square, punctuation.destructuring + scope: meta.group.braces.square string.quoted.single, punctuation.destructuring + settings: + foreground: '#47E9AC' + +- name: string.quoted.double + scope: string.quoted.double + settings: + foreground: '#11bb11' + +- name: punctuation.section.scope.curly.js + scope: punctuation.section.scope.curly.js + settings: + foreground: '#F9044E' + +- name: meta.delimiter.object.comma.js + scope: meta.delimiter.object.comma.js + settings: + foreground: '#00ffff' + +- name: meta.group.braces.curly string.quoted.single + scope: meta.group.braces.curly string.quoted.single + settings: + foreground: '#16B853' + +- name: support.function + scope: support.function + settings: + foreground: '#B532ff' + +- name: punctuation.definition.string.begin.js + scope: punctuation.definition.string.begin.js + settings: + foreground: '#D2E20C' + +- name: punctuation.definition.string.end.js + scope: punctuation.definition.string.end.js + settings: + foreground: '#CEA30D' + +- name: instance constructor + scope: meta.class.inheritance, meta.instance.constructor + settings: + fontStyle: italic underline + foreground: '#e81e41' + +- name: entity.name.class.js + scope: entity.name.class.js + settings: + background: '#00ffff33' + fontStyle: italic + foreground: '#00ffff' + +- name: entity.name.extends.js + scope: entity.name.extends.js + settings: + background: '#00ff9933' + fontStyle: italic + foreground: '#00ff99' + +- name: function call + scope: meta.function-call entity.name.function + settings: + foreground: '#5b24ff' + +- name: function call with args + scope: meta.function-call.function.with-arguments.js + settings: + foreground: '#33ff00' + +- name: js brace + scope: meta.brace.curly.js + settings: + foreground: '#ff0099' + +- name: js paren + scope: meta.brace.round.js + settings: + background: '#000000ff' + foreground: '#d0c5feff' + +- name: js constant escape + scope: constant.character.escape + settings: + foreground: '#10cf62ff' + +- name: pseudo-class + scope: "meta.selector.css entity.other.attribute-name.tag.pseudo-class" + settings: + foreground: '#4fbc4b' + +- name: css selectors + scope: entity.namespace.unicode.css + settings: + foreground: '#FF4F4F' + +- name: entity.other.attribute-name.id + scope: entity.other.attribute-name.id + settings: + background: '#0b0028ff' + foreground: '#f20073ff' + +- name: class name + scope: meta.prototype support.class + settings: + foreground: '#ff0099' + +- name: support object + scope: support.object + settings: + fontStyle: bold + foreground: '#ffee00' + +- name: class name prototype + scope: meta.prototype support.constant + settings: + foreground: '#ff6600' + +- name: prototype declaration + scope: meta.prototype.declaration.js + settings: + fontStyle: bold + +- name: js undefined + scope: constant.language.undefined.js + settings: + foreground: '#555588' + +- name: variable.other.constant.js + scope: variable.other.constant.js + settings: + background: '#003311' + foreground: '#00ff33' + +- name: 'false' + scope: constant.language.boolean.false + settings: + foreground: '#aaaa55' + +- name: 'true' + scope: constant.language.boolean.true + settings: + foreground: '#cc7744' + +- name: js null + scope: constant.language.null.js + settings: + foreground: '#558855' + +- name: css#id punctuation + scope: punctuation.definition.entity.id.css + settings: + background: '#0b0028' + foreground: '#ff489f' + +- name: css.class + scope: "entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css" + settings: + background: '#0b0028' + foreground: '#9529b8' + +- name: css.class puntuation + scope: punctuation.definition.entity.class.css + settings: + background: '#0b0028ff' + foreground: '#cd87e4ff' + +- name: css pseudo element + scope: entity.other.attribute-name.pseudo-element.css + settings: + background: '#0b0028ff' + foreground: '#ff00ffff' + +- name: css property-name + scope: support.type.property-name.css + settings: + foreground: '#b8efecff' + +- name: css @at-rule + scope: meta.preprocessor.at-rule keyword.control.at-rule + settings: + foreground: '#d7c271ff' + +- name: css color + scope: "constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css" + settings: + foreground: '#fb7720ff' + +- name: css constants + scope: support.constant.property-value.css + settings: + foreground: '#7ce85eff' + +- name: Puncation Termination + scope: punctuation.terminator, punctuation.separator + settings: + foreground: '#4bfcf8ff' + +- name: css constructor.argument + scope: meta.constructor.argument.css + settings: + foreground: '#8f9d6aff' + +- name: diff.header + scope: meta.diff, meta.diff.header, entity.name.namespace + settings: + background: '#0e2231ff' + foreground: '#f8f8f8ff' + +- name: diff.deleted + scope: markup.deleted + settings: + background: '#420e09ff' + foreground: '#f8f8f8ff' + +- name: diff.changed + scope: markup.changed + settings: + background: '#4a410dff' + foreground: '#f8f8f8ff' + +- name: diff.inserted + scope: markup.inserted + settings: + background: '#253b22ff' + foreground: '#f8f8f8ff' + +- name: 'Markup: Italic' + scope: markup.italic + settings: + fontStyle: italic + foreground: '#6ad500ff' + +- name: 'Markup: Underline' + scope: markup.underline + settings: + foreground: '#e18964ff' + options: underline + +- name: 'Markup: Quote' + scope: markup.quote + settings: + background: '#fee09c12' + fontStyle: italic + foreground: '#e1d4b9ff' + +- name: 'Markup: Heading' + scope: markup.heading, markup.heading entity + settings: + background: '#de3280ff' + foreground: '#ffffffff' + +- name: 'Markup: List' + scope: markup.list + settings: + foreground: '#6657eaff' + +- name: 'Markup: Raw' + scope: markup.raw + settings: + background: '#b1b3ba08' + foreground: '#578bb3ff' + +- name: 'Markup: Comment' + scope: markup comment + settings: + foreground: '#f67b37ff' + +- name: 'Markup: Separator' + scope: meta.separator + settings: + background: '#242424ff' + foreground: '#60a633ff' + +- name: Log Entry + scope: meta.line.entry.logfile, meta.line.exit.logfile + settings: + background: '#eeeeee29' + foreground: '#f8f8f8ff' + +- name: Log Entry Error + scope: meta.line.error.logfile + settings: + background: '#751012' + foreground: '#f8f8f8' + +- name: JSON property top + scope: meta.structure.dictionary.json string.quoted.double + settings: + background: '#111111' + foreground: '#1144bb' + +- name: JSON property level 2 + scope: "meta.structure meta.structure.dictionary.json string.quoted.double" + settings: + foreground: '#1122bb' + +- name: JSON property level 3 + scope: "meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" + settings: + foreground: '#2938eb' + +- name: JSON property level 4 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" + settings: + foreground: '#6d7ef1' + +- name: JSON property level 5 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" + settings: + foreground: '#b3bbf7' + +- name: JSON value + scope: meta.structure.dictionary.value.json string.quoted.double + settings: + foreground: '#aa00aa' + +- name: JSON value level 2 + scope: "meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" + settings: + foreground: '#bf00bf' + +- name: JSON value level 3 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" + settings: + foreground: '#ff00ff' + +- name: JSON value level 4 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" + settings: + foreground: '#ff40ff' + +- name: JSON value level 5 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" + settings: + foreground: '#ff80ff' + +- name: JSON value string punctuation + scope: "meta.structure.dictionary.value.json string punctuation.definition.string.double" + settings: + foreground: '#8409ff' + +- name: JSON array value + scope: meta.structure.array.json string.quoted.double + settings: + foreground: '#5522aa' + +- name: JSON array value level 1 + scope: "meta.structure meta.structure meta.structure.array.json string.quoted.double" + settings: + foreground: '#7017c8ff' + +- name: JSON array value level 2 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" + settings: + foreground: '#9541e9ff' + +- name: JSON array value level 3 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" + settings: + foreground: '#ba83f1ff' + +- name: JSON array value level 4 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" + settings: + foreground: '#dfc6f9ff' + +- name: JSON prop string punctuation + scope: "meta.structure.dictionary.json string punctuation.definition.string" + settings: + foreground: '#66bbddff' + +- name: JSON array string puntuation + scope: "meta.structure.array.json string punctuation.definition.string" + settings: + foreground: '#416be9ff' + +- name: JSON array brackets + scope: meta.structure.array.json punctuation.definition.array + settings: + foreground: '#fcc401ff' + +- name: JSON object braces + scope: "meta.structure.dictionary.json punctuation.definition.dictionary" + settings: + foreground: '#fedf76ff' diff --git a/JavaScriptNext.tmTheme b/JavaScriptNext.tmTheme index 2e05217..0447945 100644 --- a/JavaScriptNext.tmTheme +++ b/JavaScriptNext.tmTheme @@ -2,1898 +2,1855 @@ - name - JavaScriptNext - settings - - - settings - - activeGuide - #3333FFFF - background - #000000 - bracketsBackground - #ff00aa66 - bracketsOptions - background - caret - #ff0099 - foreground - #e6e6e6 - guide - #33333388 - gutter - #6600ff33 - invisibles - #404040 - lineHighlight - #ff009933 - multiEditHighlight - #00ff0022 - searchHighlight - #FF00AA99 - selection - #00ffff44 - stackGuide - #333333CC - - - - name - bracket.curly - scope - bracket.curly - settings - - background - #FF44AA - foreground - #3399FF - - - - name - bracket.square - scope - bracket.square - settings - - background - #2266CC - foreground - #FF8800 - - - - name - bracket.round - scope - bracket.round - settings - - background - #9922FF - foreground - #00FF00 - - - - name - bracket.quote - scope - bracket.quote - settings - - background - #00FF00 - - - - name - comment - scope - comment - settings - - fontStyle - italic - foreground - #646464ff - - - - name - Invalid - scope - invalid - settings - - background - #ff000022 - - - - name - constant - scope - constant - settings - - foreground - #3387ccff - - - - name - Keyword - scope - keyword - settings - - foreground - #e28964 - - - - name - constant.numeric - scope - constant.numeric - settings - - foreground - #ffff66 - - - - name - Storage - scope - storage - settings - - foreground - #99cf50 - - - - name - storage.modifier - scope - storage.modifier - settings - - foreground - #cf5099 - - - - name - storage.self - scope - storage.self - settings - - fontStyle - bold - foreground - #cc0033 - - - - name - storage.type - scope - storage.type - settings - - foreground - #cf9950 - - - - name - Support - scope - support - settings - - foreground - #8a5c8dff - - - - name - entity.name.function - scope - entity.name.function - settings - - foreground - #bb00ff - - - - name - keyword control - scope - keyword.control - settings - - foreground - #ff00ff - - - - name - keyword.control.declaration - scope - keyword.control.declaration - settings - - foreground - #8888aa - - - - name - keyword.control.module - scope - keyword.control.module - settings - - foreground - #ffff33 - background - #ffff3333 - options - underline - - - - name - keyword.control.flow - scope - keyword.control.flow - settings - - fontStyle - bold - foreground - #ff6600 - background - #110300 - - - - - name - keyword.control.conditional - scope - keyword.control.conditional - settings - - foreground - #ff00ff - - - - name - keyword.control.trycatch - scope - keyword.control.trycatch - settings - - foreground - #ff0033 - - - - name - keyword.control.loop - scope - keyword.control.loop - settings - - foreground - #009999 - - - - name - keyword.control.switch - scope - keyword.control.switch - settings - - foreground - #999999 - - - - name - keyword operator - scope - keyword.operator - settings - - foreground - #ff0080 - - - - name - Function arg - scope - meta.function.argument, variable.parameter, meta.parens.c - settings - - foreground - #77ff11 - - - - name - - scope - punctuation.section.embedded - settings - - background - #0D0D0D37 - foreground - #00d3ffff - - - - name - keyword.other.unit - scope - keyword.other.unit, keyword.unit.css - settings - - foreground - #80ff00ff - - - - name - invalid.illegal - scope - invalid.illegal - settings - - background - #562d56bf - foreground - #fd5ff1ff - - - - name - string.quoted source - scope - string.quoted source - settings - - foreground - #daefa3 - - - - name - string constant - scope - string constant - settings - - foreground - #cfed81 - - - - name - string.regexp - scope - string.regexp - settings - - foreground - #6fff17 - - - - name - punctuation.definition.string - scope - punctuation.definition.string - settings - - background - #15151501 - foreground - #b4ff82 - - - - name - string.regexp.special - scope - - string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - - settings - - foreground - #00d505 - - - - name - string.regexp punctuation keyword - scope - string.regexp punctuation keyword - settings - - foreground - #c559ff - - - - name - string variable - scope - string variable - settings - - foreground - #8a9a95 - - - - name - support.function - scope - support.function - settings - - foreground - #fcf352ff - - - - name - meta.tag - scope - meta.tag - settings - - foreground - #4f9effff - - - - name - meta.tag entity - scope - meta.tag entity - settings - - foreground - #157eff - - - - name - HTML/XML tag attribute value - scope - meta.tag string.quoted.double.html - settings - - foreground - #E07D2C - - - - name - html5 tag - scope - meta.tag.block.any.html.html5 - settings - - foreground - #e88bfcff - - - - name - html5 tag entity - scope - meta.tag.block.any.html.html5 entity - settings - - foreground - #d730faff - - - - name - meta.tag.inline - scope - - source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity - - settings - - foreground - #87a7e2ff - - - - name - html js tag - scope - source.js.embedded.html entity.name.tag.script.html - settings - - foreground - #FF3535 - - - - name - html js tag braces - scope - source.js.embedded.html punctuation.definition.tag.html - settings - - foreground - #FF1E1E - - - - name - html js tag url - scope - source.js.embedded.html string.quoted.double.html - settings - - foreground - #FF9D9D - - - - name - Attribute - scope - entity.other.attribute-name - settings - - foreground - #7349beff - - - - name - Meta Toc List - scope - meta.toc-list - settings - - background - #162c1aff - foreground - #BEFEC7FF - options - underline - - - - name - js variable readwrite - scope - meta.initialization, variable.other.readwrite.js - settings - - foreground - #ff9122 - - - - name - js object - scope - variable.other.object.js - settings - - foreground - #ffee00 - - - - name - js object with parent - scope - meta.property-name.js variable.other.object.js - settings - - foreground - #ffff88 - - - - name - support.variable.property.js - scope - support.variable.property.js - settings - - foreground - #3399ff - - - - name - variable.other.dot-access - scope - variable.other.dot-access - settings - - foreground - #66ffdd - - - - name - variable.other.property.js - scope - variable.other.property.js - settings - - foreground - #37C1BE - - - - name - punctuation.section.scope.square.js - scope - punctuation.section.scope.square.js - settings - - foreground - #ff2404 - - - - name - punctuation.section.scope.round.js, meta.brace.round - scope - punctuation.section.scope.round.js, meta.brace.round - settings - - foreground - #1c38ff - - - - name - punctuation.definition.arrow.js - scope - punctuation.definition.arrow.js - settings - - fontStyle - bold - foreground - #aa00ff - background - #001133 - - - - name - entity.arrow.function.js - scope - entity.arrow.function.js - settings - - fontStyle - bold - foreground - #aa00ff - background - #001133 - - - - name - variable.language - scope - variable.language - settings - - foreground - #aa0044 - - - - name - variable.language.prototype - scope - variable.language.prototype - settings - - foreground - #ff6600 - - - - name - support.class.error.js - scope - support.class.error.js - settings - - foreground - #ff5522 - - - - name - support.class.builtin.js - scope - support.class.builtin.js - settings - - fontStyle - italic - foreground - #ffee00 - - - - name - support.class.node.js - scope - support.class.node.js - settings - - foreground - #1224fe - - - - name - entity.name.function.node.js - scope - entity.name.function.node.js - settings - - foreground - #d84014 - - - - name - support.keyword.node.js - scope - support.keyword.node.js - settings - - fontStyle - bold - foreground - #99ef25 - - - - name - variable.import.destructuring.js - scope - variable.import.destructuring.js - settings - - foreground - #00bbff - - - - name - other.object.key.js - scope - other.object.key.js - settings - - foreground - #1C98C1 - - - - name - meta.accessor.js punctuation.definition.parameters - scope - meta.accessor.js punctuation.definition.parameters - settings - - foreground - #005588 - - - - name - storage.type.accessor.js - scope - storage.type.accessor.js - settings - - fontStyle - bold italic - foreground - #0066aa - background - #001122 - - - - name - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - scope - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - settings - - foreground - #ff0044 - background - #220011 - - - - name - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - scope - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - settings - - foreground - #cccc44 - background - #222211 - - - - name - storage.type.class.js, storage.type.extends.js - scope - storage.type.class.js, storage.type.extends.js - settings - - foreground - #0044aa - background - #001122 - - - - name - meta.function.call.class.static.js - scope - meta.function.call.class.static.js - settings - - foreground - #880011 - - - - name - variable.other.class.static.js - scope - variable.other.class.static.js - settings - - foreground - #aa0066 - - - - name - entity.name.accessor.js - scope - entity.name.accessor.js - settings - - fontStyle - bold italic - foreground - #00ffcc - background - #001122 - - - - name - entity.name.method.js - scope - entity.name.method.js - settings - - fontStyle - italic bold - foreground - #aa00ff - background - #110022 - - - - name - meta.method.js - scope - meta.method.js - settings - - fontStyle - bold - foreground - #660099 - - - - name - storage.type.function.js - scope - storage.type.function.js - settings - - fontStyle - bold - foreground - #99cc44 - - - - name - string.quoted.single - scope - string.quoted.single - settings - - foreground - #88FFAAAA - - - - name - variable.other.quasi.js - scope - variable.other.quasi.js - settings - - foreground - #ff0099 - - - - name - string.quasi.js - scope - string.quasi.js - settings - - foreground - #00FF00 - - - - name - punctuation.quasi.element - scope - punctuation.quasi.element - settings - - foreground - #008800 - - - - name - entity.quasi.tag.name.js - scope - entity.quasi.tag.name.js - settings - - foreground - #ffff00 - - - - name - meta.group.braces.square, punctuation.destructuring - scope - meta.group.braces.square string.quoted.single, punctuation.destructuring - settings - - foreground - #47E9AC - - - - name - string.quoted.double - scope - string.quoted.double - settings - - foreground - #11bb11 - - - - name - punctuation.section.scope.curly.js - scope - punctuation.section.scope.curly.js - settings - - foreground - #F9044E - - - - name - meta.delimiter.object.comma.js - scope - meta.delimiter.object.comma.js - settings - - foreground - #00ffff - - - - name - meta.group.braces.curly string.quoted.single - scope - meta.group.braces.curly string.quoted.single - settings - - foreground - #16B853 - - - - name - support.function - scope - support.function - settings - - foreground - #B532ff - - - - name - punctuation.definition.string.begin.js - scope - punctuation.definition.string.begin.js - settings - - foreground - #D2E20C - - - - name - punctuation.definition.string.end.js - scope - punctuation.definition.string.end.js - settings - - foreground - #CEA30D - - - - name - instance constructor - scope - meta.class.inheritance, meta.instance.constructor - settings - - fontStyle - italic underline - foreground - #e81e41 - - - - name - entity.name.class.js - scope - entity.name.class.js - settings - - fontStyle - italic - background - #00ffff33 - foreground - #00ffff - - - - name - entity.name.extends.js - scope - entity.name.extends.js - settings - - background - #00ff9933 - foreground - #00ff99 - fontStyle - italic - - - - name - function call - scope - meta.function-call entity.name.function - settings - - foreground - #5b24ff - - - - name - function call with args - scope - meta.function-call.function.with-arguments.js - settings - - foreground - #33ff00 - - - - name - js brace - scope - meta.brace.curly.js - settings - - foreground - #ff0099 - - - - name - js paren - scope - meta.brace.round.js - settings - - background - #000000ff - foreground - #d0c5feff - - - - name - js constant escape - scope - constant.character.escape - settings - - foreground - #10cf62ff - - - - name - pseudo-class - scope - - meta.selector.css entity.other.attribute-name.tag.pseudo-class - - settings - - foreground - #4fbc4b - - - - name - css selectors - scope - entity.namespace.unicode.css - settings - - foreground - #FF4F4F - - - - name - entity.other.attribute-name.id - scope - entity.other.attribute-name.id - settings - - background - #0b0028ff - foreground - #f20073ff - - - - name - class name - scope - meta.prototype support.class - settings - - foreground - #ff0099 - - - - name - support object - scope - support.object - settings - - fontStyle - bold - foreground - #ffee00 - - - - name - class name prototype - scope - meta.prototype support.constant - settings - - foreground - #ff6600 - - - - name - prototype declaration - scope - meta.prototype.declaration.js - settings - - fontStyle - bold - - - - name - js undefined - scope - constant.language.undefined.js - settings - - foreground - #555588 - - - - name - variable.other.constant.js - scope - variable.other.constant.js - settings - - foreground - #00ff33 - background - #003311 - - - - name - false - scope - constant.language.boolean.false - settings - - foreground - #aaaa55 - - - - name - true - scope - constant.language.boolean.true - settings - - foreground - #cc7744 - - - - name - js null - scope - constant.language.null.js - settings - - foreground - #558855 - - - - name - css#id punctuation - scope - punctuation.definition.entity.id.css - settings - - background - #0b0028 - foreground - #ff489f - - - - name - css.class - scope - - entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css - - settings - - background - #0b0028 - foreground - #9529b8 - - - - name - css.class puntuation - scope - punctuation.definition.entity.class.css - settings - - background - #0b0028ff - foreground - #cd87e4ff - - - - name - css pseudo element - scope - entity.other.attribute-name.pseudo-element.css - settings - - background - #0b0028ff - foreground - #ff00ffff - - - - name - css property-name - scope - support.type.property-name.css - settings - - foreground - #b8efecff - - - - name - css @at-rule - scope - meta.preprocessor.at-rule keyword.control.at-rule - settings - - foreground - #d7c271ff - - - - name - css color - scope - - constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css - - settings - - foreground - #fb7720ff - - - - name - css constants - scope - support.constant.property-value.css - settings - - foreground - #7ce85eff - - - - name - Puncation Termination - scope - punctuation.terminator, punctuation.separator - settings - - foreground - #4bfcf8ff - - - - name - css constructor.argument - scope - meta.constructor.argument.css - settings - - foreground - #8f9d6aff - - - - name - diff.header - scope - meta.diff, meta.diff.header, entity.name.namespace - settings - - background - #0e2231ff - foreground - #f8f8f8ff - - - - name - diff.deleted - scope - markup.deleted - settings - - background - #420e09ff - foreground - #f8f8f8ff - - - - name - diff.changed - scope - markup.changed - settings - - background - #4a410dff - foreground - #f8f8f8ff - - - - name - diff.inserted - scope - markup.inserted - settings - - background - #253b22ff - foreground - #f8f8f8ff - - - - name - Markup: Italic - scope - markup.italic - settings - - fontStyle - italic - foreground - #6ad500ff - - - - name - Markup: Underline - scope - markup.underline - settings - - foreground - #e18964ff - options - underline - - - - name - Markup: Quote - scope - markup.quote - settings - - background - #fee09c12 - fontStyle - italic - foreground - #e1d4b9ff - - - - name - Markup: Heading - scope - markup.heading, markup.heading entity - settings - - background - #de3280ff - foreground - #ffffffff - - - - name - Markup: List - scope - markup.list - settings - - foreground - #6657eaff - - - - name - Markup: Raw - scope - markup.raw - settings - - background - #b1b3ba08 - foreground - #578bb3ff - - - - name - Markup: Comment - scope - markup comment - settings - - foreground - #f67b37ff - - - - name - Markup: Separator - scope - meta.separator - settings - - background - #242424ff - foreground - #60a633ff - - - - name - Log Entry - scope - meta.line.entry.logfile, meta.line.exit.logfile - settings - - background - #eeeeee29 - foreground - #f8f8f8ff - - - - name - Log Entry Error - scope - meta.line.error.logfile - settings - - background - #751012 - foreground - #f8f8f8 - - - - name - JSON property top - scope - meta.structure.dictionary.json string.quoted.double - settings - - background - #111111 - foreground - #1144bb - - - - name - JSON property level 2 - scope - - meta.structure meta.structure.dictionary.json string.quoted.double - - settings - - foreground - #1122bb - - - - name - JSON property level 3 - scope - - meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - - settings - - foreground - #2938eb - - - - name - JSON property level 4 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - - settings - - foreground - #6d7ef1 - - - - name - JSON property level 5 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - - settings - - foreground - #b3bbf7 - - - - name - JSON value - scope - meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #aa00aa - - - - name - JSON value level 2 - scope - - meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - - settings - - foreground - #bf00bf - - - - name - JSON value level 3 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - - settings - - foreground - #ff00ff - - - - name - JSON value level 4 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - - settings - - foreground - #ff40ff - - - - name - JSON value level 5 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - - settings - - foreground - #ff80ff - - - - name - JSON value string punctuation - scope - - meta.structure.dictionary.value.json string punctuation.definition.string.double - - settings - - foreground - #8409ff - - - - name - JSON array value - scope - meta.structure.array.json string.quoted.double - settings - - foreground - #5522aa - - - - name - JSON array value level 1 - scope - - meta.structure meta.structure meta.structure.array.json string.quoted.double - - settings - - foreground - #7017c8ff - - - - name - JSON array value level 2 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - - settings - - foreground - #9541e9ff - - - - name - JSON array value level 3 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - - settings - - foreground - #ba83f1ff - - - - name - JSON array value level 4 - scope - - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - - settings - - foreground - #dfc6f9ff - - - - name - JSON prop string punctuation - scope - - meta.structure.dictionary.json string punctuation.definition.string - - settings - - foreground - #66bbddff - - - - name - JSON array string puntuation - scope - - meta.structure.array.json string punctuation.definition.string - - settings - - foreground - #416be9ff - - - - name - JSON array brackets - scope - meta.structure.array.json punctuation.definition.array - settings - - foreground - #fcc401ff - - - - name - JSON object braces - scope - - meta.structure.dictionary.json punctuation.definition.dictionary - - settings - - foreground - #fedf76ff - - - - uuid - b238c753-1549-3f12-a519-0faa5dcd4f65 + name + JavaScriptNext + settings + + + settings + + activeGuide + #3333FFFF + background + #000000 + bracketsBackground + #ff00aa66 + bracketsOptions + background + caret + #ff0099 + foreground + #e6e6e6 + guide + #33333388 + gutter + #6600ff33 + invisibles + #404040 + lineHighlight + #ff009933 + multiEditHighlight + #00ff0022 + searchHighlight + #FF00AA99 + selection + #00ffff44 + stackGuide + #333333CC + + + + name + bracket.curly + scope + bracket.curly + settings + + background + #FF44AA + foreground + #3399FF + + + + name + bracket.square + scope + bracket.square + settings + + background + #2266CC + foreground + #FF8800 + + + + name + bracket.round + scope + bracket.round + settings + + background + #9922FF + foreground + #00FF00 + + + + name + bracket.quote + scope + bracket.quote + settings + + background + #00FF00 + + + + name + comment + scope + comment + settings + + fontStyle + italic + foreground + #646464ff + + + + name + Invalid + scope + invalid + settings + + background + #ff000022 + + + + name + constant + scope + constant + settings + + foreground + #3387ccff + + + + name + Keyword + scope + keyword + settings + + foreground + #e28964 + + + + name + constant.numeric + scope + constant.numeric + settings + + foreground + #ffff66 + + + + name + Storage + scope + storage + settings + + foreground + #99cf50 + + + + name + storage.modifier + scope + storage.modifier + settings + + foreground + #cf5099 + + + + name + storage.self + scope + storage.self + settings + + fontStyle + bold + foreground + #cc0033 + + + + name + storage.type + scope + storage.type + settings + + foreground + #cf9950 + + + + name + Support + scope + support + settings + + foreground + #8a5c8dff + + + + name + entity.name.function + scope + entity.name.function + settings + + foreground + #bb00ff + + + + name + keyword control + scope + keyword.control + settings + + foreground + #ff00ff + + + + name + keyword.control.declaration + scope + keyword.control.declaration + settings + + foreground + #8888aa + + + + name + keyword.control.module + scope + keyword.control.module + settings + + background + #ffff3333 + foreground + #ffff33 + options + underline + + + + name + keyword.control.flow + scope + keyword.control.flow + settings + + background + #110300 + fontStyle + bold + foreground + #ff6600 + + + + name + keyword.control.conditional + scope + keyword.control.conditional + settings + + foreground + #ff00ff + + + + name + keyword.control.trycatch + scope + keyword.control.trycatch + settings + + foreground + #ff0033 + + + + name + keyword.control.loop + scope + keyword.control.loop + settings + + foreground + #009999 + + + + name + keyword.control.switch + scope + keyword.control.switch + settings + + foreground + #999999 + + + + name + keyword operator + scope + keyword.operator + settings + + foreground + #ff0080 + + + + name + Function arg + scope + meta.function.argument, variable.parameter, meta.parens.c + settings + + foreground + #77ff11 + + + + name + + scope + punctuation.section.embedded + settings + + background + #0D0D0D37 + foreground + #00d3ffff + + + + name + keyword.other.unit + scope + keyword.other.unit, keyword.unit.css + settings + + foreground + #80ff00ff + + + + name + invalid.illegal + scope + invalid.illegal + settings + + background + #562d56bf + foreground + #fd5ff1ff + + + + name + string.quoted source + scope + string.quoted source + settings + + foreground + #daefa3 + + + + name + string constant + scope + string constant + settings + + foreground + #cfed81 + + + + name + string.regexp + scope + string.regexp + settings + + foreground + #6fff17 + + + + name + punctuation.definition.string + scope + punctuation.definition.string + settings + + background + #15151501 + foreground + #b4ff82 + + + + name + string.regexp.special + scope + string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition + settings + + foreground + #00d505 + + + + name + string.regexp punctuation keyword + scope + string.regexp punctuation keyword + settings + + foreground + #c559ff + + + + name + string variable + scope + string variable + settings + + foreground + #8a9a95 + + + + name + support.function + scope + support.function + settings + + foreground + #fcf352ff + + + + name + meta.tag + scope + meta.tag + settings + + foreground + #4f9effff + + + + name + meta.tag entity + scope + meta.tag entity + settings + + foreground + #157eff + + + + name + HTML/XML tag attribute value + scope + meta.tag string.quoted.double.html + settings + + foreground + #E07D2C + + + + name + html5 tag + scope + meta.tag.block.any.html.html5 + settings + + foreground + #e88bfcff + + + + name + html5 tag entity + scope + meta.tag.block.any.html.html5 entity + settings + + foreground + #d730faff + + + + name + meta.tag.inline + scope + source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity + settings + + foreground + #87a7e2ff + + + + name + html js tag + scope + source.js.embedded.html entity.name.tag.script.html + settings + + foreground + #FF3535 + + + + name + html js tag braces + scope + source.js.embedded.html punctuation.definition.tag.html + settings + + foreground + #FF1E1E + + + + name + html js tag url + scope + source.js.embedded.html string.quoted.double.html + settings + + foreground + #FF9D9D + + + + name + Attribute + scope + entity.other.attribute-name + settings + + foreground + #7349beff + + + + name + Meta Toc List + scope + meta.toc-list + settings + + background + #162c1aff + foreground + #BEFEC7FF + options + underline + + + + name + js variable readwrite + scope + meta.initialization, variable.other.readwrite.js + settings + + foreground + #ff9122 + + + + name + js object + scope + variable.other.object.js + settings + + foreground + #ffee00 + + + + name + js object with parent + scope + meta.property-name.js variable.other.object.js + settings + + foreground + #ffff88 + + + + name + support.variable.property.js + scope + support.variable.property.js + settings + + foreground + #3399ff + + + + name + variable.other.dot-access + scope + variable.other.dot-access + settings + + foreground + #66ffdd + + + + name + variable.other.property.js + scope + variable.other.property.js + settings + + foreground + #37C1BE + + + + name + punctuation.section.scope.square.js + scope + punctuation.section.scope.square.js + settings + + foreground + #ff2404 + + + + name + punctuation.section.scope.round.js, meta.brace.round + scope + punctuation.section.scope.round.js, meta.brace.round + settings + + foreground + #1c38ff + + + + name + punctuation.definition.arrow.js + scope + punctuation.definition.arrow.js + settings + + background + #001133 + fontStyle + bold + foreground + #aa00ff + + + + name + entity.arrow.function.js + scope + entity.arrow.function.js + settings + + background + #001133 + fontStyle + bold + foreground + #aa00ff + + + + name + variable.language + scope + variable.language + settings + + foreground + #aa0044 + + + + name + variable.language.prototype + scope + variable.language.prototype + settings + + foreground + #ff6600 + + + + name + support.class.error.js + scope + support.class.error.js + settings + + foreground + #ff5522 + + + + name + support.class.builtin.js + scope + support.class.builtin.js + settings + + fontStyle + italic + foreground + #ffee00 + + + + name + support.class.node.js + scope + support.class.node.js + settings + + foreground + #1224fe + + + + name + entity.name.function.node.js + scope + entity.name.function.node.js + settings + + foreground + #d84014 + + + + name + support.keyword.node.js + scope + support.keyword.node.js + settings + + fontStyle + bold + foreground + #99ef25 + + + + name + variable.import.destructuring.js + scope + variable.import.destructuring.js + settings + + foreground + #00bbff + + + + name + other.object.key.js + scope + other.object.key.js + settings + + foreground + #1C98C1 + + + + name + meta.accessor.js punctuation.definition.parameters + scope + meta.accessor.js punctuation.definition.parameters + settings + + foreground + #005588 + + + + name + storage.type.accessor.js + scope + storage.type.accessor.js + settings + + background + #001122 + fontStyle + bold italic + foreground + #0066aa + + + + name + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + scope + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + settings + + background + #220011 + foreground + #ff0044 + + + + name + storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + scope + storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + settings + + background + #222211 + foreground + #cccc44 + + + + name + storage.type.class.js, storage.type.extends.js + scope + storage.type.class.js, storage.type.extends.js + settings + + background + #001122 + foreground + #0044aa + + + + name + meta.function.call.class.static.js + scope + meta.function.call.class.static.js + settings + + foreground + #880011 + + + + name + variable.other.class.static.js + scope + variable.other.class.static.js + settings + + foreground + #aa0066 + + + + name + entity.name.accessor.js + scope + entity.name.accessor.js + settings + + background + #001122 + fontStyle + bold italic + foreground + #00ffcc + + + + name + entity.name.method.js + scope + entity.name.method.js + settings + + background + #110022 + fontStyle + italic bold + foreground + #aa00ff + + + + name + meta.method.js + scope + meta.method.js + settings + + fontStyle + bold + foreground + #660099 + + + + name + storage.type.function.js + scope + storage.type.function.js + settings + + fontStyle + bold + foreground + #99cc44 + + + + name + string.quoted.single + scope + string.quoted.single + settings + + foreground + #88FFAAAA + + + + name + variable.other.quasi.js + scope + variable.other.quasi.js + settings + + foreground + #ff0099 + + + + name + string.quasi.js + scope + string.quasi.js + settings + + foreground + #00FF00 + + + + name + punctuation.quasi.element + scope + punctuation.quasi.element + settings + + foreground + #008800 + + + + name + entity.quasi.tag.name.js + scope + entity.quasi.tag.name.js + settings + + foreground + #ffff00 + + + + name + meta.group.braces.square, punctuation.destructuring + scope + meta.group.braces.square string.quoted.single, punctuation.destructuring + settings + + foreground + #47E9AC + + + + name + string.quoted.double + scope + string.quoted.double + settings + + foreground + #11bb11 + + + + name + punctuation.section.scope.curly.js + scope + punctuation.section.scope.curly.js + settings + + foreground + #F9044E + + + + name + meta.delimiter.object.comma.js + scope + meta.delimiter.object.comma.js + settings + + foreground + #00ffff + + + + name + meta.group.braces.curly string.quoted.single + scope + meta.group.braces.curly string.quoted.single + settings + + foreground + #16B853 + + + + name + support.function + scope + support.function + settings + + foreground + #B532ff + + + + name + punctuation.definition.string.begin.js + scope + punctuation.definition.string.begin.js + settings + + foreground + #D2E20C + + + + name + punctuation.definition.string.end.js + scope + punctuation.definition.string.end.js + settings + + foreground + #CEA30D + + + + name + instance constructor + scope + meta.class.inheritance, meta.instance.constructor + settings + + fontStyle + italic underline + foreground + #e81e41 + + + + name + entity.name.class.js + scope + entity.name.class.js + settings + + background + #00ffff33 + fontStyle + italic + foreground + #00ffff + + + + name + entity.name.extends.js + scope + entity.name.extends.js + settings + + background + #00ff9933 + fontStyle + italic + foreground + #00ff99 + + + + name + function call + scope + meta.function-call entity.name.function + settings + + foreground + #5b24ff + + + + name + function call with args + scope + meta.function-call.function.with-arguments.js + settings + + foreground + #33ff00 + + + + name + js brace + scope + meta.brace.curly.js + settings + + foreground + #ff0099 + + + + name + js paren + scope + meta.brace.round.js + settings + + background + #000000ff + foreground + #d0c5feff + + + + name + js constant escape + scope + constant.character.escape + settings + + foreground + #10cf62ff + + + + name + pseudo-class + scope + meta.selector.css entity.other.attribute-name.tag.pseudo-class + settings + + foreground + #4fbc4b + + + + name + css selectors + scope + entity.namespace.unicode.css + settings + + foreground + #FF4F4F + + + + name + entity.other.attribute-name.id + scope + entity.other.attribute-name.id + settings + + background + #0b0028ff + foreground + #f20073ff + + + + name + class name + scope + meta.prototype support.class + settings + + foreground + #ff0099 + + + + name + support object + scope + support.object + settings + + fontStyle + bold + foreground + #ffee00 + + + + name + class name prototype + scope + meta.prototype support.constant + settings + + foreground + #ff6600 + + + + name + prototype declaration + scope + meta.prototype.declaration.js + settings + + fontStyle + bold + + + + name + js undefined + scope + constant.language.undefined.js + settings + + foreground + #555588 + + + + name + variable.other.constant.js + scope + variable.other.constant.js + settings + + background + #003311 + foreground + #00ff33 + + + + name + false + scope + constant.language.boolean.false + settings + + foreground + #aaaa55 + + + + name + true + scope + constant.language.boolean.true + settings + + foreground + #cc7744 + + + + name + js null + scope + constant.language.null.js + settings + + foreground + #558855 + + + + name + css#id punctuation + scope + punctuation.definition.entity.id.css + settings + + background + #0b0028 + foreground + #ff489f + + + + name + css.class + scope + entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css + settings + + background + #0b0028 + foreground + #9529b8 + + + + name + css.class puntuation + scope + punctuation.definition.entity.class.css + settings + + background + #0b0028ff + foreground + #cd87e4ff + + + + name + css pseudo element + scope + entity.other.attribute-name.pseudo-element.css + settings + + background + #0b0028ff + foreground + #ff00ffff + + + + name + css property-name + scope + support.type.property-name.css + settings + + foreground + #b8efecff + + + + name + css @at-rule + scope + meta.preprocessor.at-rule keyword.control.at-rule + settings + + foreground + #d7c271ff + + + + name + css color + scope + constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css + settings + + foreground + #fb7720ff + + + + name + css constants + scope + support.constant.property-value.css + settings + + foreground + #7ce85eff + + + + name + Puncation Termination + scope + punctuation.terminator, punctuation.separator + settings + + foreground + #4bfcf8ff + + + + name + css constructor.argument + scope + meta.constructor.argument.css + settings + + foreground + #8f9d6aff + + + + name + diff.header + scope + meta.diff, meta.diff.header, entity.name.namespace + settings + + background + #0e2231ff + foreground + #f8f8f8ff + + + + name + diff.deleted + scope + markup.deleted + settings + + background + #420e09ff + foreground + #f8f8f8ff + + + + name + diff.changed + scope + markup.changed + settings + + background + #4a410dff + foreground + #f8f8f8ff + + + + name + diff.inserted + scope + markup.inserted + settings + + background + #253b22ff + foreground + #f8f8f8ff + + + + name + Markup: Italic + scope + markup.italic + settings + + fontStyle + italic + foreground + #6ad500ff + + + + name + Markup: Underline + scope + markup.underline + settings + + foreground + #e18964ff + options + underline + + + + name + Markup: Quote + scope + markup.quote + settings + + background + #fee09c12 + fontStyle + italic + foreground + #e1d4b9ff + + + + name + Markup: Heading + scope + markup.heading, markup.heading entity + settings + + background + #de3280ff + foreground + #ffffffff + + + + name + Markup: List + scope + markup.list + settings + + foreground + #6657eaff + + + + name + Markup: Raw + scope + markup.raw + settings + + background + #b1b3ba08 + foreground + #578bb3ff + + + + name + Markup: Comment + scope + markup comment + settings + + foreground + #f67b37ff + + + + name + Markup: Separator + scope + meta.separator + settings + + background + #242424ff + foreground + #60a633ff + + + + name + Log Entry + scope + meta.line.entry.logfile, meta.line.exit.logfile + settings + + background + #eeeeee29 + foreground + #f8f8f8ff + + + + name + Log Entry Error + scope + meta.line.error.logfile + settings + + background + #751012 + foreground + #f8f8f8 + + + + name + JSON property top + scope + meta.structure.dictionary.json string.quoted.double + settings + + background + #111111 + foreground + #1144bb + + + + name + JSON property level 2 + scope + meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #1122bb + + + + name + JSON property level 3 + scope + meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #2938eb + + + + name + JSON property level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #6d7ef1 + + + + name + JSON property level 5 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #b3bbf7 + + + + name + JSON value + scope + meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #aa00aa + + + + name + JSON value level 2 + scope + meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #bf00bf + + + + name + JSON value level 3 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #ff00ff + + + + name + JSON value level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #ff40ff + + + + name + JSON value level 5 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #ff80ff + + + + name + JSON value string punctuation + scope + meta.structure.dictionary.value.json string punctuation.definition.string.double + settings + + foreground + #8409ff + + + + name + JSON array value + scope + meta.structure.array.json string.quoted.double + settings + + foreground + #5522aa + + + + name + JSON array value level 1 + scope + meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #7017c8ff + + + + name + JSON array value level 2 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #9541e9ff + + + + name + JSON array value level 3 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #ba83f1ff + + + + name + JSON array value level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #dfc6f9ff + + + + name + JSON prop string punctuation + scope + meta.structure.dictionary.json string punctuation.definition.string + settings + + foreground + #66bbddff + + + + name + JSON array string puntuation + scope + meta.structure.array.json string punctuation.definition.string + settings + + foreground + #416be9ff + + + + name + JSON array brackets + scope + meta.structure.array.json punctuation.definition.array + settings + + foreground + #fcc401ff + + + + name + JSON object braces + scope + meta.structure.dictionary.json punctuation.definition.dictionary + settings + + foreground + #fedf76ff + + + + uuid + b238c753-1549-3f12-a519-0faa5dcd4f65 From 0445e1e1a102e0d67a54804c74682808b2bea245 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 5 Jan 2014 12:05:12 +1100 Subject: [PATCH 045/202] better multi-line string error handling --- JavaScriptNext.YAML-tmLanguage | 19 +++++++++---------- JavaScriptNext.tmLanguage | 30 +++++++++++++++++------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index cf4684f..0367950 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -553,9 +553,10 @@ repository: begin: "'" beginCaptures: '0': {name: punctuation.definition.string.begin.js} - end: "'" + end: (')|(\n) endCaptures: - '0': {name: punctuation.definition.string.end.js} + '1': {name: punctuation.definition.string.end.js} + '2': {name: invalid.illegal.newline.js} patterns: - include: '#string-content' @@ -563,9 +564,10 @@ repository: begin: '"' beginCaptures: '0': {name: punctuation.definition.string.begin.js} - end: '"' + end: (")|(\n) endCaptures: - '0': {name: punctuation.definition.string.end.js} + '1': {name: punctuation.definition.string.end.js} + '2': {name: invalid.illegal.newline.js} patterns: - include: '#string-content' @@ -639,14 +641,11 @@ repository: string-content: patterns: - - name: constant.character.escape.js - match: \\(x[\da-fA-F]{2}|\u[\da-fA-F]{4}|.) - - name: constant.character.escape.newline.js - match: \\\n + match: \\\s*\n - - name: invalid.illegal.newline.js - match: \n + - name: constant.character.escape.js + match: \\(x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) leading-space: patterns: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 1178db7..1729fc1 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1528,14 +1528,19 @@ end - ' + (')|(\n) endCaptures - 0 + 1 name punctuation.definition.string.end.js + 2 + + name + invalid.illegal.newline.js + name string.quoted.single.js @@ -1559,14 +1564,19 @@ end - " + (")|(\n) endCaptures - 0 + 1 name punctuation.definition.string.end.js + 2 + + name + invalid.illegal.newline.js + name string.quoted.double.js @@ -1775,21 +1785,15 @@ match - \\(x[\da-fA-F]{2}|\u[\da-fA-F]{4}|.) - name - constant.character.escape.js - - - match - \\\n + \\\s*\n name constant.character.escape.newline.js match - \n + \\(x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) name - invalid.illegal.newline.js + constant.character.escape.js From 6cfb7dc763aeb10d0600684d428c446c2b0b95ae Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 29 Jan 2014 08:10:41 +1100 Subject: [PATCH 046/202] fixed function name matching for meta.function.js --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 0367950..5affd38 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -178,7 +178,7 @@ repository: patterns: # e.g. function myFunc(arg) { } - name: meta.function.js - match: \b(function\*?)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) + match: \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(\()(.*?)(\)) captures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 1729fc1..38c1210 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -631,7 +631,7 @@ match - \b(function\*?)(?:\s+([a-zA-Z_$]\w*))?\s*(\()(.*?)(\)) + \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(\()(.*?)(\)) name meta.function.js From 0f82a48858cafd06d62fd91be6094ee00da017f8 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 30 Jan 2014 04:17:40 +1100 Subject: [PATCH 047/202] fixed doc comment highlighting bug for comments of the form '/**/' --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 5affd38..3adefe2 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -72,7 +72,7 @@ repository: - include: '#special-comments-conditional-compilation' - name: comment.block.documentation.js - begin: /\*\* + begin: /\*\*(?!/) end: \*/ captures: '0': {name: punctuation.definition.comment.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 38c1210..ccc46ca 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -189,7 +189,7 @@ begin - /\*\* + /\*\*(?!/) captures 0 From 9751d6bd51d1fc0d79b006a983d0abe5ff495323 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 1 Feb 2014 04:43:17 +1100 Subject: [PATCH 048/202] use 'source.js' instead of '$base' to avoid problems with embedding in html, as '$base' is interpreted as the patterns at the root of the syntax definitions --- JavaScriptNext.YAML-tmLanguage | 10 +++++----- JavaScriptNext.tmLanguage | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 3adefe2..994d2dd 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -55,7 +55,7 @@ repository: endCaptures: '1': {name: meta.brace.round.js} patterns: - - include: $base + - include: source.js - name: meta.group.braces.square begin: (\[) @@ -65,7 +65,7 @@ repository: endCaptures: '1': {name: meta.brace.square.js} patterns: - - include: $base + - include: source.js comments: patterns: @@ -287,7 +287,7 @@ repository: '1': {name: storage.type.function.js} end: (?<=})(\s*\n)? patterns: - - include: $base + - include: source.js # ES6 methods, e.g. abc(x, y, z){ - name: meta.method.js @@ -522,7 +522,7 @@ repository: endCaptures: '0': {name: punctuation.quasi.element.end.js} patterns: - - include: $base + - include: source.js literal-regex: patterns: @@ -622,7 +622,7 @@ repository: captures: '0': {name: punctuation.definition.comment.js} patterns: - - include: $base + - include: source.js - name: keyword.control.conditional.js match: (@)(if|elif|else|end) diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index ccc46ca..b618503 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -142,7 +142,7 @@ include - $base + source.js @@ -173,7 +173,7 @@ include - $base + source.js @@ -1237,7 +1237,7 @@ include - $base + source.js @@ -1445,7 +1445,7 @@ include - $base + source.js @@ -1731,7 +1731,7 @@ include - $base + source.js From b49b26234e6836b25bed346d93c6cd9b9c984c77 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 4 Feb 2014 19:00:18 +1100 Subject: [PATCH 049/202] formatting --- JavaScriptNext.YAML-tmLanguage | 12 ++++++++++-- JavaScriptNext.tmLanguage | 10 ++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 994d2dd..6cf003b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -263,12 +263,20 @@ repository: literal-method: patterns: - name: meta.function-call.method.with-arguments.js - match: (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) (?=\() + match: |- + (?x) + (?<=\.) + ([_$a-zA-Z][_$\w]*) + (?=\() captures: '1': {name: entity.name.function.js} - name: meta.function-call.method.without-arguments.js - match: (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) ((\( \s* \))) + match: |- + (?x) + (?<=\.) + ([_$a-zA-Z][_$\w]*) + (\(\s*\)) captures: '1': {name: entity.name.function.js} '2': {name: meta.group.braces.round.function.arguments.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index b618503..f91d453 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1185,7 +1185,10 @@ match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) (?=\() + (?x) + (?<=\.) + ([_$a-zA-Z][_$\w]*) + (?=\() name meta.function-call.method.with-arguments.js @@ -1209,7 +1212,10 @@ match - (?x)(?<= \. ) ([_$a-zA-Z][_$\w]*) ((\( \s* \))) + (?x) + (?<=\.) + ([_$a-zA-Z][_$\w]*) + (\(\s*\)) name meta.function-call.method.without-arguments.js From 147bbaff6e867c86dd79fca725c9bba5c49d36b5 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 4 Feb 2014 19:04:07 +1100 Subject: [PATCH 050/202] only match the method name part when using 'new' --- JavaScriptNext.YAML-tmLanguage | 5 +++-- JavaScriptNext.tmLanguage | 13 ++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 6cf003b..64f9e98 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -324,8 +324,9 @@ repository: end: (?![_$a-zA-Z][_$\w.]*) patterns: - include: '#support' - - name: entity.name.type.new.js - match: ([_$a-zA-Z][_$\w.]*) + - match: ([_$a-zA-Z][_$\w.]*?)([_$a-zA-Z][_$\w]*) + - captures: + '1': {name: entity.name.type.new.js} - name: storage.type.js match: \b(var|let|const)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index f91d453..fa9cd4b 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -922,9 +922,16 @@ match - ([_$a-zA-Z][_$\w.]*) - name - entity.name.type.new.js + ([_$a-zA-Z][_$\w.]*?)([_$a-zA-Z][_$\w]*) + + + 1 + + name + entity.name.type.new.js + + captures + From 2638cfc7a1ae7cdb01d4836175a0e952d4439b9f Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 4 Feb 2014 19:10:55 +1100 Subject: [PATCH 051/202] fixed 'new' bug when matching constructor method names --- JavaScriptNext.YAML-tmLanguage | 6 +++--- JavaScriptNext.tmLanguage | 17 ++++++++--------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 64f9e98..903b4e8 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -324,9 +324,9 @@ repository: end: (?![_$a-zA-Z][_$\w.]*) patterns: - include: '#support' - - match: ([_$a-zA-Z][_$\w.]*?)([_$a-zA-Z][_$\w]*) - - captures: - '1': {name: entity.name.type.new.js} + - match: ([_$a-zA-Z][_$\w.]*\.)?([_$a-zA-Z][_$\w]*) + captures: + '2': {name: entity.name.type.new.js} - name: storage.type.js match: \b(var|let|const)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index fa9cd4b..245b454 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -921,17 +921,16 @@ #support - match - ([_$a-zA-Z][_$\w.]*?)([_$a-zA-Z][_$\w]*) - - - 1 + captures - name - entity.name.type.new.js + 2 + + name + entity.name.type.new.js + - captures - + match + ([_$a-zA-Z][_$\w.]*\.)?([_$a-zA-Z][_$\w]*) From cc6fbc5de9da453d00a7f29c8e620e843991a5c4 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 7 Feb 2014 13:27:52 +1100 Subject: [PATCH 052/202] removed duplicate general function definition; moved 'literal-function-constructor' above 'literal-function-call' so function definitions are detected first (otherwise the 'function' keyword can be confused with a method name) --- JavaScriptNext.YAML-tmLanguage | 17 +---------------- JavaScriptNext.tmLanguage | 32 ++------------------------------ 2 files changed, 3 insertions(+), 46 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 903b4e8..a8af329 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -113,9 +113,9 @@ repository: - include: '#literal-module' # before function calls, to differentiate methods from them - include: '#literal-method' + - include: '#literal-function-constructor' - include: '#literal-function-call' - - include: '#literal-function-constructor' - include: '#literal-labels' - include: '#literal-variable' @@ -282,21 +282,6 @@ repository: '2': {name: meta.group.braces.round.function.arguments.js} '3': {name: meta.brace.round.js} - # e.g. function(one,two,...)\n?{...} - - name: meta.function.js - begin: |- - (?x) - \b(function\*?) - (?= - (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name - \(.*?\) # The properties that the function accepts - ) - beginCaptures: - '1': {name: storage.type.function.js} - end: (?<=})(\s*\n)? - patterns: - - include: source.js - # ES6 methods, e.g. abc(x, y, z){ - name: meta.method.js match: |- diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 245b454..f57d9e8 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -304,11 +304,11 @@ include - #literal-function-call + #literal-function-constructor include - #literal-function-constructor + #literal-function-call include @@ -1225,34 +1225,6 @@ name meta.function-call.method.without-arguments.js - - begin - (?x) - \b(function\*?) - (?= - (?:\b(?:[_$a-zA-Z][_$\w]*))? \s* # The function name - \(.*?\) # The properties that the function accepts - ) - beginCaptures - - 1 - - name - storage.type.function.js - - - end - (?<=})(\s*\n)? - name - meta.function.js - patterns - - - include - source.js - - - captures From 6a3b977a98b079f2cf4c53b03565a7b0159ece37 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 7 Feb 2014 13:32:27 +1100 Subject: [PATCH 053/202] added literal-prototype-constructor --- JavaScriptNext.YAML-tmLanguage | 31 ++++++------ JavaScriptNext.tmLanguage | 86 +++++++++++++++++++--------------- 2 files changed, 65 insertions(+), 52 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index a8af329..ed9fc81 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -113,6 +113,7 @@ repository: - include: '#literal-module' # before function calls, to differentiate methods from them - include: '#literal-method' + - include: '#literal-prototype-constructor' - include: '#literal-function-constructor' - include: '#literal-function-call' @@ -174,6 +175,22 @@ repository: - name: entity.name.function.js match: ([_$a-zA-Z][_$\w]*)? + literal-prototype-constructor: + patterns: + # e.g. Sound.prototype = { } when extending an object + - name: meta.prototype.declaration.js + match: ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* + captures: + '1': {name: entity.name.class.js} + '2': {name: support.constant.js} + + # e.g. Sound.prototype + - name: meta.prototype.js + match: ([_$a-zA-Z][_$\w]*)\.(prototype) + captures: + '1': {name: entity.name.class.js} + '2': {name: support.constant.js} + literal-function-constructor: patterns: # e.g. function myFunc(arg) { } @@ -186,13 +203,6 @@ repository: '4': {name: variable.parameter.function.js} '5': {name: punctuation.definition.parameters.end.js} - # e.g. Sound.prototype = { } when extending an object - - name: meta.prototype.declaration.js - match: ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* - captures: - '1': {name: entity.name.class.js} - '2': {name: support.constant.js} - # e.g. Sound.prototype.play = function() { } - name: meta.prototype.function.js match: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) @@ -205,13 +215,6 @@ repository: '6': {name: variable.parameter.function.js} '7': {name: punctuation.definition.parameters.end.js} - # e.g. Sound.prototype - - name: meta.prototype.js - match: ([_$a-zA-Z][_$\w]*)\.(prototype) - captures: - '1': {name: entity.name.class.js} - '2': {name: support.constant.js} - # e.g. Sound.prototype.play = myfunc - name: meta.function.js match: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s* diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index f57d9e8..b648f16 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -302,6 +302,10 @@ include #literal-method + + include + #literal-prototype-constructor + include #literal-function-constructor @@ -635,25 +639,6 @@ name meta.function.js - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - support.constant.js - - - match - ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* - name - meta.prototype.declaration.js - captures @@ -698,25 +683,6 @@ name meta.prototype.function.js - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - support.constant.js - - - match - ([_$a-zA-Z][_$\w]*)\.(prototype) - name - meta.prototype.js - captures @@ -1320,6 +1286,50 @@ + literal-prototype-constructor + + patterns + + + captures + + 1 + + name + entity.name.class.js + + 2 + + name + support.constant.js + + + match + ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* + name + meta.prototype.declaration.js + + + captures + + 1 + + name + entity.name.class.js + + 2 + + name + support.constant.js + + + match + ([_$a-zA-Z][_$\w]*)\.(prototype) + name + meta.prototype.js + + + literal-punctuation patterns From 7a1f44f901701a426105c64e525eb54f77f512e8 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 7 Feb 2014 13:33:24 +1100 Subject: [PATCH 054/202] moved 'literal-method' after function constructors --- JavaScriptNext.YAML-tmLanguage | 4 ++-- JavaScriptNext.tmLanguage | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index ed9fc81..2545c70 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -111,10 +111,10 @@ repository: - include: '#literal-class' - include: '#literal-module' - # before function calls, to differentiate methods from them - - include: '#literal-method' - include: '#literal-prototype-constructor' - include: '#literal-function-constructor' + # before function calls & after function constructors, to differentiate methods from them + - include: '#literal-method' - include: '#literal-function-call' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index b648f16..08d9f2f 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -300,15 +300,15 @@ include - #literal-method + #literal-prototype-constructor include - #literal-prototype-constructor + #literal-function-constructor include - #literal-function-constructor + #literal-method include From cfdb01449cc975a38b3b073cdd8f450281008827 Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 26 Feb 2014 17:42:09 +1100 Subject: [PATCH 055/202] fixed meta.property.js (e.g. 'a[0] instanceof Array') --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 2545c70..fa6d88b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -590,7 +590,7 @@ repository: '1': {name: variable.other.object.js} - name: meta.property.js - match: (?<=[\.\]])\s*[_$a-zA-Z][_$\w]* + match: (?<=[\.])\s*[_$a-zA-Z][_$\w]* captures: '0': {name: variable.other.property.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 08d9f2f..e6163a6 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1653,7 +1653,7 @@ match - (?<=[\.\]])\s*[_$a-zA-Z][_$\w]* + (?<=[\.])\s*[_$a-zA-Z][_$\w]* name meta.property.js From 6788e1e8ca0265578574b2dcc6960e5c418c212c Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 08:52:22 +1100 Subject: [PATCH 056/202] added 'function-constructor-parameters' which fixes many bugs associated with function parameters --- JavaScriptNext.YAML-tmLanguage | 146 +++++++------ JavaScriptNext.tmLanguage | 384 +++++++++++++++------------------ 2 files changed, 246 insertions(+), 284 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index fa6d88b..a3da288 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -13,29 +13,6 @@ patterns: - include: '#special' repository: - arrow-function: - patterns: - - name: arrow.function.js - patterns: - # e.g. (args) => - - name: storage.type.function.arrow.js - match: |- - (?x) - \s* - ( - (?: - (\() (.*?)? (\)))| - ([_$a-zA-Z][_$\w]* - ) - )\s*(=>) - captures: - '1': {name: entity.arrow.function.js} - '2': {name: punctuation.definition.parameters.begin.js} - '3': {name: variable.parameter.function.arrow.js} - '4': {name: punctuation.definition.parameters.end.js} - '5': {name: variable.parameter.function.arrow.js} - '6': {name: punctuation.definition.arrow.js} - brackets: patterns: - name: meta.function-call.method.with-arguments.js @@ -94,6 +71,23 @@ repository: '0': {name: punctuation.definition.comment.html.js} '2': {name: punctuation.definition.comment.html.js} + function-constructor-parameters: + patterns: + - begin: (\() + beginCaptures: + '1': {name: punctuation.definition.parameters.begin.js} + end: (\)) + endCaptures: + '1': {name: punctuation.definition.parameters.end.js} + patterns: + - name: variable.parameter.function.js + match: |- + (?x) + [_$a-zA-Z][_$\w]* + - name: punctuation.separator.parameter.function.js + match: ',' + - include: '#comments' + core: patterns: - include: '#leading-space' @@ -107,7 +101,7 @@ repository: - include: '#literal-keywords' - - include: '#arrow-function' + - include: '#literal-arrow-function-constructor' - include: '#literal-class' - include: '#literal-module' @@ -158,13 +152,13 @@ repository: # getter/setter - name: meta.accessor.js - match: \b([gs]et\s*)\b([_$a-zA-Z][_$\w]*)\s*(\()(.*?)(\)) - captures: + begin: \b(get|set)\s*\b([_$a-zA-Z][_$\w]*)\s* + beginCaptures: '1': {name: storage.type.accessor.js} '2': {name: entity.name.accessor.js} - '3': {name: punctuation.definition.parameters.begin.js} - '4': {name: variable.parameter.accessor.js} - '5': {name: punctuation.definition.parameters.end.js} + end: (?<=\)) + patterns: + - include: '#function-constructor-parameters' literal-function-call: patterns: @@ -193,61 +187,53 @@ repository: literal-function-constructor: patterns: - # e.g. function myFunc(arg) { } + # e.g. function play(arg1, arg2) { } - name: meta.function.js - match: \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(\()(.*?)(\)) - captures: + begin: \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s* + beginCaptures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} - '3': {name: punctuation.definition.parameters.begin.js} - '4': {name: variable.parameter.function.js} - '5': {name: punctuation.definition.parameters.end.js} + end: (?<=\)) + patterns: + - include: '#function-constructor-parameters' - # e.g. Sound.prototype.play = function() { } + # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js - match: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) - captures: + begin: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s* + beginCaptures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} '3': {name: entity.name.function.js} '4': {name: storage.type.function.js} - '5': {name: punctuation.definition.parameters.begin.js} - '6': {name: variable.parameter.function.js} - '7': {name: punctuation.definition.parameters.end.js} - - # e.g. Sound.prototype.play = myfunc - - name: meta.function.js - match: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s* - captures: - '1': {name: entity.name.class.js} - '2': {name: support.constant.js} - '3': {name: entity.name.function.js} + end: (?<=\)) + patterns: + - include: '#function-constructor-parameters' - # e.g. .play = function() { } + # e.g. .play = function(arg1, arg2) { } - name: meta.function.js - match: \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s*(\()(.*?)(\)) + match: \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s* captures: '1': {name: entity.name.function.js} '2': {name: storage.type.function.js} '3': {name: entity.name.function.js} - '4': {name: punctuation.definition.parameters.begin.js} - '5': {name: variable.parameter.function.js} - '6': {name: punctuation.definition.parameters.end.js} + end: (?<=\)) + patterns: + - include: '#function-constructor-parameters' - # e.g. foobar: function() { } + # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js - match: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) + match: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)?\s* captures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} '3': {name: storage.type.function.js} - '4': {name: punctuation.definition.parameters.begin.js} - '5': {name: variable.parameter.function.js} - '6': {name: punctuation.definition.parameters.end.js} + end: (?<=\)) + patterns: + - include: '#function-constructor-parameters' - # e.g. "foo": function + # e.g. "play": function(arg1, arg2) { } - name: meta.function.json.js - match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) + match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)?\s* captures: '1': {name: string.quoted.single.js} '2': {name: punctuation.definition.string.begin.js} @@ -259,9 +245,24 @@ repository: '8': {name: punctuation.definition.string.end.js} '9': {name: punctuation.separator.key-value.js} '10': {name: storage.type.function.js} - '11': {name: punctuation.definition.parameters.begin.js} - '12': {name: variable.parameter.function.js} - '13': {name: punctuation.definition.parameters.end.js} + end: (?<=\)) + patterns: + - include: '#function-constructor-parameters' + + literal-arrow-function-constructor: + patterns: + - name: arrow.function.js + patterns: + # e.g. (args) => + - name: storage.type.function.arrow.js + begin: |- + (?x) + (?=\([^)]+\)\s*(=>)) + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: punctuation.definition.arrow.js} + patterns: + - include: '#function-constructor-parameters' literal-method: patterns: @@ -285,23 +286,20 @@ repository: '2': {name: meta.group.braces.round.function.arguments.js} '3': {name: meta.brace.round.js} - # ES6 methods, e.g. abc(x, y, z){ + # ES6 methods, e.g. play(arg1, arg2) { } - name: meta.method.js - match: |- + begin: |- (?x) (? repository - arrow-function - - patterns - - - name - arrow.function.js - patterns - - - captures - - 1 - - name - entity.arrow.function.js - - 2 - - name - punctuation.definition.parameters.begin.js - - 3 - - name - variable.parameter.function.arrow.js - - 4 - - name - punctuation.definition.parameters.end.js - - 5 - - name - variable.parameter.function.arrow.js - - 6 - - name - punctuation.definition.arrow.js - - - match - (?x) - \s* - ( - (?: - (\() (.*?)? (\)))| - ([_$a-zA-Z][_$\w]* - ) - )\s*(=>) - name - storage.type.function.arrow.js - - - - - brackets patterns @@ -288,7 +229,7 @@ include - #arrow-function + #literal-arrow-function-constructor include @@ -328,6 +269,61 @@ + function-constructor-parameters + + patterns + + + begin + (\() + beginCaptures + + 1 + + name + punctuation.definition.parameters.begin.js + + + end + (\)) + endCaptures + + 1 + + name + punctuation.definition.parameters.end.js + + + patterns + + + match + (?x) + [_$a-zA-Z][_$\w]* + name + variable.parameter.function.js + + + match + (?x) + [_$a-zA-Z][_$\w]* + name + variable.parameter.optional.function.js + + + match + , + name + punctuation.separator.parameter.function.js + + + include + #comments + + + + + leading-space patterns @@ -469,6 +465,43 @@ + literal-arrow-function-constructor + + patterns + + + name + arrow.function.js + patterns + + + begin + (?x) + (?=\([^)]+\)\s*(=>)) + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + punctuation.definition.arrow.js + + + name + storage.type.function.arrow.js + patterns + + + include + #function-constructor-parameters + + + + + + + literal-class patterns @@ -543,7 +576,9 @@ storage.modifier.js - captures + begin + \b(get|set)\s*\b([_$a-zA-Z][_$\w]*)\s* + beginCaptures 1 @@ -555,26 +590,18 @@ name entity.name.accessor.js - 3 - - name - punctuation.definition.parameters.begin.js - - 4 - - name - variable.parameter.accessor.js - - 5 - - name - punctuation.definition.parameters.end.js - - match - \b([gs]et\s*)\b([_$a-zA-Z][_$\w]*)\s*(\()(.*?)(\)) + end + (?<=\)) name meta.accessor.js + patterns + + + include + #function-constructor-parameters + + @@ -606,7 +633,9 @@ patterns - captures + begin + \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s* + beginCaptures 1 @@ -618,29 +647,23 @@ name entity.name.function.js - 3 - - name - punctuation.definition.parameters.begin.js - - 4 - - name - variable.parameter.function.js - - 5 - - name - punctuation.definition.parameters.end.js - - match - \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s*(\()(.*?)(\)) + end + (?<=\)) name meta.function.js + patterns + + + include + #function-constructor-parameters + + - captures + begin + ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s* + beginCaptures 1 @@ -662,50 +685,18 @@ name storage.type.function.js - 5 - - name - punctuation.definition.parameters.begin.js - - 6 - - name - variable.parameter.function.js - - 7 - - name - punctuation.definition.parameters.end.js - - match - ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s*(\()(.*?)(\)) + end + (?<=\)) name meta.prototype.function.js - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - support.constant.js - - 3 + patterns + - name - entity.name.function.js + include + #function-constructor-parameters - - match - ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s* - name - meta.function.js + captures @@ -725,26 +716,20 @@ name entity.name.function.js - 4 - - name - punctuation.definition.parameters.begin.js - - 5 - - name - variable.parameter.function.js - - 6 - - name - punctuation.definition.parameters.end.js - + end + (?<=\)) match - \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s*(\()(.*?)(\)) + \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s* name meta.function.js + patterns + + + include + #function-constructor-parameters + + captures @@ -764,26 +749,20 @@ name storage.type.function.js - 4 - - name - punctuation.definition.parameters.begin.js - - 5 - - name - variable.parameter.function.js - - 6 - - name - punctuation.definition.parameters.end.js - + end + (?<=\)) match - \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) + \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)?\s* name meta.function.json.js + patterns + + + include + #function-constructor-parameters + + captures @@ -798,21 +777,6 @@ name storage.type.function.js - 11 - - name - punctuation.definition.parameters.begin.js - - 12 - - name - variable.parameter.function.js - - 13 - - name - punctuation.definition.parameters.end.js - 2 name @@ -854,10 +818,19 @@ punctuation.separator.key-value.js + end + (?<=\)) match - (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)?\s*(\()(.*?)(\)) + (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)?\s* name meta.function.json.js + patterns + + + include + #function-constructor-parameters + + @@ -1192,41 +1165,32 @@ meta.function-call.method.without-arguments.js - captures + begin + (?x) + (?<![_$\w]) + (?<!function\s) # An approximation due to fixed width look-behind, but usually good enough + ([_$a-zA-Z][_$\w]*) + \s* + (?=\([^)]+\)\s*\{) + beginCaptures 1 name entity.name.method.js - 2 - - name - punctuation.definition.parameters.begin.js - - 3 - - name - variable.parameter.method.js - - 4 - - name - punctuation.definition.parameters.end.js - - match - (?x) - (?<![_$\w]) - (?<!function\s) # An approximation due to fixed width look-behind, but usually good enough - ([_$a-zA-Z][_$\w]*) - (\() - (?:\s*([^()]*?))?\s* - (\)) - \s* - (?={) + end + (?<=\)) name meta.method.js + patterns + + + include + #function-constructor-parameters + + From 5926b5950167900b2fa3a3b7a167a9ac7f530203 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 09:02:58 +1100 Subject: [PATCH 057/202] fixed bugs in literal-function-constructor --- JavaScriptNext.YAML-tmLanguage | 4 ++-- JavaScriptNext.tmLanguage | 11 ++--------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index a3da288..b59bfd1 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -222,7 +222,7 @@ repository: # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js - match: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)?\s* + match: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)\s* captures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} @@ -233,7 +233,7 @@ repository: # e.g. "play": function(arg1, arg2) { } - name: meta.function.json.js - match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)?\s* + match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)\s* captures: '1': {name: string.quoted.single.js} '2': {name: punctuation.definition.string.begin.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index cb001e9..949eaaa 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -303,13 +303,6 @@ name variable.parameter.function.js - - match - (?x) - [_$a-zA-Z][_$\w]* - name - variable.parameter.optional.function.js - match , @@ -753,7 +746,7 @@ end (?<=\)) match - \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)?\s* + \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)\s* name meta.function.json.js patterns @@ -821,7 +814,7 @@ end (?<=\)) match - (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)?\s* + (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)\s* name meta.function.json.js patterns From b712febccfdbc6336994492a6200f60072dd9b77 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 09:28:53 +1100 Subject: [PATCH 058/202] fixed bugs with arrow functions; tidied up some other function definition matchers --- JavaScriptNext.YAML-tmLanguage | 61 ++++++++++++------------ JavaScriptNext.tmLanguage | 84 +++++++++++++++------------------- 2 files changed, 67 insertions(+), 78 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index b59bfd1..e7348c4 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -71,7 +71,7 @@ repository: '0': {name: punctuation.definition.comment.html.js} '2': {name: punctuation.definition.comment.html.js} - function-constructor-parameters: + function-definition-parameters: patterns: - begin: (\() beginCaptures: @@ -91,9 +91,8 @@ repository: core: patterns: - include: '#leading-space' - - include: '#brackets' - # literals should precede operators to avoid ambiguoties + # literals should precede operators to avoid ambiguities - include: '#literal-number' - include: '#literal-string' - include: '#literal-quasi' @@ -101,13 +100,12 @@ repository: - include: '#literal-keywords' - - include: '#literal-arrow-function-constructor' - - include: '#literal-class' - include: '#literal-module' - - include: '#literal-prototype-constructor' - - include: '#literal-function-constructor' - # before function calls & after function constructors, to differentiate methods from them + - include: '#literal-prototype-storage' + - include: '#literal-arrow-function' + - include: '#literal-function-storage' + # before function calls & after function definitions, to differentiate methods from them - include: '#literal-method' - include: '#literal-function-call' @@ -116,6 +114,8 @@ repository: - include: '#literal-variable' - include: '#literal-punctuation' + - include: '#brackets' + literal-module: patterns: # module names are defined using strings @@ -158,7 +158,7 @@ repository: '2': {name: entity.name.accessor.js} end: (?<=\)) patterns: - - include: '#function-constructor-parameters' + - include: '#function-definition-parameters' literal-function-call: patterns: @@ -169,7 +169,7 @@ repository: - name: entity.name.function.js match: ([_$a-zA-Z][_$\w]*)? - literal-prototype-constructor: + literal-prototype-storage: patterns: # e.g. Sound.prototype = { } when extending an object - name: meta.prototype.declaration.js @@ -185,7 +185,7 @@ repository: '1': {name: entity.name.class.js} '2': {name: support.constant.js} - literal-function-constructor: + literal-function-storage: patterns: # e.g. function play(arg1, arg2) { } - name: meta.function.js @@ -195,7 +195,7 @@ repository: '2': {name: entity.name.function.js} end: (?<=\)) patterns: - - include: '#function-constructor-parameters' + - include: '#function-definition-parameters' # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js @@ -207,7 +207,7 @@ repository: '4': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-constructor-parameters' + - include: '#function-definition-parameters' # e.g. .play = function(arg1, arg2) { } - name: meta.function.js @@ -218,7 +218,7 @@ repository: '3': {name: entity.name.function.js} end: (?<=\)) patterns: - - include: '#function-constructor-parameters' + - include: '#function-definition-parameters' # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js @@ -229,7 +229,7 @@ repository: '3': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-constructor-parameters' + - include: '#function-definition-parameters' # e.g. "play": function(arg1, arg2) { } - name: meta.function.json.js @@ -247,22 +247,20 @@ repository: '10': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-constructor-parameters' + - include: '#function-definition-parameters' - literal-arrow-function-constructor: + literal-arrow-function: patterns: - - name: arrow.function.js + # e.g. (args) => { } + - name: meta.function.arrow.js + begin: |- + (?x) + (?=\([^)]*\)\s*(=>)) + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: storage.type.function.arrow.js} patterns: - # e.g. (args) => - - name: storage.type.function.arrow.js - begin: |- - (?x) - (?=\([^)]+\)\s*(=>)) - end: (?<=\))\s*(=>) - endCaptures: - '1': {name: punctuation.definition.arrow.js} - patterns: - - include: '#function-constructor-parameters' + - include: '#function-definition-parameters' literal-method: patterns: @@ -290,16 +288,15 @@ repository: - name: meta.method.js begin: |- (?x) - (?include #leading-space - - include - #brackets - include #literal-number @@ -229,23 +225,23 @@ include - #literal-arrow-function-constructor + #literal-class include - #literal-class + #literal-module include - #literal-module + #literal-prototype-storage include - #literal-prototype-constructor + #literal-arrow-function include - #literal-function-constructor + #literal-function-storage include @@ -267,9 +263,13 @@ include #literal-punctuation + + include + #brackets + - function-constructor-parameters + function-definition-parameters patterns @@ -458,38 +458,31 @@ - literal-arrow-function-constructor + literal-arrow-function patterns + begin + (?x) + (?=\([^)]*\)\s*(=>)) + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + name - arrow.function.js + meta.function.arrow.js patterns - begin - (?x) - (?=\([^)]+\)\s*(=>)) - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - punctuation.definition.arrow.js - - - name - storage.type.function.arrow.js - patterns - - - include - #function-constructor-parameters - - + include + #function-definition-parameters @@ -592,7 +585,7 @@ include - #function-constructor-parameters + #function-definition-parameters @@ -621,7 +614,7 @@ - literal-function-constructor + literal-function-storage patterns @@ -649,7 +642,7 @@ include - #function-constructor-parameters + #function-definition-parameters @@ -687,7 +680,7 @@ include - #function-constructor-parameters + #function-definition-parameters @@ -720,7 +713,7 @@ include - #function-constructor-parameters + #function-definition-parameters @@ -753,7 +746,7 @@ include - #function-constructor-parameters + #function-definition-parameters @@ -821,7 +814,7 @@ include - #function-constructor-parameters + #function-definition-parameters @@ -1160,11 +1153,10 @@ begin (?x) - (?<![_$\w]) (?<!function\s) # An approximation due to fixed width look-behind, but usually good enough - ([_$a-zA-Z][_$\w]*) + \b([_$a-zA-Z][_$\w]*) \s* - (?=\([^)]+\)\s*\{) + (?=\([^)]*\)\s*\{) beginCaptures 1 @@ -1181,7 +1173,7 @@ include - #function-constructor-parameters + #function-definition-parameters @@ -1243,7 +1235,7 @@ - literal-prototype-constructor + literal-prototype-storage patterns From bcbc2971752f1720829f110b8f107c3080c37db1 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 09:33:27 +1100 Subject: [PATCH 059/202] re-ordered some definitions so that meta.function.json.js works with quoted strings --- JavaScriptNext.YAML-tmLanguage | 11 +++++++---- JavaScriptNext.tmLanguage | 22 +++++++++++----------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index e7348c4..2c6de6a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -92,12 +92,10 @@ repository: patterns: - include: '#leading-space' - # literals should precede operators to avoid ambiguities - - include: '#literal-number' - - include: '#literal-string' - - include: '#literal-quasi' + # before operators to avoid ambiguities - include: '#literal-regex' + # keywords/operators - include: '#literal-keywords' - include: '#literal-class' @@ -108,6 +106,11 @@ repository: # before function calls & after function definitions, to differentiate methods from them - include: '#literal-method' + # after literal-function-storage which requires strings in some cases + - include: '#literal-string' + - include: '#literal-number' + - include: '#literal-quasi' + - include: '#literal-function-call' - include: '#literal-labels' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 3a6d011..489ec81 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -205,47 +205,47 @@ include - #literal-number + #literal-regex include - #literal-string + #literal-keywords include - #literal-quasi + #literal-class include - #literal-regex + #literal-module include - #literal-keywords + #literal-prototype-storage include - #literal-class + #literal-arrow-function include - #literal-module + #literal-function-storage include - #literal-prototype-storage + #literal-method include - #literal-arrow-function + #literal-string include - #literal-function-storage + #literal-number include - #literal-method + #literal-quasi include From 2e354393ab2ba77b21f97a94909080ef60cbcdac Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 11:14:01 +1100 Subject: [PATCH 060/202] fixed bug in 'meta.function.json.js' --- JavaScriptNext.YAML-tmLanguage | 40 ++++++++++++++++++------------- JavaScriptNext.tmLanguage | 43 ++++++++++++++++++++-------------- 2 files changed, 49 insertions(+), 34 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 2c6de6a..3d4d375 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -71,7 +71,7 @@ repository: '0': {name: punctuation.definition.comment.html.js} '2': {name: punctuation.definition.comment.html.js} - function-definition-parameters: + function-declaration-parameters: patterns: - begin: (\() beginCaptures: @@ -103,7 +103,7 @@ repository: - include: '#literal-prototype-storage' - include: '#literal-arrow-function' - include: '#literal-function-storage' - # before function calls & after function definitions, to differentiate methods from them + # before function calls & after function declarations, to differentiate methods from them - include: '#literal-method' # after literal-function-storage which requires strings in some cases @@ -161,7 +161,7 @@ repository: '2': {name: entity.name.accessor.js} end: (?<=\)) patterns: - - include: '#function-definition-parameters' + - include: '#function-declaration-parameters' literal-function-call: patterns: @@ -198,7 +198,7 @@ repository: '2': {name: entity.name.function.js} end: (?<=\)) patterns: - - include: '#function-definition-parameters' + - include: '#function-declaration-parameters' # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js @@ -210,34 +210,42 @@ repository: '4': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-definition-parameters' + - include: '#function-declaration-parameters' # e.g. .play = function(arg1, arg2) { } - name: meta.function.js - match: \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s* - captures: + begin: \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s* + beginCaptures: '1': {name: entity.name.function.js} '2': {name: storage.type.function.js} '3': {name: entity.name.function.js} end: (?<=\)) patterns: - - include: '#function-definition-parameters' + - include: '#function-declaration-parameters' # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js - match: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)\s* - captures: + begin: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)\s* + beginCaptures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} '3': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-definition-parameters' + - include: '#function-declaration-parameters' # e.g. "play": function(arg1, arg2) { } - name: meta.function.json.js - match: (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)\s* - captures: + begin: |- + (?x) + (?: + ((')(.*?)('))| + ((")(.*?)(")) + ) + \s*(:) + \s*\b(function\*?) + \s* + beginCaptures: '1': {name: string.quoted.single.js} '2': {name: punctuation.definition.string.begin.js} '3': {name: entity.name.function.js} @@ -250,7 +258,7 @@ repository: '10': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-definition-parameters' + - include: '#function-declaration-parameters' literal-arrow-function: patterns: @@ -263,7 +271,7 @@ repository: endCaptures: '1': {name: storage.type.function.arrow.js} patterns: - - include: '#function-definition-parameters' + - include: '#function-declaration-parameters' literal-method: patterns: @@ -299,7 +307,7 @@ repository: '1': {name: entity.name.method.js} end: (?<=\)) patterns: - - include: '#function-definition-parameters' + - include: '#function-declaration-parameters' literal-keywords: patterns: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 489ec81..873d367 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -269,7 +269,7 @@ - function-definition-parameters + function-declaration-parameters patterns @@ -482,7 +482,7 @@ include - #function-definition-parameters + #function-declaration-parameters @@ -585,7 +585,7 @@ include - #function-definition-parameters + #function-declaration-parameters @@ -642,7 +642,7 @@ include - #function-definition-parameters + #function-declaration-parameters @@ -680,12 +680,14 @@ include - #function-definition-parameters + #function-declaration-parameters - captures + begin + \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s* + beginCaptures 1 @@ -705,20 +707,20 @@ end (?<=\)) - match - \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s* name meta.function.js patterns include - #function-definition-parameters + #function-declaration-parameters - captures + begin + \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)\s* + beginCaptures 1 @@ -738,20 +740,27 @@ end (?<=\)) - match - \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)\s* name meta.function.json.js patterns include - #function-definition-parameters + #function-declaration-parameters - captures + begin + (?x) + (?: + ((')(.*?)('))| + ((")(.*?)(")) + ) + \s*(:) + \s*\b(function\*?) + \s* + beginCaptures 1 @@ -806,15 +815,13 @@ end (?<=\)) - match - (?:((')(.*?)('))|((")(.*?)(")))\s*(:)\s*\b(function\*?)\s* name meta.function.json.js patterns include - #function-definition-parameters + #function-declaration-parameters @@ -1173,7 +1180,7 @@ include - #function-definition-parameters + #function-declaration-parameters From daa3c0824771c95e6426af4e0c79e2425f5dca70 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 11:15:58 +1100 Subject: [PATCH 061/202] fixed string escape bugs in 'meta.function.json.js' --- JavaScriptNext.YAML-tmLanguage | 4 ++-- JavaScriptNext.tmLanguage | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 3d4d375..ee2d31d 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -239,8 +239,8 @@ repository: begin: |- (?x) (?: - ((')(.*?)('))| - ((")(.*?)(")) + ((')(.*?)(?begin (?x) (?: - ((')(.*?)('))| - ((")(.*?)(")) + ((')(.*?)(?<!\\)('))| + ((")(.*?)(?<!\\)(")) ) \s*(:) \s*\b(function\*?) From 8f4a531792691e1f90d9e9d731e95b57862d1f0d Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 19:43:43 +1100 Subject: [PATCH 062/202] re-ordered literal-prototype-storage so it works --- JavaScriptNext.YAML-tmLanguage | 3 ++- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index ee2d31d..34e5173 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -100,11 +100,12 @@ repository: - include: '#literal-class' - include: '#literal-module' - - include: '#literal-prototype-storage' - include: '#literal-arrow-function' - include: '#literal-function-storage' # before function calls & after function declarations, to differentiate methods from them - include: '#literal-method' + # after literal-function-storage, which includes some prototype strings + - include: '#literal-prototype-storage' # after literal-function-storage which requires strings in some cases - include: '#literal-string' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 7f25af8..57ae0e8 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -219,10 +219,6 @@ include #literal-module - - include - #literal-prototype-storage - include #literal-arrow-function @@ -235,6 +231,10 @@ include #literal-method + + include + #literal-prototype-storage + include #literal-string From 84ed0130f15c11bc85b578744cef31f862edffcf Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 20:36:53 +1100 Subject: [PATCH 063/202] tidied up core --- JavaScriptNext.YAML-tmLanguage | 92 +++++++++--------- JavaScriptNext.tmLanguage | 164 ++++++++++++++++++--------------- 2 files changed, 142 insertions(+), 114 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 34e5173..0ec2957 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -92,32 +92,36 @@ repository: patterns: - include: '#leading-space' - # before operators to avoid ambiguities - - include: '#literal-regex' + # regex + - include: '#literal-regex' # before operators to avoid ambiguities # keywords/operators - include: '#literal-keywords' + - include: '#literal-language-variable' + - include: '#literal-language-constant' + # modules/classes/functions - include: '#literal-class' - include: '#literal-module' - include: '#literal-arrow-function' - include: '#literal-function-storage' - # before function calls & after function declarations, to differentiate methods from them - - include: '#literal-method' - # after literal-function-storage, which includes some prototype strings - - include: '#literal-prototype-storage' + - include: '#literal-method' # before function calls & after function declarations, to differentiate methods from them + - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings # after literal-function-storage which requires strings in some cases - include: '#literal-string' - include: '#literal-number' - include: '#literal-quasi' + # function calls - include: '#literal-function-call' + # punctuation - include: '#literal-labels' - include: '#literal-variable' - include: '#literal-punctuation' + # brackets - include: '#brackets' literal-module: @@ -310,6 +314,46 @@ repository: patterns: - include: '#function-declaration-parameters' + literal-language-variable: + patterns: + - name: variable.language.arguments.js + match: (?=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^=' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 57ae0e8..cda9776 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -211,6 +211,14 @@ include #literal-keywords + + include + #literal-language-variable + + + include + #literal-language-constant + include #literal-class @@ -908,78 +916,6 @@ name keyword.operator.js - - match - \btrue\b - name - constant.language.boolean.true.js - - - match - \bfalse\b - name - constant.language.boolean.false.js - - - match - \bnull\b - name - constant.language.null.js - - - match - \bundefined\b - name - constant.language.undefined.js - - - match - \bNaN\b - name - constant.language.nan.js - - - match - (?<!\.)\b(arguments)\b - name - variable.language.arguments.js - - - match - (?<!\.)\b(super)\b - name - variable.language.super.js - - - match - (?<!\.)\b(this)\b - name - variable.language.this.js - - - match - (?<!\.)\b(self)\b - name - storage.self.js - - - match - (?<=\.)\b(__proto__)\b - name - variable.language.proto.js - - - match - (?<=\.)\b(constructor)\b - name - variable.language.constructor.js - - - match - (?<=\.)\b(prototype)\b - name - variable.language.prototype.js - match !|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^= @@ -1109,6 +1045,90 @@ + literal-language-constant + + patterns + + + match + \btrue\b + name + constant.language.boolean.true.js + + + match + \bfalse\b + name + constant.language.boolean.false.js + + + match + \bnull\b + name + constant.language.null.js + + + match + \bundefined\b + name + constant.language.undefined.js + + + match + \bNaN\b + name + constant.language.nan.js + + + + literal-language-variable + + patterns + + + match + (?<!\.)\b(arguments)\b + name + variable.language.arguments.js + + + match + (?<!\.)\b(super)\b + name + variable.language.super.js + + + match + (?<!\.)\b(this)\b + name + variable.language.this.js + + + match + (?<!\.)\b(self)\b + name + variable.language.self.js + + + match + (?<=\.)\b(__proto__)\b + name + variable.language.proto.js + + + match + (?<=\.)\b(constructor)\b + name + variable.language.constructor.js + + + match + (?<=\.)\b(prototype)\b + name + variable.language.prototype.js + + + literal-method patterns From a148a6e44b198467b61a264d277f5de8e83d8a22 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 27 Feb 2014 20:40:16 +1100 Subject: [PATCH 064/202] added symbol navigation --- Symbol List Banned.YAML-tmPreferences | 7 +++++++ Symbol List Banned.tmPreferences | 19 +++++++++++++++++++ Symbol List Function.YAML-tmPreferences | 7 +++++++ Symbol List Function.tmPreferences | 19 +++++++++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 Symbol List Banned.YAML-tmPreferences create mode 100644 Symbol List Banned.tmPreferences create mode 100644 Symbol List Function.YAML-tmPreferences create mode 100644 Symbol List Function.tmPreferences diff --git a/Symbol List Banned.YAML-tmPreferences b/Symbol List Banned.YAML-tmPreferences new file mode 100644 index 0000000..eef90e1 --- /dev/null +++ b/Symbol List Banned.YAML-tmPreferences @@ -0,0 +1,7 @@ +# [PackageDev] target_format: plist, ext: tmPreferences +name: Symbol List Banned +uuid: 71B2B356-23EC-43B8-80A7-CB32E8F2718F +scope: source.js meta.function-call, source.js meta.instance.constructor +settings: + showInSymbolList: '0' + showInIndexedSymbolList: '1' diff --git a/Symbol List Banned.tmPreferences b/Symbol List Banned.tmPreferences new file mode 100644 index 0000000..bcad4ab --- /dev/null +++ b/Symbol List Banned.tmPreferences @@ -0,0 +1,19 @@ + + + + + name + Symbol List Banned + scope + source.js meta.function-call, source.js meta.instance.constructor + settings + + showInIndexedSymbolList + 1 + showInSymbolList + 0 + + uuid + 71B2B356-23EC-43B8-80A7-CB32E8F2718F + + diff --git a/Symbol List Function.YAML-tmPreferences b/Symbol List Function.YAML-tmPreferences new file mode 100644 index 0000000..95299d3 --- /dev/null +++ b/Symbol List Function.YAML-tmPreferences @@ -0,0 +1,7 @@ +# [PackageDev] target_format: plist, ext: tmPreferences +name: Symbol List Function +uuid: B521FCF1-DDA6-4C69-8170-F6C2DE4C86CD +scope: source.js meta.prototype.function.js, source.js meta.function.json.js +settings: + showInSymbolList: '1' + symbolTransformation: s/\s+/ /g; diff --git a/Symbol List Function.tmPreferences b/Symbol List Function.tmPreferences new file mode 100644 index 0000000..529230a --- /dev/null +++ b/Symbol List Function.tmPreferences @@ -0,0 +1,19 @@ + + + + + name + Symbol List Function + scope + source.js meta.prototype.function.js, source.js meta.function.json.js + settings + + showInSymbolList + 1 + symbolTransformation + s/\s+/ /g; + + uuid + B521FCF1-DDA6-4C69-8170-F6C2DE4C86CD + + From 14e831570b7124047f113e05c25b6e39f1c99a3f Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 28 Feb 2014 09:03:29 +1100 Subject: [PATCH 065/202] renamed to 'meta.function.static.js' and match static classes in the symbol list --- JavaScriptNext.YAML-tmLanguage | 46 +++++++++------ JavaScriptNext.tmLanguage | 77 +++++++++++++++---------- Symbol List Function.YAML-tmPreferences | 2 +- Symbol List Function.tmPreferences | 2 +- 4 files changed, 75 insertions(+), 52 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 0ec2957..3a86656 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -92,13 +92,14 @@ repository: patterns: - include: '#leading-space' - # regex + # literals - include: '#literal-regex' # before operators to avoid ambiguities + - include: '#literal-number' + - include: '#literal-quasi' + - include: '#literal-language-constant' # keywords/operators - include: '#literal-keywords' - - include: '#literal-language-variable' - - include: '#literal-language-constant' # modules/classes/functions - include: '#literal-class' @@ -108,10 +109,9 @@ repository: - include: '#literal-method' # before function calls & after function declarations, to differentiate methods from them - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings - # after literal-function-storage which requires strings in some cases + # after literal-function-storage which requires the below in some cases - include: '#literal-string' - - include: '#literal-number' - - include: '#literal-quasi' + - include: '#literal-language-variable' # function calls - include: '#literal-function-call' @@ -217,16 +217,27 @@ repository: patterns: - include: '#function-declaration-parameters' - # e.g. .play = function(arg1, arg2) { } - - name: meta.function.js - begin: \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s* - beginCaptures: - '1': {name: entity.name.function.js} - '2': {name: storage.type.function.js} - '3': {name: entity.name.function.js} + # include symbol classes which not involve expressions + # e.g. Sound.play = function(arg1, arg2) { } + - name: meta.function.static.js + begin: >- + (?x) + (?= + ([_$a-zA-Z][_$\w]*)? + \.([_$a-zA-Z][_$\w]*)\s* + =\s* + (function\*?)\s* + ) end: (?<=\)) patterns: - - include: '#function-declaration-parameters' + - include: '#literal-language-variable' + - begin: \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s* + beginCaptures: + '1': {name: storage.type.function.js} + '2': {name: entity.name.function.js} + end: (?<=\)) + patterns: + - include: '#function-declaration-parameters' # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js @@ -246,10 +257,9 @@ repository: (?: ((')(.*?)(? include - #literal-keywords + #literal-number include - #literal-language-variable + #literal-quasi include #literal-language-constant + + include + #literal-keywords + include #literal-class @@ -249,11 +253,7 @@ include - #literal-number - - - include - #literal-quasi + #literal-language-variable include @@ -694,34 +694,48 @@ begin - \.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)( [_$a-zA-Z][_$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - storage.type.function.js - - 3 - - name - entity.name.function.js - - + (?x) + (?= + ([_$a-zA-Z][_$\w]*)? + \.([_$a-zA-Z][_$\w]*)\s* + =\s* + (function\*?)\s* + ) end (?<=\)) name - meta.function.js + meta.function.static.js patterns include - #function-declaration-parameters + #literal-language-variable + + + begin + \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s* + beginCaptures + + 1 + + name + storage.type.function.js + + 2 + + name + entity.name.function.js + + + end + (?<=\)) + patterns + + + include + #function-declaration-parameters + + @@ -764,10 +778,9 @@ (?: ((')(.*?)(?<!\\)('))| ((")(.*?)(?<!\\)(")) - ) - \s*(:) - \s*\b(function\*?) - \s* + )\s* + (:)\s* + \b(function\*?)\s* beginCaptures 1 diff --git a/Symbol List Function.YAML-tmPreferences b/Symbol List Function.YAML-tmPreferences index 95299d3..b7d29a0 100644 --- a/Symbol List Function.YAML-tmPreferences +++ b/Symbol List Function.YAML-tmPreferences @@ -1,7 +1,7 @@ # [PackageDev] target_format: plist, ext: tmPreferences name: Symbol List Function uuid: B521FCF1-DDA6-4C69-8170-F6C2DE4C86CD -scope: source.js meta.prototype.function.js, source.js meta.function.json.js +scope: source.js meta.prototype.function.js, source.js meta.function.js, source.js meta.function.static.js, source.js meta.function.json.js settings: showInSymbolList: '1' symbolTransformation: s/\s+/ /g; diff --git a/Symbol List Function.tmPreferences b/Symbol List Function.tmPreferences index 529230a..b8f76f4 100644 --- a/Symbol List Function.tmPreferences +++ b/Symbol List Function.tmPreferences @@ -5,7 +5,7 @@ name Symbol List Function scope - source.js meta.prototype.function.js, source.js meta.function.json.js + source.js meta.prototype.function.js, source.js meta.function.js, source.js meta.function.static.js, source.js meta.function.json.js settings showInSymbolList From 8ec65495521bba9d53b0c5058bccc90847bdb863 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 28 Feb 2014 09:10:28 +1100 Subject: [PATCH 066/202] added more symbols to the symbol list --- Symbol List Function.YAML-tmPreferences | 2 +- Symbol List Function.tmPreferences | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Symbol List Function.YAML-tmPreferences b/Symbol List Function.YAML-tmPreferences index b7d29a0..e0d1969 100644 --- a/Symbol List Function.YAML-tmPreferences +++ b/Symbol List Function.YAML-tmPreferences @@ -1,7 +1,7 @@ # [PackageDev] target_format: plist, ext: tmPreferences name: Symbol List Function uuid: B521FCF1-DDA6-4C69-8170-F6C2DE4C86CD -scope: source.js meta.prototype.function.js, source.js meta.function.js, source.js meta.function.static.js, source.js meta.function.json.js +scope: source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js settings: showInSymbolList: '1' symbolTransformation: s/\s+/ /g; diff --git a/Symbol List Function.tmPreferences b/Symbol List Function.tmPreferences index b8f76f4..4a59e75 100644 --- a/Symbol List Function.tmPreferences +++ b/Symbol List Function.tmPreferences @@ -5,7 +5,7 @@ name Symbol List Function scope - source.js meta.prototype.function.js, source.js meta.function.js, source.js meta.function.static.js, source.js meta.function.json.js + source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js settings showInSymbolList From cd3b1cab51b10061f40c3751f1f7e044f1445cf4 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 28 Feb 2014 09:11:28 +1100 Subject: [PATCH 067/202] small fix to 'literal-arrow-function' --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 3a86656..b08b0fe 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -281,7 +281,7 @@ repository: - name: meta.function.arrow.js begin: |- (?x) - (?=\([^)]*\)\s*(=>)) + (?=\([^())]*\)\s*(=>)) end: (?<=\))\s*(=>) endCaptures: '1': {name: storage.type.function.arrow.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index ef70a8b..29f7a21 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -473,7 +473,7 @@ begin (?x) - (?=\([^)]*\)\s*(=>)) + (?=\([^())]*\)\s*(=>)) end (?<=\))\s*(=>) endCaptures From a3704d7aee260b3619969f2fa483fd00d1845216 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 28 Feb 2014 15:50:17 +1100 Subject: [PATCH 068/202] fixed bugs in meta.prototype.function.js --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index b08b0fe..fb76921 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -207,7 +207,7 @@ repository: # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js - begin: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s* + begin: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 29f7a21..652d6ed 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -656,7 +656,7 @@ begin - ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)?\s* + ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)\s* beginCaptures 1 From ff75771b914d171f3026735c73781c614a5be268 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 4 Mar 2014 23:50:43 +1100 Subject: [PATCH 069/202] fixed method highlighting bug: https://github.com/Benvie/JavaScriptNext.tmLanguage/issues/25 --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index fb76921..c333aec 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -317,7 +317,7 @@ repository: (? + (?=\([^())]*\)\s*\{) beginCaptures 1 From a6e29f64f523ea5f10c8eefecaf82a3fcfb83408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Dos=C3=A9?= Date: Mon, 31 Mar 2014 19:16:08 -0700 Subject: [PATCH 070/202] Allows spaces when defining generator functions. Fixes #28. --- JavaScriptNext.tmLanguage | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index f423230..cce6550 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -628,7 +628,7 @@ begin - \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s* + \b(function\s*\*?)(?:\s*([a-zA-Z_$][_$\w]*))?\s* beginCaptures 1 @@ -656,7 +656,7 @@ begin - ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)\s* + ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\s*\*?)\s* beginCaptures 1 @@ -699,7 +699,7 @@ ([_$a-zA-Z][_$\w]*)? \.([_$a-zA-Z][_$\w]*)\s* =\s* - (function\*?)\s* + (function\s*\*?)\s* ) end (?<=\)) @@ -713,7 +713,7 @@ begin - \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s* + \b(function\s*\*?)(?:\s*([a-zA-Z_$][_$\w]*))?\s* beginCaptures 1 @@ -741,7 +741,7 @@ begin - \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)\s* + \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\s*\*?)\s* beginCaptures 1 @@ -780,7 +780,7 @@ ((")(.*?)(?<!\\)(")) )\s* (:)\s* - \b(function\*?)\s* + \b(function\s*\*?)\s* beginCaptures 1 From b25d8ee763c068217b9e4432ce66cd77f1036ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Dos=C3=A9?= Date: Tue, 1 Apr 2014 14:05:07 -0700 Subject: [PATCH 071/202] Allows spaces when defining generator functions in YAML file as well. --- JavaScriptNext.YAML-tmLanguage | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c333aec..0c62d76 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -197,7 +197,7 @@ repository: patterns: # e.g. function play(arg1, arg2) { } - name: meta.function.js - begin: \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s* + begin: \b(function\s*\*?)(?:\s*([a-zA-Z_$][_$\w]*))?\s* beginCaptures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} @@ -207,7 +207,7 @@ repository: # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js - begin: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\*?)\s* + begin: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\s*\*?)\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} @@ -226,12 +226,12 @@ repository: ([_$a-zA-Z][_$\w]*)? \.([_$a-zA-Z][_$\w]*)\s* =\s* - (function\*?)\s* + (function\s*\*?)\s* ) end: (?<=\)) patterns: - include: '#literal-language-variable' - - begin: \b(function\*?)(?:\s+([a-zA-Z_$][_$\w]*))?\s* + - begin: \b(function\s*\*?)(?:\s*([a-zA-Z_$][_$\w]*))?\s* beginCaptures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} @@ -241,7 +241,7 @@ repository: # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js - begin: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\*?)\s* + begin: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\s*\*?)\s* beginCaptures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} @@ -259,7 +259,7 @@ repository: ((")(.*?)(? Date: Mon, 14 Apr 2014 15:03:15 +1000 Subject: [PATCH 072/202] fixed function highlighting bugs, see https://github.com/Benvie/JavaScriptNext.tmLanguage/issues/32 --- JavaScriptNext.YAML-tmLanguage | 10 +++++----- JavaScriptNext.tmLanguage | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 0c62d76..bf97c26 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -197,7 +197,7 @@ repository: patterns: # e.g. function play(arg1, arg2) { } - name: meta.function.js - begin: \b(function\s*\*?)(?:\s*([a-zA-Z_$][_$\w]*))?\s* + begin: \b(function(?:\s*\*|(?=\s|[(])))(?:\s*([a-zA-Z_$][_$\w]*))?\s* beginCaptures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} @@ -207,7 +207,7 @@ repository: # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js - begin: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\s*\*?)\s* + begin: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} @@ -231,7 +231,7 @@ repository: end: (?<=\)) patterns: - include: '#literal-language-variable' - - begin: \b(function\s*\*?)(?:\s*([a-zA-Z_$][_$\w]*))?\s* + - begin: \b(function(?:\s*\*|(?=\s|[(])))(?:\s*([a-zA-Z_$][_$\w]*))?\s* beginCaptures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} @@ -241,7 +241,7 @@ repository: # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js - begin: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\s*\*?)\s* + begin: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} @@ -259,7 +259,7 @@ repository: ((")(.*?)(? begin - \b(function\s*\*?)(?:\s*([a-zA-Z_$][_$\w]*))?\s* + \b(function(?:\s*\*|(?=\s|[(])))(?:\s*([a-zA-Z_$][_$\w]*))?\s* beginCaptures 1 @@ -656,7 +656,7 @@ begin - ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function\s*\*?)\s* + ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures 1 @@ -713,7 +713,7 @@ begin - \b(function\s*\*?)(?:\s*([a-zA-Z_$][_$\w]*))?\s* + \b(function(?:\s*\*|(?=\s|[(])))(?:\s*([a-zA-Z_$][_$\w]*))?\s* beginCaptures 1 @@ -741,7 +741,7 @@ begin - \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function\s*\*?)\s* + \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures 1 @@ -780,7 +780,7 @@ ((")(.*?)(?<!\\)(")) )\s* (:)\s* - \b(function\s*\*?)\s* + \b(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures 1 From d06eebc92db01095faad5c20fcff7adc17bc42a5 Mon Sep 17 00:00:00 2001 From: simonzack Date: Mon, 14 Apr 2014 15:07:57 +1000 Subject: [PATCH 073/202] added commenting capability --- Comments.YAML-tmLanguage | 12 ++++++++++++ Comments.tmPreferences | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 Comments.YAML-tmLanguage create mode 100644 Comments.tmPreferences diff --git a/Comments.YAML-tmLanguage b/Comments.YAML-tmLanguage new file mode 100644 index 0000000..7ef1c0d --- /dev/null +++ b/Comments.YAML-tmLanguage @@ -0,0 +1,12 @@ +# [PackageDev] target_format: plist, ext: tmLanguage +name: Comments +uuid: BCCA5D24-53BF-4C69-9419-D393D5590D54 +scope: source.js, source.json +settings: + shellVariables: + - name: TM_COMMENT_START + value: '// ' + - name: TM_COMMENT_START_2 + value: /* + - name: TM_COMMENT_END_2 + value: '*/' diff --git a/Comments.tmPreferences b/Comments.tmPreferences new file mode 100644 index 0000000..b26c1f9 --- /dev/null +++ b/Comments.tmPreferences @@ -0,0 +1,36 @@ + + + + + name + Comments + scope + source.js, source.json + settings + + shellVariables + + + name + TM_COMMENT_START + value + // + + + name + TM_COMMENT_START_2 + value + /* + + + name + TM_COMMENT_END_2 + value + */ + + + + uuid + A67A8BD9-A951-406F-9175-018DD4B52FD1 + + From da1e060a941815a59d959b4edeab67998e2c34c3 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 15 Apr 2014 14:05:36 +1000 Subject: [PATCH 074/202] removed duplicate rule --- JavaScriptNext.YAML-tmLanguage | 9 --------- JavaScriptNext.tmLanguage | 17 ----------------- 2 files changed, 26 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index bf97c26..885e554 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -15,15 +15,6 @@ patterns: repository: brackets: patterns: - - name: meta.function-call.method.with-arguments.js - match: >- - (?x) - (?<=\.) - ([_$a-zA-Z][_$\w]*)? - (?=\() - captures: - '1': {name: entity.name.function.js} - - name: meta.group.braces.round begin: (\() beginCaptures: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 4dc8f78..ce3ef30 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -39,23 +39,6 @@ patterns - - captures - - 1 - - name - entity.name.function.js - - - match - (?x) - (?<=\.) - ([_$a-zA-Z][_$\w]*)? - (?=\() - name - meta.function-call.method.with-arguments.js - begin (\() From 7741f002d630c742580ff504734f121a19f1064a Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 15 Apr 2014 16:13:58 +1000 Subject: [PATCH 075/202] fixed bugs in raw/static/method function calls --- JavaScriptNext.YAML-tmLanguage | 79 ++++++++++++------ JavaScriptNext.tmLanguage | 141 +++++++++++++++++++++++---------- 2 files changed, 157 insertions(+), 63 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 885e554..b524fd5 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -159,15 +159,6 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-function-call: - patterns: - - name: meta.function-call.static.with-arguments.js - begin: (?=[_$a-zA-Z][_$\w]*\s*\() - end: (?=\() - patterns: - - name: entity.name.function.js - match: ([_$a-zA-Z][_$\w]*)? - literal-prototype-storage: patterns: # e.g. Sound.prototype = { } when extending an object @@ -184,6 +175,26 @@ repository: '1': {name: entity.name.class.js} '2': {name: support.constant.js} + literal-function-call: + patterns: + - name: meta.function-call.without-arguments.js + match: |- + (?x) + ([_$a-zA-Z][_$\w]*)\s* + (\(\s*\)) + captures: + '1': {name: entity.name.function.js} + '2': {name: meta.group.braces.round.function.arguments.js} + '3': {name: meta.brace.round.js} + + - name: meta.function-call.with-arguments.js + match: |- + (?x) + ([_$a-zA-Z][_$\w]*)\s* + (?=\() + captures: + '1': {name: entity.name.function.js} + literal-function-storage: patterns: # e.g. function play(arg1, arg2) { } @@ -281,26 +292,55 @@ repository: literal-method: patterns: - - name: meta.function-call.method.with-arguments.js - match: |- + - match: |- (?x) - (?<=\.) - ([_$a-zA-Z][_$\w]*) - (?=\() + \b([A-Z][_$\w]*)\s* + (?:\. + (?: + ( + ([_$a-zA-Z][_$\w]*)\s* + (\(\s*\)) + )|( + ([_$a-zA-Z][_$\w]*)\s* + (?=\() + )| + ([_$a-z][_$\w]*) + ) + )? + captures: - '1': {name: entity.name.function.js} + '1': {name: variable.other.class.js} + + '2': {name: meta.function-call.static.without-arguments.js} + '3': {name: entity.name.function.js} + '4': {name: meta.group.braces.round.function.arguments.js} + '5': {name: meta.brace.round.js} + + '6': {name: meta.function-call.static.with-arguments.js} + '7': {name: entity.name.function.js} + + '8': {name: variable.other.class.static.js} - name: meta.function-call.method.without-arguments.js match: |- (?x) (?<=\.) - ([_$a-zA-Z][_$\w]*) + ([_$a-zA-Z][_$\w]*)\s* (\(\s*\)) captures: '1': {name: entity.name.function.js} '2': {name: meta.group.braces.round.function.arguments.js} '3': {name: meta.brace.round.js} + - name: meta.function-call.method.with-arguments.js + match: |- + (?x) + (?<=\.) + ([_$a-zA-Z][_$\w]*)\s* + (?=\() + captures: + '1': {name: entity.name.function.js} + # ES6 methods, e.g. play(arg1, arg2) { } - name: meta.method.js begin: |- @@ -589,13 +629,6 @@ repository: - name: variable.other.constant.js match: \.?[A-Z][_$\dA-Z]*\b - - name: meta.entity.static.js - match: \b([A-Z][_$\w]*\.?)\s*?(?:([a-z$_][\w_$]*(?=\())|([a-z$_][\w_$]*))? - captures: - '1': {name: variable.other.class.js} - '2': {name: meta.function-call.class.static.js} - '3': {name: variable.other.class.static.js} - - name: variable.other.object.js match: (?patterns - begin - (?=[_$a-zA-Z][_$\w]*\s*\() - end - (?=\() + captures + + 1 + + name + entity.name.function.js + + 2 + + name + meta.group.braces.round.function.arguments.js + + 3 + + name + meta.brace.round.js + + + match + (?x) + ([_$a-zA-Z][_$\w]*)\s* + (\(\s*\)) name - meta.function-call.static.with-arguments.js - patterns - + meta.function-call.without-arguments.js + + + captures + + 1 - match - ([_$a-zA-Z][_$\w]*)? name entity.name.function.js - + + match + (?x) + ([_$a-zA-Z][_$\w]*)\s* + (?=\() + name + meta.function-call.with-arguments.js @@ -1133,18 +1158,61 @@ captures 1 + + name + variable.other.class.js + + 2 + + name + meta.function-call.static.without-arguments.js + + 3 name entity.name.function.js + 4 + + name + meta.group.braces.round.function.arguments.js + + 5 + + name + meta.brace.round.js + + 6 + + name + meta.function-call.static.with-arguments.js + + 7 + + name + entity.name.function.js + + 8 + + name + variable.other.class.static.js + match (?x) - (?<=\.) - ([_$a-zA-Z][_$\w]*) - (?=\() - name - meta.function-call.method.with-arguments.js + \b([A-Z][_$\w]*)\s* + (?:\. + (?: + ( + ([_$a-zA-Z][_$\w]*)\s* + (\(\s*\)) + )|( + ([_$a-zA-Z][_$\w]*)\s* + (?=\() + )| + ([_$a-z][_$\w]*) + ) + )? captures @@ -1168,11 +1236,28 @@ match (?x) (?<=\.) - ([_$a-zA-Z][_$\w]*) + ([_$a-zA-Z][_$\w]*)\s* (\(\s*\)) name meta.function-call.method.without-arguments.js + + captures + + 1 + + name + entity.name.function.js + + + match + (?x) + (?<=\.) + ([_$a-zA-Z][_$\w]*)\s* + (?=\() + name + meta.function-call.method.with-arguments.js + begin (?x) @@ -1566,30 +1651,6 @@ name variable.other.constant.js - - captures - - 1 - - name - variable.other.class.js - - 2 - - name - meta.function-call.class.static.js - - 3 - - name - variable.other.class.static.js - - - match - \b([A-Z][_$\w]*\.?)\s*?(?:([a-z$_][\w_$]*(?=\())|([a-z$_][\w_$]*))? - name - meta.entity.static.js - match (?<!\.)[_$a-zA-Z][_$\w]*\s*(?=[\[\.]) From a4d7a4640d54ef1ccdcb81a87442eb98b83622f1 Mon Sep 17 00:00:00 2001 From: Esco Obong Date: Sat, 26 Apr 2014 21:05:10 -0400 Subject: [PATCH 076/202] changed color scheme to match Monokai-Phoenix --- JavaScriptNext.tmTheme | 1120 ++++++++-------------------------------- 1 file changed, 228 insertions(+), 892 deletions(-) diff --git a/JavaScriptNext.tmTheme b/JavaScriptNext.tmTheme index 0447945..5e42de4 100644 --- a/JavaScriptNext.tmTheme +++ b/JavaScriptNext.tmTheme @@ -9,1101 +9,498 @@ settings - activeGuide - #3333FFFF - background - #000000 - bracketsBackground - #ff00aa66 - bracketsOptions - background - caret - #ff0099 - foreground - #e6e6e6 - guide - #33333388 - gutter - #6600ff33 - invisibles - #404040 - lineHighlight - #ff009933 - multiEditHighlight - #00ff0022 - searchHighlight - #FF00AA99 - selection - #00ffff44 - stackGuide - #333333CC - - - - name - bracket.curly - scope - bracket.curly - settings - - background - #FF44AA - foreground - #3399FF - - - - name - bracket.square - scope - bracket.square - settings - - background - #2266CC - foreground - #FF8800 - - - - name - bracket.round - scope - bracket.round - settings - - background - #9922FF - foreground - #00FF00 - - - - name - bracket.quote - scope - bracket.quote - settings - - background - #00FF00 - - - - name - comment - scope - comment - settings - - fontStyle - italic - foreground - #646464ff - - - - name - Invalid - scope - invalid - settings - - background - #ff000022 - - - - name - constant - scope - constant - settings - - foreground - #3387ccff - - - - name - Keyword - scope - keyword - settings - - foreground - #e28964 - - - - name - constant.numeric - scope - constant.numeric - settings - - foreground - #ffff66 - - - - name - Storage - scope - storage - settings - - foreground - #99cf50 - - - - name - storage.modifier - scope - storage.modifier - settings - - foreground - #cf5099 - - - - name - storage.self - scope - storage.self - settings - - fontStyle - bold - foreground - #cc0033 - - - - name - storage.type - scope - storage.type - settings - - foreground - #cf9950 - - - - name - Support - scope - support - settings - - foreground - #8a5c8dff - - - - name - entity.name.function - scope - entity.name.function - settings - - foreground - #bb00ff - - - - name - keyword control - scope - keyword.control - settings - - foreground - #ff00ff - - - - name - keyword.control.declaration - scope - keyword.control.declaration - settings - - foreground - #8888aa - - - - name - keyword.control.module - scope - keyword.control.module - settings - - background - #ffff3333 - foreground - #ffff33 - options - underline - - - - name - keyword.control.flow - scope - keyword.control.flow - settings - - background - #110300 - fontStyle - bold - foreground - #ff6600 - - - - name - keyword.control.conditional - scope - keyword.control.conditional - settings - - foreground - #ff00ff - - - - name - keyword.control.trycatch - scope - keyword.control.trycatch - settings - - foreground - #ff0033 - - - - name - keyword.control.loop - scope - keyword.control.loop - settings - - foreground - #009999 - - - - name - keyword.control.switch - scope - keyword.control.switch - settings - - foreground - #999999 - - - - name - keyword operator - scope - keyword.operator - settings - - foreground - #ff0080 - - - - name - Function arg - scope - meta.function.argument, variable.parameter, meta.parens.c - settings - - foreground - #77ff11 - - - - name - - scope - punctuation.section.embedded - settings - - background - #0D0D0D37 - foreground - #00d3ffff - - - - name - keyword.other.unit - scope - keyword.other.unit, keyword.unit.css - settings - - foreground - #80ff00ff - - - - name - invalid.illegal - scope - invalid.illegal - settings - - background - #562d56bf - foreground - #fd5ff1ff - - - - name - string.quoted source - scope - string.quoted source - settings - - foreground - #daefa3 - - - - name - string constant - scope - string constant - settings - - foreground - #cfed81 - - - - name - string.regexp - scope - string.regexp - settings - - foreground - #6fff17 - - - - name - punctuation.definition.string - scope - punctuation.definition.string - settings - - background - #15151501 - foreground - #b4ff82 - - - - name - string.regexp.special - scope - string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - settings - - foreground - #00d505 - - - - name - string.regexp punctuation keyword - scope - string.regexp punctuation keyword - settings - - foreground - #c559ff - - - - name - string variable - scope - string variable - settings - - foreground - #8a9a95 - - - - name - support.function - scope - support.function - settings - - foreground - #fcf352ff - - - - name - meta.tag - scope - meta.tag - settings - - foreground - #4f9effff - - - - name - meta.tag entity - scope - meta.tag entity - settings - - foreground - #157eff - - - - name - HTML/XML tag attribute value - scope - meta.tag string.quoted.double.html - settings - - foreground - #E07D2C - - - - name - html5 tag - scope - meta.tag.block.any.html.html5 - settings - - foreground - #e88bfcff - - - - name - html5 tag entity - scope - meta.tag.block.any.html.html5 entity - settings - - foreground - #d730faff - - - - name - meta.tag.inline - scope - source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity - settings - - foreground - #87a7e2ff - - - - name - html js tag - scope - source.js.embedded.html entity.name.tag.script.html - settings - - foreground - #FF3535 - - - - name - html js tag braces - scope - source.js.embedded.html punctuation.definition.tag.html - settings - - foreground - #FF1E1E - - - - name - html js tag url - scope - source.js.embedded.html string.quoted.double.html - settings - - foreground - #FF9D9D - - - - name - Attribute - scope - entity.other.attribute-name - settings - - foreground - #7349beff - - - - name - Meta Toc List - scope - meta.toc-list - settings - - background - #162c1aff - foreground - #BEFEC7FF - options - underline - - - - name - js variable readwrite - scope - meta.initialization, variable.other.readwrite.js - settings - - foreground - #ff9122 - - - - name - js object - scope - variable.other.object.js - settings - - foreground - #ffee00 - - - - name - js object with parent - scope - meta.property-name.js variable.other.object.js - settings - - foreground - #ffff88 - - - - name - support.variable.property.js - scope - support.variable.property.js - settings - - foreground - #3399ff - - - - name - variable.other.dot-access - scope - variable.other.dot-access - settings - - foreground - #66ffdd - - - - name - variable.other.property.js - scope - variable.other.property.js - settings - - foreground - #37C1BE - - - - name - punctuation.section.scope.square.js - scope - punctuation.section.scope.square.js - settings - - foreground - #ff2404 - - - - name - punctuation.section.scope.round.js, meta.brace.round - scope - punctuation.section.scope.round.js, meta.brace.round - settings - - foreground - #1c38ff - + background + #111111 + caret + #F8F8F0 + foreground + #F8F8F2 + invisibles + #3B3A32 + lineHighlight + #3E3D32 + selection + #49483E + findHighlight + #FFE792 + findHighlightForeground + #000000 + selectionBorder + #222218 + activeGuide + #9D550FB0 + + bracketsForeground + #F8F8F2A5 + bracketsOptions + underline + + bracketContentsForeground + #F8F8F2A5 + bracketContentsOptions + underline + + tagsOptions + stippled_underline + name - punctuation.definition.arrow.js + comment scope - punctuation.definition.arrow.js + comment settings - background - #001133 fontStyle - bold + italic foreground - #aa00ff - - + #75715E + + + + name + String + scope + string + settings + + foreground + #E6DB74 + + + + name + Built-in constant + scope + constant.language + settings + + foreground + #AE81FF + + + + name + User-defined constant + scope + constant.character, constant.other + settings + + foreground + #AE81FF + + name - entity.arrow.function.js + Invalid scope - entity.arrow.function.js + invalid settings background - #001133 - fontStyle - bold - foreground - #aa00ff - - - - name - variable.language - scope - variable.language - settings - - foreground - #aa0044 + #ff000022 name - variable.language.prototype + constant scope - variable.language.prototype + constant settings foreground - #ff6600 + #3387ccff name - support.class.error.js + Keyword scope - support.class.error.js + keyword settings foreground - #ff5522 + #F92672 name - support.class.builtin.js + constant.numeric scope - support.class.builtin.js + constant.numeric settings - fontStyle - italic foreground - #ffee00 + #AE81FF name - support.class.node.js + Storage scope - support.class.node.js + storage settings foreground - #1224fe + #F92672 - + name - entity.name.function.node.js + storage.type scope - entity.name.function.node.js + storage.type settings foreground - #d84014 + #66D9EF name - support.keyword.node.js + Support scope - support.keyword.node.js + support settings - fontStyle - bold foreground - #99ef25 + #8a5c8dff name - variable.import.destructuring.js + Function arg scope - variable.import.destructuring.js + meta.function.argument, variable.parameter, meta.parens.c settings foreground - #00bbff + #FD971F name - other.object.key.js + invalid.illegal scope - other.object.key.js + invalid.illegal settings + background + #562d56bf foreground - #1C98C1 + #fd5ff1ff name - meta.accessor.js punctuation.definition.parameters + string.quoted source scope - meta.accessor.js punctuation.definition.parameters + string.quoted source settings foreground - #005588 + #daefa3 name - storage.type.accessor.js + string constant scope - storage.type.accessor.js + string constant settings - background - #001122 - fontStyle - bold italic foreground - #0066aa + #cfed81 name - entity.name.module.js, variable.import.parameter.js, variable.other.class.js + string.regexp scope - entity.name.module.js, variable.import.parameter.js, variable.other.class.js + string.regexp settings - background - #220011 foreground - #ff0044 + #6fff17 name - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + string.regexp.special scope - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition settings - background - #222211 foreground - #cccc44 + #00d505 name - storage.type.class.js, storage.type.extends.js + string variable scope - storage.type.class.js, storage.type.extends.js + string variable settings - background - #001122 foreground - #0044aa + name - meta.function.call.class.static.js + support.function scope - meta.function.call.class.static.js + support.function settings foreground - #880011 + #A6E22E name - variable.other.class.static.js + meta.tag scope - variable.other.class.static.js + meta.tag settings foreground - #aa0066 + #4f9effff name - entity.name.accessor.js + meta.tag entity scope - entity.name.accessor.js + meta.tag entity settings - background - #001122 - fontStyle - bold italic foreground - #00ffcc + #157eff name - entity.name.method.js + HTML/XML tag attribute value scope - entity.name.method.js + meta.tag string.quoted.double.html settings - background - #110022 - fontStyle - italic bold foreground - #aa00ff + #E07D2C name - meta.method.js + html5 tag scope - meta.method.js + meta.tag.block.any.html.html5 settings - fontStyle - bold foreground - #660099 + #e88bfcff name - storage.type.function.js + html5 tag entity scope - storage.type.function.js + meta.tag.block.any.html.html5 entity settings - fontStyle - bold foreground - #99cc44 + #d730faff name - string.quoted.single + meta.tag.inline scope - string.quoted.single + source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity settings foreground - #88FFAAAA + #87a7e2ff name - variable.other.quasi.js + html js tag url scope - variable.other.quasi.js + source.js.embedded.html string.quoted.double.html settings foreground - #ff0099 + #FF9D9D name - string.quasi.js + Attribute scope - string.quasi.js + entity.other.attribute-name settings foreground - #00FF00 + #7349beff name - punctuation.quasi.element + Meta Toc List scope - punctuation.quasi.element + meta.toc-list settings + background + #162c1aff foreground - #008800 + #BEFEC7FF + options + underline name - entity.quasi.tag.name.js + entity.arrow.function.js scope - entity.quasi.tag.name.js + entity.arrow.function.js settings + background + #001133 + fontStyle + bold foreground - #ffff00 + #aa00ff name - meta.group.braces.square, punctuation.destructuring + support.class.error.js scope - meta.group.braces.square string.quoted.single, punctuation.destructuring + support.class.error.js settings foreground - #47E9AC + #ff5522 name - string.quoted.double + support.class.node.js scope - string.quoted.double + support.class.node.js settings foreground - #11bb11 + #1224fe name - punctuation.section.scope.curly.js + support.keyword.node.js scope - punctuation.section.scope.curly.js + support.keyword.node.js settings + fontStyle + bold foreground - #F9044E + #F92672 name - meta.delimiter.object.comma.js + other.object.key.js scope - meta.delimiter.object.comma.js + other.object.key.js settings foreground - #00ffff + #1C98C1 name - meta.group.braces.curly string.quoted.single + entity.name.module.js, variable.import.parameter.js, variable.other.class.js scope - meta.group.braces.curly string.quoted.single + entity.name.module.js, variable.import.parameter.js, variable.other.class.js settings + background + #220011 foreground - #16B853 + #A6E22E name - support.function + entity.name.accessor.js scope - support.function + entity.name.accessor.js settings + background + #001122 + fontStyle + foreground - #B532ff + #A6E22E name - punctuation.definition.string.begin.js + entity.name.method.js scope - punctuation.definition.string.begin.js + entity.name.method.js settings + background + #110022 + fontStyle + foreground - #D2E20C + #A6E22E name - punctuation.definition.string.end.js + meta.method.js scope - punctuation.definition.string.end.js + meta.method.js settings + fontStyle + foreground - #CEA30D + #fff name - instance constructor + support.function scope - meta.class.inheritance, meta.instance.constructor + support.function settings - fontStyle - italic underline foreground - #e81e41 + #66D9EF + + name + Function name + scope + entity.name.function + settings + + fontStyle + + foreground + #A6E22E + + name entity.name.class.js @@ -1111,12 +508,10 @@ entity.name.class.js settings - background - #00ffff33 fontStyle italic foreground - #00ffff + #A6E22E @@ -1126,60 +521,12 @@ entity.name.extends.js settings - background - #00ff9933 fontStyle italic foreground #00ff99 - - name - function call - scope - meta.function-call entity.name.function - settings - - foreground - #5b24ff - - - - name - function call with args - scope - meta.function-call.function.with-arguments.js - settings - - foreground - #33ff00 - - - - name - js brace - scope - meta.brace.curly.js - settings - - foreground - #ff0099 - - - - name - js paren - scope - meta.brace.round.js - settings - - background - #000000ff - foreground - #d0c5feff - - name js constant escape @@ -1234,7 +581,7 @@ settings foreground - #ff0099 + #A6E22E @@ -1261,6 +608,19 @@ #ff6600 + + name + Library class/type + scope + support.type, support.class + settings + + fontStyle + italic + foreground + #66D9EF + + name prototype declaration @@ -1283,19 +643,6 @@ #555588 - - name - variable.other.constant.js - scope - variable.other.constant.js - settings - - background - #003311 - foreground - #00ff33 - - name false @@ -1425,17 +772,6 @@ #7ce85eff - - name - Puncation Termination - scope - punctuation.terminator, punctuation.separator - settings - - foreground - #4bfcf8ff - - name css constructor.argument From 43ba3e7ad8443b8f4751e590caf650be78bfa701 Mon Sep 17 00:00:00 2001 From: Esco Obong Date: Sat, 26 Apr 2014 21:47:41 -0400 Subject: [PATCH 077/202] added screenshot --- README.md | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index e7ac0a7..0685e12 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,7 @@ # JavaScript.tmLanguage Better JavaScript language definition for TextMate and SublimeText. This builds on the language files commonly used and adds more fine grained matching and also includes new features from ECMAScript 6 like modules, succinct methods, arrow functions, classes, generators, and accessors (ES5). -## Installation and Use +This is a fork of [JavaScriptNext.tmLanguage](https://github.com/Benvie/JavaScriptNext.tmLanguage). +## Screenshot -If you haven't already, [install Package Control](https://sublime.wbond.net/installation), then select `JavaScript Next` from the `Package Control: Install Package` dropdown list in the Command Palette. - -To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptNext`. - -## Screenshots - -__ES6__ - -![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es6.png) - -__ES5__ - -![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es5.png) +![screenshot](http://i.imgur.com/pP1ztxf.png) \ No newline at end of file From 4c009acb861aba77a94a5f9ed390b3b2b0b8ee4d Mon Sep 17 00:00:00 2001 From: Esco Obong Date: Sat, 26 Apr 2014 21:50:54 -0400 Subject: [PATCH 078/202] updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0685e12..6a00860 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # JavaScript.tmLanguage Better JavaScript language definition for TextMate and SublimeText. This builds on the language files commonly used and adds more fine grained matching and also includes new features from ECMAScript 6 like modules, succinct methods, arrow functions, classes, generators, and accessors (ES5). -This is a fork of [JavaScriptNext.tmLanguage](https://github.com/Benvie/JavaScriptNext.tmLanguage). +This is a fork of [JavaScriptNext.tmLanguage](https://github.com/Benvie/JavaScriptNext.tmLanguage) with colors that resemble those used in the [Monokai-Phoenix](https://github.com/s10wen/Monokai-Phoenix) Theme. ## Screenshot ![screenshot](http://i.imgur.com/pP1ztxf.png) \ No newline at end of file From 625fc008aa2eb73b8c8183d84bc78eb25e5761f9 Mon Sep 17 00:00:00 2001 From: Esco Obong Date: Sat, 26 Apr 2014 22:13:36 -0400 Subject: [PATCH 079/202] added Monokai theme --- JavaScriptNext Monokai-Phoenix.tmTheme | 1192 ++++++++++++++++++++++++ JavaScriptNext.tmTheme | 1120 +++++++++++++++++----- README.md | 21 +- 3 files changed, 2102 insertions(+), 231 deletions(-) create mode 100644 JavaScriptNext Monokai-Phoenix.tmTheme diff --git a/JavaScriptNext Monokai-Phoenix.tmTheme b/JavaScriptNext Monokai-Phoenix.tmTheme new file mode 100644 index 0000000..5e42de4 --- /dev/null +++ b/JavaScriptNext Monokai-Phoenix.tmTheme @@ -0,0 +1,1192 @@ + + + + + name + JavaScriptNext + settings + + + settings + + background + #111111 + caret + #F8F8F0 + foreground + #F8F8F2 + invisibles + #3B3A32 + lineHighlight + #3E3D32 + selection + #49483E + findHighlight + #FFE792 + findHighlightForeground + #000000 + selectionBorder + #222218 + activeGuide + #9D550FB0 + + bracketsForeground + #F8F8F2A5 + bracketsOptions + underline + + bracketContentsForeground + #F8F8F2A5 + bracketContentsOptions + underline + + tagsOptions + stippled_underline + + + + name + comment + scope + comment + settings + + fontStyle + italic + foreground + #75715E + + + + name + String + scope + string + settings + + foreground + #E6DB74 + + + + name + Built-in constant + scope + constant.language + settings + + foreground + #AE81FF + + + + name + User-defined constant + scope + constant.character, constant.other + settings + + foreground + #AE81FF + + + + name + Invalid + scope + invalid + settings + + background + #ff000022 + + + + name + constant + scope + constant + settings + + foreground + #3387ccff + + + + name + Keyword + scope + keyword + settings + + foreground + #F92672 + + + + name + constant.numeric + scope + constant.numeric + settings + + foreground + #AE81FF + + + + name + Storage + scope + storage + settings + + foreground + #F92672 + + + + name + storage.type + scope + storage.type + settings + + foreground + #66D9EF + + + + name + Support + scope + support + settings + + foreground + #8a5c8dff + + + + name + Function arg + scope + meta.function.argument, variable.parameter, meta.parens.c + settings + + foreground + #FD971F + + + + name + invalid.illegal + scope + invalid.illegal + settings + + background + #562d56bf + foreground + #fd5ff1ff + + + + name + string.quoted source + scope + string.quoted source + settings + + foreground + #daefa3 + + + + name + string constant + scope + string constant + settings + + foreground + #cfed81 + + + + name + string.regexp + scope + string.regexp + settings + + foreground + #6fff17 + + + + name + string.regexp.special + scope + string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition + settings + + foreground + #00d505 + + + + name + string variable + scope + string variable + settings + + foreground + + + + + name + support.function + scope + support.function + settings + + foreground + #A6E22E + + + + name + meta.tag + scope + meta.tag + settings + + foreground + #4f9effff + + + + name + meta.tag entity + scope + meta.tag entity + settings + + foreground + #157eff + + + + name + HTML/XML tag attribute value + scope + meta.tag string.quoted.double.html + settings + + foreground + #E07D2C + + + + name + html5 tag + scope + meta.tag.block.any.html.html5 + settings + + foreground + #e88bfcff + + + + name + html5 tag entity + scope + meta.tag.block.any.html.html5 entity + settings + + foreground + #d730faff + + + + name + meta.tag.inline + scope + source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity + settings + + foreground + #87a7e2ff + + + + name + html js tag url + scope + source.js.embedded.html string.quoted.double.html + settings + + foreground + #FF9D9D + + + + name + Attribute + scope + entity.other.attribute-name + settings + + foreground + #7349beff + + + + name + Meta Toc List + scope + meta.toc-list + settings + + background + #162c1aff + foreground + #BEFEC7FF + options + underline + + + + name + entity.arrow.function.js + scope + entity.arrow.function.js + settings + + background + #001133 + fontStyle + bold + foreground + #aa00ff + + + + name + support.class.error.js + scope + support.class.error.js + settings + + foreground + #ff5522 + + + + name + support.class.node.js + scope + support.class.node.js + settings + + foreground + #1224fe + + + + name + support.keyword.node.js + scope + support.keyword.node.js + settings + + fontStyle + bold + foreground + #F92672 + + + + name + other.object.key.js + scope + other.object.key.js + settings + + foreground + #1C98C1 + + + + name + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + scope + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + settings + + background + #220011 + foreground + #A6E22E + + + + name + entity.name.accessor.js + scope + entity.name.accessor.js + settings + + background + #001122 + fontStyle + + foreground + #A6E22E + + + + name + entity.name.method.js + scope + entity.name.method.js + settings + + background + #110022 + fontStyle + + foreground + #A6E22E + + + + name + meta.method.js + scope + meta.method.js + settings + + fontStyle + + foreground + #fff + + + + name + support.function + scope + support.function + settings + + foreground + #66D9EF + + + + name + Function name + scope + entity.name.function + settings + + fontStyle + + foreground + #A6E22E + + + + name + entity.name.class.js + scope + entity.name.class.js + settings + + fontStyle + italic + foreground + #A6E22E + + + + name + entity.name.extends.js + scope + entity.name.extends.js + settings + + fontStyle + italic + foreground + #00ff99 + + + + name + js constant escape + scope + constant.character.escape + settings + + foreground + #10cf62ff + + + + name + pseudo-class + scope + meta.selector.css entity.other.attribute-name.tag.pseudo-class + settings + + foreground + #4fbc4b + + + + name + css selectors + scope + entity.namespace.unicode.css + settings + + foreground + #FF4F4F + + + + name + entity.other.attribute-name.id + scope + entity.other.attribute-name.id + settings + + background + #0b0028ff + foreground + #f20073ff + + + + name + class name + scope + meta.prototype support.class + settings + + foreground + #A6E22E + + + + name + support object + scope + support.object + settings + + fontStyle + bold + foreground + #ffee00 + + + + name + class name prototype + scope + meta.prototype support.constant + settings + + foreground + #ff6600 + + + + name + Library class/type + scope + support.type, support.class + settings + + fontStyle + italic + foreground + #66D9EF + + + + name + prototype declaration + scope + meta.prototype.declaration.js + settings + + fontStyle + bold + + + + name + js undefined + scope + constant.language.undefined.js + settings + + foreground + #555588 + + + + name + false + scope + constant.language.boolean.false + settings + + foreground + #aaaa55 + + + + name + true + scope + constant.language.boolean.true + settings + + foreground + #cc7744 + + + + name + js null + scope + constant.language.null.js + settings + + foreground + #558855 + + + + name + css#id punctuation + scope + punctuation.definition.entity.id.css + settings + + background + #0b0028 + foreground + #ff489f + + + + name + css.class + scope + entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css + settings + + background + #0b0028 + foreground + #9529b8 + + + + name + css.class puntuation + scope + punctuation.definition.entity.class.css + settings + + background + #0b0028ff + foreground + #cd87e4ff + + + + name + css pseudo element + scope + entity.other.attribute-name.pseudo-element.css + settings + + background + #0b0028ff + foreground + #ff00ffff + + + + name + css property-name + scope + support.type.property-name.css + settings + + foreground + #b8efecff + + + + name + css @at-rule + scope + meta.preprocessor.at-rule keyword.control.at-rule + settings + + foreground + #d7c271ff + + + + name + css color + scope + constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css + settings + + foreground + #fb7720ff + + + + name + css constants + scope + support.constant.property-value.css + settings + + foreground + #7ce85eff + + + + name + css constructor.argument + scope + meta.constructor.argument.css + settings + + foreground + #8f9d6aff + + + + name + diff.header + scope + meta.diff, meta.diff.header, entity.name.namespace + settings + + background + #0e2231ff + foreground + #f8f8f8ff + + + + name + diff.deleted + scope + markup.deleted + settings + + background + #420e09ff + foreground + #f8f8f8ff + + + + name + diff.changed + scope + markup.changed + settings + + background + #4a410dff + foreground + #f8f8f8ff + + + + name + diff.inserted + scope + markup.inserted + settings + + background + #253b22ff + foreground + #f8f8f8ff + + + + name + Markup: Italic + scope + markup.italic + settings + + fontStyle + italic + foreground + #6ad500ff + + + + name + Markup: Underline + scope + markup.underline + settings + + foreground + #e18964ff + options + underline + + + + name + Markup: Quote + scope + markup.quote + settings + + background + #fee09c12 + fontStyle + italic + foreground + #e1d4b9ff + + + + name + Markup: Heading + scope + markup.heading, markup.heading entity + settings + + background + #de3280ff + foreground + #ffffffff + + + + name + Markup: List + scope + markup.list + settings + + foreground + #6657eaff + + + + name + Markup: Raw + scope + markup.raw + settings + + background + #b1b3ba08 + foreground + #578bb3ff + + + + name + Markup: Comment + scope + markup comment + settings + + foreground + #f67b37ff + + + + name + Markup: Separator + scope + meta.separator + settings + + background + #242424ff + foreground + #60a633ff + + + + name + Log Entry + scope + meta.line.entry.logfile, meta.line.exit.logfile + settings + + background + #eeeeee29 + foreground + #f8f8f8ff + + + + name + Log Entry Error + scope + meta.line.error.logfile + settings + + background + #751012 + foreground + #f8f8f8 + + + + name + JSON property top + scope + meta.structure.dictionary.json string.quoted.double + settings + + background + #111111 + foreground + #1144bb + + + + name + JSON property level 2 + scope + meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #1122bb + + + + name + JSON property level 3 + scope + meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #2938eb + + + + name + JSON property level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #6d7ef1 + + + + name + JSON property level 5 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #b3bbf7 + + + + name + JSON value + scope + meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #aa00aa + + + + name + JSON value level 2 + scope + meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #bf00bf + + + + name + JSON value level 3 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #ff00ff + + + + name + JSON value level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #ff40ff + + + + name + JSON value level 5 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #ff80ff + + + + name + JSON value string punctuation + scope + meta.structure.dictionary.value.json string punctuation.definition.string.double + settings + + foreground + #8409ff + + + + name + JSON array value + scope + meta.structure.array.json string.quoted.double + settings + + foreground + #5522aa + + + + name + JSON array value level 1 + scope + meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #7017c8ff + + + + name + JSON array value level 2 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #9541e9ff + + + + name + JSON array value level 3 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #ba83f1ff + + + + name + JSON array value level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #dfc6f9ff + + + + name + JSON prop string punctuation + scope + meta.structure.dictionary.json string punctuation.definition.string + settings + + foreground + #66bbddff + + + + name + JSON array string puntuation + scope + meta.structure.array.json string punctuation.definition.string + settings + + foreground + #416be9ff + + + + name + JSON array brackets + scope + meta.structure.array.json punctuation.definition.array + settings + + foreground + #fcc401ff + + + + name + JSON object braces + scope + meta.structure.dictionary.json punctuation.definition.dictionary + settings + + foreground + #fedf76ff + + + + uuid + b238c753-1549-3f12-a519-0faa5dcd4f65 + + diff --git a/JavaScriptNext.tmTheme b/JavaScriptNext.tmTheme index 5e42de4..0447945 100644 --- a/JavaScriptNext.tmTheme +++ b/JavaScriptNext.tmTheme @@ -9,472 +9,1053 @@ settings - background - #111111 - caret - #F8F8F0 - foreground - #F8F8F2 - invisibles - #3B3A32 - lineHighlight - #3E3D32 - selection - #49483E - findHighlight - #FFE792 - findHighlightForeground - #000000 - selectionBorder - #222218 - activeGuide - #9D550FB0 - - bracketsForeground - #F8F8F2A5 - bracketsOptions - underline - - bracketContentsForeground - #F8F8F2A5 - bracketContentsOptions - underline - - tagsOptions - stippled_underline - + activeGuide + #3333FFFF + background + #000000 + bracketsBackground + #ff00aa66 + bracketsOptions + background + caret + #ff0099 + foreground + #e6e6e6 + guide + #33333388 + gutter + #6600ff33 + invisibles + #404040 + lineHighlight + #ff009933 + multiEditHighlight + #00ff0022 + searchHighlight + #FF00AA99 + selection + #00ffff44 + stackGuide + #333333CC + + + + name + bracket.curly + scope + bracket.curly + settings + + background + #FF44AA + foreground + #3399FF + + + + name + bracket.square + scope + bracket.square + settings + + background + #2266CC + foreground + #FF8800 + + + + name + bracket.round + scope + bracket.round + settings + + background + #9922FF + foreground + #00FF00 + + + + name + bracket.quote + scope + bracket.quote + settings + + background + #00FF00 + + + + name + comment + scope + comment + settings + + fontStyle + italic + foreground + #646464ff + + + + name + Invalid + scope + invalid + settings + + background + #ff000022 + + + + name + constant + scope + constant + settings + + foreground + #3387ccff + + + + name + Keyword + scope + keyword + settings + + foreground + #e28964 + + + + name + constant.numeric + scope + constant.numeric + settings + + foreground + #ffff66 + + + + name + Storage + scope + storage + settings + + foreground + #99cf50 + + + + name + storage.modifier + scope + storage.modifier + settings + + foreground + #cf5099 + + + + name + storage.self + scope + storage.self + settings + + fontStyle + bold + foreground + #cc0033 + + + + name + storage.type + scope + storage.type + settings + + foreground + #cf9950 + + + + name + Support + scope + support + settings + + foreground + #8a5c8dff + + + + name + entity.name.function + scope + entity.name.function + settings + + foreground + #bb00ff + + + + name + keyword control + scope + keyword.control + settings + + foreground + #ff00ff + + + + name + keyword.control.declaration + scope + keyword.control.declaration + settings + + foreground + #8888aa + + + + name + keyword.control.module + scope + keyword.control.module + settings + + background + #ffff3333 + foreground + #ffff33 + options + underline + + + + name + keyword.control.flow + scope + keyword.control.flow + settings + + background + #110300 + fontStyle + bold + foreground + #ff6600 + + + + name + keyword.control.conditional + scope + keyword.control.conditional + settings + + foreground + #ff00ff + + + + name + keyword.control.trycatch + scope + keyword.control.trycatch + settings + + foreground + #ff0033 + + + + name + keyword.control.loop + scope + keyword.control.loop + settings + + foreground + #009999 + + + + name + keyword.control.switch + scope + keyword.control.switch + settings + + foreground + #999999 + + + + name + keyword operator + scope + keyword.operator + settings + + foreground + #ff0080 + + + + name + Function arg + scope + meta.function.argument, variable.parameter, meta.parens.c + settings + + foreground + #77ff11 + + + + name + + scope + punctuation.section.embedded + settings + + background + #0D0D0D37 + foreground + #00d3ffff + + + + name + keyword.other.unit + scope + keyword.other.unit, keyword.unit.css + settings + + foreground + #80ff00ff + + + + name + invalid.illegal + scope + invalid.illegal + settings + + background + #562d56bf + foreground + #fd5ff1ff + + + + name + string.quoted source + scope + string.quoted source + settings + + foreground + #daefa3 + + + + name + string constant + scope + string constant + settings + + foreground + #cfed81 + + + + name + string.regexp + scope + string.regexp + settings + + foreground + #6fff17 + + + + name + punctuation.definition.string + scope + punctuation.definition.string + settings + + background + #15151501 + foreground + #b4ff82 + + + + name + string.regexp.special + scope + string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition + settings + + foreground + #00d505 + + + + name + string.regexp punctuation keyword + scope + string.regexp punctuation keyword + settings + + foreground + #c559ff + + + + name + string variable + scope + string variable + settings + + foreground + #8a9a95 + + + + name + support.function + scope + support.function + settings + + foreground + #fcf352ff + + + + name + meta.tag + scope + meta.tag + settings + + foreground + #4f9effff + + + + name + meta.tag entity + scope + meta.tag entity + settings + + foreground + #157eff + + + + name + HTML/XML tag attribute value + scope + meta.tag string.quoted.double.html + settings + + foreground + #E07D2C + + + + name + html5 tag + scope + meta.tag.block.any.html.html5 + settings + + foreground + #e88bfcff + + + + name + html5 tag entity + scope + meta.tag.block.any.html.html5 entity + settings + + foreground + #d730faff + + + + name + meta.tag.inline + scope + source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity + settings + + foreground + #87a7e2ff + + + + name + html js tag + scope + source.js.embedded.html entity.name.tag.script.html + settings + + foreground + #FF3535 + + + + name + html js tag braces + scope + source.js.embedded.html punctuation.definition.tag.html + settings + + foreground + #FF1E1E + + + + name + html js tag url + scope + source.js.embedded.html string.quoted.double.html + settings + + foreground + #FF9D9D + + + + name + Attribute + scope + entity.other.attribute-name + settings + + foreground + #7349beff + + + + name + Meta Toc List + scope + meta.toc-list + settings + + background + #162c1aff + foreground + #BEFEC7FF + options + underline + + + + name + js variable readwrite + scope + meta.initialization, variable.other.readwrite.js + settings + + foreground + #ff9122 + + + + name + js object + scope + variable.other.object.js + settings + + foreground + #ffee00 + + + + name + js object with parent + scope + meta.property-name.js variable.other.object.js + settings + + foreground + #ffff88 + + + + name + support.variable.property.js + scope + support.variable.property.js + settings + + foreground + #3399ff + + + + name + variable.other.dot-access + scope + variable.other.dot-access + settings + + foreground + #66ffdd + + + + name + variable.other.property.js + scope + variable.other.property.js + settings + + foreground + #37C1BE + name - comment + punctuation.section.scope.square.js scope - comment + punctuation.section.scope.square.js settings - fontStyle - italic foreground - #75715E - - - - name - String - scope - string - settings - - foreground - #E6DB74 - - - - name - Built-in constant - scope - constant.language - settings - - foreground - #AE81FF - - - - name - User-defined constant - scope - constant.character, constant.other - settings - - foreground - #AE81FF - - + #ff2404 + + name - Invalid + punctuation.section.scope.round.js, meta.brace.round scope - invalid + punctuation.section.scope.round.js, meta.brace.round settings - background - #ff000022 + foreground + #1c38ff name - constant + punctuation.definition.arrow.js scope - constant + punctuation.definition.arrow.js settings + background + #001133 + fontStyle + bold foreground - #3387ccff + #aa00ff name - Keyword + entity.arrow.function.js scope - keyword + entity.arrow.function.js settings + background + #001133 + fontStyle + bold foreground - #F92672 + #aa00ff name - constant.numeric + variable.language scope - constant.numeric + variable.language settings foreground - #AE81FF + #aa0044 name - Storage + variable.language.prototype scope - storage + variable.language.prototype settings foreground - #F92672 + #ff6600 - + name - storage.type + support.class.error.js scope - storage.type + support.class.error.js settings foreground - #66D9EF + #ff5522 name - Support + support.class.builtin.js scope - support + support.class.builtin.js settings + fontStyle + italic foreground - #8a5c8dff + #ffee00 name - Function arg + support.class.node.js scope - meta.function.argument, variable.parameter, meta.parens.c + support.class.node.js settings foreground - #FD971F + #1224fe name - invalid.illegal + entity.name.function.node.js scope - invalid.illegal + entity.name.function.node.js settings - background - #562d56bf foreground - #fd5ff1ff + #d84014 name - string.quoted source + support.keyword.node.js scope - string.quoted source + support.keyword.node.js settings + fontStyle + bold foreground - #daefa3 + #99ef25 name - string constant + variable.import.destructuring.js scope - string constant + variable.import.destructuring.js settings foreground - #cfed81 + #00bbff name - string.regexp + other.object.key.js scope - string.regexp + other.object.key.js settings foreground - #6fff17 + #1C98C1 name - string.regexp.special + meta.accessor.js punctuation.definition.parameters scope - string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition + meta.accessor.js punctuation.definition.parameters settings foreground - #00d505 + #005588 name - string variable + storage.type.accessor.js scope - string variable + storage.type.accessor.js settings + background + #001122 + fontStyle + bold italic foreground - + #0066aa name - support.function + entity.name.module.js, variable.import.parameter.js, variable.other.class.js scope - support.function + entity.name.module.js, variable.import.parameter.js, variable.other.class.js settings + background + #220011 foreground - #A6E22E + #ff0044 name - meta.tag + storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js scope - meta.tag + storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js settings + background + #222211 foreground - #4f9effff + #cccc44 name - meta.tag entity + storage.type.class.js, storage.type.extends.js scope - meta.tag entity + storage.type.class.js, storage.type.extends.js settings + background + #001122 foreground - #157eff + #0044aa name - HTML/XML tag attribute value + meta.function.call.class.static.js scope - meta.tag string.quoted.double.html + meta.function.call.class.static.js settings foreground - #E07D2C + #880011 name - html5 tag + variable.other.class.static.js scope - meta.tag.block.any.html.html5 + variable.other.class.static.js settings foreground - #e88bfcff + #aa0066 name - html5 tag entity + entity.name.accessor.js scope - meta.tag.block.any.html.html5 entity + entity.name.accessor.js settings + background + #001122 + fontStyle + bold italic foreground - #d730faff + #00ffcc name - meta.tag.inline + entity.name.method.js scope - source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity + entity.name.method.js settings + background + #110022 + fontStyle + italic bold foreground - #87a7e2ff + #aa00ff name - html js tag url + meta.method.js scope - source.js.embedded.html string.quoted.double.html + meta.method.js settings + fontStyle + bold foreground - #FF9D9D + #660099 name - Attribute + storage.type.function.js scope - entity.other.attribute-name + storage.type.function.js settings + fontStyle + bold foreground - #7349beff + #99cc44 name - Meta Toc List + string.quoted.single scope - meta.toc-list + string.quoted.single settings - background - #162c1aff foreground - #BEFEC7FF - options - underline + #88FFAAAA name - entity.arrow.function.js + variable.other.quasi.js scope - entity.arrow.function.js + variable.other.quasi.js settings - background - #001133 - fontStyle - bold foreground - #aa00ff + #ff0099 name - support.class.error.js + string.quasi.js scope - support.class.error.js + string.quasi.js settings foreground - #ff5522 + #00FF00 name - support.class.node.js + punctuation.quasi.element scope - support.class.node.js + punctuation.quasi.element settings foreground - #1224fe + #008800 name - support.keyword.node.js + entity.quasi.tag.name.js scope - support.keyword.node.js + entity.quasi.tag.name.js settings - fontStyle - bold foreground - #F92672 + #ffff00 name - other.object.key.js + meta.group.braces.square, punctuation.destructuring scope - other.object.key.js + meta.group.braces.square string.quoted.single, punctuation.destructuring settings foreground - #1C98C1 + #47E9AC name - entity.name.module.js, variable.import.parameter.js, variable.other.class.js + string.quoted.double scope - entity.name.module.js, variable.import.parameter.js, variable.other.class.js + string.quoted.double settings - background - #220011 foreground - #A6E22E + #11bb11 name - entity.name.accessor.js + punctuation.section.scope.curly.js scope - entity.name.accessor.js + punctuation.section.scope.curly.js settings - background - #001122 - fontStyle - foreground - #A6E22E + #F9044E name - entity.name.method.js + meta.delimiter.object.comma.js scope - entity.name.method.js + meta.delimiter.object.comma.js settings - background - #110022 - fontStyle - foreground - #A6E22E + #00ffff name - meta.method.js + meta.group.braces.curly string.quoted.single scope - meta.method.js + meta.group.braces.curly string.quoted.single settings - fontStyle - foreground - #fff + #16B853 @@ -485,22 +1066,44 @@ settings foreground - #66D9EF + #B532ff + + + + name + punctuation.definition.string.begin.js + scope + punctuation.definition.string.begin.js + settings + + foreground + #D2E20C + + + + name + punctuation.definition.string.end.js + scope + punctuation.definition.string.end.js + settings + + foreground + #CEA30D + + + + name + instance constructor + scope + meta.class.inheritance, meta.instance.constructor + settings + + fontStyle + italic underline + foreground + #e81e41 - - name - Function name - scope - entity.name.function - settings - - fontStyle - - foreground - #A6E22E - - name entity.name.class.js @@ -508,10 +1111,12 @@ entity.name.class.js settings + background + #00ffff33 fontStyle italic foreground - #A6E22E + #00ffff @@ -521,12 +1126,60 @@ entity.name.extends.js settings + background + #00ff9933 fontStyle italic foreground #00ff99 + + name + function call + scope + meta.function-call entity.name.function + settings + + foreground + #5b24ff + + + + name + function call with args + scope + meta.function-call.function.with-arguments.js + settings + + foreground + #33ff00 + + + + name + js brace + scope + meta.brace.curly.js + settings + + foreground + #ff0099 + + + + name + js paren + scope + meta.brace.round.js + settings + + background + #000000ff + foreground + #d0c5feff + + name js constant escape @@ -581,7 +1234,7 @@ settings foreground - #A6E22E + #ff0099 @@ -608,19 +1261,6 @@ #ff6600 - - name - Library class/type - scope - support.type, support.class - settings - - fontStyle - italic - foreground - #66D9EF - - name prototype declaration @@ -643,6 +1283,19 @@ #555588 + + name + variable.other.constant.js + scope + variable.other.constant.js + settings + + background + #003311 + foreground + #00ff33 + + name false @@ -772,6 +1425,17 @@ #7ce85eff + + name + Puncation Termination + scope + punctuation.terminator, punctuation.separator + settings + + foreground + #4bfcf8ff + + name css constructor.argument diff --git a/README.md b/README.md index 6a00860..734dd95 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,22 @@ # JavaScript.tmLanguage Better JavaScript language definition for TextMate and SublimeText. This builds on the language files commonly used and adds more fine grained matching and also includes new features from ECMAScript 6 like modules, succinct methods, arrow functions, classes, generators, and accessors (ES5). -This is a fork of [JavaScriptNext.tmLanguage](https://github.com/Benvie/JavaScriptNext.tmLanguage) with colors that resemble those used in the [Monokai-Phoenix](https://github.com/s10wen/Monokai-Phoenix) Theme. -## Screenshot +## Installation and Use -![screenshot](http://i.imgur.com/pP1ztxf.png) \ No newline at end of file +If you haven't already, [install Package Control](https://sublime.wbond.net/installation), then select `JavaScript Next` from the `Package Control: Install Package` dropdown list in the Command Palette. + +To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptNext`. + +You may also need to change the ColorScheme, `Preferences -> Color Scheme --> JavaScriptNext - ES6 Syntax`. + +## Screenshots + +__ES6__ + +![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es6.png) + +![screenshot](http://i.imgur.com/pP1ztxf.png) + +__ES5__ + +![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es5.png) From 874a3bcf5a991430533bb6844568528c04173c10 Mon Sep 17 00:00:00 2001 From: Esco Obong Date: Sat, 26 Apr 2014 22:19:19 -0400 Subject: [PATCH 080/202] updated screenshot --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 734dd95..58fd6e3 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ __ES6__ ![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es6.png) -![screenshot](http://i.imgur.com/pP1ztxf.png) +![screenshot](http://i.imgur.com/YcmEFkY.png) __ES5__ From eabe9e0dcb4a49b709b3285fdbf2db43866d7cb2 Mon Sep 17 00:00:00 2001 From: Esco Obong Date: Sun, 27 Apr 2014 03:27:57 -0400 Subject: [PATCH 081/202] added monokai colors for support constants, json, css, html --- JavaScriptNext Monokai-Phoenix.tmTheme | 685 ++----------------------- README.md | 2 +- 2 files changed, 33 insertions(+), 654 deletions(-) diff --git a/JavaScriptNext Monokai-Phoenix.tmTheme b/JavaScriptNext Monokai-Phoenix.tmTheme index 5e42de4..b68c190 100644 --- a/JavaScriptNext Monokai-Phoenix.tmTheme +++ b/JavaScriptNext Monokai-Phoenix.tmTheme @@ -3,7 +3,7 @@ name - JavaScriptNext + JavaScriptNext Monokai-Phoenix settings @@ -98,7 +98,7 @@ settings background - #ff000022 + #F92672 @@ -109,7 +109,7 @@ settings foreground - #3387ccff + #AE81FFA0 @@ -191,61 +191,6 @@ #fd5ff1ff - - name - string.quoted source - scope - string.quoted source - settings - - foreground - #daefa3 - - - - name - string constant - scope - string constant - settings - - foreground - #cfed81 - - - - name - string.regexp - scope - string.regexp - settings - - foreground - #6fff17 - - - - name - string.regexp.special - scope - string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - settings - - foreground - #00d505 - - - - name - string variable - scope - string variable - settings - - foreground - - - name support.function @@ -257,81 +202,15 @@ #A6E22E - - name - meta.tag - scope - meta.tag - settings - - foreground - #4f9effff - - name meta.tag entity scope - meta.tag entity + entity.name.tag settings foreground - #157eff - - - - name - HTML/XML tag attribute value - scope - meta.tag string.quoted.double.html - settings - - foreground - #E07D2C - - - - name - html5 tag - scope - meta.tag.block.any.html.html5 - settings - - foreground - #e88bfcff - - - - name - html5 tag entity - scope - meta.tag.block.any.html.html5 entity - settings - - foreground - #d730faff - - - - name - meta.tag.inline - scope - source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity - settings - - foreground - #87a7e2ff - - - - name - html js tag url - scope - source.js.embedded.html string.quoted.double.html - settings - - foreground - #FF9D9D + #F92672 @@ -342,22 +221,7 @@ settings foreground - #7349beff - - - - name - Meta Toc List - scope - meta.toc-list - settings - - background - #162c1aff - foreground - #BEFEC7FF - options - underline + #A6E22E @@ -367,10 +231,6 @@ entity.arrow.function.js settings - background - #001133 - fontStyle - bold foreground #aa00ff @@ -410,17 +270,6 @@ #F92672 - - name - other.object.key.js - scope - other.object.key.js - settings - - foreground - #1C98C1 - - name entity.name.module.js, variable.import.parameter.js, variable.other.class.js @@ -428,8 +277,6 @@ entity.name.module.js, variable.import.parameter.js, variable.other.class.js settings - background - #220011 foreground #A6E22E @@ -527,39 +374,6 @@ #00ff99 - - name - js constant escape - scope - constant.character.escape - settings - - foreground - #10cf62ff - - - - name - pseudo-class - scope - meta.selector.css entity.other.attribute-name.tag.pseudo-class - settings - - foreground - #4fbc4b - - - - name - css selectors - scope - entity.namespace.unicode.css - settings - - foreground - #FF4F4F - - name entity.other.attribute-name.id @@ -567,10 +381,8 @@ entity.other.attribute-name.id settings - background - #0b0028ff foreground - #f20073ff + #A6E22E @@ -586,26 +398,13 @@ name - support object + Library constant scope - support.object + support.constant settings - fontStyle - bold foreground - #ffee00 - - - - name - class name prototype - scope - meta.prototype support.constant - settings - - foreground - #ff6600 + #66D9EF @@ -621,17 +420,6 @@ #66D9EF - - name - prototype declaration - scope - meta.prototype.declaration.js - settings - - fontStyle - bold - - name js undefined @@ -640,7 +428,7 @@ settings foreground - #555588 + #AE81FF @@ -651,7 +439,7 @@ settings foreground - #aaaa55 + #AE81FF @@ -662,7 +450,7 @@ settings foreground - #cc7744 + #AE81FF @@ -673,116 +461,22 @@ settings foreground - #558855 - - - - name - css#id punctuation - scope - punctuation.definition.entity.id.css - settings - - background - #0b0028 - foreground - #ff489f - - - - name - css.class - scope - entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css - settings - - background - #0b0028 - foreground - #9529b8 - - - - name - css.class puntuation - scope - punctuation.definition.entity.class.css - settings - - background - #0b0028ff - foreground - #cd87e4ff - - - - name - css pseudo element - scope - entity.other.attribute-name.pseudo-element.css - settings - - background - #0b0028ff - foreground - #ff00ffff - - - - name - css property-name - scope - support.type.property-name.css - settings - - foreground - #b8efecff - - - - name - css @at-rule - scope - meta.preprocessor.at-rule keyword.control.at-rule - settings - - foreground - #d7c271ff - - - - name - css color - scope - constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css - settings - - foreground - #fb7720ff - - - - name - css constants - scope - support.constant.property-value.css - settings - - foreground - #7ce85eff - - - - name - css constructor.argument - scope - meta.constructor.argument.css - settings - - foreground - #8f9d6aff + #AE81FF + + name + Inherited class + scope + entity.other.inherited-class + settings + + fontStyle + italic underline + foreground + #A6E22E + + name diff.header @@ -790,10 +484,8 @@ meta.diff, meta.diff.header, entity.name.namespace settings - background - #0e2231ff foreground - #f8f8f8ff + #75715E @@ -806,7 +498,7 @@ background #420e09ff foreground - #f8f8f8ff + #F92672 @@ -819,7 +511,7 @@ background #4a410dff foreground - #f8f8f8ff + #E6DB74 @@ -835,108 +527,6 @@ #f8f8f8ff - - name - Markup: Italic - scope - markup.italic - settings - - fontStyle - italic - foreground - #6ad500ff - - - - name - Markup: Underline - scope - markup.underline - settings - - foreground - #e18964ff - options - underline - - - - name - Markup: Quote - scope - markup.quote - settings - - background - #fee09c12 - fontStyle - italic - foreground - #e1d4b9ff - - - - name - Markup: Heading - scope - markup.heading, markup.heading entity - settings - - background - #de3280ff - foreground - #ffffffff - - - - name - Markup: List - scope - markup.list - settings - - foreground - #6657eaff - - - - name - Markup: Raw - scope - markup.raw - settings - - background - #b1b3ba08 - foreground - #578bb3ff - - - - name - Markup: Comment - scope - markup comment - settings - - foreground - #f67b37ff - - - - name - Markup: Separator - scope - meta.separator - settings - - background - #242424ff - foreground - #60a633ff - - name Log Entry @@ -965,224 +555,13 @@ name - JSON property top + JSON String scope meta.structure.dictionary.json string.quoted.double settings - - background - #111111 - foreground - #1144bb - - - - name - JSON property level 2 - scope - meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #1122bb - - - - name - JSON property level 3 - scope - meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #2938eb - - - - name - JSON property level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #6d7ef1 - - - - name - JSON property level 5 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #b3bbf7 - - - - name - JSON value - scope - meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #aa00aa - - - - name - JSON value level 2 - scope - meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #bf00bf - - - - name - JSON value level 3 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #ff00ff - - - - name - JSON value level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #ff40ff - - - - name - JSON value level 5 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #ff80ff - - - - name - JSON value string punctuation - scope - meta.structure.dictionary.value.json string punctuation.definition.string.double - settings - - foreground - #8409ff - - - - name - JSON array value - scope - meta.structure.array.json string.quoted.double - settings - - foreground - #5522aa - - - - name - JSON array value level 1 - scope - meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #7017c8ff - - - - name - JSON array value level 2 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #9541e9ff - - - - name - JSON array value level 3 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #ba83f1ff - - - - name - JSON array value level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #dfc6f9ff - - - - name - JSON prop string punctuation - scope - meta.structure.dictionary.json string punctuation.definition.string - settings - - foreground - #66bbddff - - - - name - JSON array string puntuation - scope - meta.structure.array.json string punctuation.definition.string - settings - - foreground - #416be9ff - - - - name - JSON array brackets - scope - meta.structure.array.json punctuation.definition.array - settings - - foreground - #fcc401ff - - - - name - JSON object braces - scope - meta.structure.dictionary.json punctuation.definition.dictionary - settings foreground - #fedf76ff + #CFCFC2 diff --git a/README.md b/README.md index 58fd6e3..fac3acd 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ __ES6__ ![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es6.png) -![screenshot](http://i.imgur.com/YcmEFkY.png) +![screenshot](http://i.imgur.com/YzwbnTf.png) __ES5__ From 31927109350ab9f1b5f9af1d8feb3838b8bd7cc1 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 20 May 2014 21:53:46 +1000 Subject: [PATCH 082/202] converted to YAML-tmTheme --- Monokai Phoenix.YAML-tmTheme | 259 ++++++++++++++++++ ...Phoenix.tmTheme => Monokai Phoenix.tmTheme | 0 2 files changed, 259 insertions(+) create mode 100644 Monokai Phoenix.YAML-tmTheme rename JavaScriptNext Monokai-Phoenix.tmTheme => Monokai Phoenix.tmTheme (100%) diff --git a/Monokai Phoenix.YAML-tmTheme b/Monokai Phoenix.YAML-tmTheme new file mode 100644 index 0000000..2c3943b --- /dev/null +++ b/Monokai Phoenix.YAML-tmTheme @@ -0,0 +1,259 @@ +# [PackageDev] target_format: plist, ext: tmLanguage +name: Monokai-Phoenix +uuid: b238c753-1549-3f12-a519-0faa5dcd4f65 + +settings: +- settings: + activeGuide: '#9D550FB0' + background: '#111111' + bracketContentsForeground: '#F8F8F2A5' + bracketContentsOptions: underline + bracketsForeground: '#F8F8F2A5' + bracketsOptions: underline + caret: '#F8F8F0' + findHighlight: '#FFE792' + findHighlightForeground: '#000000' + foreground: '#F8F8F2' + invisibles: '#3B3A32' + lineHighlight: '#3E3D32' + selection: '#49483E' + selectionBorder: '#222218' + tagsOptions: stippled_underline + +- name: comment + scope: comment + settings: + fontStyle: italic + foreground: '#75715E' + +- name: String + scope: string + settings: + foreground: '#E6DB74' + +- name: Built-in constant + scope: constant.language + settings: + foreground: '#AE81FF' + +- name: User-defined constant + scope: constant.character, constant.other + settings: + foreground: '#AE81FF' + +- name: Invalid + scope: invalid + settings: + background: '#F92672' + +- name: constant + scope: constant + settings: + foreground: '#AE81FFA0' + +- name: Keyword + scope: keyword + settings: + foreground: '#F92672' + +- name: constant.numeric + scope: constant.numeric + settings: + foreground: '#AE81FF' + +- name: Storage + scope: storage + settings: + foreground: '#F92672' + +- name: storage.type + scope: storage.type + settings: + foreground: '#66D9EF' + +- name: Support + scope: support + settings: + foreground: '#8a5c8dff' + +- name: Function arg + scope: meta.function.argument, variable.parameter, meta.parens.c + settings: + foreground: '#FD971F' + +- name: invalid.illegal + scope: invalid.illegal + settings: + background: '#562d56bf' + foreground: '#fd5ff1ff' + +- name: support.function + scope: support.function + settings: + foreground: '#A6E22E' + +- name: meta.tag entity + scope: entity.name.tag + settings: + foreground: '#F92672' + +- name: Attribute + scope: entity.other.attribute-name + settings: + foreground: '#A6E22E' + +- name: entity.arrow.function.js + scope: entity.arrow.function.js + settings: + foreground: '#aa00ff' + +- name: support.class.error.js + scope: support.class.error.js + settings: + foreground: '#ff5522' + +- name: support.class.node.js + scope: support.class.node.js + settings: + foreground: '#1224fe' + +- name: support.keyword.node.js + scope: support.keyword.node.js + settings: + fontStyle: bold + foreground: '#F92672' + +- name: entity.name.module.js, variable.import.parameter.js, variable.other.class.js + scope: entity.name.module.js, variable.import.parameter.js, variable.other.class.js + settings: + foreground: '#A6E22E' + +- name: entity.name.accessor.js + scope: entity.name.accessor.js + settings: + background: '#001122' + fontStyle: '' + foreground: '#A6E22E' + +- name: entity.name.method.js + scope: entity.name.method.js + settings: + background: '#110022' + fontStyle: '' + foreground: '#A6E22E' + +- name: meta.method.js + scope: meta.method.js + settings: + fontStyle: '' + foreground: '#fff' + +- name: support.function + scope: support.function + settings: + foreground: '#66D9EF' + +- name: Function name + scope: entity.name.function + settings: + fontStyle: '' + foreground: '#A6E22E' + +- name: entity.name.class.js + scope: entity.name.class.js + settings: + fontStyle: italic + foreground: '#A6E22E' + +- name: entity.name.extends.js + scope: entity.name.extends.js + settings: + fontStyle: italic + foreground: '#00ff99' + +- name: entity.other.attribute-name.id + scope: entity.other.attribute-name.id + settings: + foreground: '#A6E22E' + +- name: class name + scope: meta.prototype support.class + settings: + foreground: '#A6E22E' + +- name: Library constant + scope: support.constant + settings: + foreground: '#66D9EF' + +- name: Library class/type + scope: support.type, support.class + settings: + fontStyle: italic + foreground: '#66D9EF' + +- name: js undefined + scope: constant.language.undefined.js + settings: + foreground: '#AE81FF' + +- name: 'false' + scope: constant.language.boolean.false + settings: + foreground: '#AE81FF' + +- name: 'true' + scope: constant.language.boolean.true + settings: + foreground: '#AE81FF' + +- name: js null + scope: constant.language.null.js + settings: + foreground: '#AE81FF' + +- name: Inherited class + scope: entity.other.inherited-class + settings: + fontStyle: italic underline + foreground: '#A6E22E' + +- name: diff.header + scope: meta.diff, meta.diff.header, entity.name.namespace + settings: + foreground: '#75715E' + +- name: diff.deleted + scope: markup.deleted + settings: + background: '#420e09ff' + foreground: '#F92672' + +- name: diff.changed + scope: markup.changed + settings: + background: '#4a410dff' + foreground: '#E6DB74' + +- name: diff.inserted + scope: markup.inserted + settings: + background: '#253b22ff' + foreground: '#f8f8f8ff' + +- name: Log Entry + scope: meta.line.entry.logfile, meta.line.exit.logfile + settings: + background: '#eeeeee29' + foreground: '#f8f8f8ff' + +- name: Log Entry Error + scope: meta.line.error.logfile + settings: + background: '#751012' + foreground: '#f8f8f8' + +- name: JSON String + scope: meta.structure.dictionary.json string.quoted.double + settings: + foreground: '#CFCFC2' diff --git a/JavaScriptNext Monokai-Phoenix.tmTheme b/Monokai Phoenix.tmTheme similarity index 100% rename from JavaScriptNext Monokai-Phoenix.tmTheme rename to Monokai Phoenix.tmTheme From dc3cfe7bdcceeead0fd9cf8f3e32ddfd8296186b Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 20 May 2014 21:55:02 +1000 Subject: [PATCH 083/202] exported YAML-tmTheme --- Monokai Phoenix.YAML-tmTheme | 4 +- Monokai Phoenix.tmTheme | 215 +++++++++++++++++------------------ 2 files changed, 108 insertions(+), 111 deletions(-) diff --git a/Monokai Phoenix.YAML-tmTheme b/Monokai Phoenix.YAML-tmTheme index 2c3943b..fc9db75 100644 --- a/Monokai Phoenix.YAML-tmTheme +++ b/Monokai Phoenix.YAML-tmTheme @@ -1,5 +1,5 @@ -# [PackageDev] target_format: plist, ext: tmLanguage -name: Monokai-Phoenix +# [PackageDev] target_format: plist, ext: tmTheme +name: Monokai Phoenix uuid: b238c753-1549-3f12-a519-0faa5dcd4f65 settings: diff --git a/Monokai Phoenix.tmTheme b/Monokai Phoenix.tmTheme index b68c190..278ec3f 100644 --- a/Monokai Phoenix.tmTheme +++ b/Monokai Phoenix.tmTheme @@ -1,48 +1,45 @@ - + name - JavaScriptNext Monokai-Phoenix + Monokai Phoenix settings settings - background - #111111 - caret - #F8F8F0 - foreground - #F8F8F2 - invisibles - #3B3A32 - lineHighlight - #3E3D32 - selection - #49483E - findHighlight - #FFE792 - findHighlightForeground - #000000 - selectionBorder - #222218 - activeGuide - #9D550FB0 - - bracketsForeground - #F8F8F2A5 - bracketsOptions - underline - - bracketContentsForeground - #F8F8F2A5 - bracketContentsOptions - underline - - tagsOptions - stippled_underline - + activeGuide + #9D550FB0 + background + #111111 + bracketContentsForeground + #F8F8F2A5 + bracketContentsOptions + underline + bracketsForeground + #F8F8F2A5 + bracketsOptions + underline + caret + #F8F8F0 + findHighlight + #FFE792 + findHighlightForeground + #000000 + foreground + #F8F8F2 + invisibles + #3B3A32 + lineHighlight + #3E3D32 + selection + #49483E + selectionBorder + #222218 + tagsOptions + stippled_underline + name @@ -57,39 +54,39 @@ #75715E - - name - String - scope - string - settings - - foreground - #E6DB74 - - - - name - Built-in constant - scope - constant.language - settings - - foreground - #AE81FF - - - - name - User-defined constant - scope - constant.character, constant.other - settings - - foreground - #AE81FF - - + + name + String + scope + string + settings + + foreground + #E6DB74 + + + + name + Built-in constant + scope + constant.language + settings + + foreground + #AE81FF + + + + name + User-defined constant + scope + constant.character, constant.other + settings + + foreground + #AE81FF + + name Invalid @@ -145,7 +142,7 @@ #F92672 - + name storage.type scope @@ -335,19 +332,19 @@ #66D9EF - - name - Function name - scope - entity.name.function - settings - - fontStyle - - foreground - #A6E22E - - + + name + Function name + scope + entity.name.function + settings + + fontStyle + + foreground + #A6E22E + + name entity.name.class.js @@ -407,19 +404,19 @@ #66D9EF - - name - Library class/type - scope - support.type, support.class - settings - - fontStyle - italic - foreground - #66D9EF - - + + name + Library class/type + scope + support.type, support.class + settings + + fontStyle + italic + foreground + #66D9EF + + name js undefined @@ -464,19 +461,19 @@ #AE81FF - - name - Inherited class - scope - entity.other.inherited-class - settings - - fontStyle - italic underline - foreground - #A6E22E - - + + name + Inherited class + scope + entity.other.inherited-class + settings + + fontStyle + italic underline + foreground + #A6E22E + + name diff.header From 241bf6c0fe1a9c47e48601066f76c28d3c0e2e3d Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 20 May 2014 21:56:09 +1000 Subject: [PATCH 084/202] fixed up uuid --- Monokai Phoenix.YAML-tmTheme | 2 +- Monokai Phoenix.tmTheme | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Monokai Phoenix.YAML-tmTheme b/Monokai Phoenix.YAML-tmTheme index fc9db75..3c15436 100644 --- a/Monokai Phoenix.YAML-tmTheme +++ b/Monokai Phoenix.YAML-tmTheme @@ -1,6 +1,6 @@ # [PackageDev] target_format: plist, ext: tmTheme name: Monokai Phoenix -uuid: b238c753-1549-3f12-a519-0faa5dcd4f65 +uuid: 5815b34d-fb7d-4593-bf0c-4f41f8b1f0a9 settings: - settings: diff --git a/Monokai Phoenix.tmTheme b/Monokai Phoenix.tmTheme index 278ec3f..e1ee1ec 100644 --- a/Monokai Phoenix.tmTheme +++ b/Monokai Phoenix.tmTheme @@ -563,6 +563,6 @@ uuid - b238c753-1549-3f12-a519-0faa5dcd4f65 + 5815b34d-fb7d-4593-bf0c-4f41f8b1f0a9 From 61acb0977c61073341d5b0eabeeb119789ee9708 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 20 May 2014 22:03:15 +1000 Subject: [PATCH 085/202] updated readme on colorscheme change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fac3acd..6a5ae54 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ If you haven't already, [install Package Control](https://sublime.wbond.net/inst To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptNext`. -You may also need to change the ColorScheme, `Preferences -> Color Scheme --> JavaScriptNext - ES6 Syntax`. +You may also need to change the ColorScheme, `Preferences -> Color Scheme --> JavaScriptNext`. ## Screenshots From 0ba309b86a77419ca41db504f63b3a655d773277 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 20 May 2014 22:30:41 +1000 Subject: [PATCH 086/202] split literal-method into literal-method-call & literal-method-storage and re-ordered them, which fixes some bugs --- JavaScriptNext.YAML-tmLanguage | 150 +++++++++++++++++---------------- JavaScriptNext.tmLanguage | 25 +++--- 2 files changed, 91 insertions(+), 84 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index b524fd5..6008b21 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -13,6 +13,43 @@ patterns: - include: '#special' repository: + core: + patterns: + - include: '#leading-space' + + # literals + - include: '#literal-regex' # before operators to avoid ambiguities + - include: '#literal-number' + - include: '#literal-quasi' + - include: '#literal-language-constant' + + # keywords/operators + - include: '#literal-keywords' + + # modules/classes/functions + - include: '#literal-class' + - include: '#literal-module' + - include: '#literal-arrow-function-storage' + - include: '#literal-function-storage' + - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings + - include: '#literal-method-storage' # before function calls, after literal-function-storage, to differentiate methods from them + + # after literal-function-storage which requires the below in some cases + - include: '#literal-string' + - include: '#literal-language-variable' + + # function calls + - include: '#literal-method-call' + - include: '#literal-function-call' + + # punctuation + - include: '#literal-labels' + - include: '#literal-variable' + - include: '#literal-punctuation' + + # brackets + - include: '#brackets' + brackets: patterns: - name: meta.group.braces.round @@ -79,42 +116,6 @@ repository: match: ',' - include: '#comments' - core: - patterns: - - include: '#leading-space' - - # literals - - include: '#literal-regex' # before operators to avoid ambiguities - - include: '#literal-number' - - include: '#literal-quasi' - - include: '#literal-language-constant' - - # keywords/operators - - include: '#literal-keywords' - - # modules/classes/functions - - include: '#literal-class' - - include: '#literal-module' - - include: '#literal-arrow-function' - - include: '#literal-function-storage' - - include: '#literal-method' # before function calls & after function declarations, to differentiate methods from them - - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings - - # after literal-function-storage which requires the below in some cases - - include: '#literal-string' - - include: '#literal-language-variable' - - # function calls - - include: '#literal-function-call' - - # punctuation - - include: '#literal-labels' - - include: '#literal-variable' - - include: '#literal-punctuation' - - # brackets - - include: '#brackets' - literal-module: patterns: # module names are defined using strings @@ -175,26 +176,6 @@ repository: '1': {name: entity.name.class.js} '2': {name: support.constant.js} - literal-function-call: - patterns: - - name: meta.function-call.without-arguments.js - match: |- - (?x) - ([_$a-zA-Z][_$\w]*)\s* - (\(\s*\)) - captures: - '1': {name: entity.name.function.js} - '2': {name: meta.group.braces.round.function.arguments.js} - '3': {name: meta.brace.round.js} - - - name: meta.function-call.with-arguments.js - match: |- - (?x) - ([_$a-zA-Z][_$\w]*)\s* - (?=\() - captures: - '1': {name: entity.name.function.js} - literal-function-storage: patterns: # e.g. function play(arg1, arg2) { } @@ -277,7 +258,7 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-arrow-function: + literal-arrow-function-storage: patterns: # e.g. (args) => { } - name: meta.function.arrow.js @@ -290,7 +271,43 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-method: + literal-method-storage: + patterns: + # ES6 methods, e.g. play(arg1, arg2) { } + - name: meta.method.js + begin: |- + (?x) + (? include - #literal-arrow-function + #literal-arrow-function-storage include @@ -224,11 +224,11 @@ include - #literal-method + #literal-prototype-storage include - #literal-prototype-storage + #literal-method-storage include @@ -238,6 +238,10 @@ include #literal-language-variable + + include + #literal-method-call + include #literal-function-call @@ -449,7 +453,7 @@ - literal-arrow-function + literal-arrow-function-storage patterns @@ -1150,7 +1154,7 @@ - literal-method + literal-method-call patterns @@ -1188,11 +1192,6 @@ meta.function-call.static.with-arguments.js 7 - - name - entity.name.function.js - - 8 name variable.other.class.static.js @@ -1258,6 +1257,12 @@ name meta.function-call.method.with-arguments.js + + + literal-method-storage + + patterns + begin (?x) From e42a1deb0295b50d5b82a0e578a5c84f10316c20 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 20 May 2014 22:38:23 +1000 Subject: [PATCH 087/202] removed redundant meta.brace.round.js, so class's static function names show up --- JavaScriptNext.YAML-tmLanguage | 6 ++---- JavaScriptNext.tmLanguage | 14 ++------------ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 6008b21..ac53f9b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -297,7 +297,6 @@ repository: captures: '1': {name: entity.name.function.js} '2': {name: meta.group.braces.round.function.arguments.js} - '3': {name: meta.brace.round.js} - name: meta.function-call.with-arguments.js match: |- @@ -331,9 +330,9 @@ repository: '2': {name: meta.function-call.static.without-arguments.js} '3': {name: entity.name.function.js} '4': {name: meta.group.braces.round.function.arguments.js} - '5': {name: meta.brace.round.js} - '6': {name: meta.function-call.static.with-arguments.js} + '5': {name: meta.function-call.static.with-arguments.js} + '6': {name: entity.name.function.js} '7': {name: variable.other.class.static.js} @@ -346,7 +345,6 @@ repository: captures: '1': {name: entity.name.function.js} '2': {name: meta.group.braces.round.function.arguments.js} - '3': {name: meta.brace.round.js} - name: meta.function-call.method.with-arguments.js match: |- diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index f605fb4..b96054c 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -603,11 +603,6 @@ name meta.group.braces.round.function.arguments.js - 3 - - name - meta.brace.round.js - match (?x) @@ -1184,12 +1179,12 @@ 5 name - meta.brace.round.js + meta.function-call.static.with-arguments.js 6 name - meta.function-call.static.with-arguments.js + entity.name.function.js 7 @@ -1226,11 +1221,6 @@ name meta.group.braces.round.function.arguments.js - 3 - - name - meta.brace.round.js - match (?x) From d12f235114caed624fa1b5644f4e651a0cc63f62 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 20 May 2014 23:44:12 +1000 Subject: [PATCH 088/202] moved variable-related matching from literal-method-call to literal-variable --- JavaScriptNext.YAML-tmLanguage | 60 +++++++++++++------------ JavaScriptNext.tmLanguage | 80 ++++++++++++++++++---------------- 2 files changed, 73 insertions(+), 67 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index ac53f9b..1472d6c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -308,33 +308,26 @@ repository: literal-method-call: patterns: - - match: |- + - name: meta.function-call.static.without-arguments.js + match: |- (?x) - \b([A-Z][_$\w]*)\s* - (?:\. - (?: - ( - ([_$a-zA-Z][_$\w]*)\s* - (\(\s*\)) - )|( - ([_$a-zA-Z][_$\w]*)\s* - (?=\() - )| - ([_$a-z][_$\w]*) - ) - )? - + \b([A-Z][_$\w]*)\s*\. + ([_$a-zA-Z][_$\w]*)\s* + (\(\s*\)) captures: '1': {name: variable.other.class.js} + '2': {name: entity.name.function.js} + '3': {name: meta.group.braces.round.function.arguments.js} - '2': {name: meta.function-call.static.without-arguments.js} - '3': {name: entity.name.function.js} - '4': {name: meta.group.braces.round.function.arguments.js} - - '5': {name: meta.function-call.static.with-arguments.js} - '6': {name: entity.name.function.js} - - '7': {name: variable.other.class.static.js} + - name: meta.function-call.static.with-arguments.js + match: |- + (?x) + \b([A-Z][_$\w]*)\s*\. + ([_$a-zA-Z][_$\w]*)\s* + (?=\() + captures: + '1': {name: variable.other.class.js} + '2': {name: entity.name.function.js} - name: meta.function-call.method.without-arguments.js match: |- @@ -626,22 +619,31 @@ repository: literal-variable: patterns: + # e.g. .CONSTANT - name: variable.other.constant.js match: \.?[A-Z][_$\dA-Z]*\b + # e.g. Class.property + - name: meta.property.class.js + match: |- + (?x) + \b([A-Z][_$\w]*)\s*\. + ([_$a-zA-Z][_$\w]*) + captures: + '1': {name: variable.other.class.js} + '2': {name: variable.other.property.static.js} + + # e.g. obj.property - name: variable.other.object.js match: (?variable.other.class.js 2 - - name - meta.function-call.static.without-arguments.js - - 3 name entity.name.function.js - 4 + 3 name meta.group.braces.round.function.arguments.js - 5 + + match + (?x) + \b([A-Z][_$\w]*)\s*\. + ([_$a-zA-Z][_$\w]*)\s* + (\(\s*\)) + name + meta.function-call.static.without-arguments.js + + + captures + + 1 name - meta.function-call.static.with-arguments.js + variable.other.class.js - 6 + 2 name entity.name.function.js - 7 - - name - variable.other.class.static.js - match (?x) - \b([A-Z][_$\w]*)\s* - (?:\. - (?: - ( - ([_$a-zA-Z][_$\w]*)\s* - (\(\s*\)) - )|( - ([_$a-zA-Z][_$\w]*)\s* - (?=\() - )| - ([_$a-z][_$\w]*) - ) - )? + \b([A-Z][_$\w]*)\s*\. + ([_$a-zA-Z][_$\w]*)\s* + (?=\() + name + meta.function-call.static.with-arguments.js captures @@ -1647,19 +1641,29 @@ variable.other.constant.js + captures + + 1 + + name + variable.other.class.js + + 2 + + name + variable.other.property.static.js + + match - (?<!\.)[_$a-zA-Z][_$\w]*\s*(?=[\[\.]) + (?x) + \b([A-Z][_$\w]*)\s*\. + ([_$a-zA-Z][_$\w]*) name - variable.other.object.js + meta.property.class.js captures - 0 - - name - meta.property-name.js - 1 name @@ -1667,14 +1671,14 @@ match - ([_$a-zA-Z][_$\w]*)\s*(?=[\[\.]) + (?<!\.)[_$a-zA-Z][_$\w]*\s*(?=[\[\.]) name - meta.property.js + variable.other.object.js captures - 0 + 2 name variable.other.property.js @@ -1683,7 +1687,7 @@ match (?<=[\.])\s*[_$a-zA-Z][_$\w]* name - meta.property.js + meta.property.object.js match From 792c6bb6f36e5f6bed31f05e744e7190e030e90d Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 21 May 2014 00:11:13 +1000 Subject: [PATCH 089/202] fixed bugs in meta.function.static.js --- JavaScriptNext.YAML-tmLanguage | 23 ++++----------- JavaScriptNext.tmLanguage | 54 +++++++++++++--------------------- 2 files changed, 26 insertions(+), 51 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 1472d6c..4b381e7 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -200,27 +200,16 @@ repository: patterns: - include: '#function-declaration-parameters' - # include symbol classes which not involve expressions # e.g. Sound.play = function(arg1, arg2) { } - name: meta.function.static.js - begin: >- - (?x) - (?= - ([_$a-zA-Z][_$\w]*)? - \.([_$a-zA-Z][_$\w]*)\s* - =\s* - (function\s*\*?)\s* - ) + begin: ([A-Z][_$\w]*)?\.([_$a-zA-Z][_$\w]*)\s*=\s*(function(?:\s*\*|(?=\s|[(])))\s* + beginCaptures: + '1': {name: entity.name.class.js} + '2': {name: entity.name.function.js} + '3': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#literal-language-variable' - - begin: \b(function(?:\s*\*|(?=\s|[(])))(?:\s*([a-zA-Z_$][_$\w]*))?\s* - beginCaptures: - '1': {name: storage.type.function.js} - '2': {name: entity.name.function.js} - end: (?<=\)) - patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 1502c57..9fa3121 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -701,13 +701,25 @@ begin - (?x) - (?= - ([_$a-zA-Z][_$\w]*)? - \.([_$a-zA-Z][_$\w]*)\s* - =\s* - (function\s*\*?)\s* - ) + ([A-Z][_$\w]*)?\.([_$a-zA-Z][_$\w]*)\s*=\s*(function(?:\s*\*|(?=\s|[(])))\s* + beginCaptures + + 1 + + name + entity.name.class.js + + 2 + + name + entity.name.function.js + + 3 + + name + storage.type.function.js + + end (?<=\)) name @@ -716,33 +728,7 @@ include - #literal-language-variable - - - begin - \b(function(?:\s*\*|(?=\s|[(])))(?:\s*([a-zA-Z_$][_$\w]*))?\s* - beginCaptures - - 1 - - name - storage.type.function.js - - 2 - - name - entity.name.function.js - - - end - (?<=\)) - patterns - - - include - #function-declaration-parameters - - + #function-declaration-parameters From f052499f11ef74f319fde05a9e4f07332c17aa2d Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 21 May 2014 00:19:32 +1000 Subject: [PATCH 090/202] more flexible meta.function-call.static --- JavaScriptNext.YAML-tmLanguage | 6 ++++-- JavaScriptNext.tmLanguage | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 4b381e7..8a5c780 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -300,7 +300,8 @@ repository: - name: meta.function-call.static.without-arguments.js match: |- (?x) - \b([A-Z][_$\w]*)\s*\. + (?:(?<=\.)|\b) + ([A-Z][_$\w]*)\s*\. ([_$a-zA-Z][_$\w]*)\s* (\(\s*\)) captures: @@ -311,7 +312,8 @@ repository: - name: meta.function-call.static.with-arguments.js match: |- (?x) - \b([A-Z][_$\w]*)\s*\. + (?:(?<=\.)|\b) + ([A-Z][_$\w]*)\s*\. ([_$a-zA-Z][_$\w]*)\s* (?=\() captures: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 9fa3121..086b489 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1160,7 +1160,8 @@ match (?x) - \b([A-Z][_$\w]*)\s*\. + (?:(?<=\.)|\b) + ([A-Z][_$\w]*)\s*\. ([_$a-zA-Z][_$\w]*)\s* (\(\s*\)) name @@ -1182,7 +1183,8 @@ match (?x) - \b([A-Z][_$\w]*)\s*\. + (?:(?<=\.)|\b) + ([A-Z][_$\w]*)\s*\. ([_$a-zA-Z][_$\w]*)\s* (?=\() name From 0f5c4fd34f4e80d59be7012040cb25c4fb9ede37 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 21 Aug 2014 15:58:22 +1000 Subject: [PATCH 091/202] redundant regex escapes --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8a5c780..00e1a4f 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -414,7 +414,7 @@ repository: match: \b(delete|in(stanceof)?|of|new|typeof|void|with)\b - name: keyword.operator.js - match: '!|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^=' + match: '!|%|&|\*|--|-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|-=|&=|\^=' - name: punctuation.separator.key-value match: ':' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 086b489..5155b82 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -924,7 +924,7 @@ match - !|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^= + !|%|&|\*|--|-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|-=|&=|\^= name keyword.operator.js From 74a035df0ea8814553d137eb86df76027c0a127e Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 21 Aug 2014 19:44:20 +1000 Subject: [PATCH 092/202] should be YAML-tmPreferences --- Comments.YAML-tmLanguage => Comments.YAML-tmPreferences | 4 ++-- Comments.tmPreferences | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename Comments.YAML-tmLanguage => Comments.YAML-tmPreferences (64%) diff --git a/Comments.YAML-tmLanguage b/Comments.YAML-tmPreferences similarity index 64% rename from Comments.YAML-tmLanguage rename to Comments.YAML-tmPreferences index 7ef1c0d..3c26c30 100644 --- a/Comments.YAML-tmLanguage +++ b/Comments.YAML-tmPreferences @@ -1,6 +1,6 @@ -# [PackageDev] target_format: plist, ext: tmLanguage +# [PackageDev] target_format: plist, ext: tmPreferences name: Comments -uuid: BCCA5D24-53BF-4C69-9419-D393D5590D54 +uuid: A67A8BD9-A951-406F-9175-018DD4B52FD1 scope: source.js, source.json settings: shellVariables: diff --git a/Comments.tmPreferences b/Comments.tmPreferences index b26c1f9..dba0831 100644 --- a/Comments.tmPreferences +++ b/Comments.tmPreferences @@ -1,5 +1,5 @@ - + name From 8077e3b3d22bb138e6e86f14db63ad238b6b0003 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 12 Sep 2014 10:48:53 +1000 Subject: [PATCH 093/202] added shebang line highlighting, cf #39 --- JavaScriptNext.YAML-tmLanguage | 21 ++++++++++------- JavaScriptNext.tmLanguage | 42 ++++++++++++++++++++++------------ 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 00e1a4f..b713a7e 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -3,7 +3,7 @@ name: JavaScript Next scopeName: source.js fileTypes: [js, htc, jsx] uuid: 487CF323-A3F9-48FA-B140-DCE8C893E664 -firstLineMatch: ^#!/.*\b(node|js) +firstLineMatch: ^#!/.*\b(node|js)$\n? keyEquivalent: ^~J patterns: @@ -76,28 +76,33 @@ repository: patterns: - include: '#special-comments-conditional-compilation' + - name: comment.block.js + begin: /\* + end: \*/ + captures: + '0': {name: punctuation.definition.comment.js} + - name: comment.block.documentation.js begin: /\*\*(?!/) end: \*/ captures: '0': {name: punctuation.definition.comment.js} - - name: comment.block.js - begin: /\* - end: \*/ + - name: comment.block.html.js + match: () captures: '0': {name: punctuation.definition.comment.js} + '2': {name: punctuation.definition.comment.js} - name: comment.line.double-slash.js match: (//).*$\n? captures: '1': {name: punctuation.definition.comment.js} - - name: comment.block.html.js - match: () + - name: comment.line.shebang.js + match: ^(#!).*$\n? captures: - '0': {name: punctuation.definition.comment.html.js} - '2': {name: punctuation.definition.comment.html.js} + '1': {name: punctuation.definition.comment.js} function-declaration-parameters: patterns: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 5155b82..4aab47b 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -9,7 +9,7 @@ jsx firstLineMatch - ^#!/.*\b(node|js) + ^#!/.*\b(node|js)$\n? keyEquivalent ^~J name @@ -113,7 +113,7 @@ begin - /\*\*(?!/) + /\* captures 0 @@ -125,11 +125,11 @@ end \*/ name - comment.block.documentation.js + comment.block.js begin - /\* + /\*\*(?!/) captures 0 @@ -141,40 +141,54 @@ end \*/ name - comment.block.js + comment.block.documentation.js captures - 1 + 0 + + name + punctuation.definition.comment.js + + 2 name punctuation.definition.comment.js match - (//).*$\n? + (<!--|-->) name - comment.line.double-slash.js + comment.block.html.js captures - 0 + 1 name - punctuation.definition.comment.html.js + punctuation.definition.comment.js - 2 + + match + (//).*$\n? + name + comment.line.double-slash.js + + + captures + + 1 name - punctuation.definition.comment.html.js + punctuation.definition.comment.js match - (<!--|-->) + ^(#!).*$\n? name - comment.block.html.js + comment.line.shebang.js From 339336418988c1e6ac9db8e44f854a1a61b9da60 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 9 Oct 2014 19:15:20 +1100 Subject: [PATCH 094/202] got rid of JavaScriptNext.tmTheme since it doesn't look like anybody's using it anyway --- JavaScriptNext.YAML-tmTheme | 848 ---------------- JavaScriptNext.tmTheme | 1856 ----------------------------------- 2 files changed, 2704 deletions(-) delete mode 100644 JavaScriptNext.YAML-tmTheme delete mode 100644 JavaScriptNext.tmTheme diff --git a/JavaScriptNext.YAML-tmTheme b/JavaScriptNext.YAML-tmTheme deleted file mode 100644 index 4164c46..0000000 --- a/JavaScriptNext.YAML-tmTheme +++ /dev/null @@ -1,848 +0,0 @@ -# [PackageDev] target_format: plist, ext: tmTheme -name: JavaScriptNext -uuid: b238c753-1549-3f12-a519-0faa5dcd4f65 - -settings: -- settings: - activeGuide: '#3333FFFF' - background: '#000000' - bracketsBackground: '#ff00aa66' - bracketsOptions: background - caret: '#ff0099' - foreground: '#e6e6e6' - guide: '#33333388' - gutter: '#6600ff33' - invisibles: '#404040' - lineHighlight: '#ff009933' - multiEditHighlight: '#00ff0022' - searchHighlight: '#FF00AA99' - selection: '#00ffff44' - stackGuide: '#333333CC' - -- name: bracket.curly - scope: bracket.curly - settings: - background: '#FF44AA' - foreground: '#3399FF' - -- name: bracket.square - scope: bracket.square - settings: - background: '#2266CC' - foreground: '#FF8800' - -- name: bracket.round - scope: bracket.round - settings: - background: '#9922FF' - foreground: '#00FF00' - -- name: bracket.quote - scope: bracket.quote - settings: - background: '#00FF00' - -- name: comment - scope: comment - settings: - fontStyle: italic - foreground: '#646464ff' - -- name: Invalid - scope: invalid - settings: - background: '#ff000022' - -- name: constant - scope: constant - settings: - foreground: '#3387ccff' - -- name: Keyword - scope: keyword - settings: - foreground: '#e28964' - -- name: constant.numeric - scope: constant.numeric - settings: - foreground: '#ffff66' - -- name: Storage - scope: storage - settings: - foreground: '#99cf50' - -- name: storage.modifier - scope: storage.modifier - settings: - foreground: '#cf5099' - -- name: storage.self - scope: storage.self - settings: - fontStyle: bold - foreground: '#cc0033' - -- name: storage.type - scope: storage.type - settings: - foreground: '#cf9950' - -- name: Support - scope: support - settings: - foreground: '#8a5c8dff' - -- name: entity.name.function - scope: entity.name.function - settings: - foreground: '#bb00ff' - -- name: keyword control - scope: keyword.control - settings: - foreground: '#ff00ff' - -- name: keyword.control.declaration - scope: keyword.control.declaration - settings: - foreground: '#8888aa' - -- name: keyword.control.module - scope: keyword.control.module - settings: - background: '#ffff3333' - foreground: '#ffff33' - options: underline - -- name: keyword.control.flow - scope: keyword.control.flow - settings: - background: '#110300' - fontStyle: bold - foreground: '#ff6600' - -- name: keyword.control.conditional - scope: keyword.control.conditional - settings: - foreground: '#ff00ff' - -- name: keyword.control.trycatch - scope: keyword.control.trycatch - settings: - foreground: '#ff0033' - -- name: keyword.control.loop - scope: keyword.control.loop - settings: - foreground: '#009999' - -- name: keyword.control.switch - scope: keyword.control.switch - settings: - foreground: '#999999' - -- name: keyword operator - scope: keyword.operator - settings: - foreground: '#ff0080' - -- name: Function arg - scope: meta.function.argument, variable.parameter, meta.parens.c - settings: - foreground: '#77ff11' - -- name: '' - scope: punctuation.section.embedded - settings: - background: '#0D0D0D37' - foreground: '#00d3ffff' - -- name: keyword.other.unit - scope: keyword.other.unit, keyword.unit.css - settings: - foreground: '#80ff00ff' - -- name: invalid.illegal - scope: invalid.illegal - settings: - background: '#562d56bf' - foreground: '#fd5ff1ff' - -- name: string.quoted source - scope: string.quoted source - settings: - foreground: '#daefa3' - -- name: string constant - scope: string constant - settings: - foreground: '#cfed81' - -- name: string.regexp - scope: string.regexp - settings: - foreground: '#6fff17' - -- name: punctuation.definition.string - scope: punctuation.definition.string - settings: - background: '#15151501' - foreground: '#b4ff82' - -- name: string.regexp.special - scope: "string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition" - settings: - foreground: '#00d505' - -- name: string.regexp punctuation keyword - scope: string.regexp punctuation keyword - settings: - foreground: '#c559ff' - -- name: string variable - scope: string variable - settings: - foreground: '#8a9a95' - -- name: support.function - scope: support.function - settings: - foreground: '#fcf352ff' - -- name: meta.tag - scope: meta.tag - settings: - foreground: '#4f9effff' - -- name: meta.tag entity - scope: meta.tag entity - settings: - foreground: '#157eff' - -- name: HTML/XML tag attribute value - scope: meta.tag string.quoted.double.html - settings: - foreground: '#E07D2C' - -- name: html5 tag - scope: meta.tag.block.any.html.html5 - settings: - foreground: '#e88bfcff' - -- name: html5 tag entity - scope: meta.tag.block.any.html.html5 entity - settings: - foreground: '#d730faff' - -- name: meta.tag.inline - scope: "source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity" - settings: - foreground: '#87a7e2ff' - -- name: html js tag - scope: source.js.embedded.html entity.name.tag.script.html - settings: - foreground: '#FF3535' - -- name: html js tag braces - scope: source.js.embedded.html punctuation.definition.tag.html - settings: - foreground: '#FF1E1E' - -- name: html js tag url - scope: source.js.embedded.html string.quoted.double.html - settings: - foreground: '#FF9D9D' - -- name: Attribute - scope: entity.other.attribute-name - settings: - foreground: '#7349beff' - -- name: Meta Toc List - scope: meta.toc-list - settings: - background: '#162c1aff' - foreground: '#BEFEC7FF' - options: underline - -- name: js variable readwrite - scope: meta.initialization, variable.other.readwrite.js - settings: - foreground: '#ff9122' - -- name: js object - scope: variable.other.object.js - settings: - foreground: '#ffee00' - -- name: js object with parent - scope: meta.property-name.js variable.other.object.js - settings: - foreground: '#ffff88' - -- name: support.variable.property.js - scope: support.variable.property.js - settings: - foreground: '#3399ff' - -- name: variable.other.dot-access - scope: variable.other.dot-access - settings: - foreground: '#66ffdd' - -- name: variable.other.property.js - scope: variable.other.property.js - settings: - foreground: '#37C1BE' - -- name: punctuation.section.scope.square.js - scope: punctuation.section.scope.square.js - settings: - foreground: '#ff2404' - -- name: punctuation.section.scope.round.js, meta.brace.round - scope: punctuation.section.scope.round.js, meta.brace.round - settings: - foreground: '#1c38ff' - -- name: punctuation.definition.arrow.js - scope: punctuation.definition.arrow.js - settings: - background: '#001133' - fontStyle: bold - foreground: '#aa00ff' - -- name: entity.arrow.function.js - scope: entity.arrow.function.js - settings: - background: '#001133' - fontStyle: bold - foreground: '#aa00ff' - -- name: variable.language - scope: variable.language - settings: - foreground: '#aa0044' - -- name: variable.language.prototype - scope: variable.language.prototype - settings: - foreground: '#ff6600' - -- name: support.class.error.js - scope: support.class.error.js - settings: - foreground: '#ff5522' - -- name: support.class.builtin.js - scope: support.class.builtin.js - settings: - fontStyle: italic - foreground: '#ffee00' - -- name: support.class.node.js - scope: support.class.node.js - settings: - foreground: '#1224fe' - -- name: entity.name.function.node.js - scope: entity.name.function.node.js - settings: - foreground: '#d84014' - -- name: support.keyword.node.js - scope: support.keyword.node.js - settings: - fontStyle: bold - foreground: '#99ef25' - -- name: variable.import.destructuring.js - scope: variable.import.destructuring.js - settings: - foreground: '#00bbff' - -- name: other.object.key.js - scope: other.object.key.js - settings: - foreground: '#1C98C1' - -- name: meta.accessor.js punctuation.definition.parameters - scope: meta.accessor.js punctuation.definition.parameters - settings: - foreground: '#005588' - -- name: storage.type.accessor.js - scope: storage.type.accessor.js - settings: - background: '#001122' - fontStyle: bold italic - foreground: '#0066aa' - -- name: entity.name.module.js, variable.import.parameter.js, variable.other.class.js - scope: entity.name.module.js, variable.import.parameter.js, variable.other.class.js - settings: - background: '#220011' - foreground: '#ff0044' - -- name: storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - scope: storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - settings: - background: '#222211' - foreground: '#cccc44' - -- name: storage.type.class.js, storage.type.extends.js - scope: storage.type.class.js, storage.type.extends.js - settings: - background: '#001122' - foreground: '#0044aa' - -- name: 'meta.function.call.class.static.js ' - scope: 'meta.function.call.class.static.js ' - settings: - foreground: '#880011' - -- name: variable.other.class.static.js - scope: variable.other.class.static.js - settings: - foreground: '#aa0066' - -- name: entity.name.accessor.js - scope: entity.name.accessor.js - settings: - background: '#001122' - fontStyle: bold italic - foreground: '#00ffcc' - -- name: entity.name.method.js - scope: entity.name.method.js - settings: - background: '#110022' - fontStyle: italic bold - foreground: '#aa00ff' - -- name: meta.method.js - scope: meta.method.js - settings: - fontStyle: bold - foreground: '#660099' - -- name: storage.type.function.js - scope: storage.type.function.js - settings: - fontStyle: bold - foreground: '#99cc44' - -- name: string.quoted.single - scope: string.quoted.single - settings: - foreground: '#88FFAAAA' - -- name: variable.other.quasi.js - scope: variable.other.quasi.js - settings: - foreground: '#ff0099' - -- name: string.quasi.js - scope: string.quasi.js - settings: - foreground: '#00FF00' - -- name: punctuation.quasi.element - scope: punctuation.quasi.element - settings: - foreground: '#008800' - -- name: entity.quasi.tag.name.js - scope: entity.quasi.tag.name.js - settings: - foreground: '#ffff00' - -- name: meta.group.braces.square, punctuation.destructuring - scope: meta.group.braces.square string.quoted.single, punctuation.destructuring - settings: - foreground: '#47E9AC' - -- name: string.quoted.double - scope: string.quoted.double - settings: - foreground: '#11bb11' - -- name: punctuation.section.scope.curly.js - scope: punctuation.section.scope.curly.js - settings: - foreground: '#F9044E' - -- name: meta.delimiter.object.comma.js - scope: meta.delimiter.object.comma.js - settings: - foreground: '#00ffff' - -- name: meta.group.braces.curly string.quoted.single - scope: meta.group.braces.curly string.quoted.single - settings: - foreground: '#16B853' - -- name: support.function - scope: support.function - settings: - foreground: '#B532ff' - -- name: punctuation.definition.string.begin.js - scope: punctuation.definition.string.begin.js - settings: - foreground: '#D2E20C' - -- name: punctuation.definition.string.end.js - scope: punctuation.definition.string.end.js - settings: - foreground: '#CEA30D' - -- name: instance constructor - scope: meta.class.inheritance, meta.instance.constructor - settings: - fontStyle: italic underline - foreground: '#e81e41' - -- name: entity.name.class.js - scope: entity.name.class.js - settings: - background: '#00ffff33' - fontStyle: italic - foreground: '#00ffff' - -- name: entity.name.extends.js - scope: entity.name.extends.js - settings: - background: '#00ff9933' - fontStyle: italic - foreground: '#00ff99' - -- name: function call - scope: meta.function-call entity.name.function - settings: - foreground: '#5b24ff' - -- name: function call with args - scope: meta.function-call.function.with-arguments.js - settings: - foreground: '#33ff00' - -- name: js brace - scope: meta.brace.curly.js - settings: - foreground: '#ff0099' - -- name: js paren - scope: meta.brace.round.js - settings: - background: '#000000ff' - foreground: '#d0c5feff' - -- name: js constant escape - scope: constant.character.escape - settings: - foreground: '#10cf62ff' - -- name: pseudo-class - scope: "meta.selector.css entity.other.attribute-name.tag.pseudo-class" - settings: - foreground: '#4fbc4b' - -- name: css selectors - scope: entity.namespace.unicode.css - settings: - foreground: '#FF4F4F' - -- name: entity.other.attribute-name.id - scope: entity.other.attribute-name.id - settings: - background: '#0b0028ff' - foreground: '#f20073ff' - -- name: class name - scope: meta.prototype support.class - settings: - foreground: '#ff0099' - -- name: support object - scope: support.object - settings: - fontStyle: bold - foreground: '#ffee00' - -- name: class name prototype - scope: meta.prototype support.constant - settings: - foreground: '#ff6600' - -- name: prototype declaration - scope: meta.prototype.declaration.js - settings: - fontStyle: bold - -- name: js undefined - scope: constant.language.undefined.js - settings: - foreground: '#555588' - -- name: variable.other.constant.js - scope: variable.other.constant.js - settings: - background: '#003311' - foreground: '#00ff33' - -- name: 'false' - scope: constant.language.boolean.false - settings: - foreground: '#aaaa55' - -- name: 'true' - scope: constant.language.boolean.true - settings: - foreground: '#cc7744' - -- name: js null - scope: constant.language.null.js - settings: - foreground: '#558855' - -- name: css#id punctuation - scope: punctuation.definition.entity.id.css - settings: - background: '#0b0028' - foreground: '#ff489f' - -- name: css.class - scope: "entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css" - settings: - background: '#0b0028' - foreground: '#9529b8' - -- name: css.class puntuation - scope: punctuation.definition.entity.class.css - settings: - background: '#0b0028ff' - foreground: '#cd87e4ff' - -- name: css pseudo element - scope: entity.other.attribute-name.pseudo-element.css - settings: - background: '#0b0028ff' - foreground: '#ff00ffff' - -- name: css property-name - scope: support.type.property-name.css - settings: - foreground: '#b8efecff' - -- name: css @at-rule - scope: meta.preprocessor.at-rule keyword.control.at-rule - settings: - foreground: '#d7c271ff' - -- name: css color - scope: "constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css" - settings: - foreground: '#fb7720ff' - -- name: css constants - scope: support.constant.property-value.css - settings: - foreground: '#7ce85eff' - -- name: Puncation Termination - scope: punctuation.terminator, punctuation.separator - settings: - foreground: '#4bfcf8ff' - -- name: css constructor.argument - scope: meta.constructor.argument.css - settings: - foreground: '#8f9d6aff' - -- name: diff.header - scope: meta.diff, meta.diff.header, entity.name.namespace - settings: - background: '#0e2231ff' - foreground: '#f8f8f8ff' - -- name: diff.deleted - scope: markup.deleted - settings: - background: '#420e09ff' - foreground: '#f8f8f8ff' - -- name: diff.changed - scope: markup.changed - settings: - background: '#4a410dff' - foreground: '#f8f8f8ff' - -- name: diff.inserted - scope: markup.inserted - settings: - background: '#253b22ff' - foreground: '#f8f8f8ff' - -- name: 'Markup: Italic' - scope: markup.italic - settings: - fontStyle: italic - foreground: '#6ad500ff' - -- name: 'Markup: Underline' - scope: markup.underline - settings: - foreground: '#e18964ff' - options: underline - -- name: 'Markup: Quote' - scope: markup.quote - settings: - background: '#fee09c12' - fontStyle: italic - foreground: '#e1d4b9ff' - -- name: 'Markup: Heading' - scope: markup.heading, markup.heading entity - settings: - background: '#de3280ff' - foreground: '#ffffffff' - -- name: 'Markup: List' - scope: markup.list - settings: - foreground: '#6657eaff' - -- name: 'Markup: Raw' - scope: markup.raw - settings: - background: '#b1b3ba08' - foreground: '#578bb3ff' - -- name: 'Markup: Comment' - scope: markup comment - settings: - foreground: '#f67b37ff' - -- name: 'Markup: Separator' - scope: meta.separator - settings: - background: '#242424ff' - foreground: '#60a633ff' - -- name: Log Entry - scope: meta.line.entry.logfile, meta.line.exit.logfile - settings: - background: '#eeeeee29' - foreground: '#f8f8f8ff' - -- name: Log Entry Error - scope: meta.line.error.logfile - settings: - background: '#751012' - foreground: '#f8f8f8' - -- name: JSON property top - scope: meta.structure.dictionary.json string.quoted.double - settings: - background: '#111111' - foreground: '#1144bb' - -- name: JSON property level 2 - scope: "meta.structure meta.structure.dictionary.json string.quoted.double" - settings: - foreground: '#1122bb' - -- name: JSON property level 3 - scope: "meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" - settings: - foreground: '#2938eb' - -- name: JSON property level 4 - scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" - settings: - foreground: '#6d7ef1' - -- name: JSON property level 5 - scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" - settings: - foreground: '#b3bbf7' - -- name: JSON value - scope: meta.structure.dictionary.value.json string.quoted.double - settings: - foreground: '#aa00aa' - -- name: JSON value level 2 - scope: "meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" - settings: - foreground: '#bf00bf' - -- name: JSON value level 3 - scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" - settings: - foreground: '#ff00ff' - -- name: JSON value level 4 - scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" - settings: - foreground: '#ff40ff' - -- name: JSON value level 5 - scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" - settings: - foreground: '#ff80ff' - -- name: JSON value string punctuation - scope: "meta.structure.dictionary.value.json string punctuation.definition.string.double" - settings: - foreground: '#8409ff' - -- name: JSON array value - scope: meta.structure.array.json string.quoted.double - settings: - foreground: '#5522aa' - -- name: JSON array value level 1 - scope: "meta.structure meta.structure meta.structure.array.json string.quoted.double" - settings: - foreground: '#7017c8ff' - -- name: JSON array value level 2 - scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" - settings: - foreground: '#9541e9ff' - -- name: JSON array value level 3 - scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" - settings: - foreground: '#ba83f1ff' - -- name: JSON array value level 4 - scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" - settings: - foreground: '#dfc6f9ff' - -- name: JSON prop string punctuation - scope: "meta.structure.dictionary.json string punctuation.definition.string" - settings: - foreground: '#66bbddff' - -- name: JSON array string puntuation - scope: "meta.structure.array.json string punctuation.definition.string" - settings: - foreground: '#416be9ff' - -- name: JSON array brackets - scope: meta.structure.array.json punctuation.definition.array - settings: - foreground: '#fcc401ff' - -- name: JSON object braces - scope: "meta.structure.dictionary.json punctuation.definition.dictionary" - settings: - foreground: '#fedf76ff' diff --git a/JavaScriptNext.tmTheme b/JavaScriptNext.tmTheme deleted file mode 100644 index 0447945..0000000 --- a/JavaScriptNext.tmTheme +++ /dev/null @@ -1,1856 +0,0 @@ - - - - - name - JavaScriptNext - settings - - - settings - - activeGuide - #3333FFFF - background - #000000 - bracketsBackground - #ff00aa66 - bracketsOptions - background - caret - #ff0099 - foreground - #e6e6e6 - guide - #33333388 - gutter - #6600ff33 - invisibles - #404040 - lineHighlight - #ff009933 - multiEditHighlight - #00ff0022 - searchHighlight - #FF00AA99 - selection - #00ffff44 - stackGuide - #333333CC - - - - name - bracket.curly - scope - bracket.curly - settings - - background - #FF44AA - foreground - #3399FF - - - - name - bracket.square - scope - bracket.square - settings - - background - #2266CC - foreground - #FF8800 - - - - name - bracket.round - scope - bracket.round - settings - - background - #9922FF - foreground - #00FF00 - - - - name - bracket.quote - scope - bracket.quote - settings - - background - #00FF00 - - - - name - comment - scope - comment - settings - - fontStyle - italic - foreground - #646464ff - - - - name - Invalid - scope - invalid - settings - - background - #ff000022 - - - - name - constant - scope - constant - settings - - foreground - #3387ccff - - - - name - Keyword - scope - keyword - settings - - foreground - #e28964 - - - - name - constant.numeric - scope - constant.numeric - settings - - foreground - #ffff66 - - - - name - Storage - scope - storage - settings - - foreground - #99cf50 - - - - name - storage.modifier - scope - storage.modifier - settings - - foreground - #cf5099 - - - - name - storage.self - scope - storage.self - settings - - fontStyle - bold - foreground - #cc0033 - - - - name - storage.type - scope - storage.type - settings - - foreground - #cf9950 - - - - name - Support - scope - support - settings - - foreground - #8a5c8dff - - - - name - entity.name.function - scope - entity.name.function - settings - - foreground - #bb00ff - - - - name - keyword control - scope - keyword.control - settings - - foreground - #ff00ff - - - - name - keyword.control.declaration - scope - keyword.control.declaration - settings - - foreground - #8888aa - - - - name - keyword.control.module - scope - keyword.control.module - settings - - background - #ffff3333 - foreground - #ffff33 - options - underline - - - - name - keyword.control.flow - scope - keyword.control.flow - settings - - background - #110300 - fontStyle - bold - foreground - #ff6600 - - - - name - keyword.control.conditional - scope - keyword.control.conditional - settings - - foreground - #ff00ff - - - - name - keyword.control.trycatch - scope - keyword.control.trycatch - settings - - foreground - #ff0033 - - - - name - keyword.control.loop - scope - keyword.control.loop - settings - - foreground - #009999 - - - - name - keyword.control.switch - scope - keyword.control.switch - settings - - foreground - #999999 - - - - name - keyword operator - scope - keyword.operator - settings - - foreground - #ff0080 - - - - name - Function arg - scope - meta.function.argument, variable.parameter, meta.parens.c - settings - - foreground - #77ff11 - - - - name - - scope - punctuation.section.embedded - settings - - background - #0D0D0D37 - foreground - #00d3ffff - - - - name - keyword.other.unit - scope - keyword.other.unit, keyword.unit.css - settings - - foreground - #80ff00ff - - - - name - invalid.illegal - scope - invalid.illegal - settings - - background - #562d56bf - foreground - #fd5ff1ff - - - - name - string.quoted source - scope - string.quoted source - settings - - foreground - #daefa3 - - - - name - string constant - scope - string constant - settings - - foreground - #cfed81 - - - - name - string.regexp - scope - string.regexp - settings - - foreground - #6fff17 - - - - name - punctuation.definition.string - scope - punctuation.definition.string - settings - - background - #15151501 - foreground - #b4ff82 - - - - name - string.regexp.special - scope - string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - settings - - foreground - #00d505 - - - - name - string.regexp punctuation keyword - scope - string.regexp punctuation keyword - settings - - foreground - #c559ff - - - - name - string variable - scope - string variable - settings - - foreground - #8a9a95 - - - - name - support.function - scope - support.function - settings - - foreground - #fcf352ff - - - - name - meta.tag - scope - meta.tag - settings - - foreground - #4f9effff - - - - name - meta.tag entity - scope - meta.tag entity - settings - - foreground - #157eff - - - - name - HTML/XML tag attribute value - scope - meta.tag string.quoted.double.html - settings - - foreground - #E07D2C - - - - name - html5 tag - scope - meta.tag.block.any.html.html5 - settings - - foreground - #e88bfcff - - - - name - html5 tag entity - scope - meta.tag.block.any.html.html5 entity - settings - - foreground - #d730faff - - - - name - meta.tag.inline - scope - source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity - settings - - foreground - #87a7e2ff - - - - name - html js tag - scope - source.js.embedded.html entity.name.tag.script.html - settings - - foreground - #FF3535 - - - - name - html js tag braces - scope - source.js.embedded.html punctuation.definition.tag.html - settings - - foreground - #FF1E1E - - - - name - html js tag url - scope - source.js.embedded.html string.quoted.double.html - settings - - foreground - #FF9D9D - - - - name - Attribute - scope - entity.other.attribute-name - settings - - foreground - #7349beff - - - - name - Meta Toc List - scope - meta.toc-list - settings - - background - #162c1aff - foreground - #BEFEC7FF - options - underline - - - - name - js variable readwrite - scope - meta.initialization, variable.other.readwrite.js - settings - - foreground - #ff9122 - - - - name - js object - scope - variable.other.object.js - settings - - foreground - #ffee00 - - - - name - js object with parent - scope - meta.property-name.js variable.other.object.js - settings - - foreground - #ffff88 - - - - name - support.variable.property.js - scope - support.variable.property.js - settings - - foreground - #3399ff - - - - name - variable.other.dot-access - scope - variable.other.dot-access - settings - - foreground - #66ffdd - - - - name - variable.other.property.js - scope - variable.other.property.js - settings - - foreground - #37C1BE - - - - name - punctuation.section.scope.square.js - scope - punctuation.section.scope.square.js - settings - - foreground - #ff2404 - - - - name - punctuation.section.scope.round.js, meta.brace.round - scope - punctuation.section.scope.round.js, meta.brace.round - settings - - foreground - #1c38ff - - - - name - punctuation.definition.arrow.js - scope - punctuation.definition.arrow.js - settings - - background - #001133 - fontStyle - bold - foreground - #aa00ff - - - - name - entity.arrow.function.js - scope - entity.arrow.function.js - settings - - background - #001133 - fontStyle - bold - foreground - #aa00ff - - - - name - variable.language - scope - variable.language - settings - - foreground - #aa0044 - - - - name - variable.language.prototype - scope - variable.language.prototype - settings - - foreground - #ff6600 - - - - name - support.class.error.js - scope - support.class.error.js - settings - - foreground - #ff5522 - - - - name - support.class.builtin.js - scope - support.class.builtin.js - settings - - fontStyle - italic - foreground - #ffee00 - - - - name - support.class.node.js - scope - support.class.node.js - settings - - foreground - #1224fe - - - - name - entity.name.function.node.js - scope - entity.name.function.node.js - settings - - foreground - #d84014 - - - - name - support.keyword.node.js - scope - support.keyword.node.js - settings - - fontStyle - bold - foreground - #99ef25 - - - - name - variable.import.destructuring.js - scope - variable.import.destructuring.js - settings - - foreground - #00bbff - - - - name - other.object.key.js - scope - other.object.key.js - settings - - foreground - #1C98C1 - - - - name - meta.accessor.js punctuation.definition.parameters - scope - meta.accessor.js punctuation.definition.parameters - settings - - foreground - #005588 - - - - name - storage.type.accessor.js - scope - storage.type.accessor.js - settings - - background - #001122 - fontStyle - bold italic - foreground - #0066aa - - - - name - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - scope - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - settings - - background - #220011 - foreground - #ff0044 - - - - name - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - scope - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - settings - - background - #222211 - foreground - #cccc44 - - - - name - storage.type.class.js, storage.type.extends.js - scope - storage.type.class.js, storage.type.extends.js - settings - - background - #001122 - foreground - #0044aa - - - - name - meta.function.call.class.static.js - scope - meta.function.call.class.static.js - settings - - foreground - #880011 - - - - name - variable.other.class.static.js - scope - variable.other.class.static.js - settings - - foreground - #aa0066 - - - - name - entity.name.accessor.js - scope - entity.name.accessor.js - settings - - background - #001122 - fontStyle - bold italic - foreground - #00ffcc - - - - name - entity.name.method.js - scope - entity.name.method.js - settings - - background - #110022 - fontStyle - italic bold - foreground - #aa00ff - - - - name - meta.method.js - scope - meta.method.js - settings - - fontStyle - bold - foreground - #660099 - - - - name - storage.type.function.js - scope - storage.type.function.js - settings - - fontStyle - bold - foreground - #99cc44 - - - - name - string.quoted.single - scope - string.quoted.single - settings - - foreground - #88FFAAAA - - - - name - variable.other.quasi.js - scope - variable.other.quasi.js - settings - - foreground - #ff0099 - - - - name - string.quasi.js - scope - string.quasi.js - settings - - foreground - #00FF00 - - - - name - punctuation.quasi.element - scope - punctuation.quasi.element - settings - - foreground - #008800 - - - - name - entity.quasi.tag.name.js - scope - entity.quasi.tag.name.js - settings - - foreground - #ffff00 - - - - name - meta.group.braces.square, punctuation.destructuring - scope - meta.group.braces.square string.quoted.single, punctuation.destructuring - settings - - foreground - #47E9AC - - - - name - string.quoted.double - scope - string.quoted.double - settings - - foreground - #11bb11 - - - - name - punctuation.section.scope.curly.js - scope - punctuation.section.scope.curly.js - settings - - foreground - #F9044E - - - - name - meta.delimiter.object.comma.js - scope - meta.delimiter.object.comma.js - settings - - foreground - #00ffff - - - - name - meta.group.braces.curly string.quoted.single - scope - meta.group.braces.curly string.quoted.single - settings - - foreground - #16B853 - - - - name - support.function - scope - support.function - settings - - foreground - #B532ff - - - - name - punctuation.definition.string.begin.js - scope - punctuation.definition.string.begin.js - settings - - foreground - #D2E20C - - - - name - punctuation.definition.string.end.js - scope - punctuation.definition.string.end.js - settings - - foreground - #CEA30D - - - - name - instance constructor - scope - meta.class.inheritance, meta.instance.constructor - settings - - fontStyle - italic underline - foreground - #e81e41 - - - - name - entity.name.class.js - scope - entity.name.class.js - settings - - background - #00ffff33 - fontStyle - italic - foreground - #00ffff - - - - name - entity.name.extends.js - scope - entity.name.extends.js - settings - - background - #00ff9933 - fontStyle - italic - foreground - #00ff99 - - - - name - function call - scope - meta.function-call entity.name.function - settings - - foreground - #5b24ff - - - - name - function call with args - scope - meta.function-call.function.with-arguments.js - settings - - foreground - #33ff00 - - - - name - js brace - scope - meta.brace.curly.js - settings - - foreground - #ff0099 - - - - name - js paren - scope - meta.brace.round.js - settings - - background - #000000ff - foreground - #d0c5feff - - - - name - js constant escape - scope - constant.character.escape - settings - - foreground - #10cf62ff - - - - name - pseudo-class - scope - meta.selector.css entity.other.attribute-name.tag.pseudo-class - settings - - foreground - #4fbc4b - - - - name - css selectors - scope - entity.namespace.unicode.css - settings - - foreground - #FF4F4F - - - - name - entity.other.attribute-name.id - scope - entity.other.attribute-name.id - settings - - background - #0b0028ff - foreground - #f20073ff - - - - name - class name - scope - meta.prototype support.class - settings - - foreground - #ff0099 - - - - name - support object - scope - support.object - settings - - fontStyle - bold - foreground - #ffee00 - - - - name - class name prototype - scope - meta.prototype support.constant - settings - - foreground - #ff6600 - - - - name - prototype declaration - scope - meta.prototype.declaration.js - settings - - fontStyle - bold - - - - name - js undefined - scope - constant.language.undefined.js - settings - - foreground - #555588 - - - - name - variable.other.constant.js - scope - variable.other.constant.js - settings - - background - #003311 - foreground - #00ff33 - - - - name - false - scope - constant.language.boolean.false - settings - - foreground - #aaaa55 - - - - name - true - scope - constant.language.boolean.true - settings - - foreground - #cc7744 - - - - name - js null - scope - constant.language.null.js - settings - - foreground - #558855 - - - - name - css#id punctuation - scope - punctuation.definition.entity.id.css - settings - - background - #0b0028 - foreground - #ff489f - - - - name - css.class - scope - entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css - settings - - background - #0b0028 - foreground - #9529b8 - - - - name - css.class puntuation - scope - punctuation.definition.entity.class.css - settings - - background - #0b0028ff - foreground - #cd87e4ff - - - - name - css pseudo element - scope - entity.other.attribute-name.pseudo-element.css - settings - - background - #0b0028ff - foreground - #ff00ffff - - - - name - css property-name - scope - support.type.property-name.css - settings - - foreground - #b8efecff - - - - name - css @at-rule - scope - meta.preprocessor.at-rule keyword.control.at-rule - settings - - foreground - #d7c271ff - - - - name - css color - scope - constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css - settings - - foreground - #fb7720ff - - - - name - css constants - scope - support.constant.property-value.css - settings - - foreground - #7ce85eff - - - - name - Puncation Termination - scope - punctuation.terminator, punctuation.separator - settings - - foreground - #4bfcf8ff - - - - name - css constructor.argument - scope - meta.constructor.argument.css - settings - - foreground - #8f9d6aff - - - - name - diff.header - scope - meta.diff, meta.diff.header, entity.name.namespace - settings - - background - #0e2231ff - foreground - #f8f8f8ff - - - - name - diff.deleted - scope - markup.deleted - settings - - background - #420e09ff - foreground - #f8f8f8ff - - - - name - diff.changed - scope - markup.changed - settings - - background - #4a410dff - foreground - #f8f8f8ff - - - - name - diff.inserted - scope - markup.inserted - settings - - background - #253b22ff - foreground - #f8f8f8ff - - - - name - Markup: Italic - scope - markup.italic - settings - - fontStyle - italic - foreground - #6ad500ff - - - - name - Markup: Underline - scope - markup.underline - settings - - foreground - #e18964ff - options - underline - - - - name - Markup: Quote - scope - markup.quote - settings - - background - #fee09c12 - fontStyle - italic - foreground - #e1d4b9ff - - - - name - Markup: Heading - scope - markup.heading, markup.heading entity - settings - - background - #de3280ff - foreground - #ffffffff - - - - name - Markup: List - scope - markup.list - settings - - foreground - #6657eaff - - - - name - Markup: Raw - scope - markup.raw - settings - - background - #b1b3ba08 - foreground - #578bb3ff - - - - name - Markup: Comment - scope - markup comment - settings - - foreground - #f67b37ff - - - - name - Markup: Separator - scope - meta.separator - settings - - background - #242424ff - foreground - #60a633ff - - - - name - Log Entry - scope - meta.line.entry.logfile, meta.line.exit.logfile - settings - - background - #eeeeee29 - foreground - #f8f8f8ff - - - - name - Log Entry Error - scope - meta.line.error.logfile - settings - - background - #751012 - foreground - #f8f8f8 - - - - name - JSON property top - scope - meta.structure.dictionary.json string.quoted.double - settings - - background - #111111 - foreground - #1144bb - - - - name - JSON property level 2 - scope - meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #1122bb - - - - name - JSON property level 3 - scope - meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #2938eb - - - - name - JSON property level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #6d7ef1 - - - - name - JSON property level 5 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #b3bbf7 - - - - name - JSON value - scope - meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #aa00aa - - - - name - JSON value level 2 - scope - meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #bf00bf - - - - name - JSON value level 3 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #ff00ff - - - - name - JSON value level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #ff40ff - - - - name - JSON value level 5 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #ff80ff - - - - name - JSON value string punctuation - scope - meta.structure.dictionary.value.json string punctuation.definition.string.double - settings - - foreground - #8409ff - - - - name - JSON array value - scope - meta.structure.array.json string.quoted.double - settings - - foreground - #5522aa - - - - name - JSON array value level 1 - scope - meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #7017c8ff - - - - name - JSON array value level 2 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #9541e9ff - - - - name - JSON array value level 3 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #ba83f1ff - - - - name - JSON array value level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #dfc6f9ff - - - - name - JSON prop string punctuation - scope - meta.structure.dictionary.json string punctuation.definition.string - settings - - foreground - #66bbddff - - - - name - JSON array string puntuation - scope - meta.structure.array.json string punctuation.definition.string - settings - - foreground - #416be9ff - - - - name - JSON array brackets - scope - meta.structure.array.json punctuation.definition.array - settings - - foreground - #fcc401ff - - - - name - JSON object braces - scope - meta.structure.dictionary.json punctuation.definition.dictionary - settings - - foreground - #fedf76ff - - - - uuid - b238c753-1549-3f12-a519-0faa5dcd4f65 - - From 6409db6f28dceecdbaa61adb8b4aab30a533970c Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 9 Oct 2014 19:43:07 +1100 Subject: [PATCH 095/202] fixed exclamation marks preceding regexes and other problems with regex matching, cf #45 --- JavaScriptNext.YAML-tmLanguage | 13 +++++++------ JavaScriptNext.tmLanguage | 11 +++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index b713a7e..4f38040 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -568,16 +568,17 @@ repository: literal-regex: patterns: + # ignore ++, -- since they're uncommon, distinguishing them is not possible in sublime text, see: + # http://stackoverflow.com/questions/5519596/when-parsing-javascript-what-determines-the-meaning-of-a-slash - contentName: string.regexp.js begin: >- (?x) - (?<= - [\[,=(:?]| - ^|&&| - return - )\s* + (?:(?<= + \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| + new|delete|void|typeof|instanceof|in|do|return|case|throw + )|^)\s* (/) - (?![/*+{}?]|$) + (?!/|\*|$) beginCaptures: '1': {name: string.regexp.js} '2': {name: punctuation.definition.string.begin.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 4aab47b..d623a62 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1502,13 +1502,12 @@ begin (?x) - (?<= - [\[,=(:?]| - ^|&&| - return - )\s* + (?:(?<= + \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| + new|delete|void|typeof|instanceof|in|do|return|case|throw + )|^)\s* (/) - (?![/*+{}?]|$) + (?!/|\*|$) beginCaptures 1 From 895f542975840e6fd6fb87f8a6b6a0b2d15c4855 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 9 Oct 2014 19:49:45 +1100 Subject: [PATCH 096/202] match doc comments before block comments, thanks @pietvanzoen for the fix, cf #46 --- JavaScriptNext.YAML-tmLanguage | 8 ++++---- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 4f38040..8cfe560 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -76,14 +76,14 @@ repository: patterns: - include: '#special-comments-conditional-compilation' - - name: comment.block.js - begin: /\* + - name: comment.block.documentation.js + begin: /\*\*(?!/) end: \*/ captures: '0': {name: punctuation.definition.comment.js} - - name: comment.block.documentation.js - begin: /\*\*(?!/) + - name: comment.block.js + begin: /\* end: \*/ captures: '0': {name: punctuation.definition.comment.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index d623a62..003370f 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -113,7 +113,7 @@ begin - /\* + /\*\*(?!/) captures 0 @@ -125,11 +125,11 @@ end \*/ name - comment.block.js + comment.block.documentation.js begin - /\*\*(?!/) + /\* captures 0 @@ -141,7 +141,7 @@ end \*/ name - comment.block.documentation.js + comment.block.js captures From 94c05bf6ca33e14b0056b0ef4a265bdb7a14f9ef Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 9 Oct 2014 20:50:06 +1100 Subject: [PATCH 097/202] match patterns order with match order --- JavaScriptNext.YAML-tmLanguage | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8cfe560..40b7830 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -181,6 +181,19 @@ repository: '1': {name: entity.name.class.js} '2': {name: support.constant.js} + literal-arrow-function-storage: + patterns: + # e.g. (args) => { } + - name: meta.function.arrow.js + begin: |- + (?x) + (?=\([^())]*\)\s*(=>)) + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: storage.type.function.arrow.js} + patterns: + - include: '#function-declaration-parameters' + literal-function-storage: patterns: # e.g. function play(arg1, arg2) { } @@ -252,19 +265,6 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-arrow-function-storage: - patterns: - # e.g. (args) => { } - - name: meta.function.arrow.js - begin: |- - (?x) - (?=\([^())]*\)\s*(=>)) - end: (?<=\))\s*(=>) - endCaptures: - '1': {name: storage.type.function.arrow.js} - patterns: - - include: '#function-declaration-parameters' - literal-method-storage: patterns: # ES6 methods, e.g. play(arg1, arg2) { } From 36b8c8258adf87ee4a238ff4e003212bb9f15096 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 9 Oct 2014 23:21:14 +1100 Subject: [PATCH 098/202] updated screenshots --- README.md | 8 -------- screenshots/es5.png | Bin 69316 -> 0 bytes screenshots/es6.png | Bin 85404 -> 212733 bytes 3 files changed, 8 deletions(-) delete mode 100644 screenshots/es5.png diff --git a/README.md b/README.md index 6a5ae54..7dcf806 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,4 @@ You may also need to change the ColorScheme, `Preferences -> Color Scheme --> Ja ## Screenshots -__ES6__ - ![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es6.png) - -![screenshot](http://i.imgur.com/YzwbnTf.png) - -__ES5__ - -![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es5.png) diff --git a/screenshots/es5.png b/screenshots/es5.png deleted file mode 100644 index 591f92c94fa476a1dcf78a54402e0cd75c4d33bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69316 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 diff --git a/screenshots/es6.png b/screenshots/es6.png index 5a2efef8839577e0b6f4ade21f19b4791e6c62cc..f24172fea55dd62daabe74aa53e9232ccbc9786c 100644 GIT binary patch literal 212733 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

y&!AB{4 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

v_0@(NAT4ZAv5}e$f{8U?&)@t9r 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

oH18OSx%XDI!R04#8NI>N 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

GE( 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 From 59d486540bc21b4efaf6d5e5e069a45e77f06fdc Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 9 Oct 2014 23:43:28 +1100 Subject: [PATCH 099/202] updated classes to match the "maximally minimal classes" proposal, which supersedes the previous emcascript class proposal; using better patterns to match classes fixes #44 as a side effect; got rid of individual matching for brackets and always use group bracket matching instead, so we have better parsing and so that determining when a class definition ends is possible --- JavaScriptNext.YAML-tmLanguage | 99 +++++++-------- JavaScriptNext.tmLanguage | 212 +++++++++++++++------------------ 2 files changed, 144 insertions(+), 167 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 40b7830..fa6961f 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -32,7 +32,6 @@ repository: - include: '#literal-arrow-function-storage' - include: '#literal-function-storage' - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings - - include: '#literal-method-storage' # before function calls, after literal-function-storage, to differentiate methods from them # after literal-function-storage which requires the below in some cases - include: '#literal-string' @@ -72,6 +71,16 @@ repository: patterns: - include: source.js + - name: meta.group.braces.curly + begin: ({) + beginCaptures: + '1': {name: meta.brace.curly.js} + end: (}) + endCaptures: + '1': {name: meta.brace.curly.js} + patterns: + - include: source.js + comments: patterns: - include: '#special-comments-conditional-compilation' @@ -134,36 +143,48 @@ repository: patterns: # e.g. class MyClass { } - name: meta.class.js - match: \b(class)\b(?:\s+([_$a-zA-Z][_$\w]*)\s*(?:\b(extends)\b\s*([_$a-zA-Z][_$\w]*))?)?\s* - captures: + begin: |- + (?x) + \b(class) + \s+([_$a-zA-Z][_$\w]*) + (?: + \s+(extends) + \s+([_$a-zA-Z][_$\w]*) + )? + \s*({) + beginCaptures: '1': {name: storage.type.class.js} '2': {name: entity.name.class.js} '3': {name: storage.type.extends.js} '4': {name: entity.name.extends.js} + '5': {name: meta.brace.curly.js} + end: (}) + endCaptures: + '1': {name: meta.brace.curly.js} + patterns: + # e.g. play(arg1, arg2) { } + - name: meta.method.js + begin: |- + (?x) + \b([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures: + '1': {name: entity.name.method.js} + end: (?<=\)) + patterns: + - include: '#function-declaration-parameters' - # definitions here don't include field modifications (e.g. this.a = 'b'), as modifications can occur outside the class - - match: \b(?:(public|private|static)\s+)(?:(var|let|const)\s+)?([_$a-zA-Z][_$\w]*\s*)(?=\=) - captures: - '1': {name: storage.modifier.js} - '2': {name: storage.type.js} - '3': {name: entity.name.field.js} - - - match: \b(private)(?=\s*\() - captures: - '1': {name: support.function.private.js} - - - name: storage.modifier.js - match: \b(public|private|static)\b + # getter/setter + - name: meta.accessor.js + begin: \b(get|set)\s*\b([_$a-zA-Z][_$\w]*)\s* + beginCaptures: + '1': {name: storage.type.accessor.js} + '2': {name: entity.name.accessor.js} + end: (?<=\)) + patterns: + - include: '#function-declaration-parameters' - # getter/setter - - name: meta.accessor.js - begin: \b(get|set)\s*\b([_$a-zA-Z][_$\w]*)\s* - beginCaptures: - '1': {name: storage.type.accessor.js} - '2': {name: entity.name.accessor.js} - end: (?<=\)) - patterns: - - include: '#function-declaration-parameters' + - include: '#brackets' literal-prototype-storage: patterns: @@ -265,22 +286,6 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-method-storage: - patterns: - # ES6 methods, e.g. play(arg1, arg2) { } - - name: meta.method.js - begin: |- - (?x) - (? + + begin + ({) + beginCaptures + + 1 + + name + meta.brace.curly.js + + + end + (}) + endCaptures + + 1 + + name + meta.brace.curly.js + + + name + meta.group.braces.curly + patterns + + + include + source.js + + + comments @@ -240,10 +271,6 @@ include #literal-prototype-storage - - include - #literal-method-storage - include #literal-string @@ -502,7 +529,16 @@ patterns - captures + begin + (?x) + \b(class) + \s+([_$a-zA-Z][_$\w]*) + (?: + \s+(extends) + \s+([_$a-zA-Z][_$\w]*) + )? + \s*({) + beginCaptures 1 @@ -524,77 +560,82 @@ name entity.name.extends.js - - match - \b(class)\b(?:\s+([_$a-zA-Z][_$\w]*)\s*(?:\b(extends)\b\s*([_$a-zA-Z][_$\w]*))?)?\s* - name - meta.class.js - - - captures - - 1 - - name - storage.modifier.js - - 2 - - name - storage.type.js - - 3 + 5 name - entity.name.field.js + meta.brace.curly.js - match - \b(?:(public|private|static)\s+)(?:(var|let|const)\s+)?([_$a-zA-Z][_$\w]*\s*)(?=\=) - - - captures + end + (}) + endCaptures 1 name - support.function.private.js + meta.brace.curly.js - match - \b(private)(?=\s*\() - - - match - \b(public|private|static)\b name - storage.modifier.js - - - begin - \b(get|set)\s*\b([_$a-zA-Z][_$\w]*)\s* - beginCaptures - - 1 + meta.class.js + patterns + + begin + (?x) + \b([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures + + 1 + + name + entity.name.method.js + + + end + (?<=\)) name - storage.type.accessor.js + meta.method.js + patterns + + + include + #function-declaration-parameters + + - 2 + begin + \b(get|set)\s*\b([_$a-zA-Z][_$\w]*)\s* + beginCaptures + + 1 + + name + storage.type.accessor.js + + 2 + + name + entity.name.accessor.js + + + end + (?<=\)) name - entity.name.accessor.js + meta.accessor.js + patterns + + + include + #function-declaration-parameters + + - - end - (?<=\)) - name - meta.accessor.js - patterns - include - #function-declaration-parameters + #brackets @@ -1245,39 +1286,6 @@ - literal-method-storage - - patterns - - - begin - (?x) - (?<!function\s) # An approximation due to fixed width look-behind, but usually good enough - \b([_$a-zA-Z][_$\w]*) - \s* - (?=\([^())]*\)\s*\{) - beginCaptures - - 1 - - name - entity.name.method.js - - - end - (?<=\)) - name - meta.method.js - patterns - - - include - #function-declaration-parameters - - - - - literal-module patterns @@ -1400,30 +1408,6 @@ name meta.delimiter.method.period.js - - match - \{|\} - name - meta.brace.curly.js - - - match - \(|\) - name - meta.brace.round.js - - - match - \[|\] - name - meta.brace.square.js - - - match - (?<=\.)\s - name - meta.complete.method - literal-quasi From c64ed3746c556fc8635ac23ccd0cd2d11e2ff0a6 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 11:50:18 +1100 Subject: [PATCH 100/202] include comments in classes --- JavaScriptNext.YAML-tmLanguage | 1 + JavaScriptNext.tmLanguage | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index fa6961f..ff38ed3 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -185,6 +185,7 @@ repository: - include: '#function-declaration-parameters' - include: '#brackets' + - include: '#comments' literal-prototype-storage: patterns: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 3f4665c..a7ad28e 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -637,6 +637,10 @@ include #brackets + + include + #comments + From 0fc4f4ceb7155598b20b307161d3e7e9fafa0a2f Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 11:53:32 +1100 Subject: [PATCH 101/202] updated screenshot, fixes #48 --- screenshots/es6.png | Bin 212733 -> 17890 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshots/es6.png b/screenshots/es6.png index f24172fea55dd62daabe74aa53e9232ccbc9786c..f43ac94bb1e0e2fb58392b51a79f1f880147b9a0 100644 GIT binary patch literal 17890 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 Qv<0N6ZFIZj?+4HR4>DAtLI3~& literal 212733 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

y&!AB{4 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

v_0@(NAT4ZAv5}e$f{8U?&)@t9r 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

oH18OSx%XDI!R04#8NI>N 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

GE( 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 Date: Fri, 10 Oct 2014 12:04:46 +1100 Subject: [PATCH 102/202] always use `>-` in yaml --- JavaScriptNext.YAML-tmLanguage | 40 +++++++++++++++++----------------- JavaScriptNext.tmLanguage | 3 +-- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index ff38ed3..379466b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -123,7 +123,7 @@ repository: '1': {name: punctuation.definition.parameters.end.js} patterns: - name: variable.parameter.function.js - match: |- + match: >- (?x) [_$a-zA-Z][_$\w]* - name: punctuation.separator.parameter.function.js @@ -143,7 +143,7 @@ repository: patterns: # e.g. class MyClass { } - name: meta.class.js - begin: |- + begin: >- (?x) \b(class) \s+([_$a-zA-Z][_$\w]*) @@ -164,7 +164,7 @@ repository: patterns: # e.g. play(arg1, arg2) { } - name: meta.method.js - begin: |- + begin: >- (?x) \b([_$a-zA-Z][_$\w]*) \s*(?=\([^())]*\)\s*\{) @@ -207,7 +207,7 @@ repository: patterns: # e.g. (args) => { } - name: meta.function.arrow.js - begin: |- + begin: >- (?x) (?=\([^())]*\)\s*(=>)) end: (?<=\))\s*(=>) @@ -264,7 +264,7 @@ repository: # e.g. "play": function(arg1, arg2) { } - name: meta.function.json.js - begin: |- + begin: >- (?x) (?: ((')(.*?)(?- (?x) ([_$a-zA-Z][_$\w]*)\s* (\(\s*\)) @@ -299,7 +299,7 @@ repository: '2': {name: meta.group.braces.round.function.arguments.js} - name: meta.function-call.with-arguments.js - match: |- + match: >- (?x) ([_$a-zA-Z][_$\w]*)\s* (?=\() @@ -309,7 +309,7 @@ repository: literal-method-call: patterns: - name: meta.function-call.static.without-arguments.js - match: |- + match: >- (?x) (?:(?<=\.)|\b) ([A-Z][_$\w]*)\s*\. @@ -321,7 +321,7 @@ repository: '3': {name: meta.group.braces.round.function.arguments.js} - name: meta.function-call.static.with-arguments.js - match: |- + match: >- (?x) (?:(?<=\.)|\b) ([A-Z][_$\w]*)\s*\. @@ -332,7 +332,7 @@ repository: '2': {name: entity.name.function.js} - name: meta.function-call.method.without-arguments.js - match: |- + match: >- (?x) (?<=\.) ([_$a-zA-Z][_$\w]*)\s* @@ -342,7 +342,7 @@ repository: '2': {name: meta.group.braces.round.function.arguments.js} - name: meta.function-call.method.with-arguments.js - match: |- + match: >- (?x) (?<=\.) ([_$a-zA-Z][_$\w]*)\s* @@ -431,14 +431,14 @@ repository: match: ':' - name: keyword.operator.logical.js - match: |- + match: >- (?x) !(?!=)| # logical-not right-to-left right && | # logical-and left-to-right both \|\| # logical-or left-to-right both - name: keyword.operator.assignment.augmented.js - match: |- + match: >- (?x) %= | # assignment right-to-left both &= | # assignment right-to-left both @@ -453,7 +453,7 @@ repository: >>>= # assignment right-to-left both - name: keyword.operator.bitwise.js - match: |- + match: >- (?x) ~ | # bitwise-not right-to-left right << | # bitwise-shift left-to-right both @@ -464,7 +464,7 @@ repository: \| # bitwise-or left-to-right both - name: keyword.operator.relational.js - match: |- + match: >- (?x) <= | # relational left-to-right both >= | # relational left-to-right both @@ -472,7 +472,7 @@ repository: > # relational left-to-right both - name: keyword.operator.comparison.js - match: |- + match: >- (?x) === | # equality left-to-right both !== | # equality left-to-right both @@ -483,7 +483,7 @@ repository: match: (?x)= - name: keyword.operator.arithmetic.js - match: |- + match: >- (?x) -- | # decrement n/a right-or-left \+\+ | # increment n/a right-or-left @@ -514,7 +514,7 @@ repository: match: (?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+) - name: constant.numeric.js - match: |- + match: >- (?xi) (?:\B[-+])? (?: @@ -616,7 +616,7 @@ repository: # e.g. Class.property - name: meta.property.class.js - match: |- + match: >- (?x) \b([A-Z][_$\w]*)\s*\. ([_$a-zA-Z][_$\w]*) @@ -740,7 +740,7 @@ repository: match: \b(document|window)\b - name: support.constant.dom.js - match: > + match: >- (?x) \b( ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index a7ad28e..24b06b2 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1853,8 +1853,7 @@ ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR - )\b - + )\b name support.constant.dom.js From 57be0acab2c11ed10ea045d98a42bdcba0d7bbdf Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 12:10:14 +1100 Subject: [PATCH 103/202] moved firebug builtins into the support section --- JavaScriptNext.YAML-tmLanguage | 19 ++++++---------- JavaScriptNext.tmLanguage | 40 ++++++++++------------------------ 2 files changed, 19 insertions(+), 40 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 379466b..961efde 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -10,7 +10,6 @@ patterns: - include: '#comments' - include: '#support' - include: '#core' -- include: '#special' repository: core: @@ -639,17 +638,6 @@ repository: - name: variable.other.readwrite.js match: '[_$a-zA-Z][_$\w]*' - special: - patterns: - - name: entity.name.type.object.js.firebug - match: \b(console)\b - - - name: support.function.js.firebug - match: \.(warn|info|log|error|time|timeEnd|assert)\b - - - name: keyword.other.js - match: \b(debugger)\b - special-comments-conditional-compilation: patterns: - name: comment.block.conditional.js @@ -735,6 +723,10 @@ repository: - name: support.class.error.js match: \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b + # debugger + - name: keyword.other.js + match: \b(debugger)\b + # dom - name: support.type.object.dom.js match: \b(document|window)\b @@ -752,6 +744,9 @@ repository: - name: support.type.object.firebug.js match: \b(console)\b + - name: support.function.firebug.js + match: \.(warn|info|log|error|time|timeEnd|assert)\b + # node - name: support.module.node.js match: \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 24b06b2..ebc6004 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -28,10 +28,6 @@ include #core - - include - #special - repository @@ -1686,30 +1682,6 @@ - special - - patterns - - - match - \b(console)\b - name - entity.name.type.object.js.firebug - - - match - \.(warn|info|log|error|time|timeEnd|assert)\b - name - support.function.js.firebug - - - match - \b(debugger)\b - name - keyword.other.js - - - special-comments-conditional-compilation patterns @@ -1840,6 +1812,12 @@ name support.class.error.js + + match + \b(debugger)\b + name + keyword.other.js + match \b(document|window)\b @@ -1863,6 +1841,12 @@ name support.type.object.firebug.js + + match + \.(warn|info|log|error|time|timeEnd|assert)\b + name + support.function.firebug.js + match \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b From 3c47bc1ad84429121dc791f73fe1c0d733389323 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 12:11:50 +1100 Subject: [PATCH 104/202] moved `special-comments-conditional-compilation` after `comments` --- JavaScriptNext.YAML-tmLanguage | 56 +++++++++++++++++----------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 961efde..2ea3e89 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -112,6 +112,34 @@ repository: captures: '1': {name: punctuation.definition.comment.js} + special-comments-conditional-compilation: + patterns: + - name: comment.block.conditional.js + begin: /\*(?=@) + end: \*/ + endCaptures: + '1': {name: keyword.control.conditional.js} + '2': {name: punctuation.definition.keyword.js} + captures: + '0': {name: punctuation.definition.comment.js} + patterns: + - include: source.js + + - name: keyword.control.conditional.js + match: (@)(if|elif|else|end) + captures: + '1': {name: punctuation.definition.keyword.js} + + - name: keyword.operator.conditional.js + match: (@)(cc_on|set) + captures: + '1': {name: punctuation.definition.keyword.js} + + - name: variable.other.conditional.js + match: (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript_build|_jscript_version|_jscript|_debug|_fast|[a-zA-Z]\w+) + captures: + '1': {name: punctuation.definition.variable.js} + function-declaration-parameters: patterns: - begin: (\() @@ -638,34 +666,6 @@ repository: - name: variable.other.readwrite.js match: '[_$a-zA-Z][_$\w]*' - special-comments-conditional-compilation: - patterns: - - name: comment.block.conditional.js - begin: /\*(?=@) - end: \*/ - endCaptures: - '1': {name: keyword.control.conditional.js} - '2': {name: punctuation.definition.keyword.js} - captures: - '0': {name: punctuation.definition.comment.js} - patterns: - - include: source.js - - - name: keyword.control.conditional.js - match: (@)(if|elif|else|end) - captures: - '1': {name: punctuation.definition.keyword.js} - - - name: keyword.operator.conditional.js - match: (@)(cc_on|set) - captures: - '1': {name: punctuation.definition.keyword.js} - - - name: variable.other.conditional.js - match: (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript_build|_jscript_version|_jscript|_debug|_fast|[a-zA-Z]\w+) - captures: - '1': {name: punctuation.definition.variable.js} - string-content: patterns: - name: constant.character.escape.newline.js From 3008169a00f56dd541f8a4e36e3b21a2558b7e7d Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 12:13:26 +1100 Subject: [PATCH 105/202] moved `string-content` after `literal-string` --- JavaScriptNext.YAML-tmLanguage | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 2ea3e89..7e04dcc 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -635,6 +635,14 @@ repository: patterns: - include: '#string-content' + string-content: + patterns: + - name: constant.character.escape.newline.js + match: \\\s*\n + + - name: constant.character.escape.js + match: \\(x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) + literal-variable: patterns: # e.g. .CONSTANT @@ -666,14 +674,6 @@ repository: - name: variable.other.readwrite.js match: '[_$a-zA-Z][_$\w]*' - string-content: - patterns: - - name: constant.character.escape.newline.js - match: \\\s*\n - - - name: constant.character.escape.js - match: \\(x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) - leading-space: patterns: - name: meta.leading-tabs From 7470a8679c429e5690e1e63fd8c3991d1604a214 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 12:24:52 +1100 Subject: [PATCH 106/202] added the contributing section --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 7dcf806..9595128 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,9 @@ You may also need to change the ColorScheme, `Preferences -> Color Scheme --> Ja ## Screenshots ![screenshot](https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/screenshots/es6.png) + +## Contributing + +Edit the yaml files with the `YAML-XXX` extensions, convert them to plist xml files, and send in a pull request. The easiest way to do this is by using [AAAPackageDev](https://github.com/SublimeText/AAAPackageDev). You can do all of the above without leaving sublime text. + +YAML is used since it's a lot more compact and easier to edit than xml. \ No newline at end of file From 6ac0b25a3420b84fca35453f638594a22d62f637 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 12:34:21 +1100 Subject: [PATCH 107/202] unoptimized some regex for clarity --- JavaScriptNext.YAML-tmLanguage | 6 +++--- JavaScriptNext.tmLanguage | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7e04dcc..69bb954 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -718,7 +718,7 @@ repository: match: \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() - name: support.function.mutator.js - match: \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() + match: \b(shift|sort|splice|unshift|pop|push|reverse)\b(?=\() - name: support.class.error.js match: \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b @@ -749,10 +749,10 @@ repository: # node - name: support.module.node.js - match: \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b + match: \b(natives|buffer|child_process|cluster|crypto|dgram|dns|fs|http|https|net|os|path|punycode|string|string_decoder|readline|repl|tls|tty|util|vm|zlib)\b - name: support.type.object.node.js - match: \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports|__dirname|__filename|console)\b + match: \b(process|process\.env|global|GLOBAL|root|stdout|stdin|stderr|exports|__dirname|__filename|console)\b - name: support.class.node.js match: \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index ebc6004..ba728fc 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1802,7 +1802,7 @@ match - \b(s(hift|ort|plice)|unshift|p(op|ush)|reverse)\b(?=\() + \b(shift|sort|splice|unshift|pop|push|reverse)\b(?=\() name support.function.mutator.js @@ -1849,13 +1849,13 @@ match - \b(natives|buffer|child_process|cluster|crypto|d(gram|ns)|fs|http(s)?|net|os|path|punycode|(query)?string(_decoder)?|re(adline|pl)|tls|tty|util|vm|zlib)\b + \b(natives|buffer|child_process|cluster|crypto|dgram|dns|fs|http|https|net|os|path|punycode|string|string_decoder|readline|repl|tls|tty|util|vm|zlib)\b name support.module.node.js match - \b(process(.env)?|global|GLOBAL|root|std(out|in|err)|exports|__dirname|__filename|console)\b + \b(process|process\.env|global|GLOBAL|root|stdout|stdin|stderr|exports|__dirname|__filename|console)\b name support.type.object.node.js From 3276df1fc3b7368dbe8cc2dcc54ad9df6c97a4c3 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 12:36:44 +1100 Subject: [PATCH 108/202] Math is builtin --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 69bb954..50ea58f 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -712,7 +712,7 @@ repository: patterns: # built-ins - name: support.class.builtin.js - match: \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b + match: \b(Array|Boolean|Date|Function|Map|Math|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b - name: support.function.js match: \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index ba728fc..55d3e58 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1790,7 +1790,7 @@ match - \b(Array|Boolean|Date|Function|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b + \b(Array|Boolean|Date|Function|Map|Math|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b name support.class.builtin.js From 026ca48c9d415db02c12134f3a98aa650185f22d Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 13:55:41 +1100 Subject: [PATCH 109/202] tidied up literal-function-storage with some extensions & bug fixes --- JavaScriptNext.YAML-tmLanguage | 26 ++++++++++++++++++++++---- JavaScriptNext.tmLanguage | 22 ++++++++++++++++++---- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 50ea58f..1eca91c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -247,7 +247,10 @@ repository: patterns: # e.g. function play(arg1, arg2) { } - name: meta.function.js - begin: \b(function(?:\s*\*|(?=\s|[(])))(?:\s*([a-zA-Z_$][_$\w]*))?\s* + begin: >- + (?x) + \b(function(?:\s*\*|(?=\s|[(]))) + \s*([_$a-zA-Z][_$\w]*)?\s* beginCaptures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} @@ -257,7 +260,13 @@ repository: # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js - begin: ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function(?:\s*\*|(?=\s|[(])))\s* + begin: >- + (?x) + (\b[_$a-zA-Z][_$\w]*)? + \.(prototype) + \.([_$a-zA-Z][_$\w]*) + \s*= + \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: support.constant.js} @@ -269,7 +278,12 @@ repository: # e.g. Sound.play = function(arg1, arg2) { } - name: meta.function.static.js - begin: ([A-Z][_$\w]*)?\.([_$a-zA-Z][_$\w]*)\s*=\s*(function(?:\s*\*|(?=\s|[(])))\s* + begin: >- + (?x) + (\b[_$a-zA-Z][_$\w]*)? + \.([_$a-zA-Z][_$\w]*) + \s*= + \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: entity.name.function.js} @@ -280,7 +294,11 @@ repository: # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js - begin: \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function(?:\s*\*|(?=\s|[(])))\s* + begin: >- + (?x) + \b([_$a-zA-Z][_$\w]*) + \s*(:) + \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 55d3e58..df9d588 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -690,7 +690,9 @@ begin - \b(function(?:\s*\*|(?=\s|[(])))(?:\s*([a-zA-Z_$][_$\w]*))?\s* + (?x) + \b(function(?:\s*\*|(?=\s|[(]))) + \s*([_$a-zA-Z][_$\w]*)?\s* beginCaptures 1 @@ -718,7 +720,12 @@ begin - ([_$a-zA-Z][_$\w]*)\.(prototype)\.([_$a-zA-Z][_$\w]*)\s*=\s*(function(?:\s*\*|(?=\s|[(])))\s* + (?x) + (\b[_$a-zA-Z][_$\w]*)? + \.(prototype) + \.([_$a-zA-Z][_$\w]*) + \s*= + \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures 1 @@ -756,7 +763,11 @@ begin - ([A-Z][_$\w]*)?\.([_$a-zA-Z][_$\w]*)\s*=\s*(function(?:\s*\*|(?=\s|[(])))\s* + (?x) + (\b[_$a-zA-Z][_$\w]*)? + \.([_$a-zA-Z][_$\w]*) + \s*= + \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures 1 @@ -789,7 +800,10 @@ begin - \b([_$a-zA-Z][_$\w]*)\s*(:)\s*\b(function(?:\s*\*|(?=\s|[(])))\s* + (?x) + \b([_$a-zA-Z][_$\w]*) + \s*(:) + \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures 1 From 8dff77e9b3611391e04c3010ba43726f8f6764c6 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 14:40:42 +1100 Subject: [PATCH 110/202] highlight arrow function names, fixes #42 --- JavaScriptNext.YAML-tmLanguage | 104 ++++++++++++++--- JavaScriptNext.tmLanguage | 204 ++++++++++++++++++++++++++++++++- 2 files changed, 294 insertions(+), 14 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 1eca91c..2ea20b0 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -230,19 +230,6 @@ repository: '1': {name: entity.name.class.js} '2': {name: support.constant.js} - literal-arrow-function-storage: - patterns: - # e.g. (args) => { } - - name: meta.function.arrow.js - begin: >- - (?x) - (?=\([^())]*\)\s*(=>)) - end: (?<=\))\s*(=>) - endCaptures: - '1': {name: storage.type.function.arrow.js} - patterns: - - include: '#function-declaration-parameters' - literal-function-storage: patterns: # e.g. function play(arg1, arg2) { } @@ -332,6 +319,97 @@ repository: patterns: - include: '#function-declaration-parameters' + literal-arrow-function-storage: + patterns: + # e.g. (args) => { } + - name: meta.function.arrow.js + begin: >- + (?x) + (?=\([^()]*\)\s*(=>)) + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: storage.type.function.arrow.js} + patterns: + - include: '#function-declaration-parameters' + + # e.g. Sound.prototype.play = (args) => { } + - name: meta.prototype.function.arrow.js + begin: >- + (?x) + (\b[_$a-zA-Z][_$\w]*)? + \.(prototype) + \.([_$a-zA-Z][_$\w]*) + \s*= + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures: + '1': {name: entity.name.class.js} + '2': {name: support.constant.js} + '3': {name: entity.name.function.js} + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: storage.type.function.arrow.js} + patterns: + - include: '#function-declaration-parameters' + + # e.g. Sound.play = (args) => { } + - name: meta.function.static.js + begin: >- + (?x) + (\b[_$a-zA-Z][_$\w]*)? + \.([_$a-zA-Z][_$\w]*) + \s*= + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures: + '1': {name: entity.name.class.js} + '2': {name: entity.name.function.js} + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: storage.type.function.arrow.js} + patterns: + - include: '#function-declaration-parameters' + + # e.g. play: (args) => { } + - name: meta.function.json.js + begin: >- + (?x) + \b([_$a-zA-Z][_$\w]*) + \s*(:) + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures: + '1': {name: entity.name.function.js} + '2': {name: punctuation.separator.key-value.js} + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: storage.type.function.arrow.js} + patterns: + - include: '#function-declaration-parameters' + + # e.g. "play": (args) => { } + - name: meta.function.json.js + begin: >- + (?x) + (?: + ((')(.*?)(?)) + beginCaptures: + '1': {name: string.quoted.single.js} + '2': {name: punctuation.definition.string.begin.js} + '3': {name: entity.name.function.js} + '4': {name: punctuation.definition.string.end.js} + '5': {name: string.quoted.double.js} + '6': {name: punctuation.definition.string.begin.js} + '7': {name: entity.name.function.js} + '8': {name: punctuation.definition.string.end.js} + '9': {name: punctuation.separator.key-value.js} + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: storage.type.function.arrow.js} + patterns: + - include: '#function-declaration-parameters' + literal-function-call: patterns: - name: meta.function-call.without-arguments.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index df9d588..98d6d0c 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -497,7 +497,7 @@ begin (?x) - (?=\([^())]*\)\s*(=>)) + (?=\([^()]*\)\s*(=>)) end (?<=\))\s*(=>) endCaptures @@ -518,6 +518,208 @@ + + begin + (?x) + (\b[_$a-zA-Z][_$\w]*)? + \.(prototype) + \.([_$a-zA-Z][_$\w]*) + \s*= + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + entity.name.class.js + + 2 + + name + support.constant.js + + 3 + + name + entity.name.function.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.prototype.function.arrow.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + (\b[_$a-zA-Z][_$\w]*)? + \.([_$a-zA-Z][_$\w]*) + \s*= + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + entity.name.class.js + + 2 + + name + entity.name.function.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.static.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + \b([_$a-zA-Z][_$\w]*) + \s*(:) + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + entity.name.function.js + + 2 + + name + punctuation.separator.key-value.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.json.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + (?: + ((')(.*?)(?<!\\)('))| + ((")(.*?)(?<!\\)(")) + )\s* + (:)\s* + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + string.quoted.single.js + + 2 + + name + punctuation.definition.string.begin.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.json.js + patterns + + + include + #function-declaration-parameters + + + literal-class From da9e02142faf76addb3ca50855727d5fbc32526a Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 14:43:42 +1100 Subject: [PATCH 111/202] fixed arrow function scope names --- JavaScriptNext.YAML-tmLanguage | 6 +++--- JavaScriptNext.tmLanguage | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 2ea20b0..7da826b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -352,7 +352,7 @@ repository: - include: '#function-declaration-parameters' # e.g. Sound.play = (args) => { } - - name: meta.function.static.js + - name: meta.function.static.arrow.js begin: >- (?x) (\b[_$a-zA-Z][_$\w]*)? @@ -369,7 +369,7 @@ repository: - include: '#function-declaration-parameters' # e.g. play: (args) => { } - - name: meta.function.json.js + - name: meta.function.json.arrow.js begin: >- (?x) \b([_$a-zA-Z][_$\w]*) @@ -385,7 +385,7 @@ repository: - include: '#function-declaration-parameters' # e.g. "play": (args) => { } - - name: meta.function.json.js + - name: meta.function.json.arrow.js begin: >- (?x) (?: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 98d6d0c..9ba7ffa 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -595,7 +595,7 @@ name - meta.function.static.js + meta.function.static.arrow.js patterns @@ -634,7 +634,7 @@ name - meta.function.json.js + meta.function.json.arrow.js patterns @@ -711,7 +711,7 @@ name - meta.function.json.js + meta.function.json.arrow.js patterns From d73d38af8312764a96eb5364a9af174818e0a899 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 10 Oct 2014 14:45:30 +1100 Subject: [PATCH 112/202] better ordering --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7da826b..839e84f 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -28,8 +28,8 @@ repository: # modules/classes/functions - include: '#literal-class' - include: '#literal-module' - - include: '#literal-arrow-function-storage' - include: '#literal-function-storage' + - include: '#literal-arrow-function-storage' - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings # after literal-function-storage which requires the below in some cases diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 9ba7ffa..bc2b61d 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -257,11 +257,11 @@ include - #literal-arrow-function-storage + #literal-function-storage include - #literal-function-storage + #literal-arrow-function-storage include From c881bc1e34041adf2c10744cfb4aa00afaf41bda Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 11 Oct 2014 23:27:35 +1100 Subject: [PATCH 113/202] fixed conditional compilation comments highlighting, cf #35 --- JavaScriptNext.YAML-tmLanguage | 12 +++++------- JavaScriptNext.tmLanguage | 30 ++++++++++++++---------------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 839e84f..c7bcc8c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -123,20 +123,18 @@ repository: captures: '0': {name: punctuation.definition.comment.js} patterns: + - match: /\* + captures: + '0': {name: punctuation.definition.comment.js} - include: source.js - name: keyword.control.conditional.js - match: (@)(if|elif|else|end) - captures: - '1': {name: punctuation.definition.keyword.js} - - - name: keyword.operator.conditional.js - match: (@)(cc_on|set) + match: (@)(if|elif|else|end|ifdef|endif|cc_on|set)\b captures: '1': {name: punctuation.definition.keyword.js} - name: variable.other.conditional.js - match: (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript_build|_jscript_version|_jscript|_debug|_fast|[a-zA-Z]\w+) + match: (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript|_jscript_build|_jscript_version|_debug|_fast|[a-zA-Z]\w+) captures: '1': {name: punctuation.definition.variable.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index bc2b61d..65ea967 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1932,6 +1932,18 @@ comment.block.conditional.js patterns + + captures + + 0 + + name + punctuation.definition.comment.js + + + match + /\* + include source.js @@ -1948,24 +1960,10 @@ match - (@)(if|elif|else|end) + (@)(if|elif|else|end|ifdef|endif|cc_on|set)\b name keyword.control.conditional.js - - captures - - 1 - - name - punctuation.definition.keyword.js - - - match - (@)(cc_on|set) - name - keyword.operator.conditional.js - captures @@ -1976,7 +1974,7 @@ match - (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript_build|_jscript_version|_jscript|_debug|_fast|[a-zA-Z]\w+) + (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript|_jscript_build|_jscript_version|_debug|_fast|[a-zA-Z]\w+) name variable.other.conditional.js From 8547bbb598c6cc37d0845fe687cd7a31b7f03e11 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 11 Oct 2014 23:31:57 +1100 Subject: [PATCH 114/202] simplified rule, captures isn't necessary --- JavaScriptNext.YAML-tmLanguage | 5 ++--- JavaScriptNext.tmLanguage | 10 ++-------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c7bcc8c..954c766 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -123,9 +123,8 @@ repository: captures: '0': {name: punctuation.definition.comment.js} patterns: - - match: /\* - captures: - '0': {name: punctuation.definition.comment.js} + - name: punctuation.definition.comment.js + match: /\* - include: source.js - name: keyword.control.conditional.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 65ea967..fadbf98 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1933,16 +1933,10 @@ patterns - captures - - 0 - - name - punctuation.definition.comment.js - - match /\* + name + punctuation.definition.comment.js include From e1d02410279844f26bcf43c17e0654324d662db7 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 11 Oct 2014 23:36:56 +1100 Subject: [PATCH 115/202] tidy-up --- JavaScriptNext.YAML-tmLanguage | 52 ++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 954c766..11c8e1a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -125,6 +125,7 @@ repository: patterns: - name: punctuation.definition.comment.js match: /\* + - include: source.js - name: keyword.control.conditional.js @@ -146,13 +147,15 @@ repository: endCaptures: '1': {name: punctuation.definition.parameters.end.js} patterns: - - name: variable.parameter.function.js - match: >- - (?x) - [_$a-zA-Z][_$\w]* - - name: punctuation.separator.parameter.function.js - match: ',' - - include: '#comments' + - name: variable.parameter.function.js + match: >- + (?x) + [_$a-zA-Z][_$\w]* + + - name: punctuation.separator.parameter.function.js + match: ',' + + - include: '#comments' literal-module: patterns: @@ -196,7 +199,7 @@ repository: '1': {name: entity.name.method.js} end: (?<=\)) patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # getter/setter - name: meta.accessor.js @@ -206,7 +209,7 @@ repository: '2': {name: entity.name.accessor.js} end: (?<=\)) patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' - include: '#brackets' - include: '#comments' @@ -240,7 +243,7 @@ repository: '2': {name: entity.name.function.js} end: (?<=\)) patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js @@ -258,7 +261,7 @@ repository: '4': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. Sound.play = function(arg1, arg2) { } - name: meta.function.static.js @@ -274,7 +277,7 @@ repository: '3': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js @@ -289,7 +292,7 @@ repository: '3': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. "play": function(arg1, arg2) { } - name: meta.function.json.js @@ -314,7 +317,7 @@ repository: '10': {name: storage.type.function.js} end: (?<=\)) patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' literal-arrow-function-storage: patterns: @@ -327,7 +330,7 @@ repository: endCaptures: '1': {name: storage.type.function.arrow.js} patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. Sound.prototype.play = (args) => { } - name: meta.prototype.function.arrow.js @@ -346,7 +349,7 @@ repository: endCaptures: '1': {name: storage.type.function.arrow.js} patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. Sound.play = (args) => { } - name: meta.function.static.arrow.js @@ -363,7 +366,7 @@ repository: endCaptures: '1': {name: storage.type.function.arrow.js} patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. play: (args) => { } - name: meta.function.json.arrow.js @@ -379,7 +382,7 @@ repository: endCaptures: '1': {name: storage.type.function.arrow.js} patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' # e.g. "play": (args) => { } - name: meta.function.json.arrow.js @@ -405,7 +408,7 @@ repository: endCaptures: '1': {name: storage.type.function.arrow.js} patterns: - - include: '#function-declaration-parameters' + - include: '#function-declaration-parameters' literal-function-call: patterns: @@ -518,10 +521,11 @@ repository: '1': {name: keyword.operator.new.js} end: (?![_$a-zA-Z][_$\w.]*) patterns: - - include: '#support' - - match: ([_$a-zA-Z][_$\w.]*\.)?([_$a-zA-Z][_$\w]*) - captures: - '2': {name: entity.name.type.new.js} + - include: '#support' + + - match: ([_$a-zA-Z][_$\w.]*\.)?([_$a-zA-Z][_$\w]*) + captures: + '2': {name: entity.name.type.new.js} - name: storage.type.js match: \b(var|let|const)\b @@ -702,7 +706,7 @@ repository: '2': {name: punctuation.definition.string.end.js} '3': {name: keyword.other.js} patterns: - - include: source.regexp.js + - include: source.regexp.js literal-string: patterns: From 5cb1c2fb5ce7c327a906bd5eea7a1c614da203fa Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 11 Oct 2014 23:44:03 +1100 Subject: [PATCH 116/202] removed non-existent capture group --- JavaScriptNext.YAML-tmLanguage | 1 - JavaScriptNext.tmLanguage | 5 ----- 2 files changed, 6 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 11c8e1a..677bdb5 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -100,7 +100,6 @@ repository: match: () captures: '0': {name: punctuation.definition.comment.js} - '2': {name: punctuation.definition.comment.js} - name: comment.line.double-slash.js match: (//).*$\n? diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index fadbf98..ae81b74 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -178,11 +178,6 @@ name punctuation.definition.comment.js - 2 - - name - punctuation.definition.comment.js - match (<!--|-->) From 03d336440c10473f55adb720bcc74dbbd928b5bc Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 12 Oct 2014 01:41:02 +1100 Subject: [PATCH 117/202] updated readme, cf https://github.com/Benvie/JavaScriptNext.tmLanguage/commit/3039d1e967a4a9fe41adb2a24f753a2786042c0f#commitcomment-8125333 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9595128..f1b81f4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ If you haven't already, [install Package Control](https://sublime.wbond.net/inst To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptNext`. -You may also need to change the ColorScheme, `Preferences -> Color Scheme --> JavaScriptNext`. +You may also need to change the ColorScheme. Pick one from `Preferences -> Color Scheme -> JavaScriptNext`. ## Screenshots From e92ad685c15b1624019c91804dcfb7912a0fab6a Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 17 Oct 2014 18:08:47 +1100 Subject: [PATCH 118/202] restored demo theme by popular request as 'next' --- Next.YAML-tmTheme | 848 +++++++++++++++++++++ Next.tmTheme | 1856 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2704 insertions(+) create mode 100644 Next.YAML-tmTheme create mode 100644 Next.tmTheme diff --git a/Next.YAML-tmTheme b/Next.YAML-tmTheme new file mode 100644 index 0000000..f582d71 --- /dev/null +++ b/Next.YAML-tmTheme @@ -0,0 +1,848 @@ +# [PackageDev] target_format: plist, ext: tmTheme +name: Next +uuid: b238c753-1549-3f12-a519-0faa5dcd4f65 + +settings: +- settings: + activeGuide: '#3333FFFF' + background: '#000000' + bracketsBackground: '#FF00AA66' + bracketsOptions: background + caret: '#FF0099' + foreground: '#E6E6E6' + guide: '#33333388' + gutter: '#6600FF33' + invisibles: '#404040' + lineHighlight: '#FF009933' + multiEditHighlight: '#00FF0022' + searchHighlight: '#FF00AA99' + selection: '#00FFFF44' + stackGuide: '#333333CC' + +- name: bracket.curly + scope: bracket.curly + settings: + background: '#FF44AA' + foreground: '#3399FF' + +- name: bracket.square + scope: bracket.square + settings: + background: '#2266CC' + foreground: '#FF8800' + +- name: bracket.round + scope: bracket.round + settings: + background: '#9922FF' + foreground: '#00FF00' + +- name: bracket.quote + scope: bracket.quote + settings: + background: '#00FF00' + +- name: comment + scope: comment + settings: + fontStyle: italic + foreground: '#646464FF' + +- name: Invalid + scope: invalid + settings: + background: '#FF000022' + +- name: constant + scope: constant + settings: + foreground: '#3387CCFF' + +- name: Keyword + scope: keyword + settings: + foreground: '#E28964' + +- name: constant.numeric + scope: constant.numeric + settings: + foreground: '#FFFF66' + +- name: Storage + scope: storage + settings: + foreground: '#99CF50' + +- name: storage.modifier + scope: storage.modifier + settings: + foreground: '#CF5099' + +- name: storage.self + scope: storage.self + settings: + fontStyle: bold + foreground: '#CC0033' + +- name: storage.type + scope: storage.type + settings: + foreground: '#CF9950' + +- name: Support + scope: support + settings: + foreground: '#8A5C8DFF' + +- name: entity.name.function + scope: entity.name.function + settings: + foreground: '#BB00FF' + +- name: keyword control + scope: keyword.control + settings: + foreground: '#FF00FF' + +- name: keyword.control.declaration + scope: keyword.control.declaration + settings: + foreground: '#8888AA' + +- name: keyword.control.module + scope: keyword.control.module + settings: + background: '#FFFF3333' + foreground: '#FFFF33' + options: underline + +- name: keyword.control.flow + scope: keyword.control.flow + settings: + background: '#110300' + fontStyle: bold + foreground: '#FF6600' + +- name: keyword.control.conditional + scope: keyword.control.conditional + settings: + foreground: '#FF00FF' + +- name: keyword.control.trycatch + scope: keyword.control.trycatch + settings: + foreground: '#FF0033' + +- name: keyword.control.loop + scope: keyword.control.loop + settings: + foreground: '#009999' + +- name: keyword.control.switch + scope: keyword.control.switch + settings: + foreground: '#999999' + +- name: keyword operator + scope: keyword.operator + settings: + foreground: '#FF0080' + +- name: Function arg + scope: meta.function.argument, variable.parameter, meta.parens.c + settings: + foreground: '#77FF11' + +- name: '' + scope: punctuation.section.embedded + settings: + background: '#0D0D0D37' + foreground: '#00D3FFFF' + +- name: keyword.other.unit + scope: keyword.other.unit, keyword.unit.css + settings: + foreground: '#80FF00FF' + +- name: invalid.illegal + scope: invalid.illegal + settings: + background: '#562D56BF' + foreground: '#FD5FF1FF' + +- name: string.quoted source + scope: string.quoted source + settings: + foreground: '#DAEFA3' + +- name: string constant + scope: string constant + settings: + foreground: '#CFED81' + +- name: string.regexp + scope: string.regexp + settings: + foreground: '#6FFF17' + +- name: punctuation.definition.string + scope: punctuation.definition.string + settings: + background: '#15151501' + foreground: '#B4FF82' + +- name: string.regexp.special + scope: "string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition" + settings: + foreground: '#00D505' + +- name: string.regexp punctuation keyword + scope: string.regexp punctuation keyword + settings: + foreground: '#C559FF' + +- name: string variable + scope: string variable + settings: + foreground: '#8A9A95' + +- name: support.function + scope: support.function + settings: + foreground: '#FCF352FF' + +- name: meta.tag + scope: meta.tag + settings: + foreground: '#4F9EFFFF' + +- name: meta.tag entity + scope: meta.tag entity + settings: + foreground: '#157EFF' + +- name: HTML/XML tag attribute value + scope: meta.tag string.quoted.double.html + settings: + foreground: '#E07D2C' + +- name: html5 tag + scope: meta.tag.block.any.html.html5 + settings: + foreground: '#E88BFCFF' + +- name: html5 tag entity + scope: meta.tag.block.any.html.html5 entity + settings: + foreground: '#D730FAFF' + +- name: meta.tag.inline + scope: "source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity" + settings: + foreground: '#87A7E2FF' + +- name: html js tag + scope: source.js.embedded.html entity.name.tag.script.html + settings: + foreground: '#FF3535' + +- name: html js tag braces + scope: source.js.embedded.html punctuation.definition.tag.html + settings: + foreground: '#FF1E1E' + +- name: html js tag url + scope: source.js.embedded.html string.quoted.double.html + settings: + foreground: '#FF9D9D' + +- name: Attribute + scope: entity.other.attribute-name + settings: + foreground: '#7349BEFF' + +- name: Meta Toc List + scope: meta.toc-list + settings: + background: '#162C1AFF' + foreground: '#BEFEC7FF' + options: underline + +- name: js variable readwrite + scope: meta.initialization, variable.other.readwrite.js + settings: + foreground: '#FF9122' + +- name: js object + scope: variable.other.object.js + settings: + foreground: '#FFEE00' + +- name: js object with parent + scope: meta.property-name.js variable.other.object.js + settings: + foreground: '#FFFF88' + +- name: support.variable.property.js + scope: support.variable.property.js + settings: + foreground: '#3399FF' + +- name: variable.other.dot-access + scope: variable.other.dot-access + settings: + foreground: '#66FFDD' + +- name: variable.other.property.js + scope: variable.other.property.js + settings: + foreground: '#37C1BE' + +- name: punctuation.section.scope.square.js + scope: punctuation.section.scope.square.js + settings: + foreground: '#FF2404' + +- name: punctuation.section.scope.round.js, meta.brace.round + scope: punctuation.section.scope.round.js, meta.brace.round + settings: + foreground: '#1C38FF' + +- name: punctuation.definition.arrow.js + scope: punctuation.definition.arrow.js + settings: + background: '#001133' + fontStyle: bold + foreground: '#AA00FF' + +- name: entity.arrow.function.js + scope: entity.arrow.function.js + settings: + background: '#001133' + fontStyle: bold + foreground: '#AA00FF' + +- name: variable.language + scope: variable.language + settings: + foreground: '#AA0044' + +- name: variable.language.prototype + scope: variable.language.prototype + settings: + foreground: '#FF6600' + +- name: support.class.error.js + scope: support.class.error.js + settings: + foreground: '#FF5522' + +- name: support.class.builtin.js + scope: support.class.builtin.js + settings: + fontStyle: italic + foreground: '#FFEE00' + +- name: support.class.node.js + scope: support.class.node.js + settings: + foreground: '#1224FE' + +- name: entity.name.function.node.js + scope: entity.name.function.node.js + settings: + foreground: '#D84014' + +- name: support.keyword.node.js + scope: support.keyword.node.js + settings: + fontStyle: bold + foreground: '#99EF25' + +- name: variable.import.destructuring.js + scope: variable.import.destructuring.js + settings: + foreground: '#00BBFF' + +- name: other.object.key.js + scope: other.object.key.js + settings: + foreground: '#1C98C1' + +- name: meta.accessor.js punctuation.definition.parameters + scope: meta.accessor.js punctuation.definition.parameters + settings: + foreground: '#005588' + +- name: storage.type.accessor.js + scope: storage.type.accessor.js + settings: + background: '#001122' + fontStyle: bold italic + foreground: '#0066AA' + +- name: entity.name.module.js, variable.import.parameter.js, variable.other.class.js + scope: entity.name.module.js, variable.import.parameter.js, variable.other.class.js + settings: + background: '#220011' + foreground: '#FF0044' + +- name: storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + scope: storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + settings: + background: '#222211' + foreground: '#CCCC44' + +- name: storage.type.class.js, storage.type.extends.js + scope: storage.type.class.js, storage.type.extends.js + settings: + background: '#001122' + foreground: '#0044AA' + +- name: 'meta.function.call.class.static.js ' + scope: 'meta.function.call.class.static.js ' + settings: + foreground: '#880011' + +- name: variable.other.class.static.js + scope: variable.other.class.static.js + settings: + foreground: '#AA0066' + +- name: entity.name.accessor.js + scope: entity.name.accessor.js + settings: + background: '#001122' + fontStyle: bold italic + foreground: '#00FFCC' + +- name: entity.name.method.js + scope: entity.name.method.js + settings: + background: '#110022' + fontStyle: italic bold + foreground: '#AA00FF' + +- name: meta.method.js + scope: meta.method.js + settings: + fontStyle: bold + foreground: '#660099' + +- name: storage.type.function.js + scope: storage.type.function.js + settings: + fontStyle: bold + foreground: '#99CC44' + +- name: string.quoted.single + scope: string.quoted.single + settings: + foreground: '#88FFAAAA' + +- name: variable.other.quasi.js + scope: variable.other.quasi.js + settings: + foreground: '#FF0099' + +- name: string.quasi.js + scope: string.quasi.js + settings: + foreground: '#00FF00' + +- name: punctuation.quasi.element + scope: punctuation.quasi.element + settings: + foreground: '#008800' + +- name: entity.quasi.tag.name.js + scope: entity.quasi.tag.name.js + settings: + foreground: '#FFFF00' + +- name: meta.group.braces.square, punctuation.destructuring + scope: meta.group.braces.square string.quoted.single, punctuation.destructuring + settings: + foreground: '#47E9AC' + +- name: string.quoted.double + scope: string.quoted.double + settings: + foreground: '#11BB11' + +- name: punctuation.section.scope.curly.js + scope: punctuation.section.scope.curly.js + settings: + foreground: '#F9044E' + +- name: meta.delimiter.object.comma.js + scope: meta.delimiter.object.comma.js + settings: + foreground: '#00FFFF' + +- name: meta.group.braces.curly string.quoted.single + scope: meta.group.braces.curly string.quoted.single + settings: + foreground: '#16B853' + +- name: support.function + scope: support.function + settings: + foreground: '#B532FF' + +- name: punctuation.definition.string.begin.js + scope: punctuation.definition.string.begin.js + settings: + foreground: '#D2E20C' + +- name: punctuation.definition.string.end.js + scope: punctuation.definition.string.end.js + settings: + foreground: '#CEA30D' + +- name: instance constructor + scope: meta.class.inheritance, meta.instance.constructor + settings: + fontStyle: italic underline + foreground: '#E81E41' + +- name: entity.name.class.js + scope: entity.name.class.js + settings: + background: '#00FFFF33' + fontStyle: italic + foreground: '#00FFFF' + +- name: entity.name.extends.js + scope: entity.name.extends.js + settings: + background: '#00FF9933' + fontStyle: italic + foreground: '#00FF99' + +- name: function call + scope: meta.function-call entity.name.function + settings: + foreground: '#5B24FF' + +- name: function call with args + scope: meta.function-call.function.with-arguments.js + settings: + foreground: '#33FF00' + +- name: js brace + scope: meta.brace.curly.js + settings: + foreground: '#FF0099' + +- name: js paren + scope: meta.brace.round.js + settings: + background: '#000000FF' + foreground: '#D0C5FEFF' + +- name: js constant escape + scope: constant.character.escape + settings: + foreground: '#10CF62FF' + +- name: pseudo-class + scope: "meta.selector.css entity.other.attribute-name.tag.pseudo-class" + settings: + foreground: '#4FBC4B' + +- name: css selectors + scope: entity.namespace.unicode.css + settings: + foreground: '#FF4F4F' + +- name: entity.other.attribute-name.id + scope: entity.other.attribute-name.id + settings: + background: '#0B0028FF' + foreground: '#F20073FF' + +- name: class name + scope: meta.prototype support.class + settings: + foreground: '#FF0099' + +- name: support object + scope: support.object + settings: + fontStyle: bold + foreground: '#FFEE00' + +- name: class name prototype + scope: meta.prototype support.constant + settings: + foreground: '#FF6600' + +- name: prototype declaration + scope: meta.prototype.declaration.js + settings: + fontStyle: bold + +- name: js undefined + scope: constant.language.undefined.js + settings: + foreground: '#555588' + +- name: variable.other.constant.js + scope: variable.other.constant.js + settings: + background: '#003311' + foreground: '#00FF33' + +- name: 'false' + scope: constant.language.boolean.false + settings: + foreground: '#AAAA55' + +- name: 'true' + scope: constant.language.boolean.true + settings: + foreground: '#CC7744' + +- name: js null + scope: constant.language.null.js + settings: + foreground: '#558855' + +- name: css#id punctuation + scope: punctuation.definition.entity.id.css + settings: + background: '#0B0028' + foreground: '#FF489F' + +- name: css.class + scope: "entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css" + settings: + background: '#0B0028' + foreground: '#9529B8' + +- name: css.class puntuation + scope: punctuation.definition.entity.class.css + settings: + background: '#0B0028FF' + foreground: '#CD87E4FF' + +- name: css pseudo element + scope: entity.other.attribute-name.pseudo-element.css + settings: + background: '#0B0028FF' + foreground: '#FF00FFFF' + +- name: css property-name + scope: support.type.property-name.css + settings: + foreground: '#B8EFECFF' + +- name: css @at-rule + scope: meta.preprocessor.at-rule keyword.control.at-rule + settings: + foreground: '#D7C271FF' + +- name: css color + scope: "constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css" + settings: + foreground: '#FB7720FF' + +- name: css constants + scope: support.constant.property-value.css + settings: + foreground: '#7CE85EFF' + +- name: Puncation Termination + scope: punctuation.terminator, punctuation.separator + settings: + foreground: '#4BFCF8FF' + +- name: css constructor.argument + scope: meta.constructor.argument.css + settings: + foreground: '#8F9D6AFF' + +- name: diff.header + scope: meta.diff, meta.diff.header, entity.name.namespace + settings: + background: '#0E2231FF' + foreground: '#F8F8F8FF' + +- name: diff.deleted + scope: markup.deleted + settings: + background: '#420E09FF' + foreground: '#F8F8F8FF' + +- name: diff.changed + scope: markup.changed + settings: + background: '#4A410DFF' + foreground: '#F8F8F8FF' + +- name: diff.inserted + scope: markup.inserted + settings: + background: '#253B22FF' + foreground: '#F8F8F8FF' + +- name: 'Markup: Italic' + scope: markup.italic + settings: + fontStyle: italic + foreground: '#6AD500FF' + +- name: 'Markup: Underline' + scope: markup.underline + settings: + foreground: '#E18964FF' + options: underline + +- name: 'Markup: Quote' + scope: markup.quote + settings: + background: '#FEE09C12' + fontStyle: italic + foreground: '#E1D4B9FF' + +- name: 'Markup: Heading' + scope: markup.heading, markup.heading entity + settings: + background: '#DE3280FF' + foreground: '#FFFFFFFF' + +- name: 'Markup: List' + scope: markup.list + settings: + foreground: '#6657EAFF' + +- name: 'Markup: Raw' + scope: markup.raw + settings: + background: '#B1B3BA08' + foreground: '#578BB3FF' + +- name: 'Markup: Comment' + scope: markup comment + settings: + foreground: '#F67B37FF' + +- name: 'Markup: Separator' + scope: meta.separator + settings: + background: '#242424FF' + foreground: '#60A633FF' + +- name: Log Entry + scope: meta.line.entry.logfile, meta.line.exit.logfile + settings: + background: '#EEEEEE29' + foreground: '#F8F8F8FF' + +- name: Log Entry Error + scope: meta.line.error.logfile + settings: + background: '#751012' + foreground: '#F8F8F8' + +- name: JSON property top + scope: meta.structure.dictionary.json string.quoted.double + settings: + background: '#111111' + foreground: '#1144BB' + +- name: JSON property level 2 + scope: "meta.structure meta.structure.dictionary.json string.quoted.double" + settings: + foreground: '#1122BB' + +- name: JSON property level 3 + scope: "meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" + settings: + foreground: '#2938EB' + +- name: JSON property level 4 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" + settings: + foreground: '#6D7EF1' + +- name: JSON property level 5 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double" + settings: + foreground: '#B3BBF7' + +- name: JSON value + scope: meta.structure.dictionary.value.json string.quoted.double + settings: + foreground: '#AA00AA' + +- name: JSON value level 2 + scope: "meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" + settings: + foreground: '#BF00BF' + +- name: JSON value level 3 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" + settings: + foreground: '#FF00FF' + +- name: JSON value level 4 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" + settings: + foreground: '#FF40FF' + +- name: JSON value level 5 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double" + settings: + foreground: '#FF80FF' + +- name: JSON value string punctuation + scope: "meta.structure.dictionary.value.json string punctuation.definition.string.double" + settings: + foreground: '#8409FF' + +- name: JSON array value + scope: meta.structure.array.json string.quoted.double + settings: + foreground: '#5522AA' + +- name: JSON array value level 1 + scope: "meta.structure meta.structure meta.structure.array.json string.quoted.double" + settings: + foreground: '#7017C8FF' + +- name: JSON array value level 2 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" + settings: + foreground: '#9541E9FF' + +- name: JSON array value level 3 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" + settings: + foreground: '#BA83F1FF' + +- name: JSON array value level 4 + scope: "meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double" + settings: + foreground: '#DFC6F9FF' + +- name: JSON prop string punctuation + scope: "meta.structure.dictionary.json string punctuation.definition.string" + settings: + foreground: '#66BBDDFF' + +- name: JSON array string puntuation + scope: "meta.structure.array.json string punctuation.definition.string" + settings: + foreground: '#416BE9FF' + +- name: JSON array brackets + scope: meta.structure.array.json punctuation.definition.array + settings: + foreground: '#FCC401FF' + +- name: JSON object braces + scope: "meta.structure.dictionary.json punctuation.definition.dictionary" + settings: + foreground: '#FEDF76FF' diff --git a/Next.tmTheme b/Next.tmTheme new file mode 100644 index 0000000..1bacca2 --- /dev/null +++ b/Next.tmTheme @@ -0,0 +1,1856 @@ + + + + + name + Next + settings + + + settings + + activeGuide + #3333FFFF + background + #000000 + bracketsBackground + #FF00AA66 + bracketsOptions + background + caret + #FF0099 + foreground + #E6E6E6 + guide + #33333388 + gutter + #6600FF33 + invisibles + #404040 + lineHighlight + #FF009933 + multiEditHighlight + #00FF0022 + searchHighlight + #FF00AA99 + selection + #00FFFF44 + stackGuide + #333333CC + + + + name + bracket.curly + scope + bracket.curly + settings + + background + #FF44AA + foreground + #3399FF + + + + name + bracket.square + scope + bracket.square + settings + + background + #2266CC + foreground + #FF8800 + + + + name + bracket.round + scope + bracket.round + settings + + background + #9922FF + foreground + #00FF00 + + + + name + bracket.quote + scope + bracket.quote + settings + + background + #00FF00 + + + + name + comment + scope + comment + settings + + fontStyle + italic + foreground + #646464FF + + + + name + Invalid + scope + invalid + settings + + background + #FF000022 + + + + name + constant + scope + constant + settings + + foreground + #3387CCFF + + + + name + Keyword + scope + keyword + settings + + foreground + #E28964 + + + + name + constant.numeric + scope + constant.numeric + settings + + foreground + #FFFF66 + + + + name + Storage + scope + storage + settings + + foreground + #99CF50 + + + + name + storage.modifier + scope + storage.modifier + settings + + foreground + #CF5099 + + + + name + storage.self + scope + storage.self + settings + + fontStyle + bold + foreground + #CC0033 + + + + name + storage.type + scope + storage.type + settings + + foreground + #CF9950 + + + + name + Support + scope + support + settings + + foreground + #8A5C8DFF + + + + name + entity.name.function + scope + entity.name.function + settings + + foreground + #BB00FF + + + + name + keyword control + scope + keyword.control + settings + + foreground + #FF00FF + + + + name + keyword.control.declaration + scope + keyword.control.declaration + settings + + foreground + #8888AA + + + + name + keyword.control.module + scope + keyword.control.module + settings + + background + #FFFF3333 + foreground + #FFFF33 + options + underline + + + + name + keyword.control.flow + scope + keyword.control.flow + settings + + background + #110300 + fontStyle + bold + foreground + #FF6600 + + + + name + keyword.control.conditional + scope + keyword.control.conditional + settings + + foreground + #FF00FF + + + + name + keyword.control.trycatch + scope + keyword.control.trycatch + settings + + foreground + #FF0033 + + + + name + keyword.control.loop + scope + keyword.control.loop + settings + + foreground + #009999 + + + + name + keyword.control.switch + scope + keyword.control.switch + settings + + foreground + #999999 + + + + name + keyword operator + scope + keyword.operator + settings + + foreground + #FF0080 + + + + name + Function arg + scope + meta.function.argument, variable.parameter, meta.parens.c + settings + + foreground + #77FF11 + + + + name + + scope + punctuation.section.embedded + settings + + background + #0D0D0D37 + foreground + #00D3FFFF + + + + name + keyword.other.unit + scope + keyword.other.unit, keyword.unit.css + settings + + foreground + #80FF00FF + + + + name + invalid.illegal + scope + invalid.illegal + settings + + background + #562D56BF + foreground + #FD5FF1FF + + + + name + string.quoted source + scope + string.quoted source + settings + + foreground + #DAEFA3 + + + + name + string constant + scope + string constant + settings + + foreground + #CFED81 + + + + name + string.regexp + scope + string.regexp + settings + + foreground + #6FFF17 + + + + name + punctuation.definition.string + scope + punctuation.definition.string + settings + + background + #15151501 + foreground + #B4FF82 + + + + name + string.regexp.special + scope + string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition + settings + + foreground + #00D505 + + + + name + string.regexp punctuation keyword + scope + string.regexp punctuation keyword + settings + + foreground + #C559FF + + + + name + string variable + scope + string variable + settings + + foreground + #8A9A95 + + + + name + support.function + scope + support.function + settings + + foreground + #FCF352FF + + + + name + meta.tag + scope + meta.tag + settings + + foreground + #4F9EFFFF + + + + name + meta.tag entity + scope + meta.tag entity + settings + + foreground + #157EFF + + + + name + HTML/XML tag attribute value + scope + meta.tag string.quoted.double.html + settings + + foreground + #E07D2C + + + + name + html5 tag + scope + meta.tag.block.any.html.html5 + settings + + foreground + #E88BFCFF + + + + name + html5 tag entity + scope + meta.tag.block.any.html.html5 entity + settings + + foreground + #D730FAFF + + + + name + meta.tag.inline + scope + source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity + settings + + foreground + #87A7E2FF + + + + name + html js tag + scope + source.js.embedded.html entity.name.tag.script.html + settings + + foreground + #FF3535 + + + + name + html js tag braces + scope + source.js.embedded.html punctuation.definition.tag.html + settings + + foreground + #FF1E1E + + + + name + html js tag url + scope + source.js.embedded.html string.quoted.double.html + settings + + foreground + #FF9D9D + + + + name + Attribute + scope + entity.other.attribute-name + settings + + foreground + #7349BEFF + + + + name + Meta Toc List + scope + meta.toc-list + settings + + background + #162C1AFF + foreground + #BEFEC7FF + options + underline + + + + name + js variable readwrite + scope + meta.initialization, variable.other.readwrite.js + settings + + foreground + #FF9122 + + + + name + js object + scope + variable.other.object.js + settings + + foreground + #FFEE00 + + + + name + js object with parent + scope + meta.property-name.js variable.other.object.js + settings + + foreground + #FFFF88 + + + + name + support.variable.property.js + scope + support.variable.property.js + settings + + foreground + #3399FF + + + + name + variable.other.dot-access + scope + variable.other.dot-access + settings + + foreground + #66FFDD + + + + name + variable.other.property.js + scope + variable.other.property.js + settings + + foreground + #37C1BE + + + + name + punctuation.section.scope.square.js + scope + punctuation.section.scope.square.js + settings + + foreground + #FF2404 + + + + name + punctuation.section.scope.round.js, meta.brace.round + scope + punctuation.section.scope.round.js, meta.brace.round + settings + + foreground + #1C38FF + + + + name + punctuation.definition.arrow.js + scope + punctuation.definition.arrow.js + settings + + background + #001133 + fontStyle + bold + foreground + #AA00FF + + + + name + entity.arrow.function.js + scope + entity.arrow.function.js + settings + + background + #001133 + fontStyle + bold + foreground + #AA00FF + + + + name + variable.language + scope + variable.language + settings + + foreground + #AA0044 + + + + name + variable.language.prototype + scope + variable.language.prototype + settings + + foreground + #FF6600 + + + + name + support.class.error.js + scope + support.class.error.js + settings + + foreground + #FF5522 + + + + name + support.class.builtin.js + scope + support.class.builtin.js + settings + + fontStyle + italic + foreground + #FFEE00 + + + + name + support.class.node.js + scope + support.class.node.js + settings + + foreground + #1224FE + + + + name + entity.name.function.node.js + scope + entity.name.function.node.js + settings + + foreground + #D84014 + + + + name + support.keyword.node.js + scope + support.keyword.node.js + settings + + fontStyle + bold + foreground + #99EF25 + + + + name + variable.import.destructuring.js + scope + variable.import.destructuring.js + settings + + foreground + #00BBFF + + + + name + other.object.key.js + scope + other.object.key.js + settings + + foreground + #1C98C1 + + + + name + meta.accessor.js punctuation.definition.parameters + scope + meta.accessor.js punctuation.definition.parameters + settings + + foreground + #005588 + + + + name + storage.type.accessor.js + scope + storage.type.accessor.js + settings + + background + #001122 + fontStyle + bold italic + foreground + #0066AA + + + + name + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + scope + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + settings + + background + #220011 + foreground + #FF0044 + + + + name + storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + scope + storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js + settings + + background + #222211 + foreground + #CCCC44 + + + + name + storage.type.class.js, storage.type.extends.js + scope + storage.type.class.js, storage.type.extends.js + settings + + background + #001122 + foreground + #0044AA + + + + name + meta.function.call.class.static.js + scope + meta.function.call.class.static.js + settings + + foreground + #880011 + + + + name + variable.other.class.static.js + scope + variable.other.class.static.js + settings + + foreground + #AA0066 + + + + name + entity.name.accessor.js + scope + entity.name.accessor.js + settings + + background + #001122 + fontStyle + bold italic + foreground + #00FFCC + + + + name + entity.name.method.js + scope + entity.name.method.js + settings + + background + #110022 + fontStyle + italic bold + foreground + #AA00FF + + + + name + meta.method.js + scope + meta.method.js + settings + + fontStyle + bold + foreground + #660099 + + + + name + storage.type.function.js + scope + storage.type.function.js + settings + + fontStyle + bold + foreground + #99CC44 + + + + name + string.quoted.single + scope + string.quoted.single + settings + + foreground + #88FFAAAA + + + + name + variable.other.quasi.js + scope + variable.other.quasi.js + settings + + foreground + #FF0099 + + + + name + string.quasi.js + scope + string.quasi.js + settings + + foreground + #00FF00 + + + + name + punctuation.quasi.element + scope + punctuation.quasi.element + settings + + foreground + #008800 + + + + name + entity.quasi.tag.name.js + scope + entity.quasi.tag.name.js + settings + + foreground + #FFFF00 + + + + name + meta.group.braces.square, punctuation.destructuring + scope + meta.group.braces.square string.quoted.single, punctuation.destructuring + settings + + foreground + #47E9AC + + + + name + string.quoted.double + scope + string.quoted.double + settings + + foreground + #11BB11 + + + + name + punctuation.section.scope.curly.js + scope + punctuation.section.scope.curly.js + settings + + foreground + #F9044E + + + + name + meta.delimiter.object.comma.js + scope + meta.delimiter.object.comma.js + settings + + foreground + #00FFFF + + + + name + meta.group.braces.curly string.quoted.single + scope + meta.group.braces.curly string.quoted.single + settings + + foreground + #16B853 + + + + name + support.function + scope + support.function + settings + + foreground + #B532FF + + + + name + punctuation.definition.string.begin.js + scope + punctuation.definition.string.begin.js + settings + + foreground + #D2E20C + + + + name + punctuation.definition.string.end.js + scope + punctuation.definition.string.end.js + settings + + foreground + #CEA30D + + + + name + instance constructor + scope + meta.class.inheritance, meta.instance.constructor + settings + + fontStyle + italic underline + foreground + #E81E41 + + + + name + entity.name.class.js + scope + entity.name.class.js + settings + + background + #00FFFF33 + fontStyle + italic + foreground + #00FFFF + + + + name + entity.name.extends.js + scope + entity.name.extends.js + settings + + background + #00FF9933 + fontStyle + italic + foreground + #00FF99 + + + + name + function call + scope + meta.function-call entity.name.function + settings + + foreground + #5B24FF + + + + name + function call with args + scope + meta.function-call.function.with-arguments.js + settings + + foreground + #33FF00 + + + + name + js brace + scope + meta.brace.curly.js + settings + + foreground + #FF0099 + + + + name + js paren + scope + meta.brace.round.js + settings + + background + #000000FF + foreground + #D0C5FEFF + + + + name + js constant escape + scope + constant.character.escape + settings + + foreground + #10CF62FF + + + + name + pseudo-class + scope + meta.selector.css entity.other.attribute-name.tag.pseudo-class + settings + + foreground + #4FBC4B + + + + name + css selectors + scope + entity.namespace.unicode.css + settings + + foreground + #FF4F4F + + + + name + entity.other.attribute-name.id + scope + entity.other.attribute-name.id + settings + + background + #0B0028FF + foreground + #F20073FF + + + + name + class name + scope + meta.prototype support.class + settings + + foreground + #FF0099 + + + + name + support object + scope + support.object + settings + + fontStyle + bold + foreground + #FFEE00 + + + + name + class name prototype + scope + meta.prototype support.constant + settings + + foreground + #FF6600 + + + + name + prototype declaration + scope + meta.prototype.declaration.js + settings + + fontStyle + bold + + + + name + js undefined + scope + constant.language.undefined.js + settings + + foreground + #555588 + + + + name + variable.other.constant.js + scope + variable.other.constant.js + settings + + background + #003311 + foreground + #00FF33 + + + + name + false + scope + constant.language.boolean.false + settings + + foreground + #AAAA55 + + + + name + true + scope + constant.language.boolean.true + settings + + foreground + #CC7744 + + + + name + js null + scope + constant.language.null.js + settings + + foreground + #558855 + + + + name + css#id punctuation + scope + punctuation.definition.entity.id.css + settings + + background + #0B0028 + foreground + #FF489F + + + + name + css.class + scope + entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css + settings + + background + #0B0028 + foreground + #9529B8 + + + + name + css.class puntuation + scope + punctuation.definition.entity.class.css + settings + + background + #0B0028FF + foreground + #CD87E4FF + + + + name + css pseudo element + scope + entity.other.attribute-name.pseudo-element.css + settings + + background + #0B0028FF + foreground + #FF00FFFF + + + + name + css property-name + scope + support.type.property-name.css + settings + + foreground + #B8EFECFF + + + + name + css @at-rule + scope + meta.preprocessor.at-rule keyword.control.at-rule + settings + + foreground + #D7C271FF + + + + name + css color + scope + constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css + settings + + foreground + #FB7720FF + + + + name + css constants + scope + support.constant.property-value.css + settings + + foreground + #7CE85EFF + + + + name + Puncation Termination + scope + punctuation.terminator, punctuation.separator + settings + + foreground + #4BFCF8FF + + + + name + css constructor.argument + scope + meta.constructor.argument.css + settings + + foreground + #8F9D6AFF + + + + name + diff.header + scope + meta.diff, meta.diff.header, entity.name.namespace + settings + + background + #0E2231FF + foreground + #F8F8F8FF + + + + name + diff.deleted + scope + markup.deleted + settings + + background + #420E09FF + foreground + #F8F8F8FF + + + + name + diff.changed + scope + markup.changed + settings + + background + #4A410DFF + foreground + #F8F8F8FF + + + + name + diff.inserted + scope + markup.inserted + settings + + background + #253B22FF + foreground + #F8F8F8FF + + + + name + Markup: Italic + scope + markup.italic + settings + + fontStyle + italic + foreground + #6AD500FF + + + + name + Markup: Underline + scope + markup.underline + settings + + foreground + #E18964FF + options + underline + + + + name + Markup: Quote + scope + markup.quote + settings + + background + #FEE09C12 + fontStyle + italic + foreground + #E1D4B9FF + + + + name + Markup: Heading + scope + markup.heading, markup.heading entity + settings + + background + #DE3280FF + foreground + #FFFFFFFF + + + + name + Markup: List + scope + markup.list + settings + + foreground + #6657EAFF + + + + name + Markup: Raw + scope + markup.raw + settings + + background + #B1B3BA08 + foreground + #578BB3FF + + + + name + Markup: Comment + scope + markup comment + settings + + foreground + #F67B37FF + + + + name + Markup: Separator + scope + meta.separator + settings + + background + #242424FF + foreground + #60A633FF + + + + name + Log Entry + scope + meta.line.entry.logfile, meta.line.exit.logfile + settings + + background + #EEEEEE29 + foreground + #F8F8F8FF + + + + name + Log Entry Error + scope + meta.line.error.logfile + settings + + background + #751012 + foreground + #F8F8F8 + + + + name + JSON property top + scope + meta.structure.dictionary.json string.quoted.double + settings + + background + #111111 + foreground + #1144BB + + + + name + JSON property level 2 + scope + meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #1122BB + + + + name + JSON property level 3 + scope + meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #2938EB + + + + name + JSON property level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #6D7EF1 + + + + name + JSON property level 5 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double + settings + + foreground + #B3BBF7 + + + + name + JSON value + scope + meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #AA00AA + + + + name + JSON value level 2 + scope + meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #BF00BF + + + + name + JSON value level 3 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #FF00FF + + + + name + JSON value level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #FF40FF + + + + name + JSON value level 5 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double + settings + + foreground + #FF80FF + + + + name + JSON value string punctuation + scope + meta.structure.dictionary.value.json string punctuation.definition.string.double + settings + + foreground + #8409FF + + + + name + JSON array value + scope + meta.structure.array.json string.quoted.double + settings + + foreground + #5522AA + + + + name + JSON array value level 1 + scope + meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #7017C8FF + + + + name + JSON array value level 2 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #9541E9FF + + + + name + JSON array value level 3 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #BA83F1FF + + + + name + JSON array value level 4 + scope + meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double + settings + + foreground + #DFC6F9FF + + + + name + JSON prop string punctuation + scope + meta.structure.dictionary.json string punctuation.definition.string + settings + + foreground + #66BBDDFF + + + + name + JSON array string puntuation + scope + meta.structure.array.json string punctuation.definition.string + settings + + foreground + #416BE9FF + + + + name + JSON array brackets + scope + meta.structure.array.json punctuation.definition.array + settings + + foreground + #FCC401FF + + + + name + JSON object braces + scope + meta.structure.dictionary.json punctuation.definition.dictionary + settings + + foreground + #FEDF76FF + + + + uuid + b238c753-1549-3f12-a519-0faa5dcd4f65 + + From 41c1b8b7c4702840abe4f268fabfc70ab1065336 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 23 Oct 2014 07:53:14 +1100 Subject: [PATCH 119/202] fixed class matching bugs --- JavaScriptNext.YAML-tmLanguage | 8 ++++---- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 677bdb5..5f80cf3 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -248,7 +248,7 @@ repository: - name: meta.prototype.function.js begin: >- (?x) - (\b[_$a-zA-Z][_$\w]*)? + (\b_?[A-Z][_$\w]*)? \.(prototype) \.([_$a-zA-Z][_$\w]*) \s*= @@ -266,7 +266,7 @@ repository: - name: meta.function.static.js begin: >- (?x) - (\b[_$a-zA-Z][_$\w]*)? + (\b_?[A-Z][_$\w]*)? \.([_$a-zA-Z][_$\w]*) \s*= \s*(function(?:\s*\*|(?=\s|[(])))\s* @@ -335,7 +335,7 @@ repository: - name: meta.prototype.function.arrow.js begin: >- (?x) - (\b[_$a-zA-Z][_$\w]*)? + (\b_?[A-Z][_$\w]*)? \.(prototype) \.([_$a-zA-Z][_$\w]*) \s*= @@ -354,7 +354,7 @@ repository: - name: meta.function.static.arrow.js begin: >- (?x) - (\b[_$a-zA-Z][_$\w]*)? + (\b_?[A-Z][_$\w]*)? \.([_$a-zA-Z][_$\w]*) \s*= \s*(?=\([^()]*\)\s*(=>)) diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index ae81b74..8234e27 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -516,7 +516,7 @@ begin (?x) - (\b[_$a-zA-Z][_$\w]*)? + (\b_?[A-Z][_$\w]*)? \.(prototype) \.([_$a-zA-Z][_$\w]*) \s*= @@ -562,7 +562,7 @@ begin (?x) - (\b[_$a-zA-Z][_$\w]*)? + (\b_?[A-Z][_$\w]*)? \.([_$a-zA-Z][_$\w]*) \s*= \s*(?=\([^()]*\)\s*(=>)) @@ -918,7 +918,7 @@ begin (?x) - (\b[_$a-zA-Z][_$\w]*)? + (\b_?[A-Z][_$\w]*)? \.(prototype) \.([_$a-zA-Z][_$\w]*) \s*= @@ -961,7 +961,7 @@ begin (?x) - (\b[_$a-zA-Z][_$\w]*)? + (\b_?[A-Z][_$\w]*)? \.([_$a-zA-Z][_$\w]*) \s*= \s*(function(?:\s*\*|(?=\s|[(])))\s* From 3a5c5c2216d3ef653c8221866e7a516892db6b01 Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 12 Nov 2014 06:39:53 +1100 Subject: [PATCH 120/202] fixed #51 (caused by matching 'in' in 'min', but 'min' is not an operator) --- JavaScriptNext.YAML-tmLanguage | 3 ++- JavaScriptNext.tmLanguage | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 5f80cf3..e7e9d2e 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -692,7 +692,8 @@ repository: (?x) (?:(?<= \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| - new|delete|void|typeof|instanceof|in|do|return|case|throw + \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow| + ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw )|^)\s* (/) (?!/|\*|$) diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 8234e27..c7a4c06 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1699,7 +1699,8 @@ (?x) (?:(?<= \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| - new|delete|void|typeof|instanceof|in|do|return|case|throw + \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow| + ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw )|^)\s* (/) (?!/|\*|$) From e7051e232dc06d599489172b73d3a5a3f90051c5 Mon Sep 17 00:00:00 2001 From: Cesar Andreu Date: Thu, 4 Dec 2014 17:18:57 -0800 Subject: [PATCH 121/202] add support for promises --- JavaScriptNext.YAML-tmLanguage | 4 ++-- JavaScriptNext.tmLanguage | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index e7e9d2e..beaeefd 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -536,7 +536,7 @@ repository: match: \b(else|if)\b - name: keyword.control.trycatch.js - match: \b(catch|finally|throw|try)\b + match: (? match - \b(catch|finally|throw|try)\b + (?<!\.)\b(catch|finally|throw|try)\b name keyword.control.trycatch.js @@ -1994,7 +1994,7 @@ match - \b(Array|Boolean|Date|Function|Map|Math|Number|Object|Proxy|RegExp|Set|String|WeakMap)\b + \b(Array|Boolean|Date|Function|Map|Math|Number|Object|Promise|Proxy|RegExp|Set|String|WeakMap)\b name support.class.builtin.js From 4102fa6dfc214512bddd5dbe98d751bba3c2ec3c Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 5 Dec 2014 17:52:05 +1100 Subject: [PATCH 122/202] fixed more . bugs in globals & keywords --- JavaScriptNext.YAML-tmLanguage | 46 +++++++++++++++++----------------- JavaScriptNext.tmLanguage | 46 +++++++++++++++++----------------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index beaeefd..1931da8 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -160,10 +160,10 @@ repository: patterns: # module names are defined using strings - name: storage.type.module.js - match: \b(module)\b + match: (?- (?x) - \b(class) + (?=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|-=|&=|\^=' @@ -764,7 +764,7 @@ repository: # e.g. obj.property - name: meta.property.object.js - match: (?<=[\.])\s*[_$a-zA-Z][_$\w]* + match: (?<=\.)\s*[_$a-zA-Z][_$\w]* captures: '2': {name: variable.other.property.js} @@ -812,21 +812,21 @@ repository: match: \b(Array|Boolean|Date|Function|Map|Math|Number|Object|Promise|Proxy|RegExp|Set|String|WeakMap)\b - name: support.function.js - match: \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + match: (?- @@ -839,17 +839,17 @@ repository: # firebug - name: support.type.object.firebug.js - match: \b(console)\b + match: (? begin (?x) - \b(class) + (?<!\.)\b(class) \s+([_$a-zA-Z][_$\w]*) (?: \s+(extends) @@ -1148,19 +1148,19 @@ match - \b(var|let|const)\b + (?<!\.)\b(var|let|const)\b name storage.type.js match - \b(return|yield)\b + (?<!\.)\b(return|yield)\b name keyword.control.flow.js match - \b(else|if)\b + (?<!\.)\b(else|if)\b name keyword.control.conditional.js @@ -1172,19 +1172,19 @@ match - \b(break|continue|do|for|goto|while)\b + (?<!\.)\b(break|continue|do|for|goto|while)\b name keyword.control.loop.js match - \b(case|default|switch)\b + (?<!\.)\b(case|default|switch)\b name keyword.control.switch.js match - \b(delete|in(stanceof)?|of|new|typeof|void|with)\b + (?<!\.)\b(delete|in|instanceof|of|new|typeof|void|with)\b name keyword.operator.js @@ -1323,31 +1323,31 @@ match - \btrue\b + (?<!\.)\btrue\b name constant.language.boolean.true.js match - \bfalse\b + (?<!\.)\bfalse\b name constant.language.boolean.false.js match - \bnull\b + (?<!\.)\bnull\b name constant.language.null.js match - \bundefined\b + (?<!\.)\bundefined\b name constant.language.undefined.js match - \bNaN\b + (?<!\.)\bNaN\b name constant.language.nan.js @@ -1503,13 +1503,13 @@ match - \b(module)\b + (?<!\.)\b(module)\b name storage.type.module.js match - \b(import|export|from|as)\b + (?<!\.)\b(import|export|from|as)\b name keyword.operator.module.js @@ -1882,7 +1882,7 @@ match - (?<=[\.])\s*[_$a-zA-Z][_$\w]* + (?<=\.)\s*[_$a-zA-Z][_$\w]* name meta.property.object.js @@ -2000,31 +2000,31 @@ match - \b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b(?=\() + (?<!\.)\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b name support.function.js match - \b(shift|sort|splice|unshift|pop|push|reverse)\b(?=\() + \.(shift|sort|splice|unshift|pop|push|reverse)\b name support.function.mutator.js match - \b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b + (?<!\.)\b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b name support.class.error.js match - \b(debugger)\b + (?<!\.)\b(debugger)\b name keyword.other.js match - \b(document|window)\b + (?<!\.)\b(document|window)\b name support.type.object.dom.js @@ -2041,7 +2041,7 @@ match - \b(console)\b + (?<!\.)\b(console)\b name support.type.object.firebug.js @@ -2053,13 +2053,13 @@ match - \b(natives|buffer|child_process|cluster|crypto|dgram|dns|fs|http|https|net|os|path|punycode|string|string_decoder|readline|repl|tls|tty|util|vm|zlib)\b + (?<!\.)\b(natives|buffer|child_process|cluster|crypto|dgram|dns|fs|http|https|net|os|path|punycode|string|string_decoder|readline|repl|tls|tty|util|vm|zlib)\b name support.module.node.js match - \b(process|process\.env|global|GLOBAL|root|stdout|stdin|stderr|exports|__dirname|__filename|console)\b + (?<!\.)\b(process|process\.(env|stdout|stdin|stderr)|global|GLOBAL|root|exports|__dirname|__filename|console)\b name support.type.object.node.js From 79806152c354bce15831798f6c5e6191cae1a907 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 5 Dec 2014 18:15:27 +1100 Subject: [PATCH 123/202] removed redundant keywords in keyword.operator.js (?: was not redundant but can't be matched that way) --- JavaScriptNext.YAML-tmLanguage | 34 +++++++++++++++-------------- JavaScriptNext.tmLanguage | 39 +++++++++++++++++----------------- 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 1931da8..420a36d 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -547,9 +547,6 @@ repository: - name: keyword.operator.js match: (?=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|-=|&=|\^=' - - name: punctuation.separator.key-value match: ':' @@ -558,22 +555,27 @@ repository: (?x) !(?!=)| # logical-not right-to-left right && | # logical-and left-to-right both - \|\| # logical-or left-to-right both + \|\| | # logical-or left-to-right both + + - name: keyword.operator.assignment.js + match: >- + (?x) + = # assignment right-to-left both - name: keyword.operator.assignment.augmented.js match: >- (?x) - %= | # assignment right-to-left both - &= | # assignment right-to-left both - \*= | # assignment right-to-left both - \+= | # assignment right-to-left both - -= | # assignment right-to-left both - /= | # assignment right-to-left both - \^= | # assignment right-to-left both - \|= | # assignment right-to-left both - <<= | # assignment right-to-left both - >>= | # assignment right-to-left both - >>>= # assignment right-to-left both + %= | # assignment right-to-left both + &= | # assignment right-to-left both + \*= | # assignment right-to-left both + \+= | # assignment right-to-left both + -= | # assignment right-to-left both + /= | # assignment right-to-left both + \^= | # assignment right-to-left both + \|= | # assignment right-to-left both + <<= | # assignment right-to-left both + >>= | # assignment right-to-left both + >>>= | # assignment right-to-left both - name: keyword.operator.bitwise.js match: >- @@ -599,7 +601,7 @@ repository: (?x) === | # equality left-to-right both !== | # equality left-to-right both - == | # equality left-to-right both + == | # equality left-to-right both != # equality left-to-right both - name: keyword.operator.assignment.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 4abd399..f9f8811 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1188,12 +1188,6 @@ name keyword.operator.js - - match - !|%|&|\*|--|-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|-=|&=|\^= - name - keyword.operator.js - match : @@ -1205,24 +1199,31 @@ (?x) !(?!=)| # logical-not right-to-left right && | # logical-and left-to-right both - \|\| # logical-or left-to-right both + \|\| | # logical-or left-to-right both name keyword.operator.logical.js match (?x) - %= | # assignment right-to-left both - &= | # assignment right-to-left both - \*= | # assignment right-to-left both - \+= | # assignment right-to-left both - -= | # assignment right-to-left both - /= | # assignment right-to-left both - \^= | # assignment right-to-left both - \|= | # assignment right-to-left both - <<= | # assignment right-to-left both - >>= | # assignment right-to-left both - >>>= # assignment right-to-left both + = # assignment right-to-left both + name + keyword.operator.assignment.js + + + match + (?x) + %= | # assignment right-to-left both + &= | # assignment right-to-left both + \*= | # assignment right-to-left both + \+= | # assignment right-to-left both + -= | # assignment right-to-left both + /= | # assignment right-to-left both + \^= | # assignment right-to-left both + \|= | # assignment right-to-left both + <<= | # assignment right-to-left both + >>= | # assignment right-to-left both + >>>= | # assignment right-to-left both name keyword.operator.assignment.augmented.js @@ -1254,7 +1255,7 @@ (?x) === | # equality left-to-right both !== | # equality left-to-right both - == | # equality left-to-right both + == | # equality left-to-right both != # equality left-to-right both name keyword.operator.comparison.js From 434c952e6fec59fe616c1dd7f38e13e361e83453 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 5 Dec 2014 18:16:44 +1100 Subject: [PATCH 124/202] added async keywords, cf #49 --- JavaScriptNext.YAML-tmLanguage | 3 +++ JavaScriptNext.tmLanguage | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 420a36d..82716b7 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -544,6 +544,9 @@ repository: - name: keyword.control.switch.js match: (?name keyword.control.switch.js + + match + (?<!\.)\b(async|await)\b + name + keyword.control.async.js + match (?<!\.)\b(delete|in|instanceof|of|new|typeof|void|with)\b From 4c82381f5fee52bb77dd4f99f754070f08457d4d Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 5 Dec 2014 18:26:13 +1100 Subject: [PATCH 125/202] fixed async keyword scopes --- JavaScriptNext.YAML-tmLanguage | 7 ++----- JavaScriptNext.tmLanguage | 10 ++-------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 82716b7..9af5f96 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -527,7 +527,7 @@ repository: '2': {name: entity.name.type.new.js} - name: storage.type.js - match: (? match - (?<!\.)\b(var|let|const)\b + (?<!\.)\b(async|const|let|static|var)\b name storage.type.js @@ -1184,13 +1184,7 @@ match - (?<!\.)\b(async|await)\b - name - keyword.control.async.js - - - match - (?<!\.)\b(delete|in|instanceof|of|new|typeof|void|with)\b + (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b name keyword.operator.js From 3847d9b8aeb52a36b3f8fb1e9f97c1eede3d8591 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 5 Dec 2014 18:37:25 +1100 Subject: [PATCH 126/202] added static, closes #49 --- JavaScriptNext.YAML-tmLanguage | 18 +++++++++++++----- JavaScriptNext.tmLanguage | 23 +++++++++++++++++++---- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 9af5f96..8b26ad9 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -192,20 +192,28 @@ repository: - name: meta.method.js begin: >- (?x) - \b([_$a-zA-Z][_$\w]*) + \b(static\s)? + \s*([_$a-zA-Z][_$\w]*) \s*(?=\([^())]*\)\s*\{) beginCaptures: - '1': {name: entity.name.method.js} + '1': {name: storage.type.js} + '2': {name: entity.name.method.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' # getter/setter - name: meta.accessor.js - begin: \b(get|set)\s*\b([_$a-zA-Z][_$\w]*)\s* + begin: >- + (?x) + \b(static\s)? + \s*(get|set)\s + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) beginCaptures: - '1': {name: storage.type.accessor.js} - '2': {name: entity.name.accessor.js} + '1': {name: storage.type.js} + '2': {name: storage.type.accessor.js} + '3': {name: entity.name.accessor.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index edc1304..17365cf 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -776,11 +776,17 @@ begin (?x) - \b([_$a-zA-Z][_$\w]*) + \b(static\s)? + \s*([_$a-zA-Z][_$\w]*) \s*(?=\([^())]*\)\s*\{) beginCaptures 1 + + name + storage.type.js + + 2 name entity.name.method.js @@ -800,15 +806,24 @@ begin - \b(get|set)\s*\b([_$a-zA-Z][_$\w]*)\s* + (?x) + \b(static\s)? + \s*(get|set)\s + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) beginCaptures 1 name - storage.type.accessor.js + storage.type.js 2 + + name + storage.type.accessor.js + + 3 name entity.name.accessor.js @@ -1148,7 +1163,7 @@ match - (?<!\.)\b(async|const|let|static|var)\b + (?<!\.)\b(async|const|let|var)\b name storage.type.js From 9868bf70e93fd562934804060d759e7599e8330f Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 3 Jan 2015 17:24:01 -0500 Subject: [PATCH 127/202] fixed periods in extends --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8b26ad9..4dfc6b0 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -175,7 +175,7 @@ repository: \s+([_$a-zA-Z][_$\w]*) (?: \s+(extends) - \s+([_$a-zA-Z][_$\w]*) + \s+([_$a-zA-Z][_$\w.]*) )? \s*({) beginCaptures: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 17365cf..06227b4 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -728,7 +728,7 @@ \s+([_$a-zA-Z][_$\w]*) (?: \s+(extends) - \s+([_$a-zA-Z][_$\w]*) + \s+([_$a-zA-Z][_$\w.]*) )? \s*({) beginCaptures From b48b67fbcae0ac059ba50f11025296e7b09634f8 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 13 Jan 2015 13:50:18 +1100 Subject: [PATCH 128/202] removed duplicate matchers --- JavaScriptNext.YAML-tmLanguage | 6 ------ JavaScriptNext.tmLanguage | 6 ------ 2 files changed, 12 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 4dfc6b0..331d507 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -555,9 +555,6 @@ repository: - name: keyword.operator.js match: (?- (?x) @@ -612,9 +609,6 @@ repository: == | # equality left-to-right both != # equality left-to-right both - - name: keyword.operator.assignment.js - match: (?x)= - - name: keyword.operator.arithmetic.js match: >- (?x) diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 06227b4..2aa9bac 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1275,12 +1275,6 @@ name keyword.operator.comparison.js - - match - (?x)= - name - keyword.operator.assignment.js - match (?x) From da5a5529deeb72eefc98d2d48183bc8bc54e6173 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 13 Jan 2015 14:28:18 +1100 Subject: [PATCH 129/202] match ternary expressions, fixes #50 --- JavaScriptNext.YAML-tmLanguage | 36 ++++++++++++---- JavaScriptNext.tmLanguage | 76 ++++++++++++++++++++++++++++------ 2 files changed, 91 insertions(+), 21 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 331d507..2538d5c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -58,7 +58,7 @@ repository: endCaptures: '1': {name: meta.brace.round.js} patterns: - - include: source.js + - include: $self - name: meta.group.braces.square begin: (\[) @@ -68,7 +68,7 @@ repository: endCaptures: '1': {name: meta.brace.square.js} patterns: - - include: source.js + - include: $self - name: meta.group.braces.curly begin: ({) @@ -78,7 +78,7 @@ repository: endCaptures: '1': {name: meta.brace.curly.js} patterns: - - include: source.js + - include: $self comments: patterns: @@ -125,7 +125,7 @@ repository: - name: punctuation.definition.comment.js match: /\* - - include: source.js + - include: $self - name: keyword.control.conditional.js match: (@)(if|elif|else|end|ifdef|endif|cc_on|set)\b @@ -550,11 +550,29 @@ repository: match: (?- (?x) @@ -622,12 +640,12 @@ repository: literal-labels: patterns: - - match: (?<=['"])(\s*)(:) + - match: (?<=['"])\s*(:) captures: - '2': {name: punctuation.separator.key-value.js} + '1': {name: punctuation.separator.key-value.js} - name: constant.other.object.key.js - match: (? include - source.js + $self @@ -93,7 +93,7 @@ include - source.js + $self @@ -124,7 +124,7 @@ include - source.js + $self @@ -1193,10 +1193,39 @@ match - (?<!\.)\b(case|default|switch)\b + (?<!\.)\b(switch)\b name keyword.control.switch.js + + begin + (?<!\.)\b(case|default)\b + beginCaptures + + 1 + + name + keyword.control.switch.js + + + end + : + endCaptures + + 0 + + name + punctuation.separator.switch.js + + + patterns + + + include + $self + + + match (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b @@ -1204,10 +1233,33 @@ keyword.operator.js - match + begin + \? + beginCaptures + + 0 + + name + keyword.operator.ternary.js + + + end : - name - punctuation.separator.key-value + endCaptures + + 0 + + name + keyword.operator.ternary.js + + + patterns + + + include + $self + + match @@ -1297,14 +1349,14 @@ captures - 2 + 1 name punctuation.separator.key-value.js match - (?<=['"])(\s*)(:) + (?<=['"])\s*(:) captures @@ -1321,7 +1373,7 @@ match - (?<!\?|\? |case )(?!\?)([_$a-zA-Z][_$\w]*)\s*(:) + (?<!\.)([_$a-zA-Z][_$\w]*)\s*(:) name constant.other.object.key.js @@ -1692,7 +1744,7 @@ include - source.js + $self @@ -1946,7 +1998,7 @@ include - source.js + $self From 59d5b336850430f1b72ef64306f7838e5f5a7a4f Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 14 Jan 2015 01:59:35 +1100 Subject: [PATCH 130/202] removed unnecessary `(?x)` --- JavaScriptNext.YAML-tmLanguage | 7 +------ JavaScriptNext.tmLanguage | 3 +-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 2538d5c..2c0e186 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -124,7 +124,6 @@ repository: patterns: - name: punctuation.definition.comment.js match: /\* - - include: $self - name: keyword.control.conditional.js @@ -147,13 +146,9 @@ repository: '1': {name: punctuation.definition.parameters.end.js} patterns: - name: variable.parameter.function.js - match: >- - (?x) - [_$a-zA-Z][_$\w]* - + match: '[_$a-zA-Z][_$\w]*' - name: punctuation.separator.parameter.function.js match: ',' - - include: '#comments' literal-module: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 8830ff3..3f3bc38 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -325,8 +325,7 @@ match - (?x) - [_$a-zA-Z][_$\w]* + [_$a-zA-Z][_$\w]* name variable.parameter.function.js From 667b186b17f3e599013dabc4942d64566019f322 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 15 Jan 2015 05:42:41 +1100 Subject: [PATCH 131/202] added dollar variables, closes #54 --- JavaScriptNext.YAML-tmLanguage | 4 ++++ JavaScriptNext.tmLanguage | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 2c0e186..07eb40f 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -870,3 +870,7 @@ repository: - name: support.class.node.js match: \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b + + # dollar variables + - name: variable.other.dollar.js + match: '\$[_$a-zA-Z][_$\w]*' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 3f3bc38..573933b 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -2130,6 +2130,12 @@ name support.class.node.js + + match + \$[_$a-zA-Z][_$\w]* + name + variable.other.dollar.js + From 3264f475a65971ac6df8e940dd1e09c6276a7585 Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 15 Jan 2015 05:45:37 +1100 Subject: [PATCH 132/202] small fix to cover more cases --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 07eb40f..f40b64a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -873,4 +873,4 @@ repository: # dollar variables - name: variable.other.dollar.js - match: '\$[_$a-zA-Z][_$\w]*' + match: '\$[_$\w]+' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 573933b..4eae62b 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -2132,7 +2132,7 @@ match - \$[_$a-zA-Z][_$\w]* + \$[_$\w]+ name variable.other.dollar.js From 732f5a3db13b7008382e594519f816064692802f Mon Sep 17 00:00:00 2001 From: Sergio Ruiz Date: Fri, 16 Jan 2015 16:19:32 -0500 Subject: [PATCH 133/202] BUGFIX: Match ternary expressions with simple variables. Commit #da5a552 fixed Issue #50 but broke ternary expressions match for simple variables like this: var hola = var1 ? var1 : var2; --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index f40b64a..916950a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -640,7 +640,7 @@ repository: '1': {name: punctuation.separator.key-value.js} - name: constant.other.object.key.js - match: (? match - (?<!\.)([_$a-zA-Z][_$\w]*)\s*(:) + (?<!\.|\?|\? )([_$a-zA-Z][_$\w]*)\s*(:) name constant.other.object.key.js From 02ef2bf0fd32ff7310a9f9032ea013e30dbef7bb Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Fri, 16 Jan 2015 23:07:56 -0500 Subject: [PATCH 134/202] Capture "prototype" as "variable.language.prototype" --- JavaScriptNext.YAML-tmLanguage | 8 ++++---- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 916950a..219165a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -223,14 +223,14 @@ repository: match: ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* captures: '1': {name: entity.name.class.js} - '2': {name: support.constant.js} + '2': {name: variable.language.prototype.js} # e.g. Sound.prototype - name: meta.prototype.js match: ([_$a-zA-Z][_$\w]*)\.(prototype) captures: '1': {name: entity.name.class.js} - '2': {name: support.constant.js} + '2': {name: variable.language.prototype.js} literal-function-storage: patterns: @@ -258,7 +258,7 @@ repository: \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.class.js} - '2': {name: support.constant.js} + '2': {name: variable.language.prototype.js} '3': {name: entity.name.function.js} '4': {name: storage.type.function.js} end: (?<=\)) @@ -345,7 +345,7 @@ repository: \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} - '2': {name: support.constant.js} + '2': {name: variable.language.prototype.js} '3': {name: entity.name.function.js} end: (?<=\))\s*(=>) endCaptures: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 5e991a9..9d7198b 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -530,7 +530,7 @@ 2 name - support.constant.js + variable.language.prototype.js 3 @@ -947,7 +947,7 @@ 2 name - support.constant.js + variable.language.prototype.js 3 @@ -1629,7 +1629,7 @@ 2 name - support.constant.js + variable.language.prototype.js match @@ -1648,7 +1648,7 @@ 2 name - support.constant.js + variable.language.prototype.js match From 47d2d3021acec2c419998fb11597dd7049d99302 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Fri, 16 Jan 2015 23:11:56 -0500 Subject: [PATCH 135/202] Color "variable.language" as "Library class/type" --- Monokai Phoenix.YAML-tmTheme | 2 +- Monokai Phoenix.tmTheme | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Monokai Phoenix.YAML-tmTheme b/Monokai Phoenix.YAML-tmTheme index 3c15436..f5ef530 100644 --- a/Monokai Phoenix.YAML-tmTheme +++ b/Monokai Phoenix.YAML-tmTheme @@ -187,7 +187,7 @@ settings: foreground: '#66D9EF' - name: Library class/type - scope: support.type, support.class + scope: support.type, support.class, variable.language settings: fontStyle: italic foreground: '#66D9EF' diff --git a/Monokai Phoenix.tmTheme b/Monokai Phoenix.tmTheme index e1ee1ec..776e11a 100644 --- a/Monokai Phoenix.tmTheme +++ b/Monokai Phoenix.tmTheme @@ -408,7 +408,7 @@ name Library class/type scope - support.type, support.class + support.type, support.class, variable.language settings fontStyle From b5b63a286f08f4fbf4945f21814fdb55b5fe64a5 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Mon, 19 Jan 2015 02:39:27 -0500 Subject: [PATCH 136/202] "module" was removed from the Modules spec --- JavaScriptNext.YAML-tmLanguage | 6 +----- JavaScriptNext.tmLanguage | 8 +------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 916950a..8ae6d7a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -153,10 +153,6 @@ repository: literal-module: patterns: - # module names are defined using strings - - name: storage.type.module.js - match: (? patterns - - match - (?<!\.)\b(module)\b - name - storage.type.module.js - match (?<!\.)\b(import|export|from|as)\b @@ -2120,7 +2114,7 @@ match - (?<!\.)\b(process|process\.(env|stdout|stdin|stderr)|global|GLOBAL|root|exports|__dirname|__filename|console)\b + (?<!\.)\b(process|process\.(env|stdout|stdin|stderr)|global|GLOBAL|root|module|exports|__dirname|__filename|console)\b name support.type.object.node.js From 8b3c04cb486bc4a2b531c4575bd2e470c6d9b111 Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 28 Jan 2015 04:57:20 +1100 Subject: [PATCH 137/202] support mustache --- JavaScriptNext.YAML-tmLanguage | 5 +++++ JavaScriptNext.tmLanguage | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 916950a..80df316 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -871,6 +871,11 @@ repository: - name: support.class.node.js match: \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b + # mustache + - name: meta.tag.mustache.js + begin: '{{' + end: '}}' + # dollar variables - name: variable.other.dollar.js match: '\$[_$\w]+' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 5e991a9..9fa1ca0 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -2130,6 +2130,14 @@ name support.class.node.js + + begin + {{ + end + }} + name + meta.tag.mustache.js + match \$[_$\w]+ From b83ee460b8defbd97102e2451775052fc5adf2a9 Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 28 Jan 2015 05:22:40 +1100 Subject: [PATCH 138/202] fixes #72 --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index fcb74e6..c861a51 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -574,7 +574,7 @@ repository: - name: keyword.operator.assignment.js match: >- (?x) - = # assignment right-to-left both + =(?!=)| # assignment right-to-left both - name: keyword.operator.assignment.augmented.js match: >- diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 5be2cd5..b36cbc3 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1272,7 +1272,7 @@ match (?x) - = # assignment right-to-left both + =(?!=)| # assignment right-to-left both name keyword.operator.assignment.js From 044e35e067c95c57051904cc711f80e8fbe36f6d Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 28 Jan 2015 05:36:24 +1100 Subject: [PATCH 139/202] dollar variable fixes: fixes #69 since dollar matches too eagerly, and added to the Next theme --- JavaScriptNext.YAML-tmLanguage | 8 ++++---- JavaScriptNext.tmLanguage | 12 ++++++------ Next.YAML-tmTheme | 6 ++++++ Next.tmTheme | 13 +++++++++++++ 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c861a51..55e713b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -759,6 +759,10 @@ repository: - name: variable.other.constant.js match: \.?[A-Z][_$\dA-Z]*\b + # dollar variables + - name: variable.other.dollar.js + match: '\$[_$\w]+' + # e.g. Class.property - name: meta.property.class.js match: >- @@ -871,7 +875,3 @@ repository: - name: meta.tag.mustache.js begin: '{{' end: '}}' - - # dollar variables - - name: variable.other.dollar.js - match: '\$[_$\w]+' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index b36cbc3..4efa013 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1892,6 +1892,12 @@ name variable.other.constant.js + + match + \$[_$\w]+ + name + variable.other.dollar.js + captures @@ -2132,12 +2138,6 @@ name meta.tag.mustache.js - - match - \$[_$\w]+ - name - variable.other.dollar.js - diff --git a/Next.YAML-tmTheme b/Next.YAML-tmTheme index f582d71..55fcd6b 100644 --- a/Next.YAML-tmTheme +++ b/Next.YAML-tmTheme @@ -273,6 +273,12 @@ settings: settings: foreground: '#FF9122' +- name: js variable dollar + scope: meta.initialization, variable.other.dollar.js + settings: + fontStyle: italic + foreground: '#FF9122' + - name: js object scope: variable.other.object.js settings: diff --git a/Next.tmTheme b/Next.tmTheme index 1bacca2..4cb21dd 100644 --- a/Next.tmTheme +++ b/Next.tmTheme @@ -595,6 +595,19 @@ #FF9122 + + name + js variable dollar + scope + meta.initialization, variable.other.dollar.js + settings + + fontStyle + italic + foreground + #FF9122 + + name js object From ce6b6aa747961f4921febe879981154e285242f4 Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 28 Jan 2015 06:23:34 +1100 Subject: [PATCH 140/202] ternary fixes --- JavaScriptNext.YAML-tmLanguage | 32 +++++++++-------- JavaScriptNext.tmLanguage | 66 +++++++++++++++------------------- 2 files changed, 45 insertions(+), 53 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 55e713b..f55359c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -31,8 +31,9 @@ repository: - include: '#literal-function-storage' - include: '#literal-arrow-function-storage' - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings + - include: '#literal-labels' - # after literal-function-storage which requires the below in some cases + # after literal-function-storage & literal-labels which requires the below in some cases - include: '#literal-string' - include: '#literal-language-variable' @@ -41,7 +42,6 @@ repository: - include: '#literal-function-call' # punctuation - - include: '#literal-labels' - include: '#literal-variable' - include: '#literal-punctuation' @@ -555,15 +555,6 @@ repository: - name: keyword.operator.js match: (?- (?x) @@ -629,14 +620,25 @@ repository: \+ | # addition left-to-right both - # subtraction left-to-right both + - name: keyword.operator.ternary.js + match: '\?|:' + literal-labels: patterns: - - match: (?<=['"])\s*(:) - captures: - '1': {name: punctuation.separator.key-value.js} + - begin: >- + (?x) + (?include #literal-prototype-storage + + include + #literal-labels + include #literal-string @@ -278,10 +282,6 @@ include #literal-function-call - - include - #literal-labels - include #literal-variable @@ -1231,35 +1231,6 @@ name keyword.operator.js - - begin - \? - beginCaptures - - 0 - - name - keyword.operator.ternary.js - - - end - : - endCaptures - - 0 - - name - keyword.operator.ternary.js - - - patterns - - - include - $self - - - match (?x) @@ -1339,6 +1310,12 @@ name keyword.operator.arithmetic.js + + match + \?|: + name + keyword.operator.ternary.js + literal-labels @@ -1346,16 +1323,29 @@ patterns - captures + begin + (?x) + (?<!\?|\?\s)(?=( + ((')(.*?)(?<!\\)('))| + ((")(.*?)(?<!\\)(")) + )\s*:) + end + : + endCaptures - 1 + 0 name punctuation.separator.key-value.js - match - (?<=['"])\s*(:) + patterns + + + include + #literal-string + + captures @@ -1372,7 +1362,7 @@ match - (?<!\.|\?|\? )([_$a-zA-Z][_$\w]*)\s*(:) + (?<!\.|\?|\?\s)([_$a-zA-Z][_$\w]*)\s*(:) name constant.other.object.key.js From 7de54d2f22e9a7872d178c2b3c726f8ccf1934f7 Mon Sep 17 00:00:00 2001 From: simonzack Date: Wed, 28 Jan 2015 06:28:23 +1100 Subject: [PATCH 141/202] quote matcher fixes --- JavaScriptNext.YAML-tmLanguage | 12 ++++++------ JavaScriptNext.tmLanguage | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index f55359c..f9ec4cc 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -297,8 +297,8 @@ repository: begin: >- (?x) (?: - ((')(.*?)(?- (?x) (?: - ((')(.*?)(?)) @@ -628,8 +628,8 @@ repository: - begin: >- (?x) (?begin (?x) (?: - ((')(.*?)(?<!\\)('))| - ((")(.*?)(?<!\\)(")) + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) )\s* (:)\s* \s*(?=\([^()]*\)\s*(=>)) @@ -1049,8 +1049,8 @@ begin (?x) (?: - ((')(.*?)(?<!\\)('))| - ((")(.*?)(?<!\\)(")) + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) )\s* (:)\s* \b(function(?:\s*\*|(?=\s|[(])))\s* @@ -1326,8 +1326,8 @@ begin (?x) (?<!\?|\?\s)(?=( - ((')(.*?)(?<!\\)('))| - ((")(.*?)(?<!\\)(")) + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) )\s*:) end : From 11640197bb3e03db8fbbf0b75ba3f8f5664039dd Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 1 Feb 2015 23:09:39 +1100 Subject: [PATCH 142/202] allow expressions in class extends, fixes #62 --- JavaScriptNext.YAML-tmLanguage | 83 +++++++++--------- JavaScriptNext.tmLanguage | 152 +++++++++++++++++++-------------- 2 files changed, 135 insertions(+), 100 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index f9ec4cc..efeadb6 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -164,53 +164,60 @@ repository: (?x) (?- - (?x) - \b(static\s)? - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) + - name: meta.class.extends.js + begin: extends beginCaptures: - '1': {name: storage.type.js} - '2': {name: entity.name.method.js} - end: (?<=\)) + '0': {name: storage.type.extends.js} + end: '(?={)' + endCaptures: + '0': {name: meta.brace.curly.js} patterns: - - include: '#function-declaration-parameters' - - # getter/setter - - name: meta.accessor.js - begin: >- - (?x) - \b(static\s)? - \s*(get|set)\s - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) + - include: $self + + - begin: '{' beginCaptures: - '1': {name: storage.type.js} - '2': {name: storage.type.accessor.js} - '3': {name: entity.name.accessor.js} - end: (?<=\)) + '0': {name: meta.brace.curly.js} + end: '(?=})' patterns: - - include: '#function-declaration-parameters' - - - include: '#brackets' - - include: '#comments' + # e.g. play(arg1, arg2) { } + - name: meta.method.js + begin: >- + (?x) + \b(static\s)? + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures: + '1': {name: storage.type.js} + '2': {name: entity.name.method.js} + end: (?<=\)) + patterns: + - include: '#function-declaration-parameters' + + # getter/setter + - name: meta.accessor.js + begin: >- + (?x) + \b(static\s)? + \s*(get|set)\s + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures: + '1': {name: storage.type.js} + '2': {name: storage.type.accessor.js} + '3': {name: entity.name.accessor.js} + end: (?<=\)) + patterns: + - include: '#function-declaration-parameters' + + - include: '#brackets' + - include: '#comments' literal-prototype-storage: patterns: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 681893c..1218b5a 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -724,12 +724,7 @@ begin (?x) (?<!\.)\b(class) - \s+([_$a-zA-Z][_$\w]*) - (?: - \s+(extends) - \s+([_$a-zA-Z][_$\w.]*) - )? - \s*({) + \s+([_$a-zA-Z][_$\w]*) beginCaptures 1 @@ -742,27 +737,12 @@ name entity.name.class.js - 3 - - name - storage.type.extends.js - - 4 - - name - entity.name.extends.js - - 5 - - name - meta.brace.curly.js - end - (}) + } endCaptures - 1 + 0 name meta.brace.curly.js @@ -774,80 +754,128 @@ begin - (?x) - \b(static\s)? - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) + extends beginCaptures - 1 + 0 name - storage.type.js + storage.type.extends.js - 2 + + end + (?={) + endCaptures + + 0 name - entity.name.method.js + meta.brace.curly.js - end - (?<=\)) name - meta.method.js + meta.class.extends.js patterns include - #function-declaration-parameters + $self begin - (?x) - \b(static\s)? - \s*(get|set)\s - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) + { beginCaptures - 1 + 0 name - storage.type.js + meta.brace.curly.js - 2 + + end + (?=}) + patterns + + begin + (?x) + \b(static\s)? + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures + + 1 + + name + storage.type.js + + 2 + + name + entity.name.method.js + + + end + (?<=\)) name - storage.type.accessor.js + meta.method.js + patterns + + + include + #function-declaration-parameters + + - 3 + begin + (?x) + \b(static\s)? + \s*(get|set)\s + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures + + 1 + + name + storage.type.js + + 2 + + name + storage.type.accessor.js + + 3 + + name + entity.name.accessor.js + + + end + (?<=\)) name - entity.name.accessor.js + meta.accessor.js + patterns + + + include + #function-declaration-parameters + + + + + include + #brackets - - end - (?<=\)) - name - meta.accessor.js - patterns - include - #function-declaration-parameters + #comments - - include - #brackets - - - include - #comments - From 748e64c1cc1dc4758ea0faef05c92ee8660f7618 Mon Sep 17 00:00:00 2001 From: simonzack Date: Mon, 2 Feb 2015 01:23:58 +1100 Subject: [PATCH 143/202] put under meta.prototype.access.js so distinguishing between definitions & use is easy --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index efeadb6..8d08360 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -229,7 +229,7 @@ repository: '2': {name: variable.language.prototype.js} # e.g. Sound.prototype - - name: meta.prototype.js + - name: meta.prototype.access.js match: ([_$a-zA-Z][_$\w]*)\.(prototype) captures: '1': {name: entity.name.class.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 1218b5a..db09259 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1666,7 +1666,7 @@ match ([_$a-zA-Z][_$\w]*)\.(prototype) name - meta.prototype.js + meta.prototype.access.js From 3625cd1b96a0ee0cb76411b14197c67e7fb9fdb8 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 3 Feb 2015 00:51:51 +1100 Subject: [PATCH 144/202] support property methods, finer granularity is impossible as we can't distinguish between block scoped bindings & objects in tmLanguages --- JavaScriptNext.YAML-tmLanguage | 66 +++++++------- JavaScriptNext.tmLanguage | 154 ++++++++++++++++++--------------- 2 files changed, 119 insertions(+), 101 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8d08360..1a24b6a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -26,9 +26,10 @@ repository: - include: '#literal-keywords' # modules/classes/functions - - include: '#literal-class' - include: '#literal-module' + - include: '#literal-class' - include: '#literal-function-storage' + - include: '#literal-method' - include: '#literal-arrow-function-storage' - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings - include: '#literal-labels' @@ -186,38 +187,41 @@ repository: '0': {name: meta.brace.curly.js} end: '(?=})' patterns: - # e.g. play(arg1, arg2) { } - - name: meta.method.js - begin: >- - (?x) - \b(static\s)? - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) - beginCaptures: - '1': {name: storage.type.js} - '2': {name: entity.name.method.js} - end: (?<=\)) - patterns: - - include: '#function-declaration-parameters' - - # getter/setter - - name: meta.accessor.js - begin: >- - (?x) - \b(static\s)? - \s*(get|set)\s - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) - beginCaptures: - '1': {name: storage.type.js} - '2': {name: storage.type.accessor.js} - '3': {name: entity.name.accessor.js} - end: (?<=\)) - patterns: - - include: '#function-declaration-parameters' - - include: '#brackets' - include: '#comments' + - include: '#literal-method' + + literal-method: + patterns: + # e.g. play(arg1, arg2) { } + - name: meta.method.js + begin: >- + (?x) + \b(static\s)? + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures: + '1': {name: storage.type.js} + '2': {name: entity.name.method.js} + end: (?<=\)) + patterns: + - include: '#function-declaration-parameters' + + # getter/setter + - name: meta.accessor.js + begin: >- + (?x) + \b(static\s)? + \s*(get|set)\s + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures: + '1': {name: storage.type.js} + '2': {name: storage.type.accessor.js} + '3': {name: entity.name.accessor.js} + end: (?<=\)) + patterns: + - include: '#function-declaration-parameters' literal-prototype-storage: patterns: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index db09259..dd54ef8 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -244,16 +244,20 @@ include - #literal-class + #literal-module include - #literal-module + #literal-class include #literal-function-storage + + include + #literal-method + include #literal-arrow-function-storage @@ -798,74 +802,6 @@ (?=}) patterns - - begin - (?x) - \b(static\s)? - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - entity.name.method.js - - - end - (?<=\)) - name - meta.method.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - \b(static\s)? - \s*(get|set)\s - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.accessor.js - - 3 - - name - entity.name.accessor.js - - - end - (?<=\)) - name - meta.accessor.js - patterns - - - include - #function-declaration-parameters - - - include #brackets @@ -874,6 +810,10 @@ include #comments + + include + #literal-method + @@ -1480,6 +1420,80 @@ + literal-method + + patterns + + + begin + (?x) + \b(static\s)? + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures + + 1 + + name + storage.type.js + + 2 + + name + entity.name.method.js + + + end + (?<=\)) + name + meta.method.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + \b(static\s)? + \s*(get|set)\s + \s*([_$a-zA-Z][_$\w]*) + \s*(?=\([^())]*\)\s*\{) + beginCaptures + + 1 + + name + storage.type.js + + 2 + + name + storage.type.accessor.js + + 3 + + name + entity.name.accessor.js + + + end + (?<=\)) + name + meta.accessor.js + patterns + + + include + #function-declaration-parameters + + + + + literal-method-call patterns From cf31fd8aa432acbd2fbaec3a4f74a105536e020e Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 3 Feb 2015 03:07:54 +1100 Subject: [PATCH 145/202] fixed issues when fields start with `prototype` --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 1a24b6a..3883b6f 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -234,7 +234,7 @@ repository: # e.g. Sound.prototype - name: meta.prototype.access.js - match: ([_$a-zA-Z][_$\w]*)\.(prototype) + match: ([_$a-zA-Z][_$\w]*)\.(prototype)\b captures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index dd54ef8..0b580f8 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1678,7 +1678,7 @@ match - ([_$a-zA-Z][_$\w]*)\.(prototype) + ([_$a-zA-Z][_$\w]*)\.(prototype)\b name meta.prototype.access.js From 10af6713d6cbcc793ff7015a0653214294a1c080 Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 3 Feb 2015 04:48:18 +1100 Subject: [PATCH 146/202] fixed method definition matches if FP --- JavaScriptNext.YAML-tmLanguage | 14 +++++++------- JavaScriptNext.tmLanguage | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 3883b6f..7fda8a9 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -197,9 +197,9 @@ repository: - name: meta.method.js begin: >- (?x) - \b(static\s)? - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) + \b(?:(static)\s+)? + ([_$a-zA-Z][_$\w]*)\s* + (?=\([^())]*\)\s*\{) beginCaptures: '1': {name: storage.type.js} '2': {name: entity.name.method.js} @@ -211,10 +211,10 @@ repository: - name: meta.accessor.js begin: >- (?x) - \b(static\s)? - \s*(get|set)\s - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) + \b(?:(static)\s+)? + (get|set)\s+ + ([_$a-zA-Z][_$\w]*)\s* + (?=\([^())]*\)\s*\{) beginCaptures: '1': {name: storage.type.js} '2': {name: storage.type.accessor.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 0b580f8..77d1656 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1427,9 +1427,9 @@ begin (?x) - \b(static\s)? - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) + \b(?:(static)\s+)? + ([_$a-zA-Z][_$\w]*)\s* + (?=\([^())]*\)\s*\{) beginCaptures 1 @@ -1458,10 +1458,10 @@ begin (?x) - \b(static\s)? - \s*(get|set)\s - \s*([_$a-zA-Z][_$\w]*) - \s*(?=\([^())]*\)\s*\{) + \b(?:(static)\s+)? + (get|set)\s+ + ([_$a-zA-Z][_$\w]*)\s* + (?=\([^())]*\)\s*\{) beginCaptures 1 From 6e2d425f47bb50107a497ab4da3e654284b26c9b Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Fri, 6 Feb 2015 10:39:53 -0500 Subject: [PATCH 147/202] Comments after function params in literal methods --- JavaScriptNext.YAML-tmLanguage | 4 ++-- JavaScriptNext.tmLanguage | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7fda8a9..8c4df58 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -199,7 +199,7 @@ repository: (?x) \b(?:(static)\s+)? ([_$a-zA-Z][_$\w]*)\s* - (?=\([^())]*\)\s*\{) + (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures: '1': {name: storage.type.js} '2': {name: entity.name.method.js} @@ -214,7 +214,7 @@ repository: \b(?:(static)\s+)? (get|set)\s+ ([_$a-zA-Z][_$\w]*)\s* - (?=\([^())]*\)\s*\{) + (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures: '1': {name: storage.type.js} '2': {name: storage.type.accessor.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 77d1656..9b7c182 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1429,7 +1429,7 @@ (?x) \b(?:(static)\s+)? ([_$a-zA-Z][_$\w]*)\s* - (?=\([^())]*\)\s*\{) + (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures 1 @@ -1461,7 +1461,7 @@ \b(?:(static)\s+)? (get|set)\s+ ([_$a-zA-Z][_$\w]*)\s* - (?=\([^())]*\)\s*\{) + (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures 1 From d5fa1177107aa853b2aa21775d3502852b57a381 Mon Sep 17 00:00:00 2001 From: simonzack Date: Mon, 9 Feb 2015 03:56:14 +1100 Subject: [PATCH 148/202] support optional parameters, doesn't include brackets & commas, but can't see any way to, cf #24 --- JavaScriptNext.YAML-tmLanguage | 7 +++++++ JavaScriptNext.tmLanguage | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8c4df58..aff1b5e 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -150,6 +150,13 @@ repository: match: '[_$a-zA-Z][_$\w]*' - name: punctuation.separator.parameter.function.js match: ',' + - name: meta.parameter.optional.js + begin: '=' + beginCaptures: + '0': {name: keyword.operator.assignment.js} + end: '(?=[,)])' + patterns: + - include: $self - include: '#comments' literal-module: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 9b7c182..e6c9d88 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -339,6 +339,29 @@ name punctuation.separator.parameter.function.js + + begin + = + beginCaptures + + 0 + + name + keyword.operator.assignment.js + + + end + (?=[,)]) + name + meta.parameter.optional.js + patterns + + + include + $self + + + include #comments From 598830fcc3eaba5c8f63f105469d88f3cf7c31cd Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 12 Feb 2015 07:10:15 +1100 Subject: [PATCH 149/202] regex escape fix --- Regular Expressions (JavaScriptNext).YAML-tmLanguage | 2 +- Regular Expressions (JavaScriptNext).tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Regular Expressions (JavaScriptNext).YAML-tmLanguage b/Regular Expressions (JavaScriptNext).YAML-tmLanguage index 11233e0..7f240c6 100644 --- a/Regular Expressions (JavaScriptNext).YAML-tmLanguage +++ b/Regular Expressions (JavaScriptNext).YAML-tmLanguage @@ -73,7 +73,7 @@ repository: match: \\[wWsSdD]|\. - name: constant.character.escape.backslash.regexp - match: \\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) + match: \\([trnvf0\\]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) character-class-definition: patterns: diff --git a/Regular Expressions (JavaScriptNext).tmLanguage b/Regular Expressions (JavaScriptNext).tmLanguage index faa4f1e..2aba44d 100644 --- a/Regular Expressions (JavaScriptNext).tmLanguage +++ b/Regular Expressions (JavaScriptNext).tmLanguage @@ -85,7 +85,7 @@ match - \\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) + \\([trnvf0\\]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) name constant.character.escape.backslash.regexp From 13512a490cbb0a6645b4a063032371a012290fe6 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 15 Feb 2015 14:23:05 +1100 Subject: [PATCH 150/202] removed useless _ already matched by \w, closes #78 --- JavaScriptNext.YAML-tmLanguage | 70 +++++++++++++++++----------------- JavaScriptNext.tmLanguage | 70 +++++++++++++++++----------------- 2 files changed, 70 insertions(+), 70 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index aff1b5e..4d5de89 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -147,7 +147,7 @@ repository: '1': {name: punctuation.definition.parameters.end.js} patterns: - name: variable.parameter.function.js - match: '[_$a-zA-Z][_$\w]*' + match: '[_$a-zA-Z][$\w]*' - name: punctuation.separator.parameter.function.js match: ',' - name: meta.parameter.optional.js @@ -171,7 +171,7 @@ repository: begin: >- (?x) (?- (?x) \b(?:(static)\s+)? - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures: '1': {name: storage.type.js} @@ -220,7 +220,7 @@ repository: (?x) \b(?:(static)\s+)? (get|set)\s+ - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures: '1': {name: storage.type.js} @@ -234,14 +234,14 @@ repository: patterns: # e.g. Sound.prototype = { } when extending an object - name: meta.prototype.declaration.js - match: ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* + match: ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* captures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} # e.g. Sound.prototype - name: meta.prototype.access.js - match: ([_$a-zA-Z][_$\w]*)\.(prototype)\b + match: ([_$a-zA-Z][$\w]*)\.(prototype)\b captures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} @@ -253,7 +253,7 @@ repository: begin: >- (?x) \b(function(?:\s*\*|(?=\s|[(]))) - \s*([_$a-zA-Z][_$\w]*)?\s* + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: '1': {name: storage.type.function.js} '2': {name: entity.name.function.js} @@ -265,9 +265,9 @@ repository: - name: meta.prototype.function.js begin: >- (?x) - (\b_?[A-Z][_$\w]*)? + (\b_?[A-Z][$\w]*)? \.(prototype) - \.([_$a-zA-Z][_$\w]*) + \.([_$a-zA-Z][$\w]*) \s*= \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: @@ -283,8 +283,8 @@ repository: - name: meta.function.static.js begin: >- (?x) - (\b_?[A-Z][_$\w]*)? - \.([_$a-zA-Z][_$\w]*) + (\b_?[A-Z][$\w]*)? + \.([_$a-zA-Z][$\w]*) \s*= \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: @@ -299,7 +299,7 @@ repository: - name: meta.function.json.js begin: >- (?x) - \b([_$a-zA-Z][_$\w]*) + \b([_$a-zA-Z][$\w]*) \s*(:) \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: @@ -352,9 +352,9 @@ repository: - name: meta.prototype.function.arrow.js begin: >- (?x) - (\b_?[A-Z][_$\w]*)? + (\b_?[A-Z][$\w]*)? \.(prototype) - \.([_$a-zA-Z][_$\w]*) + \.([_$a-zA-Z][$\w]*) \s*= \s*(?=\([^()]*\)\s*(=>)) beginCaptures: @@ -371,8 +371,8 @@ repository: - name: meta.function.static.arrow.js begin: >- (?x) - (\b_?[A-Z][_$\w]*)? - \.([_$a-zA-Z][_$\w]*) + (\b_?[A-Z][$\w]*)? + \.([_$a-zA-Z][$\w]*) \s*= \s*(?=\([^()]*\)\s*(=>)) beginCaptures: @@ -388,7 +388,7 @@ repository: - name: meta.function.json.arrow.js begin: >- (?x) - \b([_$a-zA-Z][_$\w]*) + \b([_$a-zA-Z][$\w]*) \s*(:) \s*(?=\([^()]*\)\s*(=>)) beginCaptures: @@ -431,7 +431,7 @@ repository: - name: meta.function-call.without-arguments.js match: >- (?x) - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (\(\s*\)) captures: '1': {name: entity.name.function.js} @@ -440,7 +440,7 @@ repository: - name: meta.function-call.with-arguments.js match: >- (?x) - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (?=\() captures: '1': {name: entity.name.function.js} @@ -451,8 +451,8 @@ repository: match: >- (?x) (?:(?<=\.)|\b) - ([A-Z][_$\w]*)\s*\. - ([_$a-zA-Z][_$\w]*)\s* + ([A-Z][$\w]*)\s*\. + ([_$a-zA-Z][$\w]*)\s* (\(\s*\)) captures: '1': {name: variable.other.class.js} @@ -463,8 +463,8 @@ repository: match: >- (?x) (?:(?<=\.)|\b) - ([A-Z][_$\w]*)\s*\. - ([_$a-zA-Z][_$\w]*)\s* + ([A-Z][$\w]*)\s*\. + ([_$a-zA-Z][$\w]*)\s* (?=\() captures: '1': {name: variable.other.class.js} @@ -474,7 +474,7 @@ repository: match: >- (?x) (?<=\.) - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (\(\s*\)) captures: '1': {name: entity.name.function.js} @@ -484,7 +484,7 @@ repository: match: >- (?x) (?<=\.) - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (?=\() captures: '1': {name: entity.name.function.js} @@ -532,14 +532,14 @@ repository: literal-keywords: patterns: - name: meta.instance.constructor - begin: (new)\s+(?=[_$a-zA-Z][_$\w.]*) + begin: (new)\s+(?=[_$a-zA-Z][$\w.]*) beginCaptures: '1': {name: keyword.operator.new.js} - end: (?![_$a-zA-Z][_$\w.]*) + end: (?![_$a-zA-Z][$\w.]*) patterns: - include: '#support' - - match: ([_$a-zA-Z][_$\w.]*\.)?([_$a-zA-Z][_$\w]*) + - match: ([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*) captures: '2': {name: entity.name.type.new.js} @@ -656,7 +656,7 @@ repository: - include: '#literal-string' - name: constant.other.object.key.js - match: (?- (?x) - \b([A-Z][_$\w]*)\s*\. - ([_$a-zA-Z][_$\w]*) + \b([A-Z][$\w]*)\s*\. + ([_$a-zA-Z][$\w]*) captures: '1': {name: variable.other.class.js} '2': {name: variable.other.property.static.js} # e.g. obj.property - name: variable.other.object.js - match: (? match - [_$a-zA-Z][_$\w]* + [_$a-zA-Z][$\w]* name variable.parameter.function.js @@ -542,9 +542,9 @@ begin (?x) - (\b_?[A-Z][_$\w]*)? + (\b_?[A-Z][$\w]*)? \.(prototype) - \.([_$a-zA-Z][_$\w]*) + \.([_$a-zA-Z][$\w]*) \s*= \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -588,8 +588,8 @@ begin (?x) - (\b_?[A-Z][_$\w]*)? - \.([_$a-zA-Z][_$\w]*) + (\b_?[A-Z][$\w]*)? + \.([_$a-zA-Z][$\w]*) \s*= \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -628,7 +628,7 @@ begin (?x) - \b([_$a-zA-Z][_$\w]*) + \b([_$a-zA-Z][$\w]*) \s*(:) \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -751,7 +751,7 @@ begin (?x) (?<!\.)\b(class) - \s+([_$a-zA-Z][_$\w]*) + \s+([_$a-zA-Z][$\w]*) beginCaptures 1 @@ -863,7 +863,7 @@ match (?x) - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (\(\s*\)) name meta.function-call.without-arguments.js @@ -879,7 +879,7 @@ match (?x) - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (?=\() name meta.function-call.with-arguments.js @@ -894,7 +894,7 @@ begin (?x) \b(function(?:\s*\*|(?=\s|[(]))) - \s*([_$a-zA-Z][_$\w]*)?\s* + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures 1 @@ -923,9 +923,9 @@ begin (?x) - (\b_?[A-Z][_$\w]*)? + (\b_?[A-Z][$\w]*)? \.(prototype) - \.([_$a-zA-Z][_$\w]*) + \.([_$a-zA-Z][$\w]*) \s*= \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -966,8 +966,8 @@ begin (?x) - (\b_?[A-Z][_$\w]*)? - \.([_$a-zA-Z][_$\w]*) + (\b_?[A-Z][$\w]*)? + \.([_$a-zA-Z][$\w]*) \s*= \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -1003,7 +1003,7 @@ begin (?x) - \b([_$a-zA-Z][_$\w]*) + \b([_$a-zA-Z][$\w]*) \s*(:) \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -1118,7 +1118,7 @@ begin - (new)\s+(?=[_$a-zA-Z][_$\w.]*) + (new)\s+(?=[_$a-zA-Z][$\w.]*) beginCaptures 1 @@ -1128,7 +1128,7 @@ end - (?![_$a-zA-Z][_$\w.]*) + (?![_$a-zA-Z][$\w.]*) name meta.instance.constructor patterns @@ -1147,7 +1147,7 @@ match - ([_$a-zA-Z][_$\w.]*\.)?([_$a-zA-Z][_$\w]*) + ([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*) @@ -1353,7 +1353,7 @@ match - (?<!\.|\?|\?\s)([_$a-zA-Z][_$\w]*)\s*(:) + (?<!\.|\?|\?\s)([_$a-zA-Z][$\w]*)\s*(:) name constant.other.object.key.js @@ -1451,7 +1451,7 @@ begin (?x) \b(?:(static)\s+)? - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures @@ -1483,7 +1483,7 @@ (?x) \b(?:(static)\s+)? (get|set)\s+ - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures @@ -1543,8 +1543,8 @@ match (?x) (?:(?<=\.)|\b) - ([A-Z][_$\w]*)\s*\. - ([_$a-zA-Z][_$\w]*)\s* + ([A-Z][$\w]*)\s*\. + ([_$a-zA-Z][$\w]*)\s* (\(\s*\)) name meta.function-call.static.without-arguments.js @@ -1566,8 +1566,8 @@ match (?x) (?:(?<=\.)|\b) - ([A-Z][_$\w]*)\s*\. - ([_$a-zA-Z][_$\w]*)\s* + ([A-Z][$\w]*)\s*\. + ([_$a-zA-Z][$\w]*)\s* (?=\() name meta.function-call.static.with-arguments.js @@ -1589,7 +1589,7 @@ match (?x) (?<=\.) - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (\(\s*\)) name meta.function-call.method.without-arguments.js @@ -1606,7 +1606,7 @@ match (?x) (?<=\.) - ([_$a-zA-Z][_$\w]*)\s* + ([_$a-zA-Z][$\w]*)\s* (?=\() name meta.function-call.method.with-arguments.js @@ -1682,7 +1682,7 @@ match - ([_$a-zA-Z][_$\w]*)\.(prototype)\s*=\s* + ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* name meta.prototype.declaration.js @@ -1701,7 +1701,7 @@ match - ([_$a-zA-Z][_$\w]*)\.(prototype)\b + ([_$a-zA-Z][$\w]*)\.(prototype)\b name meta.prototype.access.js @@ -1949,7 +1949,7 @@ match - \$[_$\w]+ + \$[$\w]+ name variable.other.dollar.js @@ -1969,8 +1969,8 @@ match (?x) - \b([A-Z][_$\w]*)\s*\. - ([_$a-zA-Z][_$\w]*) + \b([A-Z][$\w]*)\s*\. + ([_$a-zA-Z][$\w]*) name meta.property.class.js @@ -1984,7 +1984,7 @@ match - (?<!\.)[_$a-zA-Z][_$\w]*\s*(?=[\[\.]) + (?<!\.)[_$a-zA-Z][$\w]*\s*(?=[\[\.]) name variable.other.object.js @@ -1998,13 +1998,13 @@ match - (?<=\.)\s*[_$a-zA-Z][_$\w]* + (?<=\.)\s*[_$a-zA-Z][$\w]* name meta.property.object.js match - [_$a-zA-Z][_$\w]* + [_$a-zA-Z][$\w]* name variable.other.readwrite.js From 1e7a27f2e925e1eada9987969b687daa72f114e8 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Thu, 19 Feb 2015 11:26:33 -0500 Subject: [PATCH 151/202] Add spread and rest support --- JavaScriptNext.YAML-tmLanguage | 13 +++++++++---- JavaScriptNext.tmLanguage | 20 ++++++++++++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 4d5de89..c4745c3 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -146,6 +146,8 @@ repository: endCaptures: '1': {name: punctuation.definition.parameters.end.js} patterns: + - name: keyword.operator.spread.js + match: (?- diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 8a1bd27..6f75830 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -327,6 +327,12 @@ patterns + + match + (?<!\.)\.\.\. + name + keyword.operator.spread.js + match [_$a-zA-Z][$\w]* @@ -1307,6 +1313,12 @@ name keyword.operator.ternary.js + + match + (?<!\.)\.\.\. + name + keyword.operator.spread.js + literal-labels @@ -1401,25 +1413,25 @@ match - (?<!\.)\b(arguments)\b + (?<!(?<!\.\.)\.)\b(arguments)\b name variable.language.arguments.js match - (?<!\.)\b(super)\b + (?<!(?<!\.\.)\.)\b(super)\b name variable.language.super.js match - (?<!\.)\b(this)\b + (?<!(?<!\.\.)\.)\b(this)\b name variable.language.this.js match - (?<!\.)\b(self)\b + (?<!(?<!\.\.)\.)\b(self)\b name variable.language.self.js From 9534713df7290eba8fb48c16d07a3fd12875a069 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 20 Feb 2015 16:49:59 +1100 Subject: [PATCH 152/202] fixes #73 --- JavaScriptNext.YAML-tmLanguage | 18 +++++++++--------- JavaScriptNext.tmLanguage | 22 +++++++++++----------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c4745c3..fa40ff3 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -20,24 +20,24 @@ repository: - include: '#literal-regex' # before operators to avoid ambiguities - include: '#literal-number' - include: '#literal-quasi' - - include: '#literal-language-constant' - - # keywords/operators - - include: '#literal-keywords' - # modules/classes/functions - - include: '#literal-module' - - include: '#literal-class' + # object literals - include: '#literal-function-storage' - - include: '#literal-method' - include: '#literal-arrow-function-storage' - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings - include: '#literal-labels' - # after literal-function-storage & literal-labels which requires the below in some cases + # after object literals which requires the below in some cases - include: '#literal-string' + - include: '#literal-keywords' + - include: '#literal-language-constant' - include: '#literal-language-variable' + # modules/classes/methods + - include: '#literal-module' + - include: '#literal-class' + - include: '#literal-method' + # function calls - include: '#literal-method-call' - include: '#literal-function-call' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 6f75830..0ebe230 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -236,47 +236,47 @@ include - #literal-language-constant + #literal-function-storage include - #literal-keywords + #literal-arrow-function-storage include - #literal-module + #literal-prototype-storage include - #literal-class + #literal-labels include - #literal-function-storage + #literal-string include - #literal-method + #literal-keywords include - #literal-arrow-function-storage + #literal-language-constant include - #literal-prototype-storage + #literal-language-variable include - #literal-labels + #literal-module include - #literal-string + #literal-class include - #literal-language-variable + #literal-method include From 7fe23c4b225bc4f248bb675c3979679b505b2ce7 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 20 Feb 2015 17:01:00 +1100 Subject: [PATCH 153/202] consistent casing --- Monokai Phoenix.YAML-tmTheme | 30 +++++++++++++++--------------- Monokai Phoenix.tmTheme | 30 +++++++++++++++--------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/Monokai Phoenix.YAML-tmTheme b/Monokai Phoenix.YAML-tmTheme index f5ef530..d2c83e7 100644 --- a/Monokai Phoenix.YAML-tmTheme +++ b/Monokai Phoenix.YAML-tmTheme @@ -74,7 +74,7 @@ settings: - name: Support scope: support settings: - foreground: '#8a5c8dff' + foreground: '#8A5C8DFF' - name: Function arg scope: meta.function.argument, variable.parameter, meta.parens.c @@ -84,8 +84,8 @@ settings: - name: invalid.illegal scope: invalid.illegal settings: - background: '#562d56bf' - foreground: '#fd5ff1ff' + background: '#562D56BF' + foreground: '#FD5FF1FF' - name: support.function scope: support.function @@ -105,17 +105,17 @@ settings: - name: entity.arrow.function.js scope: entity.arrow.function.js settings: - foreground: '#aa00ff' + foreground: '#AA00FF' - name: support.class.error.js scope: support.class.error.js settings: - foreground: '#ff5522' + foreground: '#FF5522' - name: support.class.node.js scope: support.class.node.js settings: - foreground: '#1224fe' + foreground: '#1224FE' - name: support.keyword.node.js scope: support.keyword.node.js @@ -146,7 +146,7 @@ settings: scope: meta.method.js settings: fontStyle: '' - foreground: '#fff' + foreground: '#FFF' - name: support.function scope: support.function @@ -169,7 +169,7 @@ settings: scope: entity.name.extends.js settings: fontStyle: italic - foreground: '#00ff99' + foreground: '#00FF99' - name: entity.other.attribute-name.id scope: entity.other.attribute-name.id @@ -226,32 +226,32 @@ settings: - name: diff.deleted scope: markup.deleted settings: - background: '#420e09ff' + background: '#420E09FF' foreground: '#F92672' - name: diff.changed scope: markup.changed settings: - background: '#4a410dff' + background: '#4A410DFF' foreground: '#E6DB74' - name: diff.inserted scope: markup.inserted settings: - background: '#253b22ff' - foreground: '#f8f8f8ff' + background: '#253B22FF' + foreground: '#F8F8F8FF' - name: Log Entry scope: meta.line.entry.logfile, meta.line.exit.logfile settings: - background: '#eeeeee29' - foreground: '#f8f8f8ff' + background: '#EEEEEE29' + foreground: '#F8F8F8FF' - name: Log Entry Error scope: meta.line.error.logfile settings: background: '#751012' - foreground: '#f8f8f8' + foreground: '#F8F8F8' - name: JSON String scope: meta.structure.dictionary.json string.quoted.double diff --git a/Monokai Phoenix.tmTheme b/Monokai Phoenix.tmTheme index 776e11a..c5f5fa4 100644 --- a/Monokai Phoenix.tmTheme +++ b/Monokai Phoenix.tmTheme @@ -161,7 +161,7 @@ settings foreground - #8a5c8dff + #8A5C8DFF @@ -183,9 +183,9 @@ settings background - #562d56bf + #562D56BF foreground - #fd5ff1ff + #FD5FF1FF @@ -229,7 +229,7 @@ settings foreground - #aa00ff + #AA00FF @@ -240,7 +240,7 @@ settings foreground - #ff5522 + #FF5522 @@ -251,7 +251,7 @@ settings foreground - #1224fe + #1224FE @@ -318,7 +318,7 @@ fontStyle foreground - #fff + #FFF @@ -368,7 +368,7 @@ fontStyle italic foreground - #00ff99 + #00FF99 @@ -493,7 +493,7 @@ settings background - #420e09ff + #420E09FF foreground #F92672 @@ -506,7 +506,7 @@ settings background - #4a410dff + #4A410DFF foreground #E6DB74 @@ -519,9 +519,9 @@ settings background - #253b22ff + #253B22FF foreground - #f8f8f8ff + #F8F8F8FF @@ -532,9 +532,9 @@ settings background - #eeeeee29 + #EEEEEE29 foreground - #f8f8f8ff + #F8F8F8FF @@ -547,7 +547,7 @@ background #751012 foreground - #f8f8f8 + #F8F8F8 From fa745921a9e8383900df37de79b558ebba5fb9a9 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 20 Feb 2015 17:07:59 +1100 Subject: [PATCH 154/202] theme clean up, get rid of nearly-black backgrounds, fixes #80 --- Monokai Phoenix.YAML-tmTheme | 6 ------ Monokai Phoenix.tmTheme | 12 ------------ 2 files changed, 18 deletions(-) diff --git a/Monokai Phoenix.YAML-tmTheme b/Monokai Phoenix.YAML-tmTheme index d2c83e7..2e61b23 100644 --- a/Monokai Phoenix.YAML-tmTheme +++ b/Monokai Phoenix.YAML-tmTheme @@ -131,21 +131,16 @@ settings: - name: entity.name.accessor.js scope: entity.name.accessor.js settings: - background: '#001122' - fontStyle: '' foreground: '#A6E22E' - name: entity.name.method.js scope: entity.name.method.js settings: - background: '#110022' - fontStyle: '' foreground: '#A6E22E' - name: meta.method.js scope: meta.method.js settings: - fontStyle: '' foreground: '#FFF' - name: support.function @@ -156,7 +151,6 @@ settings: - name: Function name scope: entity.name.function settings: - fontStyle: '' foreground: '#A6E22E' - name: entity.name.class.js diff --git a/Monokai Phoenix.tmTheme b/Monokai Phoenix.tmTheme index c5f5fa4..041f03e 100644 --- a/Monokai Phoenix.tmTheme +++ b/Monokai Phoenix.tmTheme @@ -285,10 +285,6 @@ entity.name.accessor.js settings - background - #001122 - fontStyle - foreground #A6E22E @@ -300,10 +296,6 @@ entity.name.method.js settings - background - #110022 - fontStyle - foreground #A6E22E @@ -315,8 +307,6 @@ meta.method.js settings - fontStyle - foreground #FFF @@ -339,8 +329,6 @@ entity.name.function settings - fontStyle - foreground #A6E22E From 51283e475201554448f8996eb9d3f20d0b6eb804 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 28 Feb 2015 06:02:02 +1100 Subject: [PATCH 155/202] anonymous classes --- JavaScriptNext.YAML-tmLanguage | 6 +++--- JavaScriptNext.tmLanguage | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index fa40ff3..bda393d 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -173,7 +173,7 @@ repository: begin: >- (?x) (?begin (?x) (?<!\.)\b(class) - \s+([_$a-zA-Z][$\w]*) + \s+((?!\b(extends)\b)[_$a-zA-Z][$\w]*)? beginCaptures 1 @@ -787,10 +787,10 @@ begin - extends + \b(extends)\b beginCaptures - 0 + 1 name storage.type.extends.js From c282c8068aba41ce7e5d61f1eed1b97b71852b65 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 28 Feb 2015 07:45:09 +1100 Subject: [PATCH 156/202] console fixes --- JavaScriptNext.YAML-tmLanguage | 11 +++++------ JavaScriptNext.tmLanguage | 23 ++++++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index bda393d..97e16ee 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -879,12 +879,11 @@ repository: WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR )\b - # firebug - - name: support.type.object.firebug.js - match: (?support.constant.dom.js + captures + + 1 + + name + support.type.object.firebug.js + + 2 + + name + support.function.firebug.js + + match - (?<!\.)\b(console)\b - name - support.type.object.firebug.js - - - match - \.(warn|info|log|error|time|timeEnd|assert)\b - name - support.function.firebug.js + (?<!\.)\b(console)(?:\.(warn|info|log|error|time|timeEnd|assert))?\b match From d2c9c37e15268fbfa6ae7da80ef7e0950f00a997 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 28 Feb 2015 11:12:17 -0500 Subject: [PATCH 157/202] Add support for async and generator literal methods --- JavaScriptNext.YAML-tmLanguage | 40 +++++++++++++++----- JavaScriptNext.tmLanguage | 68 ++++++++++++++++++++++++++++++++-- 2 files changed, 94 insertions(+), 14 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 97e16ee..d54affc 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -206,12 +206,14 @@ repository: - name: meta.method.js begin: >- (?x) - \b(?:(static)\s+)? - ([_$a-zA-Z][$\w]*)\s* + (?:\b(static)\s+)? + (?:\b(async)\s+)? + (\*?\s*[_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures: '1': {name: storage.type.js} - '2': {name: entity.name.method.js} + '2': {name: storage.type.js} + '3': {name: entity.name.method.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -254,11 +256,13 @@ repository: - name: meta.function.js begin: >- (?x) - \b(function(?:\s*\*|(?=\s|[(]))) + \b(async)? + \s*(function(?:\s*\*|(?=\s|[(]))) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: - '1': {name: storage.type.function.js} - '2': {name: entity.name.function.js} + '1': {name: storage.type.js} + '2': {name: storage.type.function.js} + '3': {name: entity.name.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -271,12 +275,14 @@ repository: \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= + \s*(async)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} '3': {name: entity.name.function.js} - '4': {name: storage.type.function.js} + '4': {name: storage.type.js} + '5': {name: storage.type.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -288,11 +294,13 @@ repository: (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= + \s*(async)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: entity.name.function.js} - '3': {name: storage.type.function.js} + '3': {name: storage.type.js} + '4': {name: storage.type.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -303,11 +311,13 @@ repository: (?x) \b([_$a-zA-Z][$\w]*) \s*(:) + \s*(async)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} - '3': {name: storage.type.function.js} + '3': {name: storage.type.js} + '4': {name: storage.type.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -321,6 +331,7 @@ repository: ((")((?:[^"]|\\")*)(")) )\s* (:)\s* + (async)?\s* \b(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: string.quoted.single.js} @@ -332,7 +343,8 @@ repository: '7': {name: entity.name.function.js} '8': {name: punctuation.definition.string.end.js} '9': {name: punctuation.separator.key-value.js} - '10': {name: storage.type.function.js} + '10': {name: storage.type.js} + '11': {name: storage.type.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -358,11 +370,13 @@ repository: \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} '3': {name: entity.name.function.js} + '4': {name: storage.type.js} end: (?<=\))\s*(=>) endCaptures: '1': {name: storage.type.function.arrow.js} @@ -376,10 +390,12 @@ repository: (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} '2': {name: entity.name.function.js} + '3': {name: storage.type.js} end: (?<=\))\s*(=>) endCaptures: '1': {name: storage.type.function.arrow.js} @@ -392,10 +408,12 @@ repository: (?x) \b([_$a-zA-Z][$\w]*) \s*(:) + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} + '3': {name: storage.type.js} end: (?<=\))\s*(=>) endCaptures: '1': {name: storage.type.function.arrow.js} @@ -411,6 +429,7 @@ repository: ((")((?:[^"]|\\")*)(")) )\s* (:)\s* + (async)?\s* \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: string.quoted.single.js} @@ -422,6 +441,7 @@ repository: '7': {name: entity.name.function.js} '8': {name: punctuation.definition.string.end.js} '9': {name: punctuation.separator.key-value.js} + '10': {name: storage.type.js} end: (?<=\))\s*(=>) endCaptures: '1': {name: storage.type.function.arrow.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index e80178d..0217552 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -552,6 +552,7 @@ \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -570,6 +571,11 @@ name entity.name.function.js + 4 + + name + storage.type.js + end (?<=\))\s*(=>) @@ -597,6 +603,7 @@ (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -610,6 +617,11 @@ name entity.name.function.js + 3 + + name + storage.type.js + end (?<=\))\s*(=>) @@ -636,6 +648,7 @@ (?x) \b([_$a-zA-Z][$\w]*) \s*(:) + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -649,6 +662,11 @@ name punctuation.separator.key-value.js + 3 + + name + storage.type.js + end (?<=\))\s*(=>) @@ -678,6 +696,7 @@ ((")((?:[^"]|\\")*)(")) )\s* (:)\s* + (async)?\s* \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -686,6 +705,11 @@ name string.quoted.single.js + 10 + + name + storage.type.js + 2 name @@ -899,16 +923,22 @@ begin (?x) - \b(function(?:\s*\*|(?=\s|[(]))) + \b(async)? + \s*(function(?:\s*\*|(?=\s|[(]))) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures 1 name - storage.type.function.js + storage.type.js 2 + + name + storage.type.function.js + + 3 name entity.name.function.js @@ -933,6 +963,7 @@ \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= + \s*(async)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -952,6 +983,11 @@ entity.name.function.js 4 + + name + storage.type.js + + 5 name storage.type.function.js @@ -975,6 +1011,7 @@ (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= + \s*(async)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -989,6 +1026,11 @@ entity.name.function.js 3 + + name + storage.type.js + + 4 name storage.type.function.js @@ -1011,6 +1053,7 @@ (?x) \b([_$a-zA-Z][$\w]*) \s*(:) + \s*(async)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -1025,6 +1068,11 @@ punctuation.separator.key-value.js 3 + + name + storage.type.js + + 4 name storage.type.function.js @@ -1050,6 +1098,7 @@ ((")((?:[^"]|\\")*)(")) )\s* (:)\s* + (async)?\s* \b(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -1059,6 +1108,11 @@ string.quoted.single.js 10 + + name + storage.type.js + + 11 name storage.type.function.js @@ -1462,8 +1516,9 @@ begin (?x) - \b(?:(static)\s+)? - ([_$a-zA-Z][$\w]*)\s* + (?:\b(static)\s+)? + (?:\b(async)\s+)? + (\*?\s*[_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures @@ -1473,6 +1528,11 @@ storage.type.js 2 + + name + storage.type.js + + 3 name entity.name.method.js From 385343fb54d9d0d0bcd88962529abef6a2eff22c Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 1 Mar 2015 04:01:24 +1100 Subject: [PATCH 158/202] generator * is not part of the function name --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index d54affc..8fe7c23 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -208,7 +208,7 @@ repository: (?x) (?:\b(static)\s+)? (?:\b(async)\s+)? - (\*?\s*[_$a-zA-Z][$\w]*)\s* + (?:\*?\s*([_$a-zA-Z][$\w]*))\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures: '1': {name: storage.type.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 0217552..f7cd301 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1518,7 +1518,7 @@ (?x) (?:\b(static)\s+)? (?:\b(async)\s+)? - (\*?\s*[_$a-zA-Z][$\w]*)\s* + (?:\*?\s*([_$a-zA-Z][$\w]*))\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures @@ -2233,12 +2233,12 @@ 1 name - support.type.object.firebug.js + support.type.object.console.js 2 name - support.function.firebug.js + support.function.console.js match From b5531fde278eb6818c24f4ee41a452a51aabaef9 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 1 Mar 2015 04:02:38 +1100 Subject: [PATCH 159/202] async always needs a space after it; we don't need to put it in `storage.type.js` anymore as async only applies to functions --- JavaScriptNext.YAML-tmLanguage | 31 ++++++++++++++++--------------- JavaScriptNext.tmLanguage | 31 ++++++++++++++++--------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8fe7c23..f2a9e60 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -256,7 +256,7 @@ repository: - name: meta.function.js begin: >- (?x) - \b(async)? + (?:\b(async)\s+)? \s*(function(?:\s*\*|(?=\s|[(]))) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: @@ -275,7 +275,7 @@ repository: \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= - \s*(async)? + \s*(?:(async)\s+)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.class.js} @@ -294,7 +294,7 @@ repository: (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= - \s*(async)? + \s*(?:(async)\s+)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.class.js} @@ -311,7 +311,7 @@ repository: (?x) \b([_$a-zA-Z][$\w]*) \s*(:) - \s*(async)? + \s*(?:(async)\s+)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: entity.name.function.js} @@ -329,10 +329,10 @@ repository: (?: ((')((?:[^']|\\')*)('))| ((")((?:[^"]|\\")*)(")) - )\s* - (:)\s* - (async)?\s* - \b(function(?:\s*\*|(?=\s|[(])))\s* + ) + \s*(:) + \s*(?:(async)\s+)? + \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures: '1': {name: string.quoted.single.js} '2': {name: punctuation.definition.string.begin.js} @@ -355,6 +355,7 @@ repository: - name: meta.function.arrow.js begin: >- (?x) + (?:\b(async)\s+)? (?=\([^()]*\)\s*(=>)) end: (?<=\))\s*(=>) endCaptures: @@ -370,7 +371,7 @@ repository: \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= - \s*(async)? + \s*(?:(async)\s+)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} @@ -390,7 +391,7 @@ repository: (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= - \s*(async)? + \s*(?:(async)\s+)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} @@ -408,7 +409,7 @@ repository: (?x) \b([_$a-zA-Z][$\w]*) \s*(:) - \s*(async)? + \s*(?:(async)\s+)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.function.js} @@ -427,9 +428,9 @@ repository: (?: ((')((?:[^']|\\')*)('))| ((")((?:[^"]|\\")*)(")) - )\s* - (:)\s* - (async)?\s* + ) + \s*(:) + \s*(?:(async)\s+)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: string.quoted.single.js} @@ -566,7 +567,7 @@ repository: '2': {name: entity.name.type.new.js} - name: storage.type.js - match: (? begin (?x) + (?:\b(async)\s+)? (?=\([^()]*\)\s*(=>)) end (?<=\))\s*(=>) @@ -552,7 +553,7 @@ \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= - \s*(async)? + \s*(?:(async)\s+)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -603,7 +604,7 @@ (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= - \s*(async)? + \s*(?:(async)\s+)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -648,7 +649,7 @@ (?x) \b([_$a-zA-Z][$\w]*) \s*(:) - \s*(async)? + \s*(?:(async)\s+)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -694,9 +695,9 @@ (?: ((')((?:[^']|\\')*)('))| ((")((?:[^"]|\\")*)(")) - )\s* - (:)\s* - (async)?\s* + ) + \s*(:) + \s*(?:(async)\s+)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -923,7 +924,7 @@ begin (?x) - \b(async)? + (?:\b(async)\s+)? \s*(function(?:\s*\*|(?=\s|[(]))) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures @@ -963,7 +964,7 @@ \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= - \s*(async)? + \s*(?:(async)\s+)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -1011,7 +1012,7 @@ (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= - \s*(async)? + \s*(?:(async)\s+)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -1053,7 +1054,7 @@ (?x) \b([_$a-zA-Z][$\w]*) \s*(:) - \s*(async)? + \s*(?:(async)\s+)? \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures @@ -1096,10 +1097,10 @@ (?: ((')((?:[^']|\\')*)('))| ((")((?:[^"]|\\")*)(")) - )\s* - (:)\s* - (async)?\s* - \b(function(?:\s*\*|(?=\s|[(])))\s* + ) + \s*(:) + \s*(?:(async)\s+)? + \s*(function(?:\s*\*|(?=\s|[(])))\s* beginCaptures 1 @@ -1213,7 +1214,7 @@ match - (?<!\.)\b(async|const|let|var)\b + (?<!\.)\b(const|let|var)\b name storage.type.js From 84c262536e2d7ba73ece3addfa5557f30469b841 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 1 Mar 2015 04:03:47 +1100 Subject: [PATCH 160/202] literal method generator fix --- JavaScriptNext.YAML-tmLanguage | 7 +- JavaScriptNext.tmLanguage | 212 +++++++++++++++++---------------- 2 files changed, 116 insertions(+), 103 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index f2a9e60..2c79417 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -30,13 +30,14 @@ repository: # after object literals which requires the below in some cases - include: '#literal-string' - include: '#literal-keywords' + - include: '#literal-method' + - include: '#literal-operators' - include: '#literal-language-constant' - include: '#literal-language-variable' - # modules/classes/methods + # modules/classes - include: '#literal-module' - include: '#literal-class' - - include: '#literal-method' # function calls - include: '#literal-method-call' @@ -593,6 +594,8 @@ repository: patterns: - include: $self + literal-operators: + patterns: - name: keyword.operator.js match: (?include #literal-keywords + + include + #literal-method + + + include + #literal-operators + include #literal-language-constant @@ -274,10 +282,6 @@ include #literal-class - - include - #literal-method - include #literal-method-call @@ -1277,103 +1281,6 @@ - - match - (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b - name - keyword.operator.js - - - match - (?x) - !(?!=)| # logical-not right-to-left right - && | # logical-and left-to-right both - \|\| | # logical-or left-to-right both - name - keyword.operator.logical.js - - - match - (?x) - =(?!=)| # assignment right-to-left both - name - keyword.operator.assignment.js - - - match - (?x) - %= | # assignment right-to-left both - &= | # assignment right-to-left both - \*= | # assignment right-to-left both - \+= | # assignment right-to-left both - -= | # assignment right-to-left both - /= | # assignment right-to-left both - \^= | # assignment right-to-left both - \|= | # assignment right-to-left both - <<= | # assignment right-to-left both - >>= | # assignment right-to-left both - >>>= | # assignment right-to-left both - name - keyword.operator.assignment.augmented.js - - - match - (?x) - ~ | # bitwise-not right-to-left right - << | # bitwise-shift left-to-right both - >>> | # bitwise-shift left-to-right both - >> | # bitwise-shift left-to-right both - & | # bitwise-and left-to-right both - \^ | # bitwise-xor left-to-right both - \| # bitwise-or left-to-right both - name - keyword.operator.bitwise.js - - - match - (?x) - <= | # relational left-to-right both - >= | # relational left-to-right both - < | # relational left-to-right both - > # relational left-to-right both - name - keyword.operator.relational.js - - - match - (?x) - === | # equality left-to-right both - !== | # equality left-to-right both - == | # equality left-to-right both - != # equality left-to-right both - name - keyword.operator.comparison.js - - - match - (?x) - -- | # decrement n/a right-or-left - \+\+ | # increment n/a right-or-left - / | # division left-to-right both - % | # modulus left-to-right both - \* | # multiplication left-to-right both - \+ | # addition left-to-right both - - # subtraction left-to-right both - name - keyword.operator.arithmetic.js - - - match - \?|: - name - keyword.operator.ternary.js - - - match - (?<!\.)\.\.\. - name - keyword.operator.spread.js - literal-labels @@ -1736,6 +1643,109 @@ + literal-operators + + patterns + + + match + (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b + name + keyword.operator.js + + + match + (?x) + !(?!=)| # logical-not right-to-left right + && | # logical-and left-to-right both + \|\| | # logical-or left-to-right both + name + keyword.operator.logical.js + + + match + (?x) + =(?!=)| # assignment right-to-left both + name + keyword.operator.assignment.js + + + match + (?x) + %= | # assignment right-to-left both + &= | # assignment right-to-left both + \*= | # assignment right-to-left both + \+= | # assignment right-to-left both + -= | # assignment right-to-left both + /= | # assignment right-to-left both + \^= | # assignment right-to-left both + \|= | # assignment right-to-left both + <<= | # assignment right-to-left both + >>= | # assignment right-to-left both + >>>= | # assignment right-to-left both + name + keyword.operator.assignment.augmented.js + + + match + (?x) + ~ | # bitwise-not right-to-left right + << | # bitwise-shift left-to-right both + >>> | # bitwise-shift left-to-right both + >> | # bitwise-shift left-to-right both + & | # bitwise-and left-to-right both + \^ | # bitwise-xor left-to-right both + \| # bitwise-or left-to-right both + name + keyword.operator.bitwise.js + + + match + (?x) + <= | # relational left-to-right both + >= | # relational left-to-right both + < | # relational left-to-right both + > # relational left-to-right both + name + keyword.operator.relational.js + + + match + (?x) + === | # equality left-to-right both + !== | # equality left-to-right both + == | # equality left-to-right both + != # equality left-to-right both + name + keyword.operator.comparison.js + + + match + (?x) + -- | # decrement n/a right-or-left + \+\+ | # increment n/a right-or-left + / | # division left-to-right both + % | # modulus left-to-right both + \* | # multiplication left-to-right both + \+ | # addition left-to-right both + - # subtraction left-to-right both + name + keyword.operator.arithmetic.js + + + match + \?|: + name + keyword.operator.ternary.js + + + match + (?<!\.)\.\.\. + name + keyword.operator.spread.js + + + literal-prototype-storage patterns From 6ba6be7c82a64608b5b6cf960135a499893a8cc7 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 1 Mar 2015 04:27:42 +1100 Subject: [PATCH 161/202] delimiters aren't specific to methods (also properties) & objects (also arguments) --- JavaScriptNext.YAML-tmLanguage | 4 ++-- JavaScriptNext.tmLanguage | 4 ++-- Next.YAML-tmTheme | 4 ++-- Next.tmTheme | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 2c79417..3b8e014 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -718,10 +718,10 @@ repository: - name: punctuation.terminator.statement.js match: \; - - name: meta.delimiter.object.comma.js + - name: meta.delimiter.comma.js match: ',' - - name: meta.delimiter.method.period.js + - name: meta.delimiter.period.js match: \. literal-quasi: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index b08bb28..cda4fa5 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1804,13 +1804,13 @@ match , name - meta.delimiter.object.comma.js + meta.delimiter.comma.js match \. name - meta.delimiter.method.period.js + meta.delimiter.period.js diff --git a/Next.YAML-tmTheme b/Next.YAML-tmTheme index 55fcd6b..0ba385f 100644 --- a/Next.YAML-tmTheme +++ b/Next.YAML-tmTheme @@ -481,8 +481,8 @@ settings: settings: foreground: '#F9044E' -- name: meta.delimiter.object.comma.js - scope: meta.delimiter.object.comma.js +- name: meta.delimiter.comma.js + scope: meta.delimiter.comma.js settings: foreground: '#00FFFF' diff --git a/Next.tmTheme b/Next.tmTheme index 4cb21dd..4f40ce9 100644 --- a/Next.tmTheme +++ b/Next.tmTheme @@ -1051,9 +1051,9 @@ name - meta.delimiter.object.comma.js + meta.delimiter.comma.js scope - meta.delimiter.object.comma.js + meta.delimiter.comma.js settings foreground From cb7b4d4293486facf8261984b4b695ca3dcea395 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 1 Mar 2015 04:33:15 +1100 Subject: [PATCH 162/202] variable fixes, closes #74 --- JavaScriptNext.YAML-tmLanguage | 8 +++++--- JavaScriptNext.tmLanguage | 12 ++++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 3b8e014..b26d296 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -804,13 +804,15 @@ repository: literal-variable: patterns: - # e.g. .CONSTANT + # e.g. CONSTANT - name: variable.other.constant.js - match: \.?[A-Z][_$\dA-Z]*\b + match: '[A-Z][_$\dA-Z]*' # dollar variables - name: variable.other.dollar.js - match: '\$[$\w]+' + match: '(\$)[$\w]+' + captures: + '1': {name: punctuation.dollar.js} # e.g. Class.property - name: meta.property.class.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index cda4fa5..4314737 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -2026,13 +2026,21 @@ match - \.?[A-Z][_$\dA-Z]*\b + [A-Z][_$\dA-Z]* name variable.other.constant.js + captures + + 1 + + name + punctuation.dollar.js + + match - \$[$\w]+ + (\$)[$\w]+ name variable.other.dollar.js From b54de77975ba1926553b3d70218f48012266f4d9 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 28 Feb 2015 12:52:48 -0500 Subject: [PATCH 163/202] Allow no spaces b/t async and arrow function --- JavaScriptNext.YAML-tmLanguage | 12 +++++++----- JavaScriptNext.tmLanguage | 18 +++++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index b26d296..7b0260f 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -356,8 +356,10 @@ repository: - name: meta.function.arrow.js begin: >- (?x) - (?:\b(async)\s+)? + (?:\b(async)\s*)? (?=\([^()]*\)\s*(=>)) + beginCaptures: + '1': {name: storage.type.js} end: (?<=\))\s*(=>) endCaptures: '1': {name: storage.type.function.arrow.js} @@ -372,7 +374,7 @@ repository: \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= - \s*(?:(async)\s+)? + \s*(?:(async))? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} @@ -392,7 +394,7 @@ repository: (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= - \s*(?:(async)\s+)? + \s*(?:(async))? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} @@ -410,7 +412,7 @@ repository: (?x) \b([_$a-zA-Z][$\w]*) \s*(:) - \s*(?:(async)\s+)? + \s*(?:(async))? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.function.js} @@ -431,7 +433,7 @@ repository: ((")((?:[^"]|\\")*)(")) ) \s*(:) - \s*(?:(async)\s+)? + \s*(?:(async))? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: string.quoted.single.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 4314737..3d99442 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -528,8 +528,16 @@ begin (?x) - (?:\b(async)\s+)? + (?:\b(async)\s*)? (?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + storage.type.js + + end (?<=\))\s*(=>) endCaptures @@ -557,7 +565,7 @@ \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= - \s*(?:(async)\s+)? + \s*(?:(async))? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -608,7 +616,7 @@ (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= - \s*(?:(async)\s+)? + \s*(?:(async))? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -653,7 +661,7 @@ (?x) \b([_$a-zA-Z][$\w]*) \s*(:) - \s*(?:(async)\s+)? + \s*(?:(async))? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -701,7 +709,7 @@ ((")((?:[^"]|\\")*)(")) ) \s*(:) - \s*(?:(async)\s+)? + \s*(?:(async))? \s*(?=\([^()]*\)\s*(=>)) beginCaptures From 158657819ac91701d2347b36c33b5e01fdeadd2c Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 28 Feb 2015 14:09:56 -0500 Subject: [PATCH 164/202] Removed unnecessary non-capture groups --- JavaScriptNext.YAML-tmLanguage | 10 +++++----- JavaScriptNext.tmLanguage | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7b0260f..d0c7aff 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -356,7 +356,7 @@ repository: - name: meta.function.arrow.js begin: >- (?x) - (?:\b(async)\s*)? + (\basync)?\s* (?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: storage.type.js} @@ -374,7 +374,7 @@ repository: \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= - \s*(?:(async))? + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} @@ -394,7 +394,7 @@ repository: (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= - \s*(?:(async))? + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} @@ -412,7 +412,7 @@ repository: (?x) \b([_$a-zA-Z][$\w]*) \s*(:) - \s*(?:(async))? + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.function.js} @@ -433,7 +433,7 @@ repository: ((")((?:[^"]|\\")*)(")) ) \s*(:) - \s*(?:(async))? + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: string.quoted.single.js} diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 3d99442..5cca951 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -528,7 +528,7 @@ begin (?x) - (?:\b(async)\s*)? + (\basync)?\s* (?=\([^()]*\)\s*(=>)) beginCaptures @@ -565,7 +565,7 @@ \.(prototype) \.([_$a-zA-Z][$\w]*) \s*= - \s*(?:(async))? + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -616,7 +616,7 @@ (\b_?[A-Z][$\w]*)? \.([_$a-zA-Z][$\w]*) \s*= - \s*(?:(async))? + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -661,7 +661,7 @@ (?x) \b([_$a-zA-Z][$\w]*) \s*(:) - \s*(?:(async))? + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -709,7 +709,7 @@ ((")((?:[^"]|\\")*)(")) ) \s*(:) - \s*(?:(async))? + \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures From dac046357fbbd1e8e0166cb417cbb929d8886052 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 1 Mar 2015 07:02:42 +1100 Subject: [PATCH 165/202] fix to #88 --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index d0c7aff..7e4e524 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -808,7 +808,7 @@ repository: patterns: # e.g. CONSTANT - name: variable.other.constant.js - match: '[A-Z][_$\dA-Z]*' + match: '[A-Z][_$\dA-Z]*\b' # dollar variables - name: variable.other.dollar.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 5cca951..77d98c6 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -2034,7 +2034,7 @@ match - [A-Z][_$\dA-Z]* + [A-Z][_$\dA-Z]*\b name variable.other.constant.js From 0fd40c4d091a5f1661672561eb73dccdefd1cbf1 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 28 Feb 2015 15:04:17 -0500 Subject: [PATCH 166/202] Match "keyword.generator.asterisk.js" --- JavaScriptNext.YAML-tmLanguage | 22 +++++++++++------- JavaScriptNext.tmLanguage | 42 +++++++++++++++++++++++++++++----- 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index d0c7aff..d20f8a8 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -209,12 +209,13 @@ repository: (?x) (?:\b(static)\s+)? (?:\b(async)\s+)? - (?:\*?\s*([_$a-zA-Z][$\w]*))\s* + (\*)?\s*([_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures: '1': {name: storage.type.js} '2': {name: storage.type.js} - '3': {name: entity.name.method.js} + '3': {name: keyword.generator.asterisk.js} + '4': {name: entity.name.method.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -258,12 +259,13 @@ repository: begin: >- (?x) (?:\b(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(]))) + \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: '1': {name: storage.type.js} '2': {name: storage.type.function.js} - '3': {name: entity.name.function.js} + '3': {name: keyword.generator.asterisk.js} + '4': {name: entity.name.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -277,13 +279,14 @@ repository: \.([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(])))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} '3': {name: entity.name.function.js} '4': {name: storage.type.js} '5': {name: storage.type.function.js} + '6': {name: keyword.generator.asterisk.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -296,12 +299,13 @@ repository: \.([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(])))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: entity.name.function.js} '3': {name: storage.type.js} '4': {name: storage.type.function.js} + '5': {name: keyword.generator.asterisk.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -313,12 +317,13 @@ repository: \b([_$a-zA-Z][$\w]*) \s*(:) \s*(?:(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(])))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* beginCaptures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} '3': {name: storage.type.js} '4': {name: storage.type.function.js} + '5': {name: keyword.generator.asterisk.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -333,7 +338,7 @@ repository: ) \s*(:) \s*(?:(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(])))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* beginCaptures: '1': {name: string.quoted.single.js} '2': {name: punctuation.definition.string.begin.js} @@ -346,6 +351,7 @@ repository: '9': {name: punctuation.separator.key-value.js} '10': {name: storage.type.js} '11': {name: storage.type.function.js} + '12': {name: keyword.generator.asterisk.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 5cca951..5a40e29 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -937,7 +937,7 @@ begin (?x) (?:\b(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(]))) + \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures @@ -952,6 +952,11 @@ storage.type.function.js 3 + + name + keyword.generator.asterisk.js + + 4 name entity.name.function.js @@ -977,7 +982,7 @@ \.([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(])))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* beginCaptures 1 @@ -1005,6 +1010,11 @@ name storage.type.function.js + 6 + + name + keyword.generator.asterisk.js + end (?<=\)) @@ -1025,7 +1035,7 @@ \.([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(])))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* beginCaptures 1 @@ -1048,6 +1058,11 @@ name storage.type.function.js + 5 + + name + keyword.generator.asterisk.js + end (?<=\)) @@ -1067,7 +1082,7 @@ \b([_$a-zA-Z][$\w]*) \s*(:) \s*(?:(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(])))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* beginCaptures 1 @@ -1090,6 +1105,11 @@ name storage.type.function.js + 5 + + name + keyword.generator.asterisk.js + end (?<=\)) @@ -1112,7 +1132,7 @@ ) \s*(:) \s*(?:(async)\s+)? - \s*(function(?:\s*\*|(?=\s|[(])))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* beginCaptures 1 @@ -1130,6 +1150,11 @@ name storage.type.function.js + 12 + + name + keyword.generator.asterisk.js + 2 name @@ -1434,7 +1459,7 @@ (?x) (?:\b(static)\s+)? (?:\b(async)\s+)? - (?:\*?\s*([_$a-zA-Z][$\w]*))\s* + (\*)?\s*([_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures @@ -1449,6 +1474,11 @@ storage.type.js 3 + + name + keyword.generator.asterisk.js + + 4 name entity.name.method.js From 6c74454c256aab38995813809df218affb6ce616 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 1 Mar 2015 08:12:41 +1100 Subject: [PATCH 167/202] fixed `else if(abc){}` matches literal method instead regression --- JavaScriptNext.YAML-tmLanguage | 5 ++--- JavaScriptNext.tmLanguage | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index a9ee83d..5947ef5 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -209,7 +209,7 @@ repository: (?x) (?:\b(static)\s+)? (?:\b(async)\s+)? - (\*)?\s*([_$a-zA-Z][$\w]*)\s* + (?:(\*)\s*)?([_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures: '1': {name: storage.type.js} @@ -570,7 +570,6 @@ repository: end: (?![_$a-zA-Z][$\w.]*) patterns: - include: '#support' - - match: ([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*) captures: '2': {name: entity.name.type.new.js} @@ -582,7 +581,7 @@ repository: match: (? match - (?<!\.)\b(else|if)\b + (?<!\.)\b(if|else)\b name keyword.control.conditional.js @@ -1459,7 +1459,7 @@ (?x) (?:\b(static)\s+)? (?:\b(async)\s+)? - (\*)?\s*([_$a-zA-Z][$\w]*)\s* + (?:(\*)\s*)?([_$a-zA-Z][$\w]*)\s* (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) beginCaptures From 25c0fb16a8301b8e782f4993a7c31fab96a114a6 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sun, 1 Mar 2015 07:54:54 -0500 Subject: [PATCH 168/202] Consistently match "entity.name.function.js" --- JavaScriptNext.YAML-tmLanguage | 16 ++++++++++++---- JavaScriptNext.tmLanguage | 32 ++++++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 5947ef5..6014b3b 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -279,7 +279,8 @@ repository: \.([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} @@ -287,6 +288,7 @@ repository: '4': {name: storage.type.js} '5': {name: storage.type.function.js} '6': {name: keyword.generator.asterisk.js} + '7': {name: entity.name.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -299,13 +301,15 @@ repository: \.([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: '1': {name: entity.name.class.js} '2': {name: entity.name.function.js} '3': {name: storage.type.js} '4': {name: storage.type.function.js} '5': {name: keyword.generator.asterisk.js} + '6': {name: entity.name.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -317,13 +321,15 @@ repository: \b([_$a-zA-Z][$\w]*) \s*(:) \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: '1': {name: entity.name.function.js} '2': {name: punctuation.separator.key-value.js} '3': {name: storage.type.js} '4': {name: storage.type.function.js} '5': {name: keyword.generator.asterisk.js} + '6': {name: entity.name.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -338,7 +344,8 @@ repository: ) \s*(:) \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: '1': {name: string.quoted.single.js} '2': {name: punctuation.definition.string.begin.js} @@ -352,6 +359,7 @@ repository: '10': {name: storage.type.js} '11': {name: storage.type.function.js} '12': {name: keyword.generator.asterisk.js} + '13': {name: entity.name.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 4ff0632..a2e3aba 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -982,7 +982,8 @@ \.([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures 1 @@ -1015,6 +1016,11 @@ name keyword.generator.asterisk.js + 7 + + name + entity.name.function.js + end (?<=\)) @@ -1035,7 +1041,8 @@ \.([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures 1 @@ -1063,6 +1070,11 @@ name keyword.generator.asterisk.js + 6 + + name + entity.name.function.js + end (?<=\)) @@ -1082,7 +1094,8 @@ \b([_$a-zA-Z][$\w]*) \s*(:) \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures 1 @@ -1110,6 +1123,11 @@ name keyword.generator.asterisk.js + 6 + + name + entity.name.function.js + end (?<=\)) @@ -1132,7 +1150,8 @@ ) \s*(:) \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(]))\s* + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures 1 @@ -1155,6 +1174,11 @@ name keyword.generator.asterisk.js + 13 + + name + entity.name.function.js + 2 name From 521f2507d51b1d511426c329dad3ef713679f6ea Mon Sep 17 00:00:00 2001 From: simonzack Date: Tue, 3 Mar 2015 08:27:27 +1100 Subject: [PATCH 169/202] got rid of leading-space, since it: - messes with the regexp matcher, the regexp matcher needs to match leading spaces to know whether it is a regexp - needs to know how many spaces are used per indent, which it currently assumes to be 4 - is not used in any theme --- JavaScriptNext.YAML-tmLanguage | 46 ++-------- JavaScriptNext.tmLanguage | 155 ++------------------------------- 2 files changed, 10 insertions(+), 191 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 5947ef5..6bc0855 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -14,10 +14,8 @@ patterns: repository: core: patterns: - - include: '#leading-space' - # literals - - include: '#literal-regex' # before operators to avoid ambiguities + - include: '#literal-regexp' # before operators to avoid ambiguities - include: '#literal-number' - include: '#literal-quasi' @@ -752,18 +750,18 @@ repository: patterns: - include: $self - literal-regex: + literal-regexp: patterns: # ignore ++, -- since they're uncommon, distinguishing them is not possible in sublime text, see: # http://stackoverflow.com/questions/5519596/when-parsing-javascript-what-determines-the-meaning-of-a-slash - contentName: string.regexp.js begin: >- (?x) - (?:(?<= + (?<= \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow| - ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw - )|^)\s* + ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw|^ + )\s* (/) (?!/|\*|$) beginCaptures: @@ -846,40 +844,6 @@ repository: - name: variable.other.readwrite.js match: '[_$a-zA-Z][$\w]*' - leading-space: - patterns: - - name: meta.leading-tabs - begin: ^(?=(\t| )) - end: (?=[^\t\s]) - patterns: - - match: ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? - captures: - '1': {name: meta.odd-tab.group1.spaces} - '2': {name: meta.even-tab.group2.spaces} - '3': {name: meta.odd-tab.group3.spaces} - '4': {name: meta.even-tab.group4.spaces} - '5': {name: meta.odd-tab.group5.spaces} - '6': {name: meta.even-tab.group6.spaces} - '7': {name: meta.odd-tab.group7.spaces} - '8': {name: meta.even-tab.group8.spaces} - '9': {name: meta.odd-tab.group9.spaces} - '10': {name: meta.even-tab.group10.spaces} - '11': {name: meta.odd-tab.group11.spaces} - - - match: (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? - captures: - '1': {name: meta.odd-tab.group1.tab} - '2': {name: meta.even-tab.group2.tab} - '3': {name: meta.odd-tab.group3.tab} - '4': {name: meta.even-tab.group4.tab} - '5': {name: meta.odd-tab.group5.tab} - '6': {name: meta.even-tab.group6.tab} - '7': {name: meta.odd-tab.group7.tab} - '8': {name: meta.even-tab.group8.tab} - '9': {name: meta.odd-tab.group9.tab} - '10': {name: meta.even-tab.group10.tab} - '11': {name: meta.odd-tab.group11.tab} - support: patterns: # built-ins diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 4ff0632..48a762a 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -220,11 +220,7 @@ include - #leading-space - - - include - #literal-regex + #literal-regexp include @@ -380,147 +376,6 @@ - leading-space - - patterns - - - begin - ^(?=(\t| )) - end - (?=[^\t\s]) - name - meta.leading-tabs - patterns - - - captures - - 1 - - name - meta.odd-tab.group1.spaces - - 10 - - name - meta.even-tab.group10.spaces - - 11 - - name - meta.odd-tab.group11.spaces - - 2 - - name - meta.even-tab.group2.spaces - - 3 - - name - meta.odd-tab.group3.spaces - - 4 - - name - meta.even-tab.group4.spaces - - 5 - - name - meta.odd-tab.group5.spaces - - 6 - - name - meta.even-tab.group6.spaces - - 7 - - name - meta.odd-tab.group7.spaces - - 8 - - name - meta.even-tab.group8.spaces - - 9 - - name - meta.odd-tab.group9.spaces - - - match - ( )( )?( )?( )?( )?( )?( )?( )?( )?( )?( )? - - - captures - - 1 - - name - meta.odd-tab.group1.tab - - 10 - - name - meta.even-tab.group10.tab - - 11 - - name - meta.odd-tab.group11.tab - - 2 - - name - meta.even-tab.group2.tab - - 3 - - name - meta.odd-tab.group3.tab - - 4 - - name - meta.even-tab.group4.tab - - 5 - - name - meta.odd-tab.group5.tab - - 6 - - name - meta.even-tab.group6.tab - - 7 - - name - meta.odd-tab.group7.tab - - 8 - - name - meta.even-tab.group8.tab - - 9 - - name - meta.odd-tab.group9.tab - - - match - (\t)(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)?(\t)? - - - - - literal-arrow-function-storage patterns @@ -1921,18 +1776,18 @@ - literal-regex + literal-regexp patterns begin (?x) - (?:(?<= + (?<= \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow| - ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw - )|^)\s* + ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw|^ + )\s* (/) (?!/|\*|$) beginCaptures From e29f792da21f3aed2421182eab4b5d66733f71cf Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Thu, 5 Mar 2015 20:30:23 -0500 Subject: [PATCH 170/202] Include functions in indexed symbol list --- Symbol List Function.YAML-tmPreferences | 1 + Symbol List Function.tmPreferences | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Symbol List Function.YAML-tmPreferences b/Symbol List Function.YAML-tmPreferences index e0d1969..3d26dcf 100644 --- a/Symbol List Function.YAML-tmPreferences +++ b/Symbol List Function.YAML-tmPreferences @@ -4,4 +4,5 @@ uuid: B521FCF1-DDA6-4C69-8170-F6C2DE4C86CD scope: source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js settings: showInSymbolList: '1' + showInIndexedSymbolList: '1' symbolTransformation: s/\s+/ /g; diff --git a/Symbol List Function.tmPreferences b/Symbol List Function.tmPreferences index 4a59e75..704a7d4 100644 --- a/Symbol List Function.tmPreferences +++ b/Symbol List Function.tmPreferences @@ -8,6 +8,8 @@ source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js settings + showInIndexedSymbolList + 1 showInSymbolList 1 symbolTransformation From 6c3ad0e17e25f45e188c1f954d99d3da68fca85e Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 7 Mar 2015 23:22:20 +1100 Subject: [PATCH 171/202] split into expressions, otherwise `case 'str':` will match label, hence case's `:` won't be matched --- JavaScriptNext.YAML-tmLanguage | 41 ++++++++++------------ JavaScriptNext.tmLanguage | 64 ++++++++++++++++++++-------------- 2 files changed, 56 insertions(+), 49 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 2e63eef..5259455 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -14,38 +14,35 @@ patterns: repository: core: patterns: - # literals - - include: '#literal-regexp' # before operators to avoid ambiguities - - include: '#literal-number' - - include: '#literal-quasi' - - # object literals - include: '#literal-function-storage' - include: '#literal-arrow-function-storage' - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings - include: '#literal-labels' - # after object literals which requires the below in some cases - - include: '#literal-string' - include: '#literal-keywords' - include: '#literal-method' + + - include: '#expression' # after storage which requires this in some cases + - include: '#literal-operators' + - include: '#literal-punctuation' + + expression: + patterns: + - include: '#literal-regexp' # before operators to avoid ambiguities + - include: '#literal-number' + - include: '#literal-quasi' + - include: '#literal-string' - include: '#literal-language-constant' - include: '#literal-language-variable' - # modules/classes - include: '#literal-module' - include: '#literal-class' - # function calls - include: '#literal-method-call' - include: '#literal-function-call' - # punctuation - include: '#literal-variable' - - include: '#literal-punctuation' - - # brackets - include: '#brackets' brackets: @@ -68,7 +65,7 @@ repository: endCaptures: '1': {name: meta.brace.square.js} patterns: - - include: $self + - include: '#expression' - name: meta.group.braces.curly begin: ({) @@ -157,7 +154,7 @@ repository: '0': {name: keyword.operator.assignment.js} end: '(?=[,)])' patterns: - - include: $self + - include: '#expression' - include: '#comments' literal-module: @@ -188,7 +185,7 @@ repository: endCaptures: '0': {name: meta.brace.curly.js} patterns: - - include: $self + - include: '#expression' - begin: '{' beginCaptures: @@ -605,13 +602,13 @@ repository: endCaptures: '0': {name: punctuation.separator.switch.js} patterns: - - include: $self + - include: '#expression' - literal-operators: - patterns: - name: keyword.operator.js match: (?- (?x) @@ -687,7 +684,7 @@ repository: patterns: - begin: >- (?x) - (? include - $self + #expression @@ -220,47 +220,61 @@ include - #literal-regexp + #literal-function-storage include - #literal-number + #literal-arrow-function-storage include - #literal-quasi + #literal-prototype-storage include - #literal-function-storage + #literal-labels include - #literal-arrow-function-storage + #literal-keywords include - #literal-prototype-storage + #literal-method include - #literal-labels + #expression include - #literal-string + #literal-operators include - #literal-keywords + #literal-punctuation + + + expression + + patterns + include - #literal-method + #literal-regexp include - #literal-operators + #literal-number + + + include + #literal-quasi + + + include + #literal-string include @@ -290,10 +304,6 @@ include #literal-variable - - include - #literal-punctuation - include #brackets @@ -364,7 +374,7 @@ include - $self + #expression @@ -704,7 +714,7 @@ include - $self + #expression @@ -1189,10 +1199,16 @@ include - $self + #expression + + match + (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b + name + keyword.operator.js + literal-labels @@ -1202,7 +1218,7 @@ begin (?x) - (?<!\?|\?\s)(?=( + (?<!\?)(?<!\?\s)(?=( ((')((?:[^']|\\')*)('))| ((")((?:[^"]|\\")*)(")) )\s*:) @@ -1564,12 +1580,6 @@ patterns - - match - (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b - name - keyword.operator.js - match (?x) @@ -1792,7 +1802,7 @@ include - $self + #expression From afef67659d055e339f6a7a20cc4788cda907d561 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 7 Mar 2015 23:31:45 +1100 Subject: [PATCH 172/202] fix to #73, support shouldn't override storage so moving this is ok --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 5259455..f6b9d0a 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -8,7 +8,6 @@ keyEquivalent: ^~J patterns: - include: '#comments' -- include: '#support' - include: '#core' repository: @@ -19,6 +18,7 @@ repository: - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings - include: '#literal-labels' + - include: '#support' - include: '#literal-keywords' - include: '#literal-method' diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 27d208b..8047f23 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -20,10 +20,6 @@ include #comments - - include - #support - include #core @@ -234,6 +230,10 @@ include #literal-labels + + include + #support + include #literal-keywords From 8063651b2627653d0bf8bd7dfc277cbfcafda66a Mon Sep 17 00:00:00 2001 From: simonzack Date: Sat, 7 Mar 2015 23:54:44 +1100 Subject: [PATCH 173/202] naked functions are also expressions --- JavaScriptNext.YAML-tmLanguage | 30 +++++--- JavaScriptNext.tmLanguage | 132 ++++++++++++++++++++------------- 2 files changed, 101 insertions(+), 61 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index f6b9d0a..0aba3c4 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -20,7 +20,6 @@ repository: - include: '#support' - include: '#literal-keywords' - - include: '#literal-method' - include: '#expression' # after storage which requires this in some cases @@ -36,6 +35,11 @@ repository: - include: '#literal-language-constant' - include: '#literal-language-variable' + - include: '#literal-function' + - include: '#literal-method' + - include: '#literal-arrow-function' + - include: '#literal-prototype' + - include: '#literal-module' - include: '#literal-class' @@ -231,23 +235,25 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-prototype-storage: + literal-prototype: patterns: - # e.g. Sound.prototype = { } when extending an object - - name: meta.prototype.declaration.js - match: ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* + # e.g. Sound.prototype + - name: meta.prototype.access.js + match: ([_$a-zA-Z][$\w]*)\.(prototype)\b captures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} - # e.g. Sound.prototype - - name: meta.prototype.access.js - match: ([_$a-zA-Z][$\w]*)\.(prototype)\b + literal-prototype-storage: + patterns: + # e.g. Sound.prototype = { } when extending an object + - name: meta.prototype.declaration.js + match: ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* captures: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} - literal-function-storage: + literal-function: patterns: # e.g. function play(arg1, arg2) { } - name: meta.function.js @@ -265,6 +271,8 @@ repository: patterns: - include: '#function-declaration-parameters' + literal-function-storage: + patterns: # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js begin: >- @@ -359,7 +367,7 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-arrow-function-storage: + literal-arrow-function: patterns: # e.g. (args) => { } - name: meta.function.arrow.js @@ -375,6 +383,8 @@ repository: patterns: - include: '#function-declaration-parameters' + literal-arrow-function-storage: + patterns: # e.g. Sound.prototype.play = (args) => { } - name: meta.prototype.function.arrow.js begin: >- diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 8047f23..b1135e5 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -238,10 +238,6 @@ include #literal-keywords - - include - #literal-method - include #expression @@ -284,6 +280,22 @@ include #literal-language-variable + + include + #literal-function + + + include + #literal-method + + + include + #literal-arrow-function + + + include + #literal-prototype + include #literal-module @@ -386,7 +398,7 @@ - literal-arrow-function-storage + literal-arrow-function patterns @@ -423,6 +435,12 @@ + + + literal-arrow-function-storage + + patterns + begin (?x) @@ -751,6 +769,53 @@ + literal-function + + patterns + + + begin + (?x) + (?:\b(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 + + name + storage.type.js + + 2 + + name + storage.type.function.js + + 3 + + name + keyword.generator.asterisk.js + + 4 + + name + entity.name.function.js + + + end + (?<=\)) + name + meta.function.js + patterns + + + include + #function-declaration-parameters + + + + + literal-function-call patterns @@ -801,47 +866,6 @@ begin (?x) - (?:\b(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.function.js - - 3 - - name - keyword.generator.asterisk.js - - 4 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) (\b_?[A-Z][$\w]*)? \.(prototype) \.([_$a-zA-Z][$\w]*) @@ -1673,7 +1697,7 @@ - literal-prototype-storage + literal-prototype patterns @@ -1692,10 +1716,16 @@ match - ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* + ([_$a-zA-Z][$\w]*)\.(prototype)\b name - meta.prototype.declaration.js + meta.prototype.access.js + + + literal-prototype-storage + + patterns + captures @@ -1711,9 +1741,9 @@ match - ([_$a-zA-Z][$\w]*)\.(prototype)\b + ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* name - meta.prototype.access.js + meta.prototype.declaration.js From ebfbdc09fdaaf47f954a7027cfca1d263608e49b Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 8 Mar 2015 00:02:44 +1100 Subject: [PATCH 174/202] literal-constructor is also an expression --- JavaScriptNext.YAML-tmLanguage | 5 ++- JavaScriptNext.tmLanguage | 80 +++++++++++++++++++--------------- 2 files changed, 49 insertions(+), 36 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 0aba3c4..78fe1ab 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -43,6 +43,7 @@ repository: - include: '#literal-module' - include: '#literal-class' + - include: '#literal-constructor' - include: '#literal-method-call' - include: '#literal-function-call' @@ -574,7 +575,7 @@ repository: - name: constant.language.nan.js match: (?include #literal-class + + include + #literal-constructor + include #literal-method-call @@ -769,6 +773,47 @@ + literal-constructor + + patterns + + + begin + (new)\s+(?=[_$a-zA-Z][$\w.]*) + beginCaptures + + 1 + + name + keyword.operator.new.js + + + end + (?![_$a-zA-Z][$\w.]*) + name + meta.instance.constructor + patterns + + + include + #support + + + captures + + 2 + + name + entity.name.type.new.js + + + match + ([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*) + + + + + literal-function patterns @@ -1127,41 +1172,6 @@ patterns - - begin - (new)\s+(?=[_$a-zA-Z][$\w.]*) - beginCaptures - - 1 - - name - keyword.operator.new.js - - - end - (?![_$a-zA-Z][$\w.]*) - name - meta.instance.constructor - patterns - - - include - #support - - - captures - - 2 - - name - entity.name.type.new.js - - - match - ([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*) - - - match (?<!\.)\b(const|let|var)\b From e19af4d00f228446e8639a33d3355ec5035e12d3 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 8 Mar 2015 00:24:58 +1100 Subject: [PATCH 175/202] fixed switch default problems, cf #73 --- JavaScriptNext.YAML-tmLanguage | 58 +++++++------ JavaScriptNext.tmLanguage | 148 ++++++++++++++++++++------------- 2 files changed, 126 insertions(+), 80 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 78fe1ab..7b89bfa 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -20,6 +20,7 @@ repository: - include: '#support' - include: '#literal-keywords' + - include: '#literal-switch' - include: '#expression' # after storage which requires this in some cases @@ -53,32 +54,32 @@ repository: brackets: patterns: - name: meta.group.braces.round - begin: (\() + begin: \( beginCaptures: - '1': {name: meta.brace.round.js} - end: (\)) + '0': {name: meta.brace.round.js} + end: \) endCaptures: - '1': {name: meta.brace.round.js} + '0': {name: meta.brace.round.js} patterns: - include: $self - name: meta.group.braces.square - begin: (\[) + begin: \[ beginCaptures: - '1': {name: meta.brace.square.js} - end: (\]) + '0': {name: meta.brace.square.js} + end: \] endCaptures: - '1': {name: meta.brace.square.js} + '0': {name: meta.brace.square.js} patterns: - include: '#expression' - name: meta.group.braces.curly - begin: ({) + begin: \{ beginCaptures: - '1': {name: meta.brace.curly.js} - end: (}) + '0': {name: meta.brace.curly.js} + end: \} endCaptures: - '1': {name: meta.brace.curly.js} + '0': {name: meta.brace.curly.js} patterns: - include: $self @@ -165,7 +166,7 @@ repository: literal-module: patterns: - name: keyword.operator.module.js - match: (? begin - (\() + \( beginCaptures - 1 + 0 name meta.brace.round.js end - (\)) + \) endCaptures - 1 + 0 name meta.brace.round.js @@ -64,20 +64,20 @@ begin - (\[) + \[ beginCaptures - 1 + 0 name meta.brace.square.js end - (\]) + \] endCaptures - 1 + 0 name meta.brace.square.js @@ -95,20 +95,20 @@ begin - ({) + \{ beginCaptures - 1 + 0 name meta.brace.curly.js end - (}) + \} endCaptures - 1 + 0 name meta.brace.curly.js @@ -238,6 +238,10 @@ include #literal-keywords + + include + #literal-switch + include #expression @@ -722,14 +726,6 @@ end (?={) - endCaptures - - 0 - - name - meta.brace.curly.js - - name meta.class.extends.js patterns @@ -1202,41 +1198,6 @@ name keyword.control.loop.js - - match - (?<!\.)\b(switch)\b - name - keyword.control.switch.js - - - begin - (?<!\.)\b(case|default)\b - beginCaptures - - 1 - - name - keyword.control.switch.js - - - end - : - endCaptures - - 0 - - name - punctuation.separator.switch.js - - - patterns - - - include - #expression - - - match (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b @@ -1566,7 +1527,7 @@ match - (?<!\.)\b(import|export|from|as)\b + (?<!\.)\b(import|export|default|from|as)\b name keyword.operator.module.js @@ -1987,6 +1948,81 @@ + literal-switch + + patterns + + + begin + (?<!\.)\b(switch)\b + beginCaptures + + 1 + + name + keyword.control.switch.js + + + end + \} + endCaptures + + 0 + + name + meta.brace.curly.js + + + name + meta.switch.js + patterns + + + begin + \{ + beginCaptures + + 0 + + name + meta.brace.curly.js + + + end + (?=}) + patterns + + + begin + (?<!\.)\b(case|default)\b + beginCaptures + + 1 + + name + keyword.control.switch.js + + + end + (?=:) + patterns + + + include + #expression + + + + + include + $self + + + + + + + literal-variable patterns From b058f4a0513c9d75723bf3d1f9f3d5b85f45859d Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 8 Mar 2015 01:17:51 +1100 Subject: [PATCH 176/202] count comments as expressions too --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7b89bfa..a68d637 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -7,7 +7,6 @@ firstLineMatch: ^#!/.*\b(node|js)$\n? keyEquivalent: ^~J patterns: -- include: '#comments' - include: '#core' repository: @@ -50,6 +49,7 @@ repository: - include: '#literal-variable' - include: '#brackets' + - include: '#comments' brackets: patterns: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index e36286f..f9cc014 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -16,10 +16,6 @@ JavaScript Next patterns - - include - #comments - include #core @@ -328,6 +324,10 @@ include #brackets + + include + #comments + function-declaration-parameters From 73588c8665a5aeedc18cac381bf2451437ac9500 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 8 Mar 2015 01:18:46 +1100 Subject: [PATCH 177/202] brackets are unnecessary --- JavaScriptNext.YAML-tmLanguage | 8 ++++---- JavaScriptNext.tmLanguage | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index a68d637..967fbbe 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -141,12 +141,12 @@ repository: function-declaration-parameters: patterns: - - begin: (\() + - begin: \( beginCaptures: - '1': {name: punctuation.definition.parameters.begin.js} - end: (\)) + '0': {name: punctuation.definition.parameters.begin.js} + end: \) endCaptures: - '1': {name: punctuation.definition.parameters.end.js} + '0': {name: punctuation.definition.parameters.end.js} patterns: - name: keyword.operator.spread.js match: (? begin - (\() + \( beginCaptures - 1 + 0 name punctuation.definition.parameters.begin.js end - (\)) + \) endCaptures - 1 + 0 name punctuation.definition.parameters.end.js From 01b92394295a61c346fdd869bd1bd2d5cd133477 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 8 Mar 2015 10:51:14 +1100 Subject: [PATCH 178/202] operators count as expressions, '.' is an operator too --- JavaScriptNext.YAML-tmLanguage | 9 +++++---- JavaScriptNext.tmLanguage | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 967fbbe..b0ce590 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -23,7 +23,6 @@ repository: - include: '#expression' # after storage which requires this in some cases - - include: '#literal-operators' - include: '#literal-punctuation' expression: @@ -48,6 +47,8 @@ repository: - include: '#literal-function-call' - include: '#literal-variable' + - include: '#literal-operators' + - include: '#brackets' - include: '#comments' @@ -703,6 +704,9 @@ repository: - name: keyword.operator.spread.js match: (?- @@ -754,9 +758,6 @@ repository: - name: meta.delimiter.comma.js match: ',' - - name: meta.delimiter.period.js - match: \. - literal-quasi: patterns: - name: string.quasi.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index ca70bf9..4f0b277 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -242,10 +242,6 @@ include #expression - - include - #literal-operators - include #literal-punctuation @@ -320,6 +316,10 @@ include #literal-variable + + include + #literal-operators + include #brackets @@ -1666,6 +1666,12 @@ name keyword.operator.spread.js + + match + \. + name + keyword.operator.accessor.js + literal-prototype @@ -1734,12 +1740,6 @@ name meta.delimiter.comma.js - - match - \. - name - meta.delimiter.period.js - literal-quasi From 2a8dd6a382b1a089310206820304fbf29a323d85 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 8 Mar 2015 11:04:33 +1100 Subject: [PATCH 179/202] for loops is the only control structure which allows vars t --- JavaScriptNext.YAML-tmLanguage | 47 +++++- JavaScriptNext.tmLanguage | 294 ++++++++++++++++++++++----------- 2 files changed, 242 insertions(+), 99 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index b0ce590..745a3ff 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -19,10 +19,10 @@ repository: - include: '#support' - include: '#literal-keywords' + - include: '#literal-for' - include: '#literal-switch' - include: '#expression' # after storage which requires this in some cases - - include: '#literal-punctuation' expression: @@ -47,12 +47,11 @@ repository: - include: '#literal-function-call' - include: '#literal-variable' - - include: '#literal-operators' - - include: '#brackets' - include: '#comments' + - include: '#literal-operators' - brackets: + round-brackets: patterns: - name: meta.group.braces.round begin: \( @@ -62,8 +61,10 @@ repository: endCaptures: '0': {name: meta.brace.round.js} patterns: - - include: $self + - include: '#expression' + square-brackets: + patterns: - name: meta.group.braces.square begin: \[ beginCaptures: @@ -74,6 +75,8 @@ repository: patterns: - include: '#expression' + curly-brackets: + patterns: - name: meta.group.braces.curly begin: \{ beginCaptures: @@ -84,6 +87,12 @@ repository: patterns: - include: $self + brackets: + patterns: + - include: '#round-brackets' + - include: '#square-brackets' + - include: '#curly-brackets' + comments: patterns: - include: '#special-comments-conditional-compilation' @@ -588,11 +597,15 @@ repository: captures: '2': {name: entity.name.type.new.js} - literal-keywords: + literal-keyword-storage: patterns: - name: storage.type.js match: (?patterns - begin - \( - beginCaptures - - 0 - - name - meta.brace.round.js - - - end - \) - endCaptures - - 0 - - name - meta.brace.round.js - - - name - meta.group.braces.round - patterns - - - include - $self - - + include + #round-brackets - begin - \[ - beginCaptures - - 0 - - name - meta.brace.square.js - - - end - \] - endCaptures - - 0 - - name - meta.brace.square.js - - - name - meta.group.braces.square - patterns - - - include - #expression - - + include + #square-brackets - begin - \{ - beginCaptures - - 0 - - name - meta.brace.curly.js - - - end - \} - endCaptures - - 0 - - name - meta.brace.curly.js - - - name - meta.group.braces.curly - patterns - - - include - $self - - + include + #curly-brackets @@ -234,6 +153,10 @@ include #literal-keywords + + include + #literal-for + include #literal-switch @@ -248,6 +171,43 @@ + curly-brackets + + patterns + + + begin + \{ + beginCaptures + + 0 + + name + meta.brace.curly.js + + + end + \} + endCaptures + + 0 + + name + meta.brace.curly.js + + + name + meta.group.braces.curly + patterns + + + include + $self + + + + + expression patterns @@ -318,15 +278,15 @@ include - #literal-operators + #brackets include - #brackets + #comments include - #comments + #literal-operators @@ -810,6 +770,68 @@ + literal-for + + patterns + + + begin + (?<!\.)\b(for)\b + beginCaptures + + 1 + + name + keyword.control.loop.js + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.js + + + name + meta.for.js + patterns + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.js + + + end + (?=\)) + patterns + + + include + #literal-keyword-storage + + + include + #expression + + + include + #literal-punctuation + + + + + + + literal-function patterns @@ -1164,7 +1186,7 @@ - literal-keywords + literal-keyword-storage patterns @@ -1174,6 +1196,16 @@ name storage.type.js + + + literal-keywords + + patterns + + + include + #literal-keyword-storage + match (?<!\.)\b(return|yield)\b @@ -1194,7 +1226,7 @@ match - (?<!\.)\b(break|continue|do|for|goto|while)\b + (?<!\.)\b(break|continue|do|goto|while)\b name keyword.control.loop.js @@ -1977,6 +2009,10 @@ meta.switch.js patterns + + include + #round-brackets + begin \{ @@ -2104,6 +2140,43 @@ + round-brackets + + patterns + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.js + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.js + + + name + meta.group.braces.round + patterns + + + include + #expression + + + + + special-comments-conditional-compilation patterns @@ -2180,6 +2253,43 @@ + square-brackets + + patterns + + + begin + \[ + beginCaptures + + 0 + + name + meta.brace.square.js + + + end + \] + endCaptures + + 0 + + name + meta.brace.square.js + + + name + meta.group.braces.square + patterns + + + include + #expression + + + + + string-content patterns From 10108709b2910bdb535e82d9ca71a3bdf32da319 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 8 Mar 2015 11:07:11 +1100 Subject: [PATCH 180/202] fixed operator precedence issues --- JavaScriptNext.YAML-tmLanguage | 11 ++++++----- JavaScriptNext.tmLanguage | 18 +++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 745a3ff..e09cca3 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -46,10 +46,11 @@ repository: - include: '#literal-method-call' - include: '#literal-function-call' - - include: '#literal-variable' - - include: '#brackets' - include: '#comments' + - include: '#brackets' + - include: '#literal-operators' + - include: '#literal-variable' round-brackets: patterns: @@ -618,9 +619,6 @@ repository: - name: keyword.control.loop.js match: (?- (?x) diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 2dc7362..561fe93 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -274,7 +274,7 @@ include - #literal-variable + #comments include @@ -282,11 +282,11 @@ include - #comments + #literal-operators include - #literal-operators + #literal-variable @@ -1230,12 +1230,6 @@ name keyword.control.loop.js - - match - (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b - name - keyword.operator.js - literal-labels @@ -1607,6 +1601,12 @@ patterns + + match + (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b + name + keyword.operator.js + match (?x) From 07b15a2c65d8e9acba9c2d677f24c3186afd93d6 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 8 Mar 2015 11:15:44 +1100 Subject: [PATCH 181/202] assignments count as expressions too, but labels do not --- JavaScriptNext.YAML-tmLanguage | 27 ++- JavaScriptNext.tmLanguage | 432 +++++++++++++++++---------------- 2 files changed, 231 insertions(+), 228 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index e09cca3..7de0534 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -12,9 +12,8 @@ patterns: repository: core: patterns: - - include: '#literal-function-storage' - - include: '#literal-arrow-function-storage' - - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings + - include: '#literal-function-labels' + - include: '#literal-arrow-function-labels' - include: '#literal-labels' - include: '#support' @@ -22,11 +21,15 @@ repository: - include: '#literal-for' - include: '#literal-switch' - - include: '#expression' # after storage which requires this in some cases + - include: '#expression' - include: '#literal-punctuation' expression: patterns: + - include: '#literal-function-storage' + - include: '#literal-arrow-function-storage' + - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings + - include: '#literal-regexp' # before operators to avoid ambiguities - include: '#literal-number' - include: '#literal-quasi' @@ -246,7 +249,7 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-prototype: + literal-prototype-storage: patterns: # e.g. Sound.prototype - name: meta.prototype.access.js @@ -255,8 +258,6 @@ repository: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} - literal-prototype-storage: - patterns: # e.g. Sound.prototype = { } when extending an object - name: meta.prototype.declaration.js match: ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* @@ -264,7 +265,7 @@ repository: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} - literal-function: + literal-function-storage: patterns: # e.g. function play(arg1, arg2) { } - name: meta.function.js @@ -282,8 +283,6 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-function-storage: - patterns: # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js begin: >- @@ -328,6 +327,8 @@ repository: patterns: - include: '#function-declaration-parameters' + literal-function-labels: + patterns: # e.g. play: function(arg1, arg2) { } - name: meta.function.json.js begin: >- @@ -378,7 +379,7 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-arrow-function: + literal-arrow-function-storage: patterns: # e.g. (args) => { } - name: meta.function.arrow.js @@ -394,8 +395,6 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-arrow-function-storage: - patterns: # e.g. Sound.prototype.play = (args) => { } - name: meta.prototype.function.arrow.js begin: >- @@ -436,6 +435,8 @@ repository: patterns: - include: '#function-declaration-parameters' + literal-arrow-function-labels: + patterns: # e.g. play: (args) => { } - name: meta.function.json.arrow.js begin: >- diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 561fe93..e1cfbbb 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -131,15 +131,11 @@ include - #literal-function-storage + #literal-function-labels include - #literal-arrow-function-storage - - - include - #literal-prototype-storage + #literal-arrow-function-labels include @@ -212,6 +208,18 @@ patterns + + include + #literal-function-storage + + + include + #literal-arrow-function-storage + + + include + #literal-prototype-storage + include #literal-regexp @@ -366,18 +374,30 @@ - literal-arrow-function + literal-arrow-function-labels patterns begin (?x) - (\basync)?\s* - (?=\([^()]*\)\s*(=>)) + \b([_$a-zA-Z][$\w]*) + \s*(:) + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) beginCaptures 1 + + name + entity.name.function.js + + 2 + + name + punctuation.separator.key-value.js + + 3 name storage.type.js @@ -394,7 +414,7 @@ name - meta.function.arrow.js + meta.function.json.arrow.js patterns @@ -403,19 +423,14 @@ - - - literal-arrow-function-storage - - patterns - begin (?x) - (\b_?[A-Z][$\w]*)? - \.(prototype) - \.([_$a-zA-Z][$\w]*) - \s*= + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -423,12 +438,17 @@ 1 name - entity.name.class.js + string.quoted.single.js + + 10 + + name + storage.type.js 2 name - variable.language.prototype.js + punctuation.definition.string.begin.js 3 @@ -438,7 +458,32 @@ 4 name - storage.type.js + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js end @@ -452,7 +497,7 @@ name - meta.prototype.function.arrow.js + meta.function.json.arrow.js patterns @@ -461,27 +506,20 @@ + + + literal-arrow-function-storage + + patterns + begin (?x) - (\b_?[A-Z][$\w]*)? - \.([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) + (\basync)?\s* + (?=\([^()]*\)\s*(=>)) beginCaptures 1 - - name - entity.name.class.js - - 2 - - name - entity.name.function.js - - 3 name storage.type.js @@ -498,7 +536,7 @@ name - meta.function.static.arrow.js + meta.function.arrow.js patterns @@ -510,8 +548,10 @@ begin (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) + (\b_?[A-Z][$\w]*)? + \.(prototype) + \.([_$a-zA-Z][$\w]*) + \s*= \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -519,14 +559,19 @@ 1 name - entity.name.function.js + entity.name.class.js 2 name - punctuation.separator.key-value.js + variable.language.prototype.js 3 + + name + entity.name.function.js + + 4 name storage.type.js @@ -543,7 +588,7 @@ name - meta.function.json.arrow.js + meta.prototype.function.arrow.js patterns @@ -555,11 +600,9 @@ begin (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) + (\b_?[A-Z][$\w]*)? + \.([_$a-zA-Z][$\w]*) + \s*= \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -567,52 +610,17 @@ 1 name - string.quoted.single.js - - 10 - - name - storage.type.js + entity.name.class.js 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 name entity.name.function.js - 8 - - name - punctuation.definition.string.end.js - - 9 + 3 name - punctuation.separator.key-value.js + storage.type.js end @@ -626,7 +634,7 @@ name - meta.function.json.arrow.js + meta.function.static.arrow.js patterns @@ -832,53 +840,6 @@ - literal-function - - patterns - - - begin - (?x) - (?:\b(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.function.js - - 3 - - name - keyword.generator.asterisk.js - - 4 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.js - patterns - - - include - #function-declaration-parameters - - - - - literal-function-call patterns @@ -922,17 +883,15 @@ - literal-function-storage + literal-function-labels patterns begin (?x) - (\b_?[A-Z][$\w]*)? - \.(prototype) - \.([_$a-zA-Z][$\w]*) - \s*= + \b([_$a-zA-Z][$\w]*) + \s*(:) \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* @@ -941,34 +900,29 @@ 1 name - entity.name.class.js + entity.name.function.js 2 name - variable.language.prototype.js + punctuation.separator.key-value.js 3 - - name - entity.name.function.js - - 4 name storage.type.js - 5 + 4 name storage.type.function.js - 6 + 5 name keyword.generator.asterisk.js - 7 + 6 name entity.name.function.js @@ -977,7 +931,7 @@ end (?<=\)) name - meta.prototype.function.js + meta.function.json.js patterns @@ -989,9 +943,11 @@ begin (?x) - (\b_?[A-Z][$\w]*)? - \.([_$a-zA-Z][$\w]*) - \s*= + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* @@ -1000,38 +956,73 @@ 1 name - entity.name.class.js + string.quoted.single.js - 2 + 10 + + name + storage.type.js + + 11 + + name + storage.type.function.js + + 12 + + name + keyword.generator.asterisk.js + + 13 name entity.name.function.js + 2 + + name + punctuation.definition.string.begin.js + 3 name - storage.type.js + entity.name.function.js 4 name - storage.type.function.js + punctuation.definition.string.end.js 5 name - keyword.generator.asterisk.js + string.quoted.double.js 6 + + name + punctuation.definition.string.begin.js + + 7 name entity.name.function.js + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + end (?<=\)) name - meta.function.static.js + meta.function.json.js patterns @@ -1040,42 +1031,36 @@ + + + literal-function-storage + + patterns + begin (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) - \s*(?:(async)\s+)? + (?:\b(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 name storage.type.js - 4 + 2 name storage.type.function.js - 5 + 3 name keyword.generator.asterisk.js - 6 + 4 name entity.name.function.js @@ -1084,7 +1069,7 @@ end (?<=\)) name - meta.function.json.js + meta.function.js patterns @@ -1096,11 +1081,10 @@ begin (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) + (\b_?[A-Z][$\w]*)? + \.(prototype) + \.([_$a-zA-Z][$\w]*) + \s*= \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* @@ -1109,73 +1093,97 @@ 1 name - string.quoted.single.js + entity.name.class.js - 10 + 2 name - storage.type.js + variable.language.prototype.js - 11 + 3 name - storage.type.function.js + entity.name.function.js - 12 + 4 name - keyword.generator.asterisk.js + storage.type.js - 13 + 5 name - entity.name.function.js + storage.type.function.js - 2 + 6 name - punctuation.definition.string.begin.js + keyword.generator.asterisk.js - 3 + 7 name entity.name.function.js - 4 + + end + (?<=\)) + name + meta.prototype.function.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + (\b_?[A-Z][$\w]*)? + \.([_$a-zA-Z][$\w]*) + \s*= + \s*(?:(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 name - punctuation.definition.string.end.js + entity.name.class.js - 5 + 2 name - string.quoted.double.js + entity.name.function.js - 6 + 3 name - punctuation.definition.string.begin.js + storage.type.js - 7 + 4 name - entity.name.function.js + storage.type.function.js - 8 + 5 name - punctuation.definition.string.end.js + keyword.generator.asterisk.js - 9 + 6 name - punctuation.separator.key-value.js + entity.name.function.js end (?<=\)) name - meta.function.json.js + meta.function.static.js patterns @@ -1706,7 +1714,7 @@ - literal-prototype + literal-prototype-storage patterns @@ -1729,12 +1737,6 @@ name meta.prototype.access.js - - - literal-prototype-storage - - patterns - captures From 4f237fa1f1f4a8ceb7568ef5f78fd6a439e4dd5c Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Mon, 9 Mar 2015 01:11:39 -0400 Subject: [PATCH 182/202] Match "process.env" and friends, before "process" --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7de0534..7cf9ac8 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -951,7 +951,7 @@ repository: match: (? match - (?<!\.)\b(process|process\.(env|stdout|stdin|stderr)|global|GLOBAL|root|module|exports|__dirname|__filename|console)\b + (?<!\.)\b(process\.(env|stdout|stdin|stderr)|process|global|GLOBAL|root|module|exports|__dirname|__filename|console)\b name support.type.object.node.js From 88d0f8a980e90da2cca2543b2812b52b36e3ccb1 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Mon, 9 Mar 2015 01:12:26 -0400 Subject: [PATCH 183/202] Match "module.exports" as support.type.object.node.js --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 7cf9ac8..f7ad3d2 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -951,7 +951,7 @@ repository: match: (? match - (?<!\.)\b(process\.(env|stdout|stdin|stderr)|process|global|GLOBAL|root|module|exports|__dirname|__filename|console)\b + (?<!\.)\b(process\.(env|stdout|stdin|stderr)|process|global|GLOBAL|root|(module\.exports)|module|exports|__dirname|__filename|console)\b name support.type.object.node.js From 916615e5648b28a75ceb5b345feb714033133d97 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Mon, 9 Mar 2015 20:34:25 -0400 Subject: [PATCH 184/202] More node support --- JavaScriptNext.YAML-tmLanguage | 27 +++++++++-- JavaScriptNext.tmLanguage | 83 +++++++++++++++++++++++++++++++--- 2 files changed, 100 insertions(+), 10 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index f7ad3d2..e7e1d48 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -16,7 +16,6 @@ repository: - include: '#literal-arrow-function-labels' - include: '#literal-labels' - - include: '#support' - include: '#literal-keywords' - include: '#literal-for' - include: '#literal-switch' @@ -26,6 +25,7 @@ repository: expression: patterns: + - include: '#support' - include: '#literal-function-storage' - include: '#literal-arrow-function-storage' - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings @@ -941,17 +941,36 @@ repository: )\b # console - - match: (?include #literal-labels - - include - #support - include #literal-keywords @@ -208,6 +204,10 @@ patterns + + include + #support + include #literal-function-storage @@ -2370,13 +2370,18 @@ support.type.object.console.js 2 + + name + keyword.operator.accessor.js + + 3 name support.function.console.js match - (?<!\.)\b(console)(?:\.(warn|info|log|error|time|timeEnd|assert))?\b + (?<!\.)\b(console)(?:(\.)(warn|info|log|error|time|timeEnd|assert))?\b match @@ -2384,9 +2389,75 @@ name support.module.node.js + + captures + + 1 + + name + support.type.object.process.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + support.type.object.process.js + + + match + (?<!\.)\b(process)(?:(\.)(stdout|stderr|stdin|argv|execPath|execArgv|env|exitCode|version|versions|config|pid|title|arch|platform|mainModule))?\b + + + captures + + 1 + + name + support.type.object.process.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + support.function.process.js + + + match + (?<!\.)\b(process)(?:(\.)(abort|chdir|cwd|exit|getgid|setgid|getuid|setuid|setgroups|getgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime))?\b + + + captures + + 1 + + name + support.type.object.module.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + support.type.object.module.js + + + match + (?<!\.)\b(exports|module(?:(\.)(exports|id|filename|loaded|parent|children)))?\b + match - (?<!\.)\b(process\.(env|stdout|stdin|stderr)|process|global|GLOBAL|root|(module\.exports)|module|exports|__dirname|__filename|console)\b + (?<!\.)\b(global|GLOBAL|root|__dirname|__filename)\b name support.type.object.node.js From 03f6b596e7b387bd1b30752557b62bb6027a4d68 Mon Sep 17 00:00:00 2001 From: simonzack Date: Fri, 13 Mar 2015 21:16:09 +1100 Subject: [PATCH 185/202] fixes #103 --- JavaScriptNext.YAML-tmLanguage | 16 +- JavaScriptNext.tmLanguage | 446 ++++++++++++++++----------------- 2 files changed, 223 insertions(+), 239 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index e7e1d48..14c7ffc 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -26,9 +26,9 @@ repository: expression: patterns: - include: '#support' - - include: '#literal-function-storage' - - include: '#literal-arrow-function-storage' - - include: '#literal-prototype-storage' # after literal-function-storage, which includes some prototype strings + - include: '#literal-function' + - include: '#literal-arrow-function' + - include: '#literal-prototype' # after literal-function, which includes some prototype strings - include: '#literal-regexp' # before operators to avoid ambiguities - include: '#literal-number' @@ -37,11 +37,7 @@ repository: - include: '#literal-language-constant' - include: '#literal-language-variable' - - include: '#literal-function' - include: '#literal-method' - - include: '#literal-arrow-function' - - include: '#literal-prototype' - - include: '#literal-module' - include: '#literal-class' @@ -249,7 +245,7 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-prototype-storage: + literal-prototype: patterns: # e.g. Sound.prototype - name: meta.prototype.access.js @@ -265,7 +261,7 @@ repository: '1': {name: entity.name.class.js} '2': {name: variable.language.prototype.js} - literal-function-storage: + literal-function: patterns: # e.g. function play(arg1, arg2) { } - name: meta.function.js @@ -379,7 +375,7 @@ repository: patterns: - include: '#function-declaration-parameters' - literal-arrow-function-storage: + literal-arrow-function: patterns: # e.g. (args) => { } - name: meta.function.arrow.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index d7ce1ce..68a77c5 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -210,15 +210,15 @@ include - #literal-function-storage + #literal-function include - #literal-arrow-function-storage + #literal-arrow-function include - #literal-prototype-storage + #literal-prototype include @@ -244,22 +244,10 @@ include #literal-language-variable - - include - #literal-function - include #literal-method - - include - #literal-arrow-function - - - include - #literal-prototype - include #literal-module @@ -374,30 +362,18 @@ - literal-arrow-function-labels + literal-arrow-function patterns begin (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) + (\basync)?\s* + (?=\([^()]*\)\s*(=>)) beginCaptures 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 name storage.type.js @@ -414,7 +390,7 @@ name - meta.function.json.arrow.js + meta.function.arrow.js patterns @@ -426,11 +402,10 @@ begin (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) + (\b_?[A-Z][$\w]*)? + \.(prototype) + \.([_$a-zA-Z][$\w]*) + \s*= \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -438,17 +413,12 @@ 1 name - string.quoted.single.js - - 10 - - name - storage.type.js + entity.name.class.js 2 name - punctuation.definition.string.begin.js + variable.language.prototype.js 3 @@ -458,32 +428,7 @@ 4 name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js + storage.type.js end @@ -497,7 +442,7 @@ name - meta.function.json.arrow.js + meta.prototype.function.arrow.js patterns @@ -506,20 +451,27 @@ - - - literal-arrow-function-storage - - patterns - begin (?x) - (\basync)?\s* - (?=\([^()]*\)\s*(=>)) + (\b_?[A-Z][$\w]*)? + \.([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) beginCaptures 1 + + name + entity.name.class.js + + 2 + + name + entity.name.function.js + + 3 name storage.type.js @@ -536,7 +488,7 @@ name - meta.function.arrow.js + meta.function.static.arrow.js patterns @@ -545,13 +497,17 @@ + + + literal-arrow-function-labels + + patterns + begin (?x) - (\b_?[A-Z][$\w]*)? - \.(prototype) - \.([_$a-zA-Z][$\w]*) - \s*= + \b([_$a-zA-Z][$\w]*) + \s*(:) \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -559,19 +515,14 @@ 1 name - entity.name.class.js + entity.name.function.js 2 name - variable.language.prototype.js + punctuation.separator.key-value.js 3 - - name - entity.name.function.js - - 4 name storage.type.js @@ -588,7 +539,7 @@ name - meta.prototype.function.arrow.js + meta.function.json.arrow.js patterns @@ -600,9 +551,11 @@ begin (?x) - (\b_?[A-Z][$\w]*)? - \.([_$a-zA-Z][$\w]*) - \s*= + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures @@ -610,17 +563,52 @@ 1 name - entity.name.class.js + string.quoted.single.js + + 10 + + name + storage.type.js 2 name - entity.name.function.js + punctuation.definition.string.begin.js 3 name - storage.type.js + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js end @@ -634,7 +622,7 @@ name - meta.function.static.arrow.js + meta.function.json.arrow.js patterns @@ -840,58 +828,58 @@ - literal-function-call + literal-function patterns - captures + begin + (?x) + (?:\b(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures 1 name - entity.name.function.js + storage.type.js 2 name - meta.group.braces.round.function.arguments.js + storage.type.function.js - - match - (?x) - ([_$a-zA-Z][$\w]*)\s* - (\(\s*\)) - name - meta.function-call.without-arguments.js - - - captures - - 1 + 3 + + name + keyword.generator.asterisk.js + + 4 name entity.name.function.js - match - (?x) - ([_$a-zA-Z][$\w]*)\s* - (?=\() + end + (?<=\)) name - meta.function-call.with-arguments.js + meta.function.js + patterns + + + include + #function-declaration-parameters + + - - - literal-function-labels - - patterns - begin (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) + (\b_?[A-Z][$\w]*)? + \.(prototype) + \.([_$a-zA-Z][$\w]*) + \s*= \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* @@ -900,29 +888,34 @@ 1 name - entity.name.function.js + entity.name.class.js 2 name - punctuation.separator.key-value.js + variable.language.prototype.js 3 name - storage.type.js + entity.name.function.js 4 name - storage.type.function.js + storage.type.js 5 name - keyword.generator.asterisk.js + storage.type.function.js 6 + + name + keyword.generator.asterisk.js + + 7 name entity.name.function.js @@ -931,7 +924,7 @@ end (?<=\)) name - meta.function.json.js + meta.prototype.function.js patterns @@ -943,11 +936,9 @@ begin (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) + (\b_?[A-Z][$\w]*)? + \.([_$a-zA-Z][$\w]*) + \s*= \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* @@ -956,73 +947,38 @@ 1 name - string.quoted.single.js - - 10 - - name - storage.type.js - - 11 - - name - storage.type.function.js - - 12 - - name - keyword.generator.asterisk.js - - 13 - - name - entity.name.function.js + entity.name.class.js 2 name - punctuation.definition.string.begin.js + entity.name.function.js 3 name - entity.name.function.js + storage.type.js 4 name - punctuation.definition.string.end.js + storage.type.function.js 5 name - string.quoted.double.js + keyword.generator.asterisk.js 6 - - name - punctuation.definition.string.begin.js - - 7 name entity.name.function.js - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - end (?<=\)) name - meta.function.json.js + meta.function.static.js patterns @@ -1033,58 +989,58 @@ - literal-function-storage + literal-function-call patterns - begin - (?x) - (?:\b(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures + captures 1 name - storage.type.js + entity.name.function.js 2 name - storage.type.function.js - - 3 - - name - keyword.generator.asterisk.js + meta.group.braces.round.function.arguments.js - 4 + + match + (?x) + ([_$a-zA-Z][$\w]*)\s* + (\(\s*\)) + name + meta.function-call.without-arguments.js + + + captures + + 1 name entity.name.function.js - end - (?<=\)) + match + (?x) + ([_$a-zA-Z][$\w]*)\s* + (?=\() name - meta.function.js - patterns - - - include - #function-declaration-parameters - - + meta.function-call.with-arguments.js + + + literal-function-labels + + patterns + begin (?x) - (\b_?[A-Z][$\w]*)? - \.(prototype) - \.([_$a-zA-Z][$\w]*) - \s*= + \b([_$a-zA-Z][$\w]*) + \s*(:) \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* @@ -1093,34 +1049,29 @@ 1 name - entity.name.class.js + entity.name.function.js 2 name - variable.language.prototype.js + punctuation.separator.key-value.js 3 - - name - entity.name.function.js - - 4 name storage.type.js - 5 + 4 name storage.type.function.js - 6 + 5 name keyword.generator.asterisk.js - 7 + 6 name entity.name.function.js @@ -1129,7 +1080,7 @@ end (?<=\)) name - meta.prototype.function.js + meta.function.json.js patterns @@ -1141,9 +1092,11 @@ begin (?x) - (\b_?[A-Z][$\w]*)? - \.([_$a-zA-Z][$\w]*) - \s*= + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* @@ -1152,38 +1105,73 @@ 1 name - entity.name.class.js + string.quoted.single.js - 2 + 10 + + name + storage.type.js + + 11 + + name + storage.type.function.js + + 12 + + name + keyword.generator.asterisk.js + + 13 name entity.name.function.js + 2 + + name + punctuation.definition.string.begin.js + 3 name - storage.type.js + entity.name.function.js 4 name - storage.type.function.js + punctuation.definition.string.end.js 5 name - keyword.generator.asterisk.js + string.quoted.double.js 6 + + name + punctuation.definition.string.begin.js + + 7 name entity.name.function.js + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + end (?<=\)) name - meta.function.static.js + meta.function.json.js patterns @@ -1714,7 +1702,7 @@ - literal-prototype-storage + literal-prototype patterns From 39839bd7286cdef82f1a0ea26a440c99c95754d4 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 14 Mar 2015 16:33:07 -0400 Subject: [PATCH 186/202] Capture missing "keyword.operator.accessor" --- JavaScriptNext.YAML-tmLanguage | 77 +++++++++++++----------- JavaScriptNext.tmLanguage | 103 +++++++++++++++++++++++++-------- 2 files changed, 123 insertions(+), 57 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 14c7ffc..8038b52 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -249,17 +249,19 @@ repository: patterns: # e.g. Sound.prototype - name: meta.prototype.access.js - match: ([_$a-zA-Z][$\w]*)\.(prototype)\b + match: ([_$a-zA-Z][$\w]*)(\.)(prototype)\b captures: '1': {name: entity.name.class.js} - '2': {name: variable.language.prototype.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: variable.language.prototype.js} # e.g. Sound.prototype = { } when extending an object - name: meta.prototype.declaration.js - match: ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* + match: ([_$a-zA-Z][$\w]*)(\.)(prototype)\s*=\s* captures: '1': {name: entity.name.class.js} - '2': {name: variable.language.prototype.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: variable.language.prototype.js} literal-function: patterns: @@ -284,20 +286,22 @@ repository: begin: >- (?x) (\b_?[A-Z][$\w]*)? - \.(prototype) - \.([_$a-zA-Z][$\w]*) + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: '1': {name: entity.name.class.js} - '2': {name: variable.language.prototype.js} - '3': {name: entity.name.function.js} - '4': {name: storage.type.js} - '5': {name: storage.type.function.js} - '6': {name: keyword.generator.asterisk.js} - '7': {name: entity.name.function.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: variable.language.prototype.js} + '4': {name: keyword.operator.accessor.js} + '5': {name: entity.name.function.js} + '6': {name: storage.type.js} + '7': {name: storage.type.function.js} + '8': {name: keyword.generator.asterisk.js} + '9': {name: entity.name.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -307,18 +311,19 @@ repository: begin: >- (?x) (\b_?[A-Z][$\w]*)? - \.([_$a-zA-Z][$\w]*) + (\.)([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) \s*([_$a-zA-Z][$\w]*)?\s* beginCaptures: '1': {name: entity.name.class.js} - '2': {name: entity.name.function.js} - '3': {name: storage.type.js} - '4': {name: storage.type.function.js} - '5': {name: keyword.generator.asterisk.js} - '6': {name: entity.name.function.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: entity.name.function.js} + '4': {name: storage.type.js} + '5': {name: storage.type.function.js} + '6': {name: keyword.generator.asterisk.js} + '7': {name: entity.name.function.js} end: (?<=\)) patterns: - include: '#function-declaration-parameters' @@ -396,16 +401,18 @@ repository: begin: >- (?x) (\b_?[A-Z][$\w]*)? - \.(prototype) - \.([_$a-zA-Z][$\w]*) + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) \s*= \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} - '2': {name: variable.language.prototype.js} - '3': {name: entity.name.function.js} - '4': {name: storage.type.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: variable.language.prototype.js} + '4': {name: keyword.operator.accessor.js} + '5': {name: entity.name.function.js} + '6': {name: storage.type.js} end: (?<=\))\s*(=>) endCaptures: '1': {name: storage.type.function.arrow.js} @@ -417,14 +424,15 @@ repository: begin: >- (?x) (\b_?[A-Z][$\w]*)? - \.([_$a-zA-Z][$\w]*) + (\.)([_$a-zA-Z][$\w]*) \s*= \s*(async)? \s*(?=\([^()]*\)\s*(=>)) beginCaptures: '1': {name: entity.name.class.js} - '2': {name: entity.name.function.js} - '3': {name: storage.type.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: entity.name.function.js} + '4': {name: storage.type.js} end: (?<=\))\s*(=>) endCaptures: '1': {name: storage.type.function.arrow.js} @@ -504,24 +512,26 @@ repository: match: >- (?x) (?:(?<=\.)|\b) - ([A-Z][$\w]*)\s*\. + ([A-Z][$\w]*)\s*(\.) ([_$a-zA-Z][$\w]*)\s* (\(\s*\)) captures: '1': {name: variable.other.class.js} - '2': {name: entity.name.function.js} - '3': {name: meta.group.braces.round.function.arguments.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: entity.name.function.js} + '4': {name: meta.group.braces.round.function.arguments.js} - name: meta.function-call.static.with-arguments.js match: >- (?x) (?:(?<=\.)|\b) - ([A-Z][$\w]*)\s*\. + ([A-Z][$\w]*)\s*(\.) ([_$a-zA-Z][$\w]*)\s* (?=\() captures: '1': {name: variable.other.class.js} - '2': {name: entity.name.function.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: entity.name.function.js} - name: meta.function-call.method.without-arguments.js match: >- @@ -883,11 +893,12 @@ repository: - name: meta.property.class.js match: >- (?x) - \b([A-Z][$\w]*)\s*\. + \b([A-Z][$\w]*)\s*(\.) ([_$a-zA-Z][$\w]*) captures: '1': {name: variable.other.class.js} - '2': {name: variable.other.property.static.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: variable.other.property.static.js} # e.g. obj.property - name: variable.other.object.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 68a77c5..209fb95 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -403,8 +403,8 @@ begin (?x) (\b_?[A-Z][$\w]*)? - \.(prototype) - \.([_$a-zA-Z][$\w]*) + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) \s*= \s*(async)? \s*(?=\([^()]*\)\s*(=>)) @@ -418,14 +418,24 @@ 2 name - variable.language.prototype.js + keyword.operator.accessor.js 3 name - entity.name.function.js + variable.language.prototype.js 4 + + name + keyword.operator.accessor.js + + 5 + + name + entity.name.function.js + + 6 name storage.type.js @@ -455,7 +465,7 @@ begin (?x) (\b_?[A-Z][$\w]*)? - \.([_$a-zA-Z][$\w]*) + (\.)([_$a-zA-Z][$\w]*) \s*= \s*(async)? \s*(?=\([^()]*\)\s*(=>)) @@ -469,9 +479,14 @@ 2 name - entity.name.function.js + keyword.operator.accessor.js 3 + + name + entity.name.function.js + + 4 name storage.type.js @@ -877,8 +892,8 @@ begin (?x) (\b_?[A-Z][$\w]*)? - \.(prototype) - \.([_$a-zA-Z][$\w]*) + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) @@ -893,29 +908,39 @@ 2 name - variable.language.prototype.js + keyword.operator.accessor.js 3 name - entity.name.function.js + variable.language.prototype.js 4 name - storage.type.js + keyword.operator.accessor.js 5 name - storage.type.function.js + entity.name.function.js 6 name - keyword.generator.asterisk.js + storage.type.js 7 + + name + storage.type.function.js + + 8 + + name + keyword.generator.asterisk.js + + 9 name entity.name.function.js @@ -937,7 +962,7 @@ begin (?x) (\b_?[A-Z][$\w]*)? - \.([_$a-zA-Z][$\w]*) + (\.)([_$a-zA-Z][$\w]*) \s*= \s*(?:(async)\s+)? \s*(function)(?:\s*(\*)|(?=\s|[(])) @@ -952,24 +977,29 @@ 2 name - entity.name.function.js + keyword.operator.accessor.js 3 name - storage.type.js + entity.name.function.js 4 name - storage.type.function.js + storage.type.js 5 name - keyword.generator.asterisk.js + storage.type.function.js 6 + + name + keyword.generator.asterisk.js + + 7 name entity.name.function.js @@ -1462,9 +1492,14 @@ 2 name - entity.name.function.js + keyword.operator.accessor.js 3 + + name + entity.name.function.js + + 4 name meta.group.braces.round.function.arguments.js @@ -1473,7 +1508,7 @@ match (?x) (?:(?<=\.)|\b) - ([A-Z][$\w]*)\s*\. + ([A-Z][$\w]*)\s*(\.) ([_$a-zA-Z][$\w]*)\s* (\(\s*\)) name @@ -1488,6 +1523,11 @@ variable.other.class.js 2 + + name + keyword.operator.accessor.js + + 3 name entity.name.function.js @@ -1496,7 +1536,7 @@ match (?x) (?:(?<=\.)|\b) - ([A-Z][$\w]*)\s*\. + ([A-Z][$\w]*)\s*(\.) ([_$a-zA-Z][$\w]*)\s* (?=\() name @@ -1715,13 +1755,18 @@ entity.name.class.js 2 + + name + keyword.operator.accessor.js + + 3 name variable.language.prototype.js match - ([_$a-zA-Z][$\w]*)\.(prototype)\b + ([_$a-zA-Z][$\w]*)(\.)(prototype)\b name meta.prototype.access.js @@ -1734,13 +1779,18 @@ entity.name.class.js 2 + + name + keyword.operator.accessor.js + + 3 name variable.language.prototype.js match - ([_$a-zA-Z][$\w]*)\.(prototype)\s*=\s* + ([_$a-zA-Z][$\w]*)(\.)(prototype)\s*=\s* name meta.prototype.declaration.js @@ -2082,6 +2132,11 @@ variable.other.class.js 2 + + name + keyword.operator.accessor.js + + 3 name variable.other.property.static.js @@ -2089,7 +2144,7 @@ match (?x) - \b([A-Z][$\w]*)\s*\. + \b([A-Z][$\w]*)\s*(\.) ([_$a-zA-Z][$\w]*) name meta.property.class.js From 47cb835f89decd5d4a5de9747b52cad71f7f3728 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 21 Mar 2015 19:16:24 -0400 Subject: [PATCH 187/202] Arrow functions w/ a single argument and no parens --- JavaScriptNext.YAML-tmLanguage | 88 ++++++++++++ JavaScriptNext.tmLanguage | 239 +++++++++++++++++++++++++++++++++ 2 files changed, 327 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8038b52..07d9404 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -396,6 +396,17 @@ repository: patterns: - include: '#function-declaration-parameters' + # e.g. arg => { } + - name: meta.function.arrow.js + match: >- + (?x) + (\basync)?\s* + \b([_$a-zA-Z][$\w]*)\s*(=>) + captures: + '1': {name: storage.type.js} + '2': {name: variable.parameter.function.js} + '3': {name: storage.type.function.arrow.js} + # e.g. Sound.prototype.play = (args) => { } - name: meta.prototype.function.arrow.js begin: >- @@ -419,6 +430,26 @@ repository: patterns: - include: '#function-declaration-parameters' + # e.g. Sound.prototype.play = arg => { } + - name: meta.prototype.function.arrow.js + match: >- + (?x) + (\b_?[A-Z][$\w]*)? + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + captures: + '1': {name: entity.name.class.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: variable.language.prototype.js} + '4': {name: keyword.operator.accessor.js} + '5': {name: entity.name.function.js} + '6': {name: storage.type.js} + '7': {name: variable.parameter.function.js} + '8': {name: storage.type.function.arrow.js} + # e.g. Sound.play = (args) => { } - name: meta.function.static.arrow.js begin: >- @@ -439,6 +470,23 @@ repository: patterns: - include: '#function-declaration-parameters' + # e.g. Sound.play = arg => { } + - name: meta.function.static.arrow.js + match: >- + (?x) + (\b_?[A-Z][$\w]*)? + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + captures: + '1': {name: entity.name.class.js} + '2': {name: keyword.operator.accessor.js} + '3': {name: entity.name.function.js} + '4': {name: storage.type.js} + '5': {name: variable.parameter.function.js} + '6': {name: storage.type.function.arrow.js} + literal-arrow-function-labels: patterns: # e.g. play: (args) => { } @@ -459,6 +507,21 @@ repository: patterns: - include: '#function-declaration-parameters' + # e.g. play: arg => { } + - name: meta.function.json.arrow.js + match: >- + (?x) + \b([_$a-zA-Z][$\w]*) + \s*(:) + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + captures: + '1': {name: entity.name.function.js} + '2': {name: punctuation.separator.key-value.js} + '3': {name: storage.type.js} + '4': {name: variable.parameter.function.js} + '5': {name: storage.type.function.arrow.js} + # e.g. "play": (args) => { } - name: meta.function.json.arrow.js begin: >- @@ -487,6 +550,31 @@ repository: patterns: - include: '#function-declaration-parameters' + # e.g. "play": arg => { } + - name: meta.function.json.arrow.js + match: >- + (?x) + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + captures: + '1': {name: string.quoted.single.js} + '2': {name: punctuation.definition.string.begin.js} + '3': {name: entity.name.function.js} + '4': {name: punctuation.definition.string.end.js} + '5': {name: string.quoted.double.js} + '6': {name: punctuation.definition.string.begin.js} + '7': {name: entity.name.function.js} + '8': {name: punctuation.definition.string.end.js} + '9': {name: punctuation.separator.key-value.js} + '10': {name: storage.type.js} + '11': {name: variable.parameter.function.js} + '12': {name: storage.type.function.arrow.js} + literal-function-call: patterns: - name: meta.function-call.without-arguments.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 209fb95..41304a4 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -399,6 +399,32 @@ + + captures + + 1 + + name + storage.type.js + + 2 + + name + variable.parameter.function.js + + 3 + + name + storage.type.function.arrow.js + + + match + (?x) + (\basync)?\s* + \b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.arrow.js + begin (?x) @@ -461,6 +487,61 @@ + + captures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + variable.language.prototype.js + + 4 + + name + keyword.operator.accessor.js + + 5 + + name + entity.name.function.js + + 6 + + name + storage.type.js + + 7 + + name + variable.parameter.function.js + + 8 + + name + storage.type.function.arrow.js + + + match + (?x) + (\b_?[A-Z][$\w]*)? + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.prototype.function.arrow.js + begin (?x) @@ -512,6 +593,50 @@ + + captures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + entity.name.function.js + + 4 + + name + storage.type.js + + 5 + + name + variable.parameter.function.js + + 6 + + name + storage.type.function.arrow.js + + + match + (?x) + (\b_?[A-Z][$\w]*)? + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.static.arrow.js + literal-arrow-function-labels @@ -563,6 +688,44 @@ + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + punctuation.separator.key-value.js + + 3 + + name + storage.type.js + + 4 + + name + variable.parameter.function.js + + 5 + + name + storage.type.function.arrow.js + + + match + (?x) + \b([_$a-zA-Z][$\w]*) + \s*(:) + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.json.arrow.js + begin (?x) @@ -646,6 +809,82 @@ + + captures + + 1 + + name + string.quoted.single.js + + 10 + + name + storage.type.js + + 11 + + name + variable.parameter.function.js + + 12 + + name + storage.type.function.arrow.js + + 2 + + name + punctuation.definition.string.begin.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + + + match + (?x) + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.json.arrow.js + literal-class From 5838bd2a5528dbf47abebfde2b77058b64087944 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Wed, 25 Mar 2015 14:33:21 -0400 Subject: [PATCH 188/202] Add json tmlanguage --- JSON (JavaScriptNext).YAML-tmLanguage | 151 +++++++++++ JSON (JavaScriptNext).tmLanguage | 344 ++++++++++++++++++++++++++ 2 files changed, 495 insertions(+) create mode 100644 JSON (JavaScriptNext).YAML-tmLanguage create mode 100644 JSON (JavaScriptNext).tmLanguage diff --git a/JSON (JavaScriptNext).YAML-tmLanguage b/JSON (JavaScriptNext).YAML-tmLanguage new file mode 100644 index 0000000..e03042d --- /dev/null +++ b/JSON (JavaScriptNext).YAML-tmLanguage @@ -0,0 +1,151 @@ +# [PackageDev] target_format: plist, ext: tmLanguage +name: JSON (Javascript Next) +scopeName: source.json +fileTypes: [json, sublime-settings, sublime-menu, sublime-keymap, sublime-mousemap, + sublime-theme, sublime-build, sublime-project, sublime-completions] +uuid: 8f97457b-516e-48ce-83c7-08ae12fb327a +foldingStartMarker: >- + (?x) # turn on extended mode + ^ # a line beginning with + \s* # some optional space + [{\[] # the start of an object or array + (?! # but not followed by + .* # whatever + [}\]] # and the close of an object or array + ,? # an optional comma + \s* # some optional space + $ # at the end of the line + ) + | # ...or... + [{\[] # the start of an object or array + \s* # some optional space + $ # at the end of the line +foldingStopMarker: >- + (?x) # turn on extended mode + ^ # a line beginning with + \s* # some optional space + [}\]] # and the close of an object or array +keyEquivalent: ^~J + +patterns: +- include: '#value' + +repository: + array: + name: meta.structure.array.json + begin: \[ + beginCaptures: + '0': {name: punctuation.definition.array.begin.json} + end: \] + endCaptures: + '0': {name: punctuation.definition.array.end.json} + patterns: + - include: '#value' + - name: punctuation.separator.array.json + match: ',' + - name: invalid.illegal.expected-array-separator.json + match: '[^\s\]]' + + comments: + patterns: + - name: comment.block.documentation.json + begin: /\*\* + end: \*/ + captures: + '0': {name: punctuation.definition.comment.json} + - name: comment.block.json + begin: /\* + end: \*/ + captures: + '0': {name: punctuation.definition.comment.json} + - name: comment.line.double-slash.js + match: (//).*$\n? + captures: + '1': {name: punctuation.definition.comment.json} + + constant: + name: constant.language.json + match: \b(?:true|false|null)\b + + # handles integer and decimal numbers + number: + name: constant.numeric.json + match: >- + (?x) # turn on extended mode + -? # an optional minus + (?: + 0 # a zero + | # ...or... + [1-9] # a 1-9 character + \d* # followed by zero or more digits + ) + (?: + (?: + \. # a period + \d+ # followed by one or more digits + )? + (?: + [eE] # an e character + [+-]? # followed by an option +/- + \d+ # followed by one or more digits + )? # make exponent optional + )? # make decimal portion optional + + # a JSON object + object: + name: meta.structure.dictionary.json + begin: \{ + beginCaptures: + '0': {name: punctuation.definition.dictionary.begin.json} + end: \} + endCaptures: + '0': {name: punctuation.definition.dictionary.end.json} + patterns: + - comment: the JSON object key + include: '#string' + - include: '#comments' + - name: meta.structure.dictionary.value.json + begin: ':' + beginCaptures: + '0': {name: punctuation.separator.dictionary.key-value.json} + end: (,)|(?=\}) + endCaptures: + '1': {name: punctuation.separator.dictionary.pair.json} + patterns: + - comment: the JSON object value + include: '#value' + - name: invalid.illegal.expected-dictionary-separator.json + match: '[^\s,]' + - name: invalid.illegal.expected-dictionary-separator.json + match: '[^\s\}]' + + string: + name: string.quoted.double.json + begin: '"' + beginCaptures: + '0': {name: punctuation.definition.string.begin.json} + end: '"' + endCaptures: + '0': {name: punctuation.definition.string.end.json} + patterns: + - name: constant.character.escape.json + match: >- + (?x) # turn on extended mode + \\ # a literal backslash + (?: # ...followed by... + ["\\/bfnrt] # one of these characters + | # ...or... + u # a u + [0-9a-fA-F]{4}) # and four hex digits + - name: invalid.illegal.unrecognized-string-escape.json + match: \\. + + # the 'value' diagram at http://json.org + value: + patterns: + - include: '#constant' + - include: '#number' + - include: '#string' + - include: '#array' + - include: '#object' + - include: '#comments' diff --git a/JSON (JavaScriptNext).tmLanguage b/JSON (JavaScriptNext).tmLanguage new file mode 100644 index 0000000..1a224b1 --- /dev/null +++ b/JSON (JavaScriptNext).tmLanguage @@ -0,0 +1,344 @@ + + + + + fileTypes + + json + sublime-settings + sublime-menu + sublime-keymap + sublime-mousemap + sublime-theme + sublime-build + sublime-project + sublime-completions + + foldingStartMarker + (?x) # turn on extended mode + ^ # a line beginning with + \s* # some optional space + [{\[] # the start of an object or array + (?! # but not followed by + .* # whatever + [}\]] # and the close of an object or array + ,? # an optional comma + \s* # some optional space + $ # at the end of the line + ) + | # ...or... + [{\[] # the start of an object or array + \s* # some optional space + $ # at the end of the line + foldingStopMarker + (?x) # turn on extended mode + ^ # a line beginning with + \s* # some optional space + [}\]] # and the close of an object or array + keyEquivalent + ^~J + name + JSON (Javascript Next) + patterns + + + include + #value + + + repository + + array + + begin + \[ + beginCaptures + + 0 + + name + punctuation.definition.array.begin.json + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.array.end.json + + + name + meta.structure.array.json + patterns + + + include + #value + + + match + , + name + punctuation.separator.array.json + + + match + [^\s\]] + name + invalid.illegal.expected-array-separator.json + + + + comments + + patterns + + + begin + /\*\* + captures + + 0 + + name + punctuation.definition.comment.json + + + end + \*/ + name + comment.block.documentation.json + + + begin + /\* + captures + + 0 + + name + punctuation.definition.comment.json + + + end + \*/ + name + comment.block.json + + + captures + + 1 + + name + punctuation.definition.comment.json + + + match + (//).*$\n? + name + comment.line.double-slash.js + + + + constant + + match + \b(?:true|false|null)\b + name + constant.language.json + + number + + match + (?x) # turn on extended mode + -? # an optional minus + (?: + 0 # a zero + | # ...or... + [1-9] # a 1-9 character + \d* # followed by zero or more digits + ) + (?: + (?: + \. # a period + \d+ # followed by one or more digits + )? + (?: + [eE] # an e character + [+-]? # followed by an option +/- + \d+ # followed by one or more digits + )? # make exponent optional + )? # make decimal portion optional + name + constant.numeric.json + + object + + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.dictionary.begin.json + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.dictionary.end.json + + + name + meta.structure.dictionary.json + patterns + + + comment + the JSON object key + include + #string + + + include + #comments + + + begin + : + beginCaptures + + 0 + + name + punctuation.separator.dictionary.key-value.json + + + end + (,)|(?=\}) + endCaptures + + 1 + + name + punctuation.separator.dictionary.pair.json + + + name + meta.structure.dictionary.value.json + patterns + + + comment + the JSON object value + include + #value + + + match + [^\s,] + name + invalid.illegal.expected-dictionary-separator.json + + + + + match + [^\s\}] + name + invalid.illegal.expected-dictionary-separator.json + + + + string + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.json + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.json + + + name + string.quoted.double.json + patterns + + + match + (?x) # turn on extended mode + \\ # a literal backslash + (?: # ...followed by... + ["\\/bfnrt] # one of these characters + | # ...or... + u # a u + [0-9a-fA-F]{4}) # and four hex digits + name + constant.character.escape.json + + + match + \\. + name + invalid.illegal.unrecognized-string-escape.json + + + + value + + patterns + + + include + #constant + + + include + #number + + + include + #string + + + include + #array + + + include + #object + + + include + #comments + + + + + scopeName + source.json + uuid + 8f97457b-516e-48ce-83c7-08ae12fb327a + + From da6ed79658ed7b536770335b5960b0571a283f64 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Wed, 8 Apr 2015 23:04:10 -0400 Subject: [PATCH 189/202] Include string-content in literal-quasi --- JavaScriptNext.YAML-tmLanguage | 1 + JavaScriptNext.tmLanguage | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8038b52..8a60839 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -810,6 +810,7 @@ repository: endCaptures: '0': {name: punctuation.definition.quasi.end.js} patterns: + - include: '#string-content' - name: entity.quasi.element.js begin: \${ beginCaptures: diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 209fb95..d1d3b6f 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1848,6 +1848,10 @@ string.quasi.js patterns + + include + #string-content + begin \${ From d504e88ca91b236b0b4327fcdff426c154b77523 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Wed, 8 Apr 2015 23:32:26 -0400 Subject: [PATCH 190/202] Match binary and octal literals --- JavaScriptNext.YAML-tmLanguage | 2 ++ JavaScriptNext.tmLanguage | 2 ++ 2 files changed, 4 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 8038b52..4615c38 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -781,6 +781,8 @@ repository: (?xi) (?:\B[-+])? (?: + \b0b[0-1]*| # binary + \b0o[0-7]*| # octal \b0x[0-9a-f]*| # hex ( \B\.[0-9]+| # e.g. .999 diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 209fb95..418c80c 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1616,6 +1616,8 @@ (?xi) (?:\B[-+])? (?: + \b0b[0-1]*| # binary + \b0o[0-7]*| # octal \b0x[0-9a-f]*| # hex ( \B\.[0-9]+| # e.g. .999 From 691a9c69ded27e9a7bacfb86dfe60ea769e142f7 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Thu, 9 Apr 2015 21:26:37 -0400 Subject: [PATCH 191/202] Add JavaScript Indent --- JavaScript Indent.YAML-tmPreferences | 11 +++++++++++ JavaScript Indent.tmPreferences | 23 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 JavaScript Indent.YAML-tmPreferences create mode 100644 JavaScript Indent.tmPreferences diff --git a/JavaScript Indent.YAML-tmPreferences b/JavaScript Indent.YAML-tmPreferences new file mode 100644 index 0000000..03232a3 --- /dev/null +++ b/JavaScript Indent.YAML-tmPreferences @@ -0,0 +1,11 @@ +# [PackageDev] target_format: plist, ext: tmPreferences +name: JavaScript Indent +uuid: d408c7f9-4402-4a22-98f9-156c144591b7 +scope: source.js +settings: + bracketIndentNextLinePattern: >- + (?x) + ^ \s* \b(if|while|else)\b [^;]* $ + | ^ \s* \b(for)\b .* $ + decreaseIndentPattern: ^(.*\*/)?\s*[}].*$ + increaseIndentPattern: ^.*\{[^}"']*$ diff --git a/JavaScript Indent.tmPreferences b/JavaScript Indent.tmPreferences new file mode 100644 index 0000000..d794252 --- /dev/null +++ b/JavaScript Indent.tmPreferences @@ -0,0 +1,23 @@ + + + + + name + JavaScript Indent + scope + source.js + settings + + bracketIndentNextLinePattern + (?x) + ^ \s* \b(if|while|else)\b [^;]* $ + | ^ \s* \b(for)\b .* $ + decreaseIndentPattern + ^(.*\*/)?\s*[}].*$ + increaseIndentPattern + ^.*\{[^}"']*$ + + uuid + d408c7f9-4402-4a22-98f9-156c144591b7 + + From 9eadbf40d07a1a1809552bf573a2b116919c3e3a Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 11 Apr 2015 14:22:52 -0400 Subject: [PATCH 192/202] Recategorize "await" as "keyword.control.flow" --- JavaScriptNext.YAML-tmLanguage | 4 ++-- JavaScriptNext.tmLanguage | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 4311eb2..5f33ad7 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -703,7 +703,7 @@ repository: - include: '#literal-keyword-storage' - name: keyword.control.flow.js - match: (?- diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 1c7afe3..3a47cfd 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -1473,7 +1473,7 @@ match - (?<!\.)\b(return|yield)\b + (?<!\.)\b(await|return|yield)\b name keyword.control.flow.js @@ -1880,7 +1880,7 @@ match - (?<!\.)\b(await|delete|in|instanceof|new|of|typeof|void|with)\b + (?<!\.)\b(delete|in|instanceof|new|of|typeof|void|with)\b name keyword.operator.js From 41e413af5b71d8782f2d4c6ceaaf0910d02250d0 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 11 Apr 2015 15:20:40 -0400 Subject: [PATCH 193/202] Match "yield *" --- JavaScriptNext.YAML-tmLanguage | 7 ++++++- JavaScriptNext.tmLanguage | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 5f33ad7..7096a07 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -702,8 +702,13 @@ repository: patterns: - include: '#literal-keyword-storage' + - match: (?include #literal-keyword-storage + + captures + + 1 + + name + keyword.control.flow.js + + 2 + + name + keyword.generator.asterisk.js + + + match + (?<!\.)\b(yield)\s*(\*)?|\b + match - (?<!\.)\b(await|return|yield)\b + (?<!\.)\b(await|return)\b name keyword.control.flow.js From 8d2ae3937ae38eff31581047d1196e8fe57d51f5 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sat, 11 Apr 2015 15:34:51 -0400 Subject: [PATCH 194/202] Fix regexp "punctuation.definition.string.begin" --- JavaScriptNext.YAML-tmLanguage | 12 +++++------- JavaScriptNext.tmLanguage | 18 ++++-------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 4311eb2..04dfc2e 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -915,7 +915,7 @@ repository: patterns: # ignore ++, -- since they're uncommon, distinguishing them is not possible in sublime text, see: # http://stackoverflow.com/questions/5519596/when-parsing-javascript-what-determines-the-meaning-of-a-slash - - contentName: string.regexp.js + - name: string.regexp.js begin: >- (?x) (?<= @@ -926,13 +926,11 @@ repository: (/) (?!/|\*|$) beginCaptures: - '1': {name: string.regexp.js} - '2': {name: punctuation.definition.string.begin.js} - end: ((/)([gimy]*)) + '1': {name: punctuation.definition.string.begin.js} + end: (/)([gimy]*) endCaptures: - '1': {name: string.regexp.js} - '2': {name: punctuation.definition.string.end.js} - '3': {name: keyword.other.js} + '1': {name: punctuation.definition.string.end.js} + '2': {name: keyword.other.js} patterns: - include: source.regexp.js diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 1c7afe3..63a1153 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -2145,38 +2145,28 @@ beginCaptures 1 - - name - string.regexp.js - - 2 name punctuation.definition.string.begin.js - contentName - string.regexp.js end - ((/)([gimy]*)) + (/)([gimy]*) endCaptures 1 - - name - string.regexp.js - - 2 name punctuation.definition.string.end.js - 3 + 2 name keyword.other.js + name + string.regexp.js patterns From 134a42c8ec63e9ff8d92011459fd7828ed1fe57a Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Fri, 17 Apr 2015 23:05:33 -0400 Subject: [PATCH 195/202] Fix eager yield --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 6f8b4e3..c26b7e9 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -702,7 +702,7 @@ repository: patterns: - include: '#literal-keyword-storage' - - match: (? match - (?<!\.)\b(yield)\s*(\*)?|\b + (?<!\.)\b(yield)\b(?:\s*(\*))? match From 918e89185002958fa2e76a932d48c39948acb836 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Mon, 20 Apr 2015 00:41:25 -0400 Subject: [PATCH 196/202] Match function stored to single var --- JavaScriptNext.YAML-tmLanguage | 50 ++++++++++++++ JavaScriptNext.tmLanguage | 121 +++++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c26b7e9..1cabfe7 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -281,6 +281,25 @@ repository: patterns: - include: '#function-declaration-parameters' + # e.g. play = function(arg1, arg2) { } + - name: meta.function.js + begin: >- + (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(?:(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures: + '1': {name: entity.name.function.js} + '2': {name: storage.type.js} + '3': {name: storage.type.function.js} + '4': {name: keyword.generator.asterisk.js} + '5': {name: entity.name.function.js} + end: (?<=\)) + patterns: + - include: '#function-declaration-parameters' + # e.g. Sound.prototype.play = function(arg1, arg2) { } - name: meta.prototype.function.js begin: >- @@ -407,6 +426,37 @@ repository: '2': {name: variable.parameter.function.js} '3': {name: storage.type.function.arrow.js} + # e.g. play = (args) => { } + - name: meta.function.arrow.js + begin: >- + (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures: + '1': {name: entity.name.function.js} + '2': {name: storage.type.js} + end: (?<=\))\s*(=>) + endCaptures: + '1': {name: storage.type.function.arrow.js} + patterns: + - include: '#function-declaration-parameters' + + # e.g. play = arg => { } + - name: meta.function.arrow.js + match: >- + (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + captures: + '1': {name: entity.name.function.js} + '2': {name: storage.type.js} + '3': {name: variable.parameter.function.js} + '4': {name: storage.type.function.arrow.js} + # e.g. Sound.prototype.play = (args) => { } - name: meta.prototype.function.arrow.js begin: >- diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage index 7d3cd87..35ca941 100644 --- a/JavaScriptNext.tmLanguage +++ b/JavaScriptNext.tmLanguage @@ -428,6 +428,79 @@ begin (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + entity.name.function.js + + 2 + + name + storage.type.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.arrow.js + patterns + + + include + #function-declaration-parameters + + + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + storage.type.js + + 3 + + name + variable.parameter.function.js + + 4 + + name + storage.type.function.arrow.js + + + match + (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.arrow.js + + + begin + (?x) (\b_?[A-Z][$\w]*)? (\.)(prototype) (\.)([_$a-zA-Z][$\w]*) @@ -1130,6 +1203,54 @@ begin (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(?:(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 + + name + entity.name.function.js + + 2 + + name + storage.type.js + + 3 + + name + storage.type.function.js + + 4 + + name + keyword.generator.asterisk.js + + 5 + + name + entity.name.function.js + + + end + (?<=\)) + name + meta.function.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) (\b_?[A-Z][$\w]*)? (\.)(prototype) (\.)([_$a-zA-Z][$\w]*) From d97eb373b18c99795540c56f7f67235b2502510d Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Mon, 20 Apr 2015 00:42:08 -0400 Subject: [PATCH 197/202] Add arrow funcs and class to Symbol List Function --- Symbol List Function.YAML-tmPreferences | 2 +- Symbol List Function.tmPreferences | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Symbol List Function.YAML-tmPreferences b/Symbol List Function.YAML-tmPreferences index 3d26dcf..d6253c6 100644 --- a/Symbol List Function.YAML-tmPreferences +++ b/Symbol List Function.YAML-tmPreferences @@ -1,7 +1,7 @@ # [PackageDev] target_format: plist, ext: tmPreferences name: Symbol List Function uuid: B521FCF1-DDA6-4C69-8170-F6C2DE4C86CD -scope: source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js +scope: source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js, source.js meta.prototype.function.arrow.js, source.js meta.class.js entity.name.class.js settings: showInSymbolList: '1' showInIndexedSymbolList: '1' diff --git a/Symbol List Function.tmPreferences b/Symbol List Function.tmPreferences index 704a7d4..c1552b0 100644 --- a/Symbol List Function.tmPreferences +++ b/Symbol List Function.tmPreferences @@ -5,7 +5,7 @@ name Symbol List Function scope - source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js + source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js, source.js meta.prototype.function.arrow.js, source.js meta.class.js entity.name.class.js settings showInIndexedSymbolList From 2eb51f71262a6dd4ad99431c58777b4b40af7b74 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Tue, 19 May 2015 08:27:34 -0400 Subject: [PATCH 198/202] Add more console.* methods --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 1cabfe7..c45f01c 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -1092,7 +1092,7 @@ repository: )\b # console - - match: (? match - (?<!\.)\b(console)(?:(\.)(warn|info|log|error|time|timeEnd|assert))?\b + (?<!\.)\b(console)(?:(\.)(warn|info|log|error|time|timeEnd|assert|count|dir|group|groupCollapsed|groupEnd|profile|profileEnd|table|trace))?\b match From 9da0127ca03a6fe7d220e5dced5b2b3b635ede55 Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Sat, 23 May 2015 20:45:11 +0200 Subject: [PATCH 199/202] Update list of Node core modules From: https://github.com/sindresorhus/builtin-modules --- JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index c45f01c..6b37530 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -1100,7 +1100,7 @@ repository: # node - name: support.module.node.js - match: (? match - (?<!\.)\b(natives|buffer|child_process|cluster|crypto|dgram|dns|fs|http|https|net|os|path|punycode|string|string_decoder|readline|repl|tls|tty|util|vm|zlib)\b + (?<!\.)\b(assert|buffer|child_process|cluster|constants|crypto|dgram|dns|domain|events|fs|http|https|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|timers|tls|tty|url|util|vm|zlib)\b name support.module.node.js From 62e10ca4d2df603913d69f8b44c83799074ef75a Mon Sep 17 00:00:00 2001 From: Derek Henscheid Date: Wed, 29 Apr 2015 12:46:24 -0500 Subject: [PATCH 200/202] Fixes #114 Created a tmbundle folder that TextMate 2 uses for installing bundles. Didn't touch any of the other files. --- .../Preferences/Comments.tmPreferences | 36 + .../JavaScript Indent.tmPreferences | 23 + .../Symbol List Banned.tmPreferences | 19 + .../Syntaxes/JavaScriptNext.tmLanguage | 2900 +++++++++++++++++ ...ar Expressions (JavaScriptNext).tmLanguage | 307 ++ JavascriptNext.tmbundle/info.plist | 16 + README.md | 4 + 7 files changed, 3305 insertions(+) create mode 100755 JavascriptNext.tmbundle/Preferences/Comments.tmPreferences create mode 100755 JavascriptNext.tmbundle/Preferences/JavaScript Indent.tmPreferences create mode 100755 JavascriptNext.tmbundle/Preferences/Symbol List Banned.tmPreferences create mode 100755 JavascriptNext.tmbundle/Syntaxes/JavaScriptNext.tmLanguage create mode 100755 JavascriptNext.tmbundle/Syntaxes/Regular Expressions (JavaScriptNext).tmLanguage create mode 100644 JavascriptNext.tmbundle/info.plist diff --git a/JavascriptNext.tmbundle/Preferences/Comments.tmPreferences b/JavascriptNext.tmbundle/Preferences/Comments.tmPreferences new file mode 100755 index 0000000..dba0831 --- /dev/null +++ b/JavascriptNext.tmbundle/Preferences/Comments.tmPreferences @@ -0,0 +1,36 @@ + + + + + name + Comments + scope + source.js, source.json + settings + + shellVariables + + + name + TM_COMMENT_START + value + // + + + name + TM_COMMENT_START_2 + value + /* + + + name + TM_COMMENT_END_2 + value + */ + + + + uuid + A67A8BD9-A951-406F-9175-018DD4B52FD1 + + diff --git a/JavascriptNext.tmbundle/Preferences/JavaScript Indent.tmPreferences b/JavascriptNext.tmbundle/Preferences/JavaScript Indent.tmPreferences new file mode 100755 index 0000000..d794252 --- /dev/null +++ b/JavascriptNext.tmbundle/Preferences/JavaScript Indent.tmPreferences @@ -0,0 +1,23 @@ + + + + + name + JavaScript Indent + scope + source.js + settings + + bracketIndentNextLinePattern + (?x) + ^ \s* \b(if|while|else)\b [^;]* $ + | ^ \s* \b(for)\b .* $ + decreaseIndentPattern + ^(.*\*/)?\s*[}].*$ + increaseIndentPattern + ^.*\{[^}"']*$ + + uuid + d408c7f9-4402-4a22-98f9-156c144591b7 + + diff --git a/JavascriptNext.tmbundle/Preferences/Symbol List Banned.tmPreferences b/JavascriptNext.tmbundle/Preferences/Symbol List Banned.tmPreferences new file mode 100755 index 0000000..bcad4ab --- /dev/null +++ b/JavascriptNext.tmbundle/Preferences/Symbol List Banned.tmPreferences @@ -0,0 +1,19 @@ + + + + + name + Symbol List Banned + scope + source.js meta.function-call, source.js meta.instance.constructor + settings + + showInIndexedSymbolList + 1 + showInSymbolList + 0 + + uuid + 71B2B356-23EC-43B8-80A7-CB32E8F2718F + + diff --git a/JavascriptNext.tmbundle/Syntaxes/JavaScriptNext.tmLanguage b/JavascriptNext.tmbundle/Syntaxes/JavaScriptNext.tmLanguage new file mode 100755 index 0000000..4fd643c --- /dev/null +++ b/JavascriptNext.tmbundle/Syntaxes/JavaScriptNext.tmLanguage @@ -0,0 +1,2900 @@ + + + + + fileTypes + + es6 + + firstLineMatch + ^#!/.*\b(node|js)$\n? + keyEquivalent + ^~J + name + JavaScript Next + patterns + + + include + #core + + + repository + + brackets + + patterns + + + include + #round-brackets + + + include + #square-brackets + + + include + #curly-brackets + + + + comments + + patterns + + + include + #special-comments-conditional-compilation + + + begin + /\*\*(?!/) + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/ + name + comment.block.documentation.js + + + begin + /\* + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/ + name + comment.block.js + + + captures + + 0 + + name + punctuation.definition.comment.js + + + match + (<!--|-->) + name + comment.block.html.js + + + captures + + 1 + + name + punctuation.definition.comment.js + + + match + (//).*$\n? + name + comment.line.double-slash.js + + + captures + + 1 + + name + punctuation.definition.comment.js + + + match + ^(#!).*$\n? + name + comment.line.shebang.js + + + + core + + patterns + + + include + #literal-function-labels + + + include + #literal-arrow-function-labels + + + include + #literal-labels + + + include + #literal-keywords + + + include + #literal-for + + + include + #literal-switch + + + include + #expression + + + include + #literal-punctuation + + + + curly-brackets + + patterns + + + begin + \{ + beginCaptures + + 0 + + name + meta.brace.curly.js + + + end + \} + endCaptures + + 0 + + name + meta.brace.curly.js + + + name + meta.group.braces.curly + patterns + + + include + $self + + + + + + expression + + patterns + + + include + #support + + + include + #literal-function + + + include + #literal-arrow-function + + + include + #literal-prototype + + + include + #literal-regexp + + + include + #literal-number + + + include + #literal-quasi + + + include + #literal-string + + + include + #literal-language-constant + + + include + #literal-language-variable + + + include + #literal-method + + + include + #literal-module + + + include + #literal-class + + + include + #literal-constructor + + + include + #literal-method-call + + + include + #literal-function-call + + + include + #comments + + + include + #brackets + + + include + #literal-operators + + + include + #literal-variable + + + + function-declaration-parameters + + patterns + + + begin + \( + beginCaptures + + 0 + + name + punctuation.definition.parameters.begin.js + + + end + \) + endCaptures + + 0 + + name + punctuation.definition.parameters.end.js + + + patterns + + + match + (?<!\.)\.\.\. + name + keyword.operator.spread.js + + + match + [_$a-zA-Z][$\w]* + name + variable.parameter.function.js + + + match + , + name + punctuation.separator.parameter.function.js + + + begin + = + beginCaptures + + 0 + + name + keyword.operator.assignment.js + + + end + (?=[,)]) + name + meta.parameter.optional.js + patterns + + + include + #expression + + + + + include + #comments + + + + + + literal-arrow-function + + patterns + + + begin + (?x) + (\basync)?\s* + (?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + storage.type.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.arrow.js + patterns + + + include + #function-declaration-parameters + + + + + captures + + 1 + + name + storage.type.js + + 2 + + name + variable.parameter.function.js + + 3 + + name + storage.type.function.arrow.js + + + match + (?x) + (\basync)?\s* + \b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.arrow.js + + + begin + (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + entity.name.function.js + + 2 + + name + storage.type.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.arrow.js + patterns + + + include + #function-declaration-parameters + + + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + storage.type.js + + 3 + + name + variable.parameter.function.js + + 4 + + name + storage.type.function.arrow.js + + + match + (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.arrow.js + + + begin + (?x) + (\b_?[A-Z][$\w]*)? + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + variable.language.prototype.js + + 4 + + name + keyword.operator.accessor.js + + 5 + + name + entity.name.function.js + + 6 + + name + storage.type.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.prototype.function.arrow.js + patterns + + + include + #function-declaration-parameters + + + + + captures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + variable.language.prototype.js + + 4 + + name + keyword.operator.accessor.js + + 5 + + name + entity.name.function.js + + 6 + + name + storage.type.js + + 7 + + name + variable.parameter.function.js + + 8 + + name + storage.type.function.arrow.js + + + match + (?x) + (\b_?[A-Z][$\w]*)? + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.prototype.function.arrow.js + + + begin + (?x) + (\b_?[A-Z][$\w]*)? + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + entity.name.function.js + + 4 + + name + storage.type.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.static.arrow.js + patterns + + + include + #function-declaration-parameters + + + + + captures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + entity.name.function.js + + 4 + + name + storage.type.js + + 5 + + name + variable.parameter.function.js + + 6 + + name + storage.type.function.arrow.js + + + match + (?x) + (\b_?[A-Z][$\w]*)? + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.static.arrow.js + + + + literal-arrow-function-labels + + patterns + + + begin + (?x) + \b([_$a-zA-Z][$\w]*) + \s*(:) + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + entity.name.function.js + + 2 + + name + punctuation.separator.key-value.js + + 3 + + name + storage.type.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.json.arrow.js + patterns + + + include + #function-declaration-parameters + + + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + punctuation.separator.key-value.js + + 3 + + name + storage.type.js + + 4 + + name + variable.parameter.function.js + + 5 + + name + storage.type.function.arrow.js + + + match + (?x) + \b([_$a-zA-Z][$\w]*) + \s*(:) + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.json.arrow.js + + + begin + (?x) + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) + \s*(async)? + \s*(?=\([^()]*\)\s*(=>)) + beginCaptures + + 1 + + name + string.quoted.single.js + + 10 + + name + storage.type.js + + 2 + + name + punctuation.definition.string.begin.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + + + end + (?<=\))\s*(=>) + endCaptures + + 1 + + name + storage.type.function.arrow.js + + + name + meta.function.json.arrow.js + patterns + + + include + #function-declaration-parameters + + + + + captures + + 1 + + name + string.quoted.single.js + + 10 + + name + storage.type.js + + 11 + + name + variable.parameter.function.js + + 12 + + name + storage.type.function.arrow.js + + 2 + + name + punctuation.definition.string.begin.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + + + match + (?x) + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) + \s*(async)? + \s*\b([_$a-zA-Z][$\w]*)\s*(=>) + name + meta.function.json.arrow.js + + + + literal-class + + patterns + + + begin + (?x) + (?<!\.)\b(class) + \s+((?!\b(extends)\b)[_$a-zA-Z][$\w]*)? + beginCaptures + + 1 + + name + storage.type.class.js + + 2 + + name + entity.name.class.js + + + end + } + endCaptures + + 0 + + name + meta.brace.curly.js + + + name + meta.class.js + patterns + + + begin + \b(extends)\b + beginCaptures + + 1 + + name + storage.type.extends.js + + + end + (?={) + name + meta.class.extends.js + patterns + + + include + #expression + + + + + begin + { + beginCaptures + + 0 + + name + meta.brace.curly.js + + + end + (?=}) + patterns + + + include + #brackets + + + include + #comments + + + include + #literal-method + + + + + + + + literal-constructor + + patterns + + + begin + (new)\s+(?=[_$a-zA-Z][$\w.]*) + beginCaptures + + 1 + + name + keyword.operator.new.js + + + end + (?![_$a-zA-Z][$\w.]*) + name + meta.instance.constructor + patterns + + + include + #support + + + captures + + 2 + + name + entity.name.type.new.js + + + match + ([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*) + + + + + + literal-for + + patterns + + + begin + (?<!\.)\b(for)\b + beginCaptures + + 1 + + name + keyword.control.loop.js + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.js + + + name + meta.for.js + patterns + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.js + + + end + (?=\)) + patterns + + + include + #literal-keyword-storage + + + include + #expression + + + include + #literal-punctuation + + + + + + + + literal-function + + patterns + + + begin + (?x) + (?:\b(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 + + name + storage.type.js + + 2 + + name + storage.type.function.js + + 3 + + name + keyword.generator.asterisk.js + + 4 + + name + entity.name.function.js + + + end + (?<=\)) + name + meta.function.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + (\b[_$a-zA-Z][$\w]*) + \s*= + \s*(?:(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 + + name + entity.name.function.js + + 2 + + name + storage.type.js + + 3 + + name + storage.type.function.js + + 4 + + name + keyword.generator.asterisk.js + + 5 + + name + entity.name.function.js + + + end + (?<=\)) + name + meta.function.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + (\b_?[A-Z][$\w]*)? + (\.)(prototype) + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(?:(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + variable.language.prototype.js + + 4 + + name + keyword.operator.accessor.js + + 5 + + name + entity.name.function.js + + 6 + + name + storage.type.js + + 7 + + name + storage.type.function.js + + 8 + + name + keyword.generator.asterisk.js + + 9 + + name + entity.name.function.js + + + end + (?<=\)) + name + meta.prototype.function.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + (\b_?[A-Z][$\w]*)? + (\.)([_$a-zA-Z][$\w]*) + \s*= + \s*(?:(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + entity.name.function.js + + 4 + + name + storage.type.js + + 5 + + name + storage.type.function.js + + 6 + + name + keyword.generator.asterisk.js + + 7 + + name + entity.name.function.js + + + end + (?<=\)) + name + meta.function.static.js + patterns + + + include + #function-declaration-parameters + + + + + + literal-function-call + + patterns + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + meta.group.braces.round.function.arguments.js + + + match + (?x) + ([_$a-zA-Z][$\w]*)\s* + (\(\s*\)) + name + meta.function-call.without-arguments.js + + + captures + + 1 + + name + entity.name.function.js + + + match + (?x) + ([_$a-zA-Z][$\w]*)\s* + (?=\() + name + meta.function-call.with-arguments.js + + + + literal-function-labels + + patterns + + + begin + (?x) + \b([_$a-zA-Z][$\w]*) + \s*(:) + \s*(?:(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 + + name + entity.name.function.js + + 2 + + name + punctuation.separator.key-value.js + + 3 + + name + storage.type.js + + 4 + + name + storage.type.function.js + + 5 + + name + keyword.generator.asterisk.js + + 6 + + name + entity.name.function.js + + + end + (?<=\)) + name + meta.function.json.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + (?: + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + ) + \s*(:) + \s*(?:(async)\s+)? + \s*(function)(?:\s*(\*)|(?=\s|[(])) + \s*([_$a-zA-Z][$\w]*)?\s* + beginCaptures + + 1 + + name + string.quoted.single.js + + 10 + + name + storage.type.js + + 11 + + name + storage.type.function.js + + 12 + + name + keyword.generator.asterisk.js + + 13 + + name + entity.name.function.js + + 2 + + name + punctuation.definition.string.begin.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + punctuation.separator.key-value.js + + + end + (?<=\)) + name + meta.function.json.js + patterns + + + include + #function-declaration-parameters + + + + + + literal-keyword-storage + + patterns + + + match + (?<!\.)\b(const|let|var)\b + name + storage.type.js + + + + literal-keywords + + patterns + + + include + #literal-keyword-storage + + + captures + + 1 + + name + keyword.control.flow.js + + 2 + + name + keyword.generator.asterisk.js + + + match + (?<!\.)\b(yield)\b(?:\s*(\*))? + + + match + (?<!\.)\b(await|return)\b + name + keyword.control.flow.js + + + match + (?<!\.)\b(if|else)\b + name + keyword.control.conditional.js + + + match + (?<!\.)\b(catch|finally|throw|try)\b + name + keyword.control.trycatch.js + + + match + (?<!\.)\b(break|continue|do|goto|while)\b + name + keyword.control.loop.js + + + + literal-labels + + patterns + + + begin + (?x) + (?<!\?)(?<!\?\s)(?=( + ((')((?:[^']|\\')*)('))| + ((")((?:[^"]|\\")*)(")) + )\s*:) + end + : + endCaptures + + 0 + + name + punctuation.separator.key-value.js + + + patterns + + + include + #literal-string + + + + + captures + + 1 + + name + string.unquoted.label.js + + 2 + + name + punctuation.separator.key-value.js + + + match + (?<!\.|\?|\?\s)([_$a-zA-Z][$\w]*)\s*(:) + name + constant.other.object.key.js + + + + literal-language-constant + + patterns + + + match + (?<!\.)\btrue\b + name + constant.language.boolean.true.js + + + match + (?<!\.)\bfalse\b + name + constant.language.boolean.false.js + + + match + (?<!\.)\bnull\b + name + constant.language.null.js + + + match + (?<!\.)\bundefined\b + name + constant.language.undefined.js + + + match + (?<!\.)\bNaN\b + name + constant.language.nan.js + + + + literal-language-variable + + patterns + + + match + (?<!(?<!\.\.)\.)\b(arguments)\b + name + variable.language.arguments.js + + + match + (?<!(?<!\.\.)\.)\b(super)\b + name + variable.language.super.js + + + match + (?<!(?<!\.\.)\.)\b(this)\b + name + variable.language.this.js + + + match + (?<!(?<!\.\.)\.)\b(self)\b + name + variable.language.self.js + + + match + (?<=\.)\b(__proto__)\b + name + variable.language.proto.js + + + match + (?<=\.)\b(constructor)\b + name + variable.language.constructor.js + + + match + (?<=\.)\b(prototype)\b + name + variable.language.prototype.js + + + + literal-method + + patterns + + + begin + (?x) + (?:\b(static)\s+)? + (?:\b(async)\s+)? + (?:(\*)\s*)?([_$a-zA-Z][$\w]*)\s* + (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) + beginCaptures + + 1 + + name + storage.type.js + + 2 + + name + storage.type.js + + 3 + + name + keyword.generator.asterisk.js + + 4 + + name + entity.name.method.js + + + end + (?<=\)) + name + meta.method.js + patterns + + + include + #function-declaration-parameters + + + + + begin + (?x) + \b(?:(static)\s+)? + (get|set)\s+ + ([_$a-zA-Z][$\w]*)\s* + (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) + beginCaptures + + 1 + + name + storage.type.js + + 2 + + name + storage.type.accessor.js + + 3 + + name + entity.name.accessor.js + + + end + (?<=\)) + name + meta.accessor.js + patterns + + + include + #function-declaration-parameters + + + + + + literal-method-call + + patterns + + + captures + + 1 + + name + variable.other.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + entity.name.function.js + + 4 + + name + meta.group.braces.round.function.arguments.js + + + match + (?x) + (?:(?<=\.)|\b) + ([A-Z][$\w]*)\s*(\.) + ([_$a-zA-Z][$\w]*)\s* + (\(\s*\)) + name + meta.function-call.static.without-arguments.js + + + captures + + 1 + + name + variable.other.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + entity.name.function.js + + + match + (?x) + (?:(?<=\.)|\b) + ([A-Z][$\w]*)\s*(\.) + ([_$a-zA-Z][$\w]*)\s* + (?=\() + name + meta.function-call.static.with-arguments.js + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + meta.group.braces.round.function.arguments.js + + + match + (?x) + (?<=\.) + ([_$a-zA-Z][$\w]*)\s* + (\(\s*\)) + name + meta.function-call.method.without-arguments.js + + + captures + + 1 + + name + entity.name.function.js + + + match + (?x) + (?<=\.) + ([_$a-zA-Z][$\w]*)\s* + (?=\() + name + meta.function-call.method.with-arguments.js + + + + literal-module + + patterns + + + match + (?<!\.)\b(import|export|default|from|as)\b + name + keyword.operator.module.js + + + + literal-number + + patterns + + + match + (?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+) + name + invalid.illegal.numeric.hex.js + + + match + (?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+) + name + invalid.illegal.numeric.octal.js + + + match + (?xi) + (?:\B[-+])? + (?: + \b0b[0-1]*| # binary + \b0o[0-7]*| # octal + \b0x[0-9a-f]*| # hex + ( + \B\.[0-9]+| # e.g. .999 + \b[0-9]+(\.[0-9]*)? # e.g. 999.999, 999. or 999 + )(e[-+]?[0-9]+)? # e.g. e+123, E-123 + ) + name + constant.numeric.js + + + match + (?:\B[-+]|\b)(Infinity)\b + name + constant.language.infinity.js + + + + literal-operators + + patterns + + + match + (?<!\.)\b(delete|in|instanceof|new|of|typeof|void|with)\b + name + keyword.operator.js + + + match + (?x) + !(?!=)| # logical-not right-to-left right + && | # logical-and left-to-right both + \|\| | # logical-or left-to-right both + name + keyword.operator.logical.js + + + match + (?x) + =(?!=)| # assignment right-to-left both + name + keyword.operator.assignment.js + + + match + (?x) + %= | # assignment right-to-left both + &= | # assignment right-to-left both + \*= | # assignment right-to-left both + \+= | # assignment right-to-left both + -= | # assignment right-to-left both + /= | # assignment right-to-left both + \^= | # assignment right-to-left both + \|= | # assignment right-to-left both + <<= | # assignment right-to-left both + >>= | # assignment right-to-left both + >>>= | # assignment right-to-left both + name + keyword.operator.assignment.augmented.js + + + match + (?x) + ~ | # bitwise-not right-to-left right + << | # bitwise-shift left-to-right both + >>> | # bitwise-shift left-to-right both + >> | # bitwise-shift left-to-right both + & | # bitwise-and left-to-right both + \^ | # bitwise-xor left-to-right both + \| # bitwise-or left-to-right both + name + keyword.operator.bitwise.js + + + match + (?x) + <= | # relational left-to-right both + >= | # relational left-to-right both + < | # relational left-to-right both + > # relational left-to-right both + name + keyword.operator.relational.js + + + match + (?x) + === | # equality left-to-right both + !== | # equality left-to-right both + == | # equality left-to-right both + != # equality left-to-right both + name + keyword.operator.comparison.js + + + match + (?x) + -- | # decrement n/a right-or-left + \+\+ | # increment n/a right-or-left + / | # division left-to-right both + % | # modulus left-to-right both + \* | # multiplication left-to-right both + \+ | # addition left-to-right both + - # subtraction left-to-right both + name + keyword.operator.arithmetic.js + + + match + \?|: + name + keyword.operator.ternary.js + + + match + (?<!\.)\.\.\. + name + keyword.operator.spread.js + + + match + \. + name + keyword.operator.accessor.js + + + + literal-prototype + + patterns + + + captures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + variable.language.prototype.js + + + match + ([_$a-zA-Z][$\w]*)(\.)(prototype)\b + name + meta.prototype.access.js + + + captures + + 1 + + name + entity.name.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + variable.language.prototype.js + + + match + ([_$a-zA-Z][$\w]*)(\.)(prototype)\s*=\s* + name + meta.prototype.declaration.js + + + + literal-punctuation + + patterns + + + match + \; + name + punctuation.terminator.statement.js + + + match + , + name + meta.delimiter.comma.js + + + + literal-quasi + + patterns + + + begin + ([a-zA-Z$_][\w$_]*)?(`) + beginCaptures + + 1 + + name + entity.quasi.tag.name.js + + 2 + + name + punctuation.definition.quasi.begin.js + + + end + ` + endCaptures + + 0 + + name + punctuation.definition.quasi.end.js + + + name + string.quasi.js + patterns + + + include + #string-content + + + begin + \${ + beginCaptures + + 0 + + name + punctuation.quasi.element.begin.js + + + end + } + endCaptures + + 0 + + name + punctuation.quasi.element.end.js + + + name + entity.quasi.element.js + patterns + + + include + #expression + + + + + + + + literal-regexp + + patterns + + + begin + (?x) + (?<= + \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| + \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow| + ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw|^ + )\s* + (/) + (?!/|\*|$) + beginCaptures + + 1 + + name + punctuation.definition.string.begin.js + + + end + (/)([gimy]*) + endCaptures + + 1 + + name + punctuation.definition.string.end.js + + 2 + + name + keyword.other.js + + + name + string.regexp.js + patterns + + + include + source.regexp.js + + + + + + literal-string + + patterns + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.js + + + end + (')|(\n) + endCaptures + + 1 + + name + punctuation.definition.string.end.js + + 2 + + name + invalid.illegal.newline.js + + + name + string.quoted.single.js + patterns + + + include + #string-content + + + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.js + + + end + (")|(\n) + endCaptures + + 1 + + name + punctuation.definition.string.end.js + + 2 + + name + invalid.illegal.newline.js + + + name + string.quoted.double.js + patterns + + + include + #string-content + + + + + + literal-switch + + patterns + + + begin + (?<!\.)\b(switch)\b + beginCaptures + + 1 + + name + keyword.control.switch.js + + + end + \} + endCaptures + + 0 + + name + meta.brace.curly.js + + + name + meta.switch.js + patterns + + + include + #round-brackets + + + begin + \{ + beginCaptures + + 0 + + name + meta.brace.curly.js + + + end + (?=}) + patterns + + + begin + (?<!\.)\b(case|default)\b + beginCaptures + + 1 + + name + keyword.control.switch.js + + + end + (?=:) + patterns + + + include + #expression + + + + + include + $self + + + + + + + + literal-variable + + patterns + + + match + [A-Z][_$\dA-Z]*\b + name + variable.other.constant.js + + + captures + + 1 + + name + punctuation.dollar.js + + + match + (\$)[$\w]+ + name + variable.other.dollar.js + + + captures + + 1 + + name + variable.other.class.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + variable.other.property.static.js + + + match + (?x) + \b([A-Z][$\w]*)\s*(\.) + ([_$a-zA-Z][$\w]*) + name + meta.property.class.js + + + captures + + 1 + + name + variable.other.object.js + + + match + (?<!\.)[_$a-zA-Z][$\w]*\s*(?=[\[\.]) + name + variable.other.object.js + + + captures + + 2 + + name + variable.other.property.js + + + match + (?<=\.)\s*[_$a-zA-Z][$\w]* + name + meta.property.object.js + + + match + [_$a-zA-Z][$\w]* + name + variable.other.readwrite.js + + + + round-brackets + + patterns + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.js + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.js + + + name + meta.group.braces.round + patterns + + + include + #expression + + + + + + special-comments-conditional-compilation + + patterns + + + begin + /\*(?=@) + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/ + endCaptures + + 1 + + name + keyword.control.conditional.js + + 2 + + name + punctuation.definition.keyword.js + + + name + comment.block.conditional.js + patterns + + + match + /\* + name + punctuation.definition.comment.js + + + include + $self + + + + + captures + + 1 + + name + punctuation.definition.keyword.js + + + match + (@)(if|elif|else|end|ifdef|endif|cc_on|set)\b + name + keyword.control.conditional.js + + + captures + + 1 + + name + punctuation.definition.variable.js + + + match + (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript|_jscript_build|_jscript_version|_debug|_fast|[a-zA-Z]\w+) + name + variable.other.conditional.js + + + + square-brackets + + patterns + + + begin + \[ + beginCaptures + + 0 + + name + meta.brace.square.js + + + end + \] + endCaptures + + 0 + + name + meta.brace.square.js + + + name + meta.group.braces.square + patterns + + + include + #expression + + + + + + string-content + + patterns + + + match + \\\s*\n + name + constant.character.escape.newline.js + + + match + \\(x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) + name + constant.character.escape.js + + + + support + + patterns + + + match + \b(Array|Boolean|Date|Function|Map|Math|Number|Object|Promise|Proxy|RegExp|Set|String|WeakMap)\b + name + support.class.builtin.js + + + match + (?<!\.)\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b + name + support.function.js + + + match + \.(shift|sort|splice|unshift|pop|push|reverse)\b + name + support.function.mutator.js + + + match + (?<!\.)\b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b + name + support.class.error.js + + + match + (?<!\.)\b(debugger)\b + name + keyword.other.js + + + match + (?<!\.)\b(document|window)\b + name + support.type.object.dom.js + + + match + (?x) + \b( + ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| + DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| + WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR + )\b + name + support.constant.dom.js + + + captures + + 1 + + name + support.type.object.console.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + support.function.console.js + + + match + (?<!\.)\b(console)(?:(\.)(warn|info|log|error|time|timeEnd|assert))?\b + + + match + (?<!\.)\b(natives|buffer|child_process|cluster|crypto|dgram|dns|fs|http|https|net|os|path|punycode|string|string_decoder|readline|repl|tls|tty|util|vm|zlib)\b + name + support.module.node.js + + + captures + + 1 + + name + support.type.object.process.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + support.type.object.process.js + + + match + (?<!\.)\b(process)(?:(\.)(stdout|stderr|stdin|argv|execPath|execArgv|env|exitCode|version|versions|config|pid|title|arch|platform|mainModule))?\b + + + captures + + 1 + + name + support.type.object.process.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + support.function.process.js + + + match + (?<!\.)\b(process)(?:(\.)(abort|chdir|cwd|exit|getgid|setgid|getuid|setuid|setgroups|getgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime))?\b + + + captures + + 1 + + name + support.type.object.module.js + + 2 + + name + keyword.operator.accessor.js + + 3 + + name + support.type.object.module.js + + + match + (?<!\.)\b(exports|module(?:(\.)(exports|id|filename|loaded|parent|children)))?\b + + + match + (?<!\.)\b(global|GLOBAL|root|__dirname|__filename)\b + name + support.type.object.node.js + + + match + \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b + name + support.class.node.js + + + begin + {{ + end + }} + name + meta.tag.mustache.js + + + + + scopeName + source.js.es6 + uuid + 487CF323-A3F9-48FA-B140-DCE8C893E664 + + diff --git a/JavascriptNext.tmbundle/Syntaxes/Regular Expressions (JavaScriptNext).tmLanguage b/JavascriptNext.tmbundle/Syntaxes/Regular Expressions (JavaScriptNext).tmLanguage new file mode 100755 index 0000000..2aba44d --- /dev/null +++ b/JavascriptNext.tmbundle/Syntaxes/Regular Expressions (JavaScriptNext).tmLanguage @@ -0,0 +1,307 @@ + + + + + fileTypes + + re + + foldingStartMarker + (/\*|\{|\() + foldingStopMarker + (\*/|\}|\)) + name + Regular Expressions (Javascript Next) + patterns + + + include + #anchor + + + include + #backref + + + include + #quantifier + + + include + #operator + + + include + #group-assertion + + + include + #group-definition + + + include + #character-class + + + include + #character-class-definition + + + repository + + anchor + + patterns + + + match + \\[bB]|\^|\$ + name + keyword.control.anchor.regexp + + + + backref + + patterns + + + match + \\[1-9][0-9]* + name + keyword.other.back-reference.regexp + + + + character-class + + patterns + + + match + \\[wWsSdD]|\. + name + constant.other.character-class.escape.backslash.regexp + + + match + \\([trnvf0\\]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) + name + constant.character.escape.backslash.regexp + + + + character-class-definition + + patterns + + + begin + (\[)(\^)? + beginCaptures + + 1 + + name + punctuation.definition.character-class.regexp + + 2 + + name + keyword.operator.negation.regexp + + + end + (\]) + endCaptures + + 1 + + name + punctuation.definition.character-class.regexp + + + name + constant.other.character-class.set.regexp + patterns + + + include + #character-class + + + captures + + 2 + + name + constant.other.character-class.escape.backslash.regexp + + 3 + + name + constant.character.escape.backslash.regexp + + 5 + + name + constant.other.character-class.escape.backslash.regexp + + 6 + + name + constant.character.escape.backslash.regexp + + + match + (?x) + ( + (\\[wWsSdD]|\.)| + (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) + )\- + ( + (\\[wWsSdD]|\.)| + (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) + ) + name + constant.other.character-class.range.regexp + + + + + + group-assertion + + patterns + + + begin + (\()((\?=)|(\?!)) + beginCaptures + + 1 + + name + punctuation.definition.group.regexp + + 2 + + name + punctuation.definition.group.assertion.regexp + + 3 + + name + meta.assertion.look-ahead.regexp + + 4 + + name + meta.assertion.negative-look-ahead.regexp + + + end + (\)) + endCaptures + + 1 + + name + punctuation.definition.group.regexp + + + name + meta.group.assertion.regexp + patterns + + + include + $self + + + + + + group-definition + + patterns + + + begin + (\()((\?:))? + beginCaptures + + 1 + + name + punctuation.definition.group.regexp + + 3 + + name + punctuation.definition.group.capture.regexp + + 5 + + name + punctuation.definition.group.capture.regexp + + 6 + + name + punctuation.definition.group.no-capture.regexp + + + end + (\)) + endCaptures + + 1 + + name + punctuation.definition.group.regexp + + + name + meta.group.regexp + patterns + + + include + $self + + + + + + operator + + patterns + + + match + \| + name + keyword.operator.or.regexp + + + + quantifier + + patterns + + + match + (\?|\*\??|\+\??)|\{(\d+,\d+|\d+,|\d+)\} + name + keyword.operator.quantifier.regexp + + + + + scopeName + source.regexp.js + uuid + 6D74161E-E1A2-4AF3-922D-759E88DEFF63 + + diff --git a/JavascriptNext.tmbundle/info.plist b/JavascriptNext.tmbundle/info.plist new file mode 100644 index 0000000..21d1a2a --- /dev/null +++ b/JavascriptNext.tmbundle/info.plist @@ -0,0 +1,16 @@ + + + + + contactEmailRot13 + + contactName + Henscheid, Derek J + description + New shiny bundle for X. + name + JavascriptNext + uuid + B5617C72-9CE4-483A-A3B7-D16290DC4BB1 + + diff --git a/README.md b/README.md index f1b81f4..bb7c58d 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,10 @@ If you haven't already, [install Package Control](https://sublime.wbond.net/inst To set this as your default JavaScript syntax, open a javascript file, then select `View -> Syntax -> Open all with current extension as... -> JavascriptNext`. +### For TextMate 2 + +Just open the `JavascriptNext.tmbundle` directory with TextMate 2 and you should be good to go. + You may also need to change the ColorScheme. Pick one from `Preferences -> Color Scheme -> JavaScriptNext`. ## Screenshots From f5178383f75591d20e25a520df8111b100283947 Mon Sep 17 00:00:00 2001 From: Derek Henscheid Date: Thu, 30 Apr 2015 10:03:57 -0500 Subject: [PATCH 201/202] created a build script everything is now built off of the yaml files. Not sure this is the best route, but it does work and gets rid of duplication Conflicts resolved by hulbert: JavaScriptNext.tmLanguage --- Comments.tmPreferences | 36 - JSON (JavaScriptNext).tmLanguage | 344 -- JavaScript Indent.tmPreferences | 23 - JavaScriptNext.YAML-tmLanguage | 2 +- JavaScriptNext.tmLanguage | 2902 ----------------- .../Preferences/Comments.tmPreferences | 36 - .../JavaScript Indent.tmPreferences | 23 - .../Symbol List Banned.tmPreferences | 19 - .../Syntaxes/JavaScriptNext.tmLanguage | 2900 ---------------- ...ar Expressions (JavaScriptNext).tmLanguage | 307 -- Monokai Phoenix.tmTheme | 556 ---- Next.tmTheme | 1869 ----------- ...ar Expressions (JavaScriptNext).tmLanguage | 307 -- Symbol List Banned.tmPreferences | 19 - Symbol List Function.tmPreferences | 21 - create-bundle.sh | 30 + .../info.plist => info.plist | 2 +- yaml-to-plist.rb | 49 + 18 files changed, 81 insertions(+), 9364 deletions(-) delete mode 100644 Comments.tmPreferences delete mode 100644 JSON (JavaScriptNext).tmLanguage delete mode 100644 JavaScript Indent.tmPreferences delete mode 100644 JavaScriptNext.tmLanguage delete mode 100755 JavascriptNext.tmbundle/Preferences/Comments.tmPreferences delete mode 100755 JavascriptNext.tmbundle/Preferences/JavaScript Indent.tmPreferences delete mode 100755 JavascriptNext.tmbundle/Preferences/Symbol List Banned.tmPreferences delete mode 100755 JavascriptNext.tmbundle/Syntaxes/JavaScriptNext.tmLanguage delete mode 100755 JavascriptNext.tmbundle/Syntaxes/Regular Expressions (JavaScriptNext).tmLanguage delete mode 100644 Monokai Phoenix.tmTheme delete mode 100644 Next.tmTheme delete mode 100644 Regular Expressions (JavaScriptNext).tmLanguage delete mode 100644 Symbol List Banned.tmPreferences delete mode 100644 Symbol List Function.tmPreferences create mode 100755 create-bundle.sh rename JavascriptNext.tmbundle/info.plist => info.plist (93%) create mode 100755 yaml-to-plist.rb diff --git a/Comments.tmPreferences b/Comments.tmPreferences deleted file mode 100644 index dba0831..0000000 --- a/Comments.tmPreferences +++ /dev/null @@ -1,36 +0,0 @@ - - - - - name - Comments - scope - source.js, source.json - settings - - shellVariables - - - name - TM_COMMENT_START - value - // - - - name - TM_COMMENT_START_2 - value - /* - - - name - TM_COMMENT_END_2 - value - */ - - - - uuid - A67A8BD9-A951-406F-9175-018DD4B52FD1 - - diff --git a/JSON (JavaScriptNext).tmLanguage b/JSON (JavaScriptNext).tmLanguage deleted file mode 100644 index 1a224b1..0000000 --- a/JSON (JavaScriptNext).tmLanguage +++ /dev/null @@ -1,344 +0,0 @@ - - - - - fileTypes - - json - sublime-settings - sublime-menu - sublime-keymap - sublime-mousemap - sublime-theme - sublime-build - sublime-project - sublime-completions - - foldingStartMarker - (?x) # turn on extended mode - ^ # a line beginning with - \s* # some optional space - [{\[] # the start of an object or array - (?! # but not followed by - .* # whatever - [}\]] # and the close of an object or array - ,? # an optional comma - \s* # some optional space - $ # at the end of the line - ) - | # ...or... - [{\[] # the start of an object or array - \s* # some optional space - $ # at the end of the line - foldingStopMarker - (?x) # turn on extended mode - ^ # a line beginning with - \s* # some optional space - [}\]] # and the close of an object or array - keyEquivalent - ^~J - name - JSON (Javascript Next) - patterns - - - include - #value - - - repository - - array - - begin - \[ - beginCaptures - - 0 - - name - punctuation.definition.array.begin.json - - - end - \] - endCaptures - - 0 - - name - punctuation.definition.array.end.json - - - name - meta.structure.array.json - patterns - - - include - #value - - - match - , - name - punctuation.separator.array.json - - - match - [^\s\]] - name - invalid.illegal.expected-array-separator.json - - - - comments - - patterns - - - begin - /\*\* - captures - - 0 - - name - punctuation.definition.comment.json - - - end - \*/ - name - comment.block.documentation.json - - - begin - /\* - captures - - 0 - - name - punctuation.definition.comment.json - - - end - \*/ - name - comment.block.json - - - captures - - 1 - - name - punctuation.definition.comment.json - - - match - (//).*$\n? - name - comment.line.double-slash.js - - - - constant - - match - \b(?:true|false|null)\b - name - constant.language.json - - number - - match - (?x) # turn on extended mode - -? # an optional minus - (?: - 0 # a zero - | # ...or... - [1-9] # a 1-9 character - \d* # followed by zero or more digits - ) - (?: - (?: - \. # a period - \d+ # followed by one or more digits - )? - (?: - [eE] # an e character - [+-]? # followed by an option +/- - \d+ # followed by one or more digits - )? # make exponent optional - )? # make decimal portion optional - name - constant.numeric.json - - object - - begin - \{ - beginCaptures - - 0 - - name - punctuation.definition.dictionary.begin.json - - - end - \} - endCaptures - - 0 - - name - punctuation.definition.dictionary.end.json - - - name - meta.structure.dictionary.json - patterns - - - comment - the JSON object key - include - #string - - - include - #comments - - - begin - : - beginCaptures - - 0 - - name - punctuation.separator.dictionary.key-value.json - - - end - (,)|(?=\}) - endCaptures - - 1 - - name - punctuation.separator.dictionary.pair.json - - - name - meta.structure.dictionary.value.json - patterns - - - comment - the JSON object value - include - #value - - - match - [^\s,] - name - invalid.illegal.expected-dictionary-separator.json - - - - - match - [^\s\}] - name - invalid.illegal.expected-dictionary-separator.json - - - - string - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.json - - - end - " - endCaptures - - 0 - - name - punctuation.definition.string.end.json - - - name - string.quoted.double.json - patterns - - - match - (?x) # turn on extended mode - \\ # a literal backslash - (?: # ...followed by... - ["\\/bfnrt] # one of these characters - | # ...or... - u # a u - [0-9a-fA-F]{4}) # and four hex digits - name - constant.character.escape.json - - - match - \\. - name - invalid.illegal.unrecognized-string-escape.json - - - - value - - patterns - - - include - #constant - - - include - #number - - - include - #string - - - include - #array - - - include - #object - - - include - #comments - - - - - scopeName - source.json - uuid - 8f97457b-516e-48ce-83c7-08ae12fb327a - - diff --git a/JavaScript Indent.tmPreferences b/JavaScript Indent.tmPreferences deleted file mode 100644 index d794252..0000000 --- a/JavaScript Indent.tmPreferences +++ /dev/null @@ -1,23 +0,0 @@ - - - - - name - JavaScript Indent - scope - source.js - settings - - bracketIndentNextLinePattern - (?x) - ^ \s* \b(if|while|else)\b [^;]* $ - | ^ \s* \b(for)\b .* $ - decreaseIndentPattern - ^(.*\*/)?\s*[}].*$ - increaseIndentPattern - ^.*\{[^}"']*$ - - uuid - d408c7f9-4402-4a22-98f9-156c144591b7 - - diff --git a/JavaScriptNext.YAML-tmLanguage b/JavaScriptNext.YAML-tmLanguage index 6b37530..b9d75c5 100644 --- a/JavaScriptNext.YAML-tmLanguage +++ b/JavaScriptNext.YAML-tmLanguage @@ -1,6 +1,6 @@ # [PackageDev] target_format: plist, ext: tmLanguage name: JavaScript Next -scopeName: source.js +scopeName: source.js.es6 fileTypes: [js, htc, jsx] uuid: 487CF323-A3F9-48FA-B140-DCE8C893E664 firstLineMatch: ^#!/.*\b(node|js)$\n? diff --git a/JavaScriptNext.tmLanguage b/JavaScriptNext.tmLanguage deleted file mode 100644 index 7a809bd..0000000 --- a/JavaScriptNext.tmLanguage +++ /dev/null @@ -1,2902 +0,0 @@ - - - - - fileTypes - - js - htc - jsx - - firstLineMatch - ^#!/.*\b(node|js)$\n? - keyEquivalent - ^~J - name - JavaScript Next - patterns - - - include - #core - - - repository - - brackets - - patterns - - - include - #round-brackets - - - include - #square-brackets - - - include - #curly-brackets - - - - comments - - patterns - - - include - #special-comments-conditional-compilation - - - begin - /\*\*(?!/) - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - name - comment.block.documentation.js - - - begin - /\* - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - name - comment.block.js - - - captures - - 0 - - name - punctuation.definition.comment.js - - - match - (<!--|-->) - name - comment.block.html.js - - - captures - - 1 - - name - punctuation.definition.comment.js - - - match - (//).*$\n? - name - comment.line.double-slash.js - - - captures - - 1 - - name - punctuation.definition.comment.js - - - match - ^(#!).*$\n? - name - comment.line.shebang.js - - - - core - - patterns - - - include - #literal-function-labels - - - include - #literal-arrow-function-labels - - - include - #literal-labels - - - include - #literal-keywords - - - include - #literal-for - - - include - #literal-switch - - - include - #expression - - - include - #literal-punctuation - - - - curly-brackets - - patterns - - - begin - \{ - beginCaptures - - 0 - - name - meta.brace.curly.js - - - end - \} - endCaptures - - 0 - - name - meta.brace.curly.js - - - name - meta.group.braces.curly - patterns - - - include - $self - - - - - - expression - - patterns - - - include - #support - - - include - #literal-function - - - include - #literal-arrow-function - - - include - #literal-prototype - - - include - #literal-regexp - - - include - #literal-number - - - include - #literal-quasi - - - include - #literal-string - - - include - #literal-language-constant - - - include - #literal-language-variable - - - include - #literal-method - - - include - #literal-module - - - include - #literal-class - - - include - #literal-constructor - - - include - #literal-method-call - - - include - #literal-function-call - - - include - #comments - - - include - #brackets - - - include - #literal-operators - - - include - #literal-variable - - - - function-declaration-parameters - - patterns - - - begin - \( - beginCaptures - - 0 - - name - punctuation.definition.parameters.begin.js - - - end - \) - endCaptures - - 0 - - name - punctuation.definition.parameters.end.js - - - patterns - - - match - (?<!\.)\.\.\. - name - keyword.operator.spread.js - - - match - [_$a-zA-Z][$\w]* - name - variable.parameter.function.js - - - match - , - name - punctuation.separator.parameter.function.js - - - begin - = - beginCaptures - - 0 - - name - keyword.operator.assignment.js - - - end - (?=[,)]) - name - meta.parameter.optional.js - patterns - - - include - #expression - - - - - include - #comments - - - - - - literal-arrow-function - - patterns - - - begin - (?x) - (\basync)?\s* - (?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - storage.type.js - - 2 - - name - variable.parameter.function.js - - 3 - - name - storage.type.function.arrow.js - - - match - (?x) - (\basync)?\s* - \b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.arrow.js - - - begin - (?x) - (\b[_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - storage.type.js - - 3 - - name - variable.parameter.function.js - - 4 - - name - storage.type.function.arrow.js - - - match - (?x) - (\b[_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.arrow.js - - - begin - (?x) - (\b_?[A-Z][$\w]*)? - (\.)(prototype) - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - 4 - - name - keyword.operator.accessor.js - - 5 - - name - entity.name.function.js - - 6 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.prototype.function.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - 4 - - name - keyword.operator.accessor.js - - 5 - - name - entity.name.function.js - - 6 - - name - storage.type.js - - 7 - - name - variable.parameter.function.js - - 8 - - name - storage.type.function.arrow.js - - - match - (?x) - (\b_?[A-Z][$\w]*)? - (\.)(prototype) - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.prototype.function.arrow.js - - - begin - (?x) - (\b_?[A-Z][$\w]*)? - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - 4 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.static.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - 4 - - name - storage.type.js - - 5 - - name - variable.parameter.function.js - - 6 - - name - storage.type.function.arrow.js - - - match - (?x) - (\b_?[A-Z][$\w]*)? - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.static.arrow.js - - - - literal-arrow-function-labels - - patterns - - - begin - (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.json.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 - - name - storage.type.js - - 4 - - name - variable.parameter.function.js - - 5 - - name - storage.type.function.arrow.js - - - match - (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.json.arrow.js - - - begin - (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - string.quoted.single.js - - 10 - - name - storage.type.js - - 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.json.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - string.quoted.single.js - - 10 - - name - storage.type.js - - 11 - - name - variable.parameter.function.js - - 12 - - name - storage.type.function.arrow.js - - 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - - - match - (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.json.arrow.js - - - - literal-class - - patterns - - - begin - (?x) - (?<!\.)\b(class) - \s+((?!\b(extends)\b)[_$a-zA-Z][$\w]*)? - beginCaptures - - 1 - - name - storage.type.class.js - - 2 - - name - entity.name.class.js - - - end - } - endCaptures - - 0 - - name - meta.brace.curly.js - - - name - meta.class.js - patterns - - - begin - \b(extends)\b - beginCaptures - - 1 - - name - storage.type.extends.js - - - end - (?={) - name - meta.class.extends.js - patterns - - - include - #expression - - - - - begin - { - beginCaptures - - 0 - - name - meta.brace.curly.js - - - end - (?=}) - patterns - - - include - #brackets - - - include - #comments - - - include - #literal-method - - - - - - - - literal-constructor - - patterns - - - begin - (new)\s+(?=[_$a-zA-Z][$\w.]*) - beginCaptures - - 1 - - name - keyword.operator.new.js - - - end - (?![_$a-zA-Z][$\w.]*) - name - meta.instance.constructor - patterns - - - include - #support - - - captures - - 2 - - name - entity.name.type.new.js - - - match - ([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*) - - - - - - literal-for - - patterns - - - begin - (?<!\.)\b(for)\b - beginCaptures - - 1 - - name - keyword.control.loop.js - - - end - \) - endCaptures - - 0 - - name - meta.brace.round.js - - - name - meta.for.js - patterns - - - begin - \( - beginCaptures - - 0 - - name - meta.brace.round.js - - - end - (?=\)) - patterns - - - include - #literal-keyword-storage - - - include - #expression - - - include - #literal-punctuation - - - - - - - - literal-function - - patterns - - - begin - (?x) - (?:\b(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.function.js - - 3 - - name - keyword.generator.asterisk.js - - 4 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - (\b[_$a-zA-Z][$\w]*) - \s*= - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - storage.type.js - - 3 - - name - storage.type.function.js - - 4 - - name - keyword.generator.asterisk.js - - 5 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - (\b_?[A-Z][$\w]*)? - (\.)(prototype) - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - 4 - - name - keyword.operator.accessor.js - - 5 - - name - entity.name.function.js - - 6 - - name - storage.type.js - - 7 - - name - storage.type.function.js - - 8 - - name - keyword.generator.asterisk.js - - 9 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.prototype.function.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - (\b_?[A-Z][$\w]*)? - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - 4 - - name - storage.type.js - - 5 - - name - storage.type.function.js - - 6 - - name - keyword.generator.asterisk.js - - 7 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.static.js - patterns - - - include - #function-declaration-parameters - - - - - - literal-function-call - - patterns - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - meta.group.braces.round.function.arguments.js - - - match - (?x) - ([_$a-zA-Z][$\w]*)\s* - (\(\s*\)) - name - meta.function-call.without-arguments.js - - - captures - - 1 - - name - entity.name.function.js - - - match - (?x) - ([_$a-zA-Z][$\w]*)\s* - (?=\() - name - meta.function-call.with-arguments.js - - - - literal-function-labels - - patterns - - - begin - (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 - - name - storage.type.js - - 4 - - name - storage.type.function.js - - 5 - - name - keyword.generator.asterisk.js - - 6 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.json.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - string.quoted.single.js - - 10 - - name - storage.type.js - - 11 - - name - storage.type.function.js - - 12 - - name - keyword.generator.asterisk.js - - 13 - - name - entity.name.function.js - - 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - - - end - (?<=\)) - name - meta.function.json.js - patterns - - - include - #function-declaration-parameters - - - - - - literal-keyword-storage - - patterns - - - match - (?<!\.)\b(const|let|var)\b - name - storage.type.js - - - - literal-keywords - - patterns - - - include - #literal-keyword-storage - - - captures - - 1 - - name - keyword.control.flow.js - - 2 - - name - keyword.generator.asterisk.js - - - match - (?<!\.)\b(yield)\b(?:\s*(\*))? - - - match - (?<!\.)\b(await|return)\b - name - keyword.control.flow.js - - - match - (?<!\.)\b(if|else)\b - name - keyword.control.conditional.js - - - match - (?<!\.)\b(catch|finally|throw|try)\b - name - keyword.control.trycatch.js - - - match - (?<!\.)\b(break|continue|do|goto|while)\b - name - keyword.control.loop.js - - - - literal-labels - - patterns - - - begin - (?x) - (?<!\?)(?<!\?\s)(?=( - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - )\s*:) - end - : - endCaptures - - 0 - - name - punctuation.separator.key-value.js - - - patterns - - - include - #literal-string - - - - - captures - - 1 - - name - string.unquoted.label.js - - 2 - - name - punctuation.separator.key-value.js - - - match - (?<!\.|\?|\?\s)([_$a-zA-Z][$\w]*)\s*(:) - name - constant.other.object.key.js - - - - literal-language-constant - - patterns - - - match - (?<!\.)\btrue\b - name - constant.language.boolean.true.js - - - match - (?<!\.)\bfalse\b - name - constant.language.boolean.false.js - - - match - (?<!\.)\bnull\b - name - constant.language.null.js - - - match - (?<!\.)\bundefined\b - name - constant.language.undefined.js - - - match - (?<!\.)\bNaN\b - name - constant.language.nan.js - - - - literal-language-variable - - patterns - - - match - (?<!(?<!\.\.)\.)\b(arguments)\b - name - variable.language.arguments.js - - - match - (?<!(?<!\.\.)\.)\b(super)\b - name - variable.language.super.js - - - match - (?<!(?<!\.\.)\.)\b(this)\b - name - variable.language.this.js - - - match - (?<!(?<!\.\.)\.)\b(self)\b - name - variable.language.self.js - - - match - (?<=\.)\b(__proto__)\b - name - variable.language.proto.js - - - match - (?<=\.)\b(constructor)\b - name - variable.language.constructor.js - - - match - (?<=\.)\b(prototype)\b - name - variable.language.prototype.js - - - - literal-method - - patterns - - - begin - (?x) - (?:\b(static)\s+)? - (?:\b(async)\s+)? - (?:(\*)\s*)?([_$a-zA-Z][$\w]*)\s* - (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.js - - 3 - - name - keyword.generator.asterisk.js - - 4 - - name - entity.name.method.js - - - end - (?<=\)) - name - meta.method.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - \b(?:(static)\s+)? - (get|set)\s+ - ([_$a-zA-Z][$\w]*)\s* - (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.accessor.js - - 3 - - name - entity.name.accessor.js - - - end - (?<=\)) - name - meta.accessor.js - patterns - - - include - #function-declaration-parameters - - - - - - literal-method-call - - patterns - - - captures - - 1 - - name - variable.other.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - 4 - - name - meta.group.braces.round.function.arguments.js - - - match - (?x) - (?:(?<=\.)|\b) - ([A-Z][$\w]*)\s*(\.) - ([_$a-zA-Z][$\w]*)\s* - (\(\s*\)) - name - meta.function-call.static.without-arguments.js - - - captures - - 1 - - name - variable.other.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - - match - (?x) - (?:(?<=\.)|\b) - ([A-Z][$\w]*)\s*(\.) - ([_$a-zA-Z][$\w]*)\s* - (?=\() - name - meta.function-call.static.with-arguments.js - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - meta.group.braces.round.function.arguments.js - - - match - (?x) - (?<=\.) - ([_$a-zA-Z][$\w]*)\s* - (\(\s*\)) - name - meta.function-call.method.without-arguments.js - - - captures - - 1 - - name - entity.name.function.js - - - match - (?x) - (?<=\.) - ([_$a-zA-Z][$\w]*)\s* - (?=\() - name - meta.function-call.method.with-arguments.js - - - - literal-module - - patterns - - - match - (?<!\.)\b(import|export|default|from|as)\b - name - keyword.operator.module.js - - - - literal-number - - patterns - - - match - (?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+) - name - invalid.illegal.numeric.hex.js - - - match - (?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+) - name - invalid.illegal.numeric.octal.js - - - match - (?xi) - (?:\B[-+])? - (?: - \b0b[0-1]*| # binary - \b0o[0-7]*| # octal - \b0x[0-9a-f]*| # hex - ( - \B\.[0-9]+| # e.g. .999 - \b[0-9]+(\.[0-9]*)? # e.g. 999.999, 999. or 999 - )(e[-+]?[0-9]+)? # e.g. e+123, E-123 - ) - name - constant.numeric.js - - - match - (?:\B[-+]|\b)(Infinity)\b - name - constant.language.infinity.js - - - - literal-operators - - patterns - - - match - (?<!\.)\b(delete|in|instanceof|new|of|typeof|void|with)\b - name - keyword.operator.js - - - match - (?x) - !(?!=)| # logical-not right-to-left right - && | # logical-and left-to-right both - \|\| | # logical-or left-to-right both - name - keyword.operator.logical.js - - - match - (?x) - =(?!=)| # assignment right-to-left both - name - keyword.operator.assignment.js - - - match - (?x) - %= | # assignment right-to-left both - &= | # assignment right-to-left both - \*= | # assignment right-to-left both - \+= | # assignment right-to-left both - -= | # assignment right-to-left both - /= | # assignment right-to-left both - \^= | # assignment right-to-left both - \|= | # assignment right-to-left both - <<= | # assignment right-to-left both - >>= | # assignment right-to-left both - >>>= | # assignment right-to-left both - name - keyword.operator.assignment.augmented.js - - - match - (?x) - ~ | # bitwise-not right-to-left right - << | # bitwise-shift left-to-right both - >>> | # bitwise-shift left-to-right both - >> | # bitwise-shift left-to-right both - & | # bitwise-and left-to-right both - \^ | # bitwise-xor left-to-right both - \| # bitwise-or left-to-right both - name - keyword.operator.bitwise.js - - - match - (?x) - <= | # relational left-to-right both - >= | # relational left-to-right both - < | # relational left-to-right both - > # relational left-to-right both - name - keyword.operator.relational.js - - - match - (?x) - === | # equality left-to-right both - !== | # equality left-to-right both - == | # equality left-to-right both - != # equality left-to-right both - name - keyword.operator.comparison.js - - - match - (?x) - -- | # decrement n/a right-or-left - \+\+ | # increment n/a right-or-left - / | # division left-to-right both - % | # modulus left-to-right both - \* | # multiplication left-to-right both - \+ | # addition left-to-right both - - # subtraction left-to-right both - name - keyword.operator.arithmetic.js - - - match - \?|: - name - keyword.operator.ternary.js - - - match - (?<!\.)\.\.\. - name - keyword.operator.spread.js - - - match - \. - name - keyword.operator.accessor.js - - - - literal-prototype - - patterns - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - - match - ([_$a-zA-Z][$\w]*)(\.)(prototype)\b - name - meta.prototype.access.js - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - - match - ([_$a-zA-Z][$\w]*)(\.)(prototype)\s*=\s* - name - meta.prototype.declaration.js - - - - literal-punctuation - - patterns - - - match - \; - name - punctuation.terminator.statement.js - - - match - , - name - meta.delimiter.comma.js - - - - literal-quasi - - patterns - - - begin - ([a-zA-Z$_][\w$_]*)?(`) - beginCaptures - - 1 - - name - entity.quasi.tag.name.js - - 2 - - name - punctuation.definition.quasi.begin.js - - - end - ` - endCaptures - - 0 - - name - punctuation.definition.quasi.end.js - - - name - string.quasi.js - patterns - - - include - #string-content - - - begin - \${ - beginCaptures - - 0 - - name - punctuation.quasi.element.begin.js - - - end - } - endCaptures - - 0 - - name - punctuation.quasi.element.end.js - - - name - entity.quasi.element.js - patterns - - - include - #expression - - - - - - - - literal-regexp - - patterns - - - begin - (?x) - (?<= - \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| - \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow| - ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw|^ - )\s* - (/) - (?!/|\*|$) - beginCaptures - - 1 - - name - punctuation.definition.string.begin.js - - - end - (/)([gimy]*) - endCaptures - - 1 - - name - punctuation.definition.string.end.js - - 2 - - name - keyword.other.js - - - name - string.regexp.js - patterns - - - include - source.regexp.js - - - - - - literal-string - - patterns - - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.js - - - end - (')|(\n) - endCaptures - - 1 - - name - punctuation.definition.string.end.js - - 2 - - name - invalid.illegal.newline.js - - - name - string.quoted.single.js - patterns - - - include - #string-content - - - - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.js - - - end - (")|(\n) - endCaptures - - 1 - - name - punctuation.definition.string.end.js - - 2 - - name - invalid.illegal.newline.js - - - name - string.quoted.double.js - patterns - - - include - #string-content - - - - - - literal-switch - - patterns - - - begin - (?<!\.)\b(switch)\b - beginCaptures - - 1 - - name - keyword.control.switch.js - - - end - \} - endCaptures - - 0 - - name - meta.brace.curly.js - - - name - meta.switch.js - patterns - - - include - #round-brackets - - - begin - \{ - beginCaptures - - 0 - - name - meta.brace.curly.js - - - end - (?=}) - patterns - - - begin - (?<!\.)\b(case|default)\b - beginCaptures - - 1 - - name - keyword.control.switch.js - - - end - (?=:) - patterns - - - include - #expression - - - - - include - $self - - - - - - - - literal-variable - - patterns - - - match - [A-Z][_$\dA-Z]*\b - name - variable.other.constant.js - - - captures - - 1 - - name - punctuation.dollar.js - - - match - (\$)[$\w]+ - name - variable.other.dollar.js - - - captures - - 1 - - name - variable.other.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.other.property.static.js - - - match - (?x) - \b([A-Z][$\w]*)\s*(\.) - ([_$a-zA-Z][$\w]*) - name - meta.property.class.js - - - captures - - 1 - - name - variable.other.object.js - - - match - (?<!\.)[_$a-zA-Z][$\w]*\s*(?=[\[\.]) - name - variable.other.object.js - - - captures - - 2 - - name - variable.other.property.js - - - match - (?<=\.)\s*[_$a-zA-Z][$\w]* - name - meta.property.object.js - - - match - [_$a-zA-Z][$\w]* - name - variable.other.readwrite.js - - - - round-brackets - - patterns - - - begin - \( - beginCaptures - - 0 - - name - meta.brace.round.js - - - end - \) - endCaptures - - 0 - - name - meta.brace.round.js - - - name - meta.group.braces.round - patterns - - - include - #expression - - - - - - special-comments-conditional-compilation - - patterns - - - begin - /\*(?=@) - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - endCaptures - - 1 - - name - keyword.control.conditional.js - - 2 - - name - punctuation.definition.keyword.js - - - name - comment.block.conditional.js - patterns - - - match - /\* - name - punctuation.definition.comment.js - - - include - $self - - - - - captures - - 1 - - name - punctuation.definition.keyword.js - - - match - (@)(if|elif|else|end|ifdef|endif|cc_on|set)\b - name - keyword.control.conditional.js - - - captures - - 1 - - name - punctuation.definition.variable.js - - - match - (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript|_jscript_build|_jscript_version|_debug|_fast|[a-zA-Z]\w+) - name - variable.other.conditional.js - - - - square-brackets - - patterns - - - begin - \[ - beginCaptures - - 0 - - name - meta.brace.square.js - - - end - \] - endCaptures - - 0 - - name - meta.brace.square.js - - - name - meta.group.braces.square - patterns - - - include - #expression - - - - - - string-content - - patterns - - - match - \\\s*\n - name - constant.character.escape.newline.js - - - match - \\(x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) - name - constant.character.escape.js - - - - support - - patterns - - - match - \b(Array|Boolean|Date|Function|Map|Math|Number|Object|Promise|Proxy|RegExp|Set|String|WeakMap)\b - name - support.class.builtin.js - - - match - (?<!\.)\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b - name - support.function.js - - - match - \.(shift|sort|splice|unshift|pop|push|reverse)\b - name - support.function.mutator.js - - - match - (?<!\.)\b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b - name - support.class.error.js - - - match - (?<!\.)\b(debugger)\b - name - keyword.other.js - - - match - (?<!\.)\b(document|window)\b - name - support.type.object.dom.js - - - match - (?x) - \b( - ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| - DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| - WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR - )\b - name - support.constant.dom.js - - - captures - - 1 - - name - support.type.object.console.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - support.function.console.js - - - match - (?<!\.)\b(console)(?:(\.)(warn|info|log|error|time|timeEnd|assert|count|dir|group|groupCollapsed|groupEnd|profile|profileEnd|table|trace))?\b - - - match - (?<!\.)\b(assert|buffer|child_process|cluster|constants|crypto|dgram|dns|domain|events|fs|http|https|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|timers|tls|tty|url|util|vm|zlib)\b - name - support.module.node.js - - - captures - - 1 - - name - support.type.object.process.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - support.type.object.process.js - - - match - (?<!\.)\b(process)(?:(\.)(stdout|stderr|stdin|argv|execPath|execArgv|env|exitCode|version|versions|config|pid|title|arch|platform|mainModule))?\b - - - captures - - 1 - - name - support.type.object.process.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - support.function.process.js - - - match - (?<!\.)\b(process)(?:(\.)(abort|chdir|cwd|exit|getgid|setgid|getuid|setuid|setgroups|getgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime))?\b - - - captures - - 1 - - name - support.type.object.module.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - support.type.object.module.js - - - match - (?<!\.)\b(exports|module(?:(\.)(exports|id|filename|loaded|parent|children)))?\b - - - match - (?<!\.)\b(global|GLOBAL|root|__dirname|__filename)\b - name - support.type.object.node.js - - - match - \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b - name - support.class.node.js - - - begin - {{ - end - }} - name - meta.tag.mustache.js - - - - - scopeName - source.js - uuid - 487CF323-A3F9-48FA-B140-DCE8C893E664 - - diff --git a/JavascriptNext.tmbundle/Preferences/Comments.tmPreferences b/JavascriptNext.tmbundle/Preferences/Comments.tmPreferences deleted file mode 100755 index dba0831..0000000 --- a/JavascriptNext.tmbundle/Preferences/Comments.tmPreferences +++ /dev/null @@ -1,36 +0,0 @@ - - - - - name - Comments - scope - source.js, source.json - settings - - shellVariables - - - name - TM_COMMENT_START - value - // - - - name - TM_COMMENT_START_2 - value - /* - - - name - TM_COMMENT_END_2 - value - */ - - - - uuid - A67A8BD9-A951-406F-9175-018DD4B52FD1 - - diff --git a/JavascriptNext.tmbundle/Preferences/JavaScript Indent.tmPreferences b/JavascriptNext.tmbundle/Preferences/JavaScript Indent.tmPreferences deleted file mode 100755 index d794252..0000000 --- a/JavascriptNext.tmbundle/Preferences/JavaScript Indent.tmPreferences +++ /dev/null @@ -1,23 +0,0 @@ - - - - - name - JavaScript Indent - scope - source.js - settings - - bracketIndentNextLinePattern - (?x) - ^ \s* \b(if|while|else)\b [^;]* $ - | ^ \s* \b(for)\b .* $ - decreaseIndentPattern - ^(.*\*/)?\s*[}].*$ - increaseIndentPattern - ^.*\{[^}"']*$ - - uuid - d408c7f9-4402-4a22-98f9-156c144591b7 - - diff --git a/JavascriptNext.tmbundle/Preferences/Symbol List Banned.tmPreferences b/JavascriptNext.tmbundle/Preferences/Symbol List Banned.tmPreferences deleted file mode 100755 index bcad4ab..0000000 --- a/JavascriptNext.tmbundle/Preferences/Symbol List Banned.tmPreferences +++ /dev/null @@ -1,19 +0,0 @@ - - - - - name - Symbol List Banned - scope - source.js meta.function-call, source.js meta.instance.constructor - settings - - showInIndexedSymbolList - 1 - showInSymbolList - 0 - - uuid - 71B2B356-23EC-43B8-80A7-CB32E8F2718F - - diff --git a/JavascriptNext.tmbundle/Syntaxes/JavaScriptNext.tmLanguage b/JavascriptNext.tmbundle/Syntaxes/JavaScriptNext.tmLanguage deleted file mode 100755 index 4fd643c..0000000 --- a/JavascriptNext.tmbundle/Syntaxes/JavaScriptNext.tmLanguage +++ /dev/null @@ -1,2900 +0,0 @@ - - - - - fileTypes - - es6 - - firstLineMatch - ^#!/.*\b(node|js)$\n? - keyEquivalent - ^~J - name - JavaScript Next - patterns - - - include - #core - - - repository - - brackets - - patterns - - - include - #round-brackets - - - include - #square-brackets - - - include - #curly-brackets - - - - comments - - patterns - - - include - #special-comments-conditional-compilation - - - begin - /\*\*(?!/) - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - name - comment.block.documentation.js - - - begin - /\* - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - name - comment.block.js - - - captures - - 0 - - name - punctuation.definition.comment.js - - - match - (<!--|-->) - name - comment.block.html.js - - - captures - - 1 - - name - punctuation.definition.comment.js - - - match - (//).*$\n? - name - comment.line.double-slash.js - - - captures - - 1 - - name - punctuation.definition.comment.js - - - match - ^(#!).*$\n? - name - comment.line.shebang.js - - - - core - - patterns - - - include - #literal-function-labels - - - include - #literal-arrow-function-labels - - - include - #literal-labels - - - include - #literal-keywords - - - include - #literal-for - - - include - #literal-switch - - - include - #expression - - - include - #literal-punctuation - - - - curly-brackets - - patterns - - - begin - \{ - beginCaptures - - 0 - - name - meta.brace.curly.js - - - end - \} - endCaptures - - 0 - - name - meta.brace.curly.js - - - name - meta.group.braces.curly - patterns - - - include - $self - - - - - - expression - - patterns - - - include - #support - - - include - #literal-function - - - include - #literal-arrow-function - - - include - #literal-prototype - - - include - #literal-regexp - - - include - #literal-number - - - include - #literal-quasi - - - include - #literal-string - - - include - #literal-language-constant - - - include - #literal-language-variable - - - include - #literal-method - - - include - #literal-module - - - include - #literal-class - - - include - #literal-constructor - - - include - #literal-method-call - - - include - #literal-function-call - - - include - #comments - - - include - #brackets - - - include - #literal-operators - - - include - #literal-variable - - - - function-declaration-parameters - - patterns - - - begin - \( - beginCaptures - - 0 - - name - punctuation.definition.parameters.begin.js - - - end - \) - endCaptures - - 0 - - name - punctuation.definition.parameters.end.js - - - patterns - - - match - (?<!\.)\.\.\. - name - keyword.operator.spread.js - - - match - [_$a-zA-Z][$\w]* - name - variable.parameter.function.js - - - match - , - name - punctuation.separator.parameter.function.js - - - begin - = - beginCaptures - - 0 - - name - keyword.operator.assignment.js - - - end - (?=[,)]) - name - meta.parameter.optional.js - patterns - - - include - #expression - - - - - include - #comments - - - - - - literal-arrow-function - - patterns - - - begin - (?x) - (\basync)?\s* - (?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - storage.type.js - - 2 - - name - variable.parameter.function.js - - 3 - - name - storage.type.function.arrow.js - - - match - (?x) - (\basync)?\s* - \b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.arrow.js - - - begin - (?x) - (\b[_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - storage.type.js - - 3 - - name - variable.parameter.function.js - - 4 - - name - storage.type.function.arrow.js - - - match - (?x) - (\b[_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.arrow.js - - - begin - (?x) - (\b_?[A-Z][$\w]*)? - (\.)(prototype) - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - 4 - - name - keyword.operator.accessor.js - - 5 - - name - entity.name.function.js - - 6 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.prototype.function.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - 4 - - name - keyword.operator.accessor.js - - 5 - - name - entity.name.function.js - - 6 - - name - storage.type.js - - 7 - - name - variable.parameter.function.js - - 8 - - name - storage.type.function.arrow.js - - - match - (?x) - (\b_?[A-Z][$\w]*)? - (\.)(prototype) - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.prototype.function.arrow.js - - - begin - (?x) - (\b_?[A-Z][$\w]*)? - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - 4 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.static.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - 4 - - name - storage.type.js - - 5 - - name - variable.parameter.function.js - - 6 - - name - storage.type.function.arrow.js - - - match - (?x) - (\b_?[A-Z][$\w]*)? - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.static.arrow.js - - - - literal-arrow-function-labels - - patterns - - - begin - (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 - - name - storage.type.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.json.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 - - name - storage.type.js - - 4 - - name - variable.parameter.function.js - - 5 - - name - storage.type.function.arrow.js - - - match - (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.json.arrow.js - - - begin - (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) - \s*(async)? - \s*(?=\([^()]*\)\s*(=>)) - beginCaptures - - 1 - - name - string.quoted.single.js - - 10 - - name - storage.type.js - - 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - - - end - (?<=\))\s*(=>) - endCaptures - - 1 - - name - storage.type.function.arrow.js - - - name - meta.function.json.arrow.js - patterns - - - include - #function-declaration-parameters - - - - - captures - - 1 - - name - string.quoted.single.js - - 10 - - name - storage.type.js - - 11 - - name - variable.parameter.function.js - - 12 - - name - storage.type.function.arrow.js - - 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - - - match - (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) - \s*(async)? - \s*\b([_$a-zA-Z][$\w]*)\s*(=>) - name - meta.function.json.arrow.js - - - - literal-class - - patterns - - - begin - (?x) - (?<!\.)\b(class) - \s+((?!\b(extends)\b)[_$a-zA-Z][$\w]*)? - beginCaptures - - 1 - - name - storage.type.class.js - - 2 - - name - entity.name.class.js - - - end - } - endCaptures - - 0 - - name - meta.brace.curly.js - - - name - meta.class.js - patterns - - - begin - \b(extends)\b - beginCaptures - - 1 - - name - storage.type.extends.js - - - end - (?={) - name - meta.class.extends.js - patterns - - - include - #expression - - - - - begin - { - beginCaptures - - 0 - - name - meta.brace.curly.js - - - end - (?=}) - patterns - - - include - #brackets - - - include - #comments - - - include - #literal-method - - - - - - - - literal-constructor - - patterns - - - begin - (new)\s+(?=[_$a-zA-Z][$\w.]*) - beginCaptures - - 1 - - name - keyword.operator.new.js - - - end - (?![_$a-zA-Z][$\w.]*) - name - meta.instance.constructor - patterns - - - include - #support - - - captures - - 2 - - name - entity.name.type.new.js - - - match - ([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*) - - - - - - literal-for - - patterns - - - begin - (?<!\.)\b(for)\b - beginCaptures - - 1 - - name - keyword.control.loop.js - - - end - \) - endCaptures - - 0 - - name - meta.brace.round.js - - - name - meta.for.js - patterns - - - begin - \( - beginCaptures - - 0 - - name - meta.brace.round.js - - - end - (?=\)) - patterns - - - include - #literal-keyword-storage - - - include - #expression - - - include - #literal-punctuation - - - - - - - - literal-function - - patterns - - - begin - (?x) - (?:\b(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.function.js - - 3 - - name - keyword.generator.asterisk.js - - 4 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - (\b[_$a-zA-Z][$\w]*) - \s*= - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - storage.type.js - - 3 - - name - storage.type.function.js - - 4 - - name - keyword.generator.asterisk.js - - 5 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - (\b_?[A-Z][$\w]*)? - (\.)(prototype) - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - 4 - - name - keyword.operator.accessor.js - - 5 - - name - entity.name.function.js - - 6 - - name - storage.type.js - - 7 - - name - storage.type.function.js - - 8 - - name - keyword.generator.asterisk.js - - 9 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.prototype.function.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - (\b_?[A-Z][$\w]*)? - (\.)([_$a-zA-Z][$\w]*) - \s*= - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - 4 - - name - storage.type.js - - 5 - - name - storage.type.function.js - - 6 - - name - keyword.generator.asterisk.js - - 7 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.static.js - patterns - - - include - #function-declaration-parameters - - - - - - literal-function-call - - patterns - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - meta.group.braces.round.function.arguments.js - - - match - (?x) - ([_$a-zA-Z][$\w]*)\s* - (\(\s*\)) - name - meta.function-call.without-arguments.js - - - captures - - 1 - - name - entity.name.function.js - - - match - (?x) - ([_$a-zA-Z][$\w]*)\s* - (?=\() - name - meta.function-call.with-arguments.js - - - - literal-function-labels - - patterns - - - begin - (?x) - \b([_$a-zA-Z][$\w]*) - \s*(:) - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - entity.name.function.js - - 2 - - name - punctuation.separator.key-value.js - - 3 - - name - storage.type.js - - 4 - - name - storage.type.function.js - - 5 - - name - keyword.generator.asterisk.js - - 6 - - name - entity.name.function.js - - - end - (?<=\)) - name - meta.function.json.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - (?: - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - ) - \s*(:) - \s*(?:(async)\s+)? - \s*(function)(?:\s*(\*)|(?=\s|[(])) - \s*([_$a-zA-Z][$\w]*)?\s* - beginCaptures - - 1 - - name - string.quoted.single.js - - 10 - - name - storage.type.js - - 11 - - name - storage.type.function.js - - 12 - - name - keyword.generator.asterisk.js - - 13 - - name - entity.name.function.js - - 2 - - name - punctuation.definition.string.begin.js - - 3 - - name - entity.name.function.js - - 4 - - name - punctuation.definition.string.end.js - - 5 - - name - string.quoted.double.js - - 6 - - name - punctuation.definition.string.begin.js - - 7 - - name - entity.name.function.js - - 8 - - name - punctuation.definition.string.end.js - - 9 - - name - punctuation.separator.key-value.js - - - end - (?<=\)) - name - meta.function.json.js - patterns - - - include - #function-declaration-parameters - - - - - - literal-keyword-storage - - patterns - - - match - (?<!\.)\b(const|let|var)\b - name - storage.type.js - - - - literal-keywords - - patterns - - - include - #literal-keyword-storage - - - captures - - 1 - - name - keyword.control.flow.js - - 2 - - name - keyword.generator.asterisk.js - - - match - (?<!\.)\b(yield)\b(?:\s*(\*))? - - - match - (?<!\.)\b(await|return)\b - name - keyword.control.flow.js - - - match - (?<!\.)\b(if|else)\b - name - keyword.control.conditional.js - - - match - (?<!\.)\b(catch|finally|throw|try)\b - name - keyword.control.trycatch.js - - - match - (?<!\.)\b(break|continue|do|goto|while)\b - name - keyword.control.loop.js - - - - literal-labels - - patterns - - - begin - (?x) - (?<!\?)(?<!\?\s)(?=( - ((')((?:[^']|\\')*)('))| - ((")((?:[^"]|\\")*)(")) - )\s*:) - end - : - endCaptures - - 0 - - name - punctuation.separator.key-value.js - - - patterns - - - include - #literal-string - - - - - captures - - 1 - - name - string.unquoted.label.js - - 2 - - name - punctuation.separator.key-value.js - - - match - (?<!\.|\?|\?\s)([_$a-zA-Z][$\w]*)\s*(:) - name - constant.other.object.key.js - - - - literal-language-constant - - patterns - - - match - (?<!\.)\btrue\b - name - constant.language.boolean.true.js - - - match - (?<!\.)\bfalse\b - name - constant.language.boolean.false.js - - - match - (?<!\.)\bnull\b - name - constant.language.null.js - - - match - (?<!\.)\bundefined\b - name - constant.language.undefined.js - - - match - (?<!\.)\bNaN\b - name - constant.language.nan.js - - - - literal-language-variable - - patterns - - - match - (?<!(?<!\.\.)\.)\b(arguments)\b - name - variable.language.arguments.js - - - match - (?<!(?<!\.\.)\.)\b(super)\b - name - variable.language.super.js - - - match - (?<!(?<!\.\.)\.)\b(this)\b - name - variable.language.this.js - - - match - (?<!(?<!\.\.)\.)\b(self)\b - name - variable.language.self.js - - - match - (?<=\.)\b(__proto__)\b - name - variable.language.proto.js - - - match - (?<=\.)\b(constructor)\b - name - variable.language.constructor.js - - - match - (?<=\.)\b(prototype)\b - name - variable.language.prototype.js - - - - literal-method - - patterns - - - begin - (?x) - (?:\b(static)\s+)? - (?:\b(async)\s+)? - (?:(\*)\s*)?([_$a-zA-Z][$\w]*)\s* - (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.js - - 3 - - name - keyword.generator.asterisk.js - - 4 - - name - entity.name.method.js - - - end - (?<=\)) - name - meta.method.js - patterns - - - include - #function-declaration-parameters - - - - - begin - (?x) - \b(?:(static)\s+)? - (get|set)\s+ - ([_$a-zA-Z][$\w]*)\s* - (?=\([^())]*\)(?:\s|/\*.*\*/)*\{) - beginCaptures - - 1 - - name - storage.type.js - - 2 - - name - storage.type.accessor.js - - 3 - - name - entity.name.accessor.js - - - end - (?<=\)) - name - meta.accessor.js - patterns - - - include - #function-declaration-parameters - - - - - - literal-method-call - - patterns - - - captures - - 1 - - name - variable.other.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - 4 - - name - meta.group.braces.round.function.arguments.js - - - match - (?x) - (?:(?<=\.)|\b) - ([A-Z][$\w]*)\s*(\.) - ([_$a-zA-Z][$\w]*)\s* - (\(\s*\)) - name - meta.function-call.static.without-arguments.js - - - captures - - 1 - - name - variable.other.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - entity.name.function.js - - - match - (?x) - (?:(?<=\.)|\b) - ([A-Z][$\w]*)\s*(\.) - ([_$a-zA-Z][$\w]*)\s* - (?=\() - name - meta.function-call.static.with-arguments.js - - - captures - - 1 - - name - entity.name.function.js - - 2 - - name - meta.group.braces.round.function.arguments.js - - - match - (?x) - (?<=\.) - ([_$a-zA-Z][$\w]*)\s* - (\(\s*\)) - name - meta.function-call.method.without-arguments.js - - - captures - - 1 - - name - entity.name.function.js - - - match - (?x) - (?<=\.) - ([_$a-zA-Z][$\w]*)\s* - (?=\() - name - meta.function-call.method.with-arguments.js - - - - literal-module - - patterns - - - match - (?<!\.)\b(import|export|default|from|as)\b - name - keyword.operator.module.js - - - - literal-number - - patterns - - - match - (?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+) - name - invalid.illegal.numeric.hex.js - - - match - (?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+) - name - invalid.illegal.numeric.octal.js - - - match - (?xi) - (?:\B[-+])? - (?: - \b0b[0-1]*| # binary - \b0o[0-7]*| # octal - \b0x[0-9a-f]*| # hex - ( - \B\.[0-9]+| # e.g. .999 - \b[0-9]+(\.[0-9]*)? # e.g. 999.999, 999. or 999 - )(e[-+]?[0-9]+)? # e.g. e+123, E-123 - ) - name - constant.numeric.js - - - match - (?:\B[-+]|\b)(Infinity)\b - name - constant.language.infinity.js - - - - literal-operators - - patterns - - - match - (?<!\.)\b(delete|in|instanceof|new|of|typeof|void|with)\b - name - keyword.operator.js - - - match - (?x) - !(?!=)| # logical-not right-to-left right - && | # logical-and left-to-right both - \|\| | # logical-or left-to-right both - name - keyword.operator.logical.js - - - match - (?x) - =(?!=)| # assignment right-to-left both - name - keyword.operator.assignment.js - - - match - (?x) - %= | # assignment right-to-left both - &= | # assignment right-to-left both - \*= | # assignment right-to-left both - \+= | # assignment right-to-left both - -= | # assignment right-to-left both - /= | # assignment right-to-left both - \^= | # assignment right-to-left both - \|= | # assignment right-to-left both - <<= | # assignment right-to-left both - >>= | # assignment right-to-left both - >>>= | # assignment right-to-left both - name - keyword.operator.assignment.augmented.js - - - match - (?x) - ~ | # bitwise-not right-to-left right - << | # bitwise-shift left-to-right both - >>> | # bitwise-shift left-to-right both - >> | # bitwise-shift left-to-right both - & | # bitwise-and left-to-right both - \^ | # bitwise-xor left-to-right both - \| # bitwise-or left-to-right both - name - keyword.operator.bitwise.js - - - match - (?x) - <= | # relational left-to-right both - >= | # relational left-to-right both - < | # relational left-to-right both - > # relational left-to-right both - name - keyword.operator.relational.js - - - match - (?x) - === | # equality left-to-right both - !== | # equality left-to-right both - == | # equality left-to-right both - != # equality left-to-right both - name - keyword.operator.comparison.js - - - match - (?x) - -- | # decrement n/a right-or-left - \+\+ | # increment n/a right-or-left - / | # division left-to-right both - % | # modulus left-to-right both - \* | # multiplication left-to-right both - \+ | # addition left-to-right both - - # subtraction left-to-right both - name - keyword.operator.arithmetic.js - - - match - \?|: - name - keyword.operator.ternary.js - - - match - (?<!\.)\.\.\. - name - keyword.operator.spread.js - - - match - \. - name - keyword.operator.accessor.js - - - - literal-prototype - - patterns - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - - match - ([_$a-zA-Z][$\w]*)(\.)(prototype)\b - name - meta.prototype.access.js - - - captures - - 1 - - name - entity.name.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.language.prototype.js - - - match - ([_$a-zA-Z][$\w]*)(\.)(prototype)\s*=\s* - name - meta.prototype.declaration.js - - - - literal-punctuation - - patterns - - - match - \; - name - punctuation.terminator.statement.js - - - match - , - name - meta.delimiter.comma.js - - - - literal-quasi - - patterns - - - begin - ([a-zA-Z$_][\w$_]*)?(`) - beginCaptures - - 1 - - name - entity.quasi.tag.name.js - - 2 - - name - punctuation.definition.quasi.begin.js - - - end - ` - endCaptures - - 0 - - name - punctuation.definition.quasi.end.js - - - name - string.quasi.js - patterns - - - include - #string-content - - - begin - \${ - beginCaptures - - 0 - - name - punctuation.quasi.element.begin.js - - - end - } - endCaptures - - 0 - - name - punctuation.quasi.element.end.js - - - name - entity.quasi.element.js - patterns - - - include - #expression - - - - - - - - literal-regexp - - patterns - - - begin - (?x) - (?<= - \.|\(|,|{|}|\[|;|,|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=| - \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow| - ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw|^ - )\s* - (/) - (?!/|\*|$) - beginCaptures - - 1 - - name - punctuation.definition.string.begin.js - - - end - (/)([gimy]*) - endCaptures - - 1 - - name - punctuation.definition.string.end.js - - 2 - - name - keyword.other.js - - - name - string.regexp.js - patterns - - - include - source.regexp.js - - - - - - literal-string - - patterns - - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.js - - - end - (')|(\n) - endCaptures - - 1 - - name - punctuation.definition.string.end.js - - 2 - - name - invalid.illegal.newline.js - - - name - string.quoted.single.js - patterns - - - include - #string-content - - - - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.js - - - end - (")|(\n) - endCaptures - - 1 - - name - punctuation.definition.string.end.js - - 2 - - name - invalid.illegal.newline.js - - - name - string.quoted.double.js - patterns - - - include - #string-content - - - - - - literal-switch - - patterns - - - begin - (?<!\.)\b(switch)\b - beginCaptures - - 1 - - name - keyword.control.switch.js - - - end - \} - endCaptures - - 0 - - name - meta.brace.curly.js - - - name - meta.switch.js - patterns - - - include - #round-brackets - - - begin - \{ - beginCaptures - - 0 - - name - meta.brace.curly.js - - - end - (?=}) - patterns - - - begin - (?<!\.)\b(case|default)\b - beginCaptures - - 1 - - name - keyword.control.switch.js - - - end - (?=:) - patterns - - - include - #expression - - - - - include - $self - - - - - - - - literal-variable - - patterns - - - match - [A-Z][_$\dA-Z]*\b - name - variable.other.constant.js - - - captures - - 1 - - name - punctuation.dollar.js - - - match - (\$)[$\w]+ - name - variable.other.dollar.js - - - captures - - 1 - - name - variable.other.class.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - variable.other.property.static.js - - - match - (?x) - \b([A-Z][$\w]*)\s*(\.) - ([_$a-zA-Z][$\w]*) - name - meta.property.class.js - - - captures - - 1 - - name - variable.other.object.js - - - match - (?<!\.)[_$a-zA-Z][$\w]*\s*(?=[\[\.]) - name - variable.other.object.js - - - captures - - 2 - - name - variable.other.property.js - - - match - (?<=\.)\s*[_$a-zA-Z][$\w]* - name - meta.property.object.js - - - match - [_$a-zA-Z][$\w]* - name - variable.other.readwrite.js - - - - round-brackets - - patterns - - - begin - \( - beginCaptures - - 0 - - name - meta.brace.round.js - - - end - \) - endCaptures - - 0 - - name - meta.brace.round.js - - - name - meta.group.braces.round - patterns - - - include - #expression - - - - - - special-comments-conditional-compilation - - patterns - - - begin - /\*(?=@) - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/ - endCaptures - - 1 - - name - keyword.control.conditional.js - - 2 - - name - punctuation.definition.keyword.js - - - name - comment.block.conditional.js - patterns - - - match - /\* - name - punctuation.definition.comment.js - - - include - $self - - - - - captures - - 1 - - name - punctuation.definition.keyword.js - - - match - (@)(if|elif|else|end|ifdef|endif|cc_on|set)\b - name - keyword.control.conditional.js - - - captures - - 1 - - name - punctuation.definition.variable.js - - - match - (@)(_win32|_win16|_mac|_alpha|_x86|_mc680x0|_PowerPC|_jscript|_jscript_build|_jscript_version|_debug|_fast|[a-zA-Z]\w+) - name - variable.other.conditional.js - - - - square-brackets - - patterns - - - begin - \[ - beginCaptures - - 0 - - name - meta.brace.square.js - - - end - \] - endCaptures - - 0 - - name - meta.brace.square.js - - - name - meta.group.braces.square - patterns - - - include - #expression - - - - - - string-content - - patterns - - - match - \\\s*\n - name - constant.character.escape.newline.js - - - match - \\(x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) - name - constant.character.escape.js - - - - support - - patterns - - - match - \b(Array|Boolean|Date|Function|Map|Math|Number|Object|Promise|Proxy|RegExp|Set|String|WeakMap)\b - name - support.class.builtin.js - - - match - (?<!\.)\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape)\b - name - support.function.js - - - match - \.(shift|sort|splice|unshift|pop|push|reverse)\b - name - support.function.mutator.js - - - match - (?<!\.)\b((Eval|Range|Reference|Syntax|Type|URI)?Error)\b - name - support.class.error.js - - - match - (?<!\.)\b(debugger)\b - name - keyword.other.js - - - match - (?<!\.)\b(document|window)\b - name - support.type.object.dom.js - - - match - (?x) - \b( - ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE| - DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR| - WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR - )\b - name - support.constant.dom.js - - - captures - - 1 - - name - support.type.object.console.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - support.function.console.js - - - match - (?<!\.)\b(console)(?:(\.)(warn|info|log|error|time|timeEnd|assert))?\b - - - match - (?<!\.)\b(natives|buffer|child_process|cluster|crypto|dgram|dns|fs|http|https|net|os|path|punycode|string|string_decoder|readline|repl|tls|tty|util|vm|zlib)\b - name - support.module.node.js - - - captures - - 1 - - name - support.type.object.process.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - support.type.object.process.js - - - match - (?<!\.)\b(process)(?:(\.)(stdout|stderr|stdin|argv|execPath|execArgv|env|exitCode|version|versions|config|pid|title|arch|platform|mainModule))?\b - - - captures - - 1 - - name - support.type.object.process.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - support.function.process.js - - - match - (?<!\.)\b(process)(?:(\.)(abort|chdir|cwd|exit|getgid|setgid|getuid|setuid|setgroups|getgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime))?\b - - - captures - - 1 - - name - support.type.object.module.js - - 2 - - name - keyword.operator.accessor.js - - 3 - - name - support.type.object.module.js - - - match - (?<!\.)\b(exports|module(?:(\.)(exports|id|filename|loaded|parent|children)))?\b - - - match - (?<!\.)\b(global|GLOBAL|root|__dirname|__filename)\b - name - support.type.object.node.js - - - match - \b(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream|Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b - name - support.class.node.js - - - begin - {{ - end - }} - name - meta.tag.mustache.js - - - - - scopeName - source.js.es6 - uuid - 487CF323-A3F9-48FA-B140-DCE8C893E664 - - diff --git a/JavascriptNext.tmbundle/Syntaxes/Regular Expressions (JavaScriptNext).tmLanguage b/JavascriptNext.tmbundle/Syntaxes/Regular Expressions (JavaScriptNext).tmLanguage deleted file mode 100755 index 2aba44d..0000000 --- a/JavascriptNext.tmbundle/Syntaxes/Regular Expressions (JavaScriptNext).tmLanguage +++ /dev/null @@ -1,307 +0,0 @@ - - - - - fileTypes - - re - - foldingStartMarker - (/\*|\{|\() - foldingStopMarker - (\*/|\}|\)) - name - Regular Expressions (Javascript Next) - patterns - - - include - #anchor - - - include - #backref - - - include - #quantifier - - - include - #operator - - - include - #group-assertion - - - include - #group-definition - - - include - #character-class - - - include - #character-class-definition - - - repository - - anchor - - patterns - - - match - \\[bB]|\^|\$ - name - keyword.control.anchor.regexp - - - - backref - - patterns - - - match - \\[1-9][0-9]* - name - keyword.other.back-reference.regexp - - - - character-class - - patterns - - - match - \\[wWsSdD]|\. - name - constant.other.character-class.escape.backslash.regexp - - - match - \\([trnvf0\\]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) - name - constant.character.escape.backslash.regexp - - - - character-class-definition - - patterns - - - begin - (\[)(\^)? - beginCaptures - - 1 - - name - punctuation.definition.character-class.regexp - - 2 - - name - keyword.operator.negation.regexp - - - end - (\]) - endCaptures - - 1 - - name - punctuation.definition.character-class.regexp - - - name - constant.other.character-class.set.regexp - patterns - - - include - #character-class - - - captures - - 2 - - name - constant.other.character-class.escape.backslash.regexp - - 3 - - name - constant.character.escape.backslash.regexp - - 5 - - name - constant.other.character-class.escape.backslash.regexp - - 6 - - name - constant.character.escape.backslash.regexp - - - match - (?x) - ( - (\\[wWsSdD]|\.)| - (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) - )\- - ( - (\\[wWsSdD]|\.)| - (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) - ) - name - constant.other.character-class.range.regexp - - - - - - group-assertion - - patterns - - - begin - (\()((\?=)|(\?!)) - beginCaptures - - 1 - - name - punctuation.definition.group.regexp - - 2 - - name - punctuation.definition.group.assertion.regexp - - 3 - - name - meta.assertion.look-ahead.regexp - - 4 - - name - meta.assertion.negative-look-ahead.regexp - - - end - (\)) - endCaptures - - 1 - - name - punctuation.definition.group.regexp - - - name - meta.group.assertion.regexp - patterns - - - include - $self - - - - - - group-definition - - patterns - - - begin - (\()((\?:))? - beginCaptures - - 1 - - name - punctuation.definition.group.regexp - - 3 - - name - punctuation.definition.group.capture.regexp - - 5 - - name - punctuation.definition.group.capture.regexp - - 6 - - name - punctuation.definition.group.no-capture.regexp - - - end - (\)) - endCaptures - - 1 - - name - punctuation.definition.group.regexp - - - name - meta.group.regexp - patterns - - - include - $self - - - - - - operator - - patterns - - - match - \| - name - keyword.operator.or.regexp - - - - quantifier - - patterns - - - match - (\?|\*\??|\+\??)|\{(\d+,\d+|\d+,|\d+)\} - name - keyword.operator.quantifier.regexp - - - - - scopeName - source.regexp.js - uuid - 6D74161E-E1A2-4AF3-922D-759E88DEFF63 - - diff --git a/Monokai Phoenix.tmTheme b/Monokai Phoenix.tmTheme deleted file mode 100644 index 041f03e..0000000 --- a/Monokai Phoenix.tmTheme +++ /dev/null @@ -1,556 +0,0 @@ - - - - - name - Monokai Phoenix - settings - - - settings - - activeGuide - #9D550FB0 - background - #111111 - bracketContentsForeground - #F8F8F2A5 - bracketContentsOptions - underline - bracketsForeground - #F8F8F2A5 - bracketsOptions - underline - caret - #F8F8F0 - findHighlight - #FFE792 - findHighlightForeground - #000000 - foreground - #F8F8F2 - invisibles - #3B3A32 - lineHighlight - #3E3D32 - selection - #49483E - selectionBorder - #222218 - tagsOptions - stippled_underline - - - - name - comment - scope - comment - settings - - fontStyle - italic - foreground - #75715E - - - - name - String - scope - string - settings - - foreground - #E6DB74 - - - - name - Built-in constant - scope - constant.language - settings - - foreground - #AE81FF - - - - name - User-defined constant - scope - constant.character, constant.other - settings - - foreground - #AE81FF - - - - name - Invalid - scope - invalid - settings - - background - #F92672 - - - - name - constant - scope - constant - settings - - foreground - #AE81FFA0 - - - - name - Keyword - scope - keyword - settings - - foreground - #F92672 - - - - name - constant.numeric - scope - constant.numeric - settings - - foreground - #AE81FF - - - - name - Storage - scope - storage - settings - - foreground - #F92672 - - - - name - storage.type - scope - storage.type - settings - - foreground - #66D9EF - - - - name - Support - scope - support - settings - - foreground - #8A5C8DFF - - - - name - Function arg - scope - meta.function.argument, variable.parameter, meta.parens.c - settings - - foreground - #FD971F - - - - name - invalid.illegal - scope - invalid.illegal - settings - - background - #562D56BF - foreground - #FD5FF1FF - - - - name - support.function - scope - support.function - settings - - foreground - #A6E22E - - - - name - meta.tag entity - scope - entity.name.tag - settings - - foreground - #F92672 - - - - name - Attribute - scope - entity.other.attribute-name - settings - - foreground - #A6E22E - - - - name - entity.arrow.function.js - scope - entity.arrow.function.js - settings - - foreground - #AA00FF - - - - name - support.class.error.js - scope - support.class.error.js - settings - - foreground - #FF5522 - - - - name - support.class.node.js - scope - support.class.node.js - settings - - foreground - #1224FE - - - - name - support.keyword.node.js - scope - support.keyword.node.js - settings - - fontStyle - bold - foreground - #F92672 - - - - name - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - scope - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - settings - - foreground - #A6E22E - - - - name - entity.name.accessor.js - scope - entity.name.accessor.js - settings - - foreground - #A6E22E - - - - name - entity.name.method.js - scope - entity.name.method.js - settings - - foreground - #A6E22E - - - - name - meta.method.js - scope - meta.method.js - settings - - foreground - #FFF - - - - name - support.function - scope - support.function - settings - - foreground - #66D9EF - - - - name - Function name - scope - entity.name.function - settings - - foreground - #A6E22E - - - - name - entity.name.class.js - scope - entity.name.class.js - settings - - fontStyle - italic - foreground - #A6E22E - - - - name - entity.name.extends.js - scope - entity.name.extends.js - settings - - fontStyle - italic - foreground - #00FF99 - - - - name - entity.other.attribute-name.id - scope - entity.other.attribute-name.id - settings - - foreground - #A6E22E - - - - name - class name - scope - meta.prototype support.class - settings - - foreground - #A6E22E - - - - name - Library constant - scope - support.constant - settings - - foreground - #66D9EF - - - - name - Library class/type - scope - support.type, support.class, variable.language - settings - - fontStyle - italic - foreground - #66D9EF - - - - name - js undefined - scope - constant.language.undefined.js - settings - - foreground - #AE81FF - - - - name - false - scope - constant.language.boolean.false - settings - - foreground - #AE81FF - - - - name - true - scope - constant.language.boolean.true - settings - - foreground - #AE81FF - - - - name - js null - scope - constant.language.null.js - settings - - foreground - #AE81FF - - - - name - Inherited class - scope - entity.other.inherited-class - settings - - fontStyle - italic underline - foreground - #A6E22E - - - - name - diff.header - scope - meta.diff, meta.diff.header, entity.name.namespace - settings - - foreground - #75715E - - - - name - diff.deleted - scope - markup.deleted - settings - - background - #420E09FF - foreground - #F92672 - - - - name - diff.changed - scope - markup.changed - settings - - background - #4A410DFF - foreground - #E6DB74 - - - - name - diff.inserted - scope - markup.inserted - settings - - background - #253B22FF - foreground - #F8F8F8FF - - - - name - Log Entry - scope - meta.line.entry.logfile, meta.line.exit.logfile - settings - - background - #EEEEEE29 - foreground - #F8F8F8FF - - - - name - Log Entry Error - scope - meta.line.error.logfile - settings - - background - #751012 - foreground - #F8F8F8 - - - - name - JSON String - scope - meta.structure.dictionary.json string.quoted.double - settings - - foreground - #CFCFC2 - - - - uuid - 5815b34d-fb7d-4593-bf0c-4f41f8b1f0a9 - - diff --git a/Next.tmTheme b/Next.tmTheme deleted file mode 100644 index 4f40ce9..0000000 --- a/Next.tmTheme +++ /dev/null @@ -1,1869 +0,0 @@ - - - - - name - Next - settings - - - settings - - activeGuide - #3333FFFF - background - #000000 - bracketsBackground - #FF00AA66 - bracketsOptions - background - caret - #FF0099 - foreground - #E6E6E6 - guide - #33333388 - gutter - #6600FF33 - invisibles - #404040 - lineHighlight - #FF009933 - multiEditHighlight - #00FF0022 - searchHighlight - #FF00AA99 - selection - #00FFFF44 - stackGuide - #333333CC - - - - name - bracket.curly - scope - bracket.curly - settings - - background - #FF44AA - foreground - #3399FF - - - - name - bracket.square - scope - bracket.square - settings - - background - #2266CC - foreground - #FF8800 - - - - name - bracket.round - scope - bracket.round - settings - - background - #9922FF - foreground - #00FF00 - - - - name - bracket.quote - scope - bracket.quote - settings - - background - #00FF00 - - - - name - comment - scope - comment - settings - - fontStyle - italic - foreground - #646464FF - - - - name - Invalid - scope - invalid - settings - - background - #FF000022 - - - - name - constant - scope - constant - settings - - foreground - #3387CCFF - - - - name - Keyword - scope - keyword - settings - - foreground - #E28964 - - - - name - constant.numeric - scope - constant.numeric - settings - - foreground - #FFFF66 - - - - name - Storage - scope - storage - settings - - foreground - #99CF50 - - - - name - storage.modifier - scope - storage.modifier - settings - - foreground - #CF5099 - - - - name - storage.self - scope - storage.self - settings - - fontStyle - bold - foreground - #CC0033 - - - - name - storage.type - scope - storage.type - settings - - foreground - #CF9950 - - - - name - Support - scope - support - settings - - foreground - #8A5C8DFF - - - - name - entity.name.function - scope - entity.name.function - settings - - foreground - #BB00FF - - - - name - keyword control - scope - keyword.control - settings - - foreground - #FF00FF - - - - name - keyword.control.declaration - scope - keyword.control.declaration - settings - - foreground - #8888AA - - - - name - keyword.control.module - scope - keyword.control.module - settings - - background - #FFFF3333 - foreground - #FFFF33 - options - underline - - - - name - keyword.control.flow - scope - keyword.control.flow - settings - - background - #110300 - fontStyle - bold - foreground - #FF6600 - - - - name - keyword.control.conditional - scope - keyword.control.conditional - settings - - foreground - #FF00FF - - - - name - keyword.control.trycatch - scope - keyword.control.trycatch - settings - - foreground - #FF0033 - - - - name - keyword.control.loop - scope - keyword.control.loop - settings - - foreground - #009999 - - - - name - keyword.control.switch - scope - keyword.control.switch - settings - - foreground - #999999 - - - - name - keyword operator - scope - keyword.operator - settings - - foreground - #FF0080 - - - - name - Function arg - scope - meta.function.argument, variable.parameter, meta.parens.c - settings - - foreground - #77FF11 - - - - name - - scope - punctuation.section.embedded - settings - - background - #0D0D0D37 - foreground - #00D3FFFF - - - - name - keyword.other.unit - scope - keyword.other.unit, keyword.unit.css - settings - - foreground - #80FF00FF - - - - name - invalid.illegal - scope - invalid.illegal - settings - - background - #562D56BF - foreground - #FD5FF1FF - - - - name - string.quoted source - scope - string.quoted source - settings - - foreground - #DAEFA3 - - - - name - string constant - scope - string constant - settings - - foreground - #CFED81 - - - - name - string.regexp - scope - string.regexp - settings - - foreground - #6FFF17 - - - - name - punctuation.definition.string - scope - punctuation.definition.string - settings - - background - #15151501 - foreground - #B4FF82 - - - - name - string.regexp.special - scope - string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition - settings - - foreground - #00D505 - - - - name - string.regexp punctuation keyword - scope - string.regexp punctuation keyword - settings - - foreground - #C559FF - - - - name - string variable - scope - string variable - settings - - foreground - #8A9A95 - - - - name - support.function - scope - support.function - settings - - foreground - #FCF352FF - - - - name - meta.tag - scope - meta.tag - settings - - foreground - #4F9EFFFF - - - - name - meta.tag entity - scope - meta.tag entity - settings - - foreground - #157EFF - - - - name - HTML/XML tag attribute value - scope - meta.tag string.quoted.double.html - settings - - foreground - #E07D2C - - - - name - html5 tag - scope - meta.tag.block.any.html.html5 - settings - - foreground - #E88BFCFF - - - - name - html5 tag entity - scope - meta.tag.block.any.html.html5 entity - settings - - foreground - #D730FAFF - - - - name - meta.tag.inline - scope - source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity - settings - - foreground - #87A7E2FF - - - - name - html js tag - scope - source.js.embedded.html entity.name.tag.script.html - settings - - foreground - #FF3535 - - - - name - html js tag braces - scope - source.js.embedded.html punctuation.definition.tag.html - settings - - foreground - #FF1E1E - - - - name - html js tag url - scope - source.js.embedded.html string.quoted.double.html - settings - - foreground - #FF9D9D - - - - name - Attribute - scope - entity.other.attribute-name - settings - - foreground - #7349BEFF - - - - name - Meta Toc List - scope - meta.toc-list - settings - - background - #162C1AFF - foreground - #BEFEC7FF - options - underline - - - - name - js variable readwrite - scope - meta.initialization, variable.other.readwrite.js - settings - - foreground - #FF9122 - - - - name - js variable dollar - scope - meta.initialization, variable.other.dollar.js - settings - - fontStyle - italic - foreground - #FF9122 - - - - name - js object - scope - variable.other.object.js - settings - - foreground - #FFEE00 - - - - name - js object with parent - scope - meta.property-name.js variable.other.object.js - settings - - foreground - #FFFF88 - - - - name - support.variable.property.js - scope - support.variable.property.js - settings - - foreground - #3399FF - - - - name - variable.other.dot-access - scope - variable.other.dot-access - settings - - foreground - #66FFDD - - - - name - variable.other.property.js - scope - variable.other.property.js - settings - - foreground - #37C1BE - - - - name - punctuation.section.scope.square.js - scope - punctuation.section.scope.square.js - settings - - foreground - #FF2404 - - - - name - punctuation.section.scope.round.js, meta.brace.round - scope - punctuation.section.scope.round.js, meta.brace.round - settings - - foreground - #1C38FF - - - - name - punctuation.definition.arrow.js - scope - punctuation.definition.arrow.js - settings - - background - #001133 - fontStyle - bold - foreground - #AA00FF - - - - name - entity.arrow.function.js - scope - entity.arrow.function.js - settings - - background - #001133 - fontStyle - bold - foreground - #AA00FF - - - - name - variable.language - scope - variable.language - settings - - foreground - #AA0044 - - - - name - variable.language.prototype - scope - variable.language.prototype - settings - - foreground - #FF6600 - - - - name - support.class.error.js - scope - support.class.error.js - settings - - foreground - #FF5522 - - - - name - support.class.builtin.js - scope - support.class.builtin.js - settings - - fontStyle - italic - foreground - #FFEE00 - - - - name - support.class.node.js - scope - support.class.node.js - settings - - foreground - #1224FE - - - - name - entity.name.function.node.js - scope - entity.name.function.node.js - settings - - foreground - #D84014 - - - - name - support.keyword.node.js - scope - support.keyword.node.js - settings - - fontStyle - bold - foreground - #99EF25 - - - - name - variable.import.destructuring.js - scope - variable.import.destructuring.js - settings - - foreground - #00BBFF - - - - name - other.object.key.js - scope - other.object.key.js - settings - - foreground - #1C98C1 - - - - name - meta.accessor.js punctuation.definition.parameters - scope - meta.accessor.js punctuation.definition.parameters - settings - - foreground - #005588 - - - - name - storage.type.accessor.js - scope - storage.type.accessor.js - settings - - background - #001122 - fontStyle - bold italic - foreground - #0066AA - - - - name - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - scope - entity.name.module.js, variable.import.parameter.js, variable.other.class.js - settings - - background - #220011 - foreground - #FF0044 - - - - name - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - scope - storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js - settings - - background - #222211 - foreground - #CCCC44 - - - - name - storage.type.class.js, storage.type.extends.js - scope - storage.type.class.js, storage.type.extends.js - settings - - background - #001122 - foreground - #0044AA - - - - name - meta.function.call.class.static.js - scope - meta.function.call.class.static.js - settings - - foreground - #880011 - - - - name - variable.other.class.static.js - scope - variable.other.class.static.js - settings - - foreground - #AA0066 - - - - name - entity.name.accessor.js - scope - entity.name.accessor.js - settings - - background - #001122 - fontStyle - bold italic - foreground - #00FFCC - - - - name - entity.name.method.js - scope - entity.name.method.js - settings - - background - #110022 - fontStyle - italic bold - foreground - #AA00FF - - - - name - meta.method.js - scope - meta.method.js - settings - - fontStyle - bold - foreground - #660099 - - - - name - storage.type.function.js - scope - storage.type.function.js - settings - - fontStyle - bold - foreground - #99CC44 - - - - name - string.quoted.single - scope - string.quoted.single - settings - - foreground - #88FFAAAA - - - - name - variable.other.quasi.js - scope - variable.other.quasi.js - settings - - foreground - #FF0099 - - - - name - string.quasi.js - scope - string.quasi.js - settings - - foreground - #00FF00 - - - - name - punctuation.quasi.element - scope - punctuation.quasi.element - settings - - foreground - #008800 - - - - name - entity.quasi.tag.name.js - scope - entity.quasi.tag.name.js - settings - - foreground - #FFFF00 - - - - name - meta.group.braces.square, punctuation.destructuring - scope - meta.group.braces.square string.quoted.single, punctuation.destructuring - settings - - foreground - #47E9AC - - - - name - string.quoted.double - scope - string.quoted.double - settings - - foreground - #11BB11 - - - - name - punctuation.section.scope.curly.js - scope - punctuation.section.scope.curly.js - settings - - foreground - #F9044E - - - - name - meta.delimiter.comma.js - scope - meta.delimiter.comma.js - settings - - foreground - #00FFFF - - - - name - meta.group.braces.curly string.quoted.single - scope - meta.group.braces.curly string.quoted.single - settings - - foreground - #16B853 - - - - name - support.function - scope - support.function - settings - - foreground - #B532FF - - - - name - punctuation.definition.string.begin.js - scope - punctuation.definition.string.begin.js - settings - - foreground - #D2E20C - - - - name - punctuation.definition.string.end.js - scope - punctuation.definition.string.end.js - settings - - foreground - #CEA30D - - - - name - instance constructor - scope - meta.class.inheritance, meta.instance.constructor - settings - - fontStyle - italic underline - foreground - #E81E41 - - - - name - entity.name.class.js - scope - entity.name.class.js - settings - - background - #00FFFF33 - fontStyle - italic - foreground - #00FFFF - - - - name - entity.name.extends.js - scope - entity.name.extends.js - settings - - background - #00FF9933 - fontStyle - italic - foreground - #00FF99 - - - - name - function call - scope - meta.function-call entity.name.function - settings - - foreground - #5B24FF - - - - name - function call with args - scope - meta.function-call.function.with-arguments.js - settings - - foreground - #33FF00 - - - - name - js brace - scope - meta.brace.curly.js - settings - - foreground - #FF0099 - - - - name - js paren - scope - meta.brace.round.js - settings - - background - #000000FF - foreground - #D0C5FEFF - - - - name - js constant escape - scope - constant.character.escape - settings - - foreground - #10CF62FF - - - - name - pseudo-class - scope - meta.selector.css entity.other.attribute-name.tag.pseudo-class - settings - - foreground - #4FBC4B - - - - name - css selectors - scope - entity.namespace.unicode.css - settings - - foreground - #FF4F4F - - - - name - entity.other.attribute-name.id - scope - entity.other.attribute-name.id - settings - - background - #0B0028FF - foreground - #F20073FF - - - - name - class name - scope - meta.prototype support.class - settings - - foreground - #FF0099 - - - - name - support object - scope - support.object - settings - - fontStyle - bold - foreground - #FFEE00 - - - - name - class name prototype - scope - meta.prototype support.constant - settings - - foreground - #FF6600 - - - - name - prototype declaration - scope - meta.prototype.declaration.js - settings - - fontStyle - bold - - - - name - js undefined - scope - constant.language.undefined.js - settings - - foreground - #555588 - - - - name - variable.other.constant.js - scope - variable.other.constant.js - settings - - background - #003311 - foreground - #00FF33 - - - - name - false - scope - constant.language.boolean.false - settings - - foreground - #AAAA55 - - - - name - true - scope - constant.language.boolean.true - settings - - foreground - #CC7744 - - - - name - js null - scope - constant.language.null.js - settings - - foreground - #558855 - - - - name - css#id punctuation - scope - punctuation.definition.entity.id.css - settings - - background - #0B0028 - foreground - #FF489F - - - - name - css.class - scope - entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css - settings - - background - #0B0028 - foreground - #9529B8 - - - - name - css.class puntuation - scope - punctuation.definition.entity.class.css - settings - - background - #0B0028FF - foreground - #CD87E4FF - - - - name - css pseudo element - scope - entity.other.attribute-name.pseudo-element.css - settings - - background - #0B0028FF - foreground - #FF00FFFF - - - - name - css property-name - scope - support.type.property-name.css - settings - - foreground - #B8EFECFF - - - - name - css @at-rule - scope - meta.preprocessor.at-rule keyword.control.at-rule - settings - - foreground - #D7C271FF - - - - name - css color - scope - constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css - settings - - foreground - #FB7720FF - - - - name - css constants - scope - support.constant.property-value.css - settings - - foreground - #7CE85EFF - - - - name - Puncation Termination - scope - punctuation.terminator, punctuation.separator - settings - - foreground - #4BFCF8FF - - - - name - css constructor.argument - scope - meta.constructor.argument.css - settings - - foreground - #8F9D6AFF - - - - name - diff.header - scope - meta.diff, meta.diff.header, entity.name.namespace - settings - - background - #0E2231FF - foreground - #F8F8F8FF - - - - name - diff.deleted - scope - markup.deleted - settings - - background - #420E09FF - foreground - #F8F8F8FF - - - - name - diff.changed - scope - markup.changed - settings - - background - #4A410DFF - foreground - #F8F8F8FF - - - - name - diff.inserted - scope - markup.inserted - settings - - background - #253B22FF - foreground - #F8F8F8FF - - - - name - Markup: Italic - scope - markup.italic - settings - - fontStyle - italic - foreground - #6AD500FF - - - - name - Markup: Underline - scope - markup.underline - settings - - foreground - #E18964FF - options - underline - - - - name - Markup: Quote - scope - markup.quote - settings - - background - #FEE09C12 - fontStyle - italic - foreground - #E1D4B9FF - - - - name - Markup: Heading - scope - markup.heading, markup.heading entity - settings - - background - #DE3280FF - foreground - #FFFFFFFF - - - - name - Markup: List - scope - markup.list - settings - - foreground - #6657EAFF - - - - name - Markup: Raw - scope - markup.raw - settings - - background - #B1B3BA08 - foreground - #578BB3FF - - - - name - Markup: Comment - scope - markup comment - settings - - foreground - #F67B37FF - - - - name - Markup: Separator - scope - meta.separator - settings - - background - #242424FF - foreground - #60A633FF - - - - name - Log Entry - scope - meta.line.entry.logfile, meta.line.exit.logfile - settings - - background - #EEEEEE29 - foreground - #F8F8F8FF - - - - name - Log Entry Error - scope - meta.line.error.logfile - settings - - background - #751012 - foreground - #F8F8F8 - - - - name - JSON property top - scope - meta.structure.dictionary.json string.quoted.double - settings - - background - #111111 - foreground - #1144BB - - - - name - JSON property level 2 - scope - meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #1122BB - - - - name - JSON property level 3 - scope - meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #2938EB - - - - name - JSON property level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #6D7EF1 - - - - name - JSON property level 5 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double - settings - - foreground - #B3BBF7 - - - - name - JSON value - scope - meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #AA00AA - - - - name - JSON value level 2 - scope - meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #BF00BF - - - - name - JSON value level 3 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #FF00FF - - - - name - JSON value level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #FF40FF - - - - name - JSON value level 5 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double - settings - - foreground - #FF80FF - - - - name - JSON value string punctuation - scope - meta.structure.dictionary.value.json string punctuation.definition.string.double - settings - - foreground - #8409FF - - - - name - JSON array value - scope - meta.structure.array.json string.quoted.double - settings - - foreground - #5522AA - - - - name - JSON array value level 1 - scope - meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #7017C8FF - - - - name - JSON array value level 2 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #9541E9FF - - - - name - JSON array value level 3 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #BA83F1FF - - - - name - JSON array value level 4 - scope - meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double - settings - - foreground - #DFC6F9FF - - - - name - JSON prop string punctuation - scope - meta.structure.dictionary.json string punctuation.definition.string - settings - - foreground - #66BBDDFF - - - - name - JSON array string puntuation - scope - meta.structure.array.json string punctuation.definition.string - settings - - foreground - #416BE9FF - - - - name - JSON array brackets - scope - meta.structure.array.json punctuation.definition.array - settings - - foreground - #FCC401FF - - - - name - JSON object braces - scope - meta.structure.dictionary.json punctuation.definition.dictionary - settings - - foreground - #FEDF76FF - - - - uuid - b238c753-1549-3f12-a519-0faa5dcd4f65 - - diff --git a/Regular Expressions (JavaScriptNext).tmLanguage b/Regular Expressions (JavaScriptNext).tmLanguage deleted file mode 100644 index 2aba44d..0000000 --- a/Regular Expressions (JavaScriptNext).tmLanguage +++ /dev/null @@ -1,307 +0,0 @@ - - - - - fileTypes - - re - - foldingStartMarker - (/\*|\{|\() - foldingStopMarker - (\*/|\}|\)) - name - Regular Expressions (Javascript Next) - patterns - - - include - #anchor - - - include - #backref - - - include - #quantifier - - - include - #operator - - - include - #group-assertion - - - include - #group-definition - - - include - #character-class - - - include - #character-class-definition - - - repository - - anchor - - patterns - - - match - \\[bB]|\^|\$ - name - keyword.control.anchor.regexp - - - - backref - - patterns - - - match - \\[1-9][0-9]* - name - keyword.other.back-reference.regexp - - - - character-class - - patterns - - - match - \\[wWsSdD]|\. - name - constant.other.character-class.escape.backslash.regexp - - - match - \\([trnvf0\\]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) - name - constant.character.escape.backslash.regexp - - - - character-class-definition - - patterns - - - begin - (\[)(\^)? - beginCaptures - - 1 - - name - punctuation.definition.character-class.regexp - - 2 - - name - keyword.operator.negation.regexp - - - end - (\]) - endCaptures - - 1 - - name - punctuation.definition.character-class.regexp - - - name - constant.other.character-class.set.regexp - patterns - - - include - #character-class - - - captures - - 2 - - name - constant.other.character-class.escape.backslash.regexp - - 3 - - name - constant.character.escape.backslash.regexp - - 5 - - name - constant.other.character-class.escape.backslash.regexp - - 6 - - name - constant.character.escape.backslash.regexp - - - match - (?x) - ( - (\\[wWsSdD]|\.)| - (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) - )\- - ( - (\\[wWsSdD]|\.)| - (\\([trnvf0]|c[A-Z]|x[\da-fA-F]{2}|u[\da-fA-F]{4}|.)) - ) - name - constant.other.character-class.range.regexp - - - - - - group-assertion - - patterns - - - begin - (\()((\?=)|(\?!)) - beginCaptures - - 1 - - name - punctuation.definition.group.regexp - - 2 - - name - punctuation.definition.group.assertion.regexp - - 3 - - name - meta.assertion.look-ahead.regexp - - 4 - - name - meta.assertion.negative-look-ahead.regexp - - - end - (\)) - endCaptures - - 1 - - name - punctuation.definition.group.regexp - - - name - meta.group.assertion.regexp - patterns - - - include - $self - - - - - - group-definition - - patterns - - - begin - (\()((\?:))? - beginCaptures - - 1 - - name - punctuation.definition.group.regexp - - 3 - - name - punctuation.definition.group.capture.regexp - - 5 - - name - punctuation.definition.group.capture.regexp - - 6 - - name - punctuation.definition.group.no-capture.regexp - - - end - (\)) - endCaptures - - 1 - - name - punctuation.definition.group.regexp - - - name - meta.group.regexp - patterns - - - include - $self - - - - - - operator - - patterns - - - match - \| - name - keyword.operator.or.regexp - - - - quantifier - - patterns - - - match - (\?|\*\??|\+\??)|\{(\d+,\d+|\d+,|\d+)\} - name - keyword.operator.quantifier.regexp - - - - - scopeName - source.regexp.js - uuid - 6D74161E-E1A2-4AF3-922D-759E88DEFF63 - - diff --git a/Symbol List Banned.tmPreferences b/Symbol List Banned.tmPreferences deleted file mode 100644 index bcad4ab..0000000 --- a/Symbol List Banned.tmPreferences +++ /dev/null @@ -1,19 +0,0 @@ - - - - - name - Symbol List Banned - scope - source.js meta.function-call, source.js meta.instance.constructor - settings - - showInIndexedSymbolList - 1 - showInSymbolList - 0 - - uuid - 71B2B356-23EC-43B8-80A7-CB32E8F2718F - - diff --git a/Symbol List Function.tmPreferences b/Symbol List Function.tmPreferences deleted file mode 100644 index c1552b0..0000000 --- a/Symbol List Function.tmPreferences +++ /dev/null @@ -1,21 +0,0 @@ - - - - - name - Symbol List Function - scope - source.js meta.function, source.js meta.accessor.js, source.js meta.method.js, source.js meta.prototype.function.js, source.js meta.prototype.function.arrow.js, source.js meta.class.js entity.name.class.js - settings - - showInIndexedSymbolList - 1 - showInSymbolList - 1 - symbolTransformation - s/\s+/ /g; - - uuid - B521FCF1-DDA6-4C69-8170-F6C2DE4C86CD - - diff --git a/create-bundle.sh b/create-bundle.sh new file mode 100755 index 0000000..5a586f5 --- /dev/null +++ b/create-bundle.sh @@ -0,0 +1,30 @@ +#!/bin/sh + + +BUNDLE_DIR="JavaScriptNext.tmbundle" +PREFERENCES_DIR="$BUNDLE_DIR/Preferences" +SYNTAXES_DIR="$BUNDLE_DIR/Syntaxes" +THEMES_DIR="$BUNDLE_DIR/Themes" + +# build bundle dirs +mkdir -p $PREFERENCES_DIR +mkdir -p $SYNTAXES_DIR +mkdir -p $THEMES_DIR + +# copy info.plist +cp info.plist $BUNDLE_DIR/info.plist + +# copy preferences +./yaml-to-plist.rb JavaScript\ Indent.YAML-tmPreferences > $PREFERENCES_DIR/JavaScript\ Indent.tmPreferences +./yaml-to-plist.rb Comments.YAML-tmPreferences > $PREFERENCES_DIR/Comments.tmPreferences +./yaml-to-plist.rb Symbol\ List\ Banned.YAML-tmPreferences > $PREFERENCES_DIR/Symbol\ List\ Banned.tmPreferences +./yaml-to-plist.rb Symbol\ List\ Function.YAML-tmPreferences > $PREFERENCES_DIR/Symbol\ List\ Function.tmPreferences + +# copy language +./yaml-to-plist.rb JavaScriptNext.YAML-tmLanguage > $SYNTAXES_DIR/JavaScriptNext.tmLanguage +./yaml-to-plist.rb JSON\ \(JavaScriptNext\).YAML-tmLanguage > $SYNTAXES_DIR/JSON\ \(JavaScriptNext\).tmLanguage +./yaml-to-plist.rb Regular\ Expressions\ \(JavaScriptNext\).YAML-tmLanguage > $SYNTAXES_DIR/Regular\ Expressions\ \(JavaScriptNext\).tmLanguage + +# copy themes +./yaml-to-plist.rb Next.YAML-tmTheme > $THEMES_DIR/Next.tmTheme +./yaml-to-plist.rb Monokai\ Phoenix.YAML-tmTheme > $THEMES_DIR/Monokai\ Phoenix.tmTheme \ No newline at end of file diff --git a/JavascriptNext.tmbundle/info.plist b/info.plist similarity index 93% rename from JavascriptNext.tmbundle/info.plist rename to info.plist index 21d1a2a..a60d656 100644 --- a/JavascriptNext.tmbundle/info.plist +++ b/info.plist @@ -9,7 +9,7 @@ description New shiny bundle for X. name - JavascriptNext + JavaScriptNext uuid B5617C72-9CE4-483A-A3B7-D16290DC4BB1 diff --git a/yaml-to-plist.rb b/yaml-to-plist.rb new file mode 100755 index 0000000..082ead7 --- /dev/null +++ b/yaml-to-plist.rb @@ -0,0 +1,49 @@ +#!/usr/bin/env ruby +# encoding: UTF-8 +require 'yaml' +require 'rexml/document' + +class PlistWriter + PLIST_STUB_DOC = %q[ + + + ] + + def initialize(root_object) + @document = REXML::Document.new PLIST_STUB_DOC + @current_node = @document.root + process(root_object) + end + + def build_element(name, text = nil) + @current_node.add_element(name.to_s).tap do |new_node| + new_node.add_text(text.to_s.dup) unless text.nil? + next unless block_given? + _current_node = @current_node + @current_node = new_node + yield + @current_node = _current_node + end + end + + def process(object) + case object + when Hash then build_element :dict do object.each { |k, v| build_element(:key, k); process(v) } end + when Array then build_element :array do object.each { |e| process(e) } end + when String then build_element :string , object + when Integer then build_element :integer, object + when Float then build_element :real , object + when Date then build_element :date , object.to_time(:utc).iso8601 + when Time, DateTime then build_element :date , object.to_time.utc.iso8601 + when FalseClass then build_element :false + when TrueClass then build_element :true + else raise "Unexpected object of class #{object.class.name}" + end + end + + def to_s + "".tap { |s| f = REXML::Formatters::Pretty.new(indentation=4); f.compact = true; f.write(@document, s) } + end +end + +puts PlistWriter.new(YAML::load(ARGF.read)) if $0 == __FILE__ From b05ba723736fab33454865fb524518fc45c03fd2 Mon Sep 17 00:00:00 2001 From: Derek Henscheid Date: Thu, 30 Apr 2015 10:06:17 -0500 Subject: [PATCH 202/202] updated gitignore to ignore generated bundle --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index affff01..e118c15 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /*.cache +JavaScriptNext.tmbundle \ No newline at end of file