From 230e95c893d022a7bd5e5b342ac7104adc906f66 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 29 Dec 2013 00:41:01 +1100 Subject: [PATCH 001/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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 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 Date: Fri, 3 Jan 2014 12:14:34 +1100 Subject: [PATCH 025/199] 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/199] 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/199] 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/199] 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 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 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 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 Date: Sat, 4 Jan 2014 09:07:17 +1100 Subject: [PATCH 029/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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( zfo#FCL+|sO035oLDY^Q%1k>~=&x&zoRLd@w3xc3smBTIRhA@|1US)TeP^jMS?l+&2 zvns)_=NBC6ghTKm(|YWEDD#(D?*JZ39}s2nU~~5#@jO2T0*QRr&>LCAeZk| z0uM-+1*5n&TfjYM7N1<=&E^79An!0Kl)eEkhW1ssv6TN%ZGu7nGFu^jlw6?;;fD<@ zCG`6dM);9A(QJm}t;Zs1OuDuD9)nV%+NWZ<+k^d)K8Gc2rgQl1@rPDa*XuE=AsR2UdQOP?W^7<6>x!Yc53XrH~(O-59(MEldYTpoZun_@D7 zaTj8+XII#(|9kKSMDt6p#^qhkDz2`Pn83pO>u(<>U)XO&(^9r|*)8&D(AaN8*%7i* zKL7H%Do?tdN|`t!Ft<9hp{qCPll{pZ-uppK)ykuV(m1v$K-N@q#v{^An=jM#zWva` z${{iy@gJmXj}EGre4&}i$6@lge-nQJTv%Ag#CONslI+ezbE~O#QT<_?W$s#g4kG6y z--huv642}k>y80QZrjfAnI3)-rIN8W#~IySk4+RoRD7FD;_@J=xD>qK6DeqRUfyTw9XumsHZ0p)52M}!tnUv)zfY_U_R3RnT za99NvXprbp46GvwR-G$xl6x^Lz<*d@uv^D(k@QRSHjR$%=_tGJ-)`_x69`OB70=FG zd3K-Wc@SYwvBMGwDxbehy#ClF?OF)v!B+)K~J2SE0Fc>?tcvl;2tHeN?td+r&Fx2ZSGL zT=uLc08&jJ>7WQ-Wg0BdVmw&eFK|W#V~KdpLaMrnVXLRz330XS9Hp@%XPK~#Yb2oh z1{e8!zPdif^WXb#4-vzz3#;MmuU_9|r`Ipm`Q%c)X|DaFq>-<$1*mOF*yS%bi`cS01H9!Oq>1fe{f^E<=vI0sD(E zPqSZMsv6QkqnpGN?s4%fo+;{~EBb=j+zMJ}h!K3dVH=EK!VG%)y&0AmE8WsLt1K)z zR~?cOC6SC$wZ3K+!IlL2a!b(+9M`?X`Qih*xi>`vvLn*+dh9m6W4OH13CY1HJ`~r&Q|T6uHm+Bo6%p`MBC~*_i45-E=+ZQwBMrib!2w%QOBX&jCfM-U%6=> z+Ij2J4Q&y!s+vMH>;uNA*XXx7>H2+gZ$Ng8mG{%aGm>~KQJ zQk*ozLV4z}ewZ*r;LhQ6-uKu$dfC_zzaZR4qu{l$ZGMWgsMKXA z*ejmdGj)9~CD8_KbTqqsI(y?s$+tVbcjS4F_;RhLWcBp1#G(Zkn>6$@o^@$7HUGbn zSt$S2t@xcOjL~aP^fAF0a4r33IQp9V?b}$Hyjuzp+hu~Mj)k~j!H^OwEi>ASbY8|| zv~MK%mQ7Xr;V(c~*533JC=Yy!Uk6dn?hKi5<>Xr7 zC(xb~(x;}46Ff?v6ntHFBu7=3aDFx={l;gU3^v-m8>IQ(QSQd(TZ?OtlqXl78z_Dx zPpIiTA?F}1Z*jkT`}%`3giBV6?C!R$M780X3US$>8T2)xL_@X0HhA1x@WsXyr^%)g zON5_NF?HmRqgMw@v_p+CT6Aj%80kMg>9*+A4h8)0_-tL5bs)OMbJwN$jOctP+#+55 z$3#eR`wW^>{N*ThvCK*d3wu-UD_Hxr)^)f*)^Lr@Brm^|0Hg=LdsTyOUK)xZ(BvJq zi}7cYR+jx6r48^pLmZ%UI8}}U;bqivr0|m>kgQ4qW{LaLEdrz1?PWXj* zPT-{oa2~5_2;REUg~9Ar+POg!dhc(0ys@ulNBGYt9$z20BfD0fkDTqT=9*Zf*rU}n zd%o$zw4ImAhwHJlZMZq}C4?;NXt6pcK=wKS_^z1xEu1X8lzPqLq__t2#!$k2wu@oN z$6)%9lP&2Eo_osnJhB2{05-)~5U7TO9>q&8PM55x2l3i<$!;}Lfu*4axJ-;<9Hgh3rM}wL z+1w7zm1kt@{cGHRlnNgZ=eC7D#1lJw*SPJ781Nn$%WqrVN z=9(cinUmdELAg+zJjWHaFd{GT%MbYwlUpW?G~F9S$MPcYO=L*&TO;?*E5To@SNw5)>@v9MHqo|ISC z?BegV6tt=K#bfSMYMK2J`n>@rd=1C^l1RM-@UDYA=ZlqEL@{|QRb*Sc{|Ghrvu=_k zccpzt!^9E^SCb3+yu;Iw2hXd~SiLv(Zp}lOz=Zoc2bb zUgW1wWdZU;jeA8zR9Jlb7exhFelCaKqQ3c%UJ3tfq^31a0KYv?=5dHLbMh`p5~=s} zBU-Lghc|D>5zT&2ZRo$E2nkc1n2oxbAYuPhCe(Aj=F3)#dfuw3B*ue&QtJn*`$JZNuLHf_s>|o;u=)PPPk~0?o#i!@ z#JBL%drM{{54Y)9EFUTEzl}5PhT48=YX71U?R%N8M5|qQ71TN;1PzFt{*~Ae;$z2( zzG++;3w;F>cQh$K3^K?8C23Lv^yNpyc1R_p5|a5$P0s05xFUA-v^tDut)6z{DXR4G zy3aMVSLyRQv+6zKWZw2~D=JLJ2>afeklx6~Xt|W~L(vvx^3lWdS7)?9k zXNBI#$NnANO)|*_dd1AxzH)u64!;?f(i-9~05WI&M}6`8?QfbFlA*K&%{X|k(M9?= zneBfEc`Fzu&wuFfGDH)+jJR7Iqyo&<7imyUb$ge<)tfB>-7UYM{3dw|!w$Nr%%3}D zJ=nP7rCCq=FBLrOG+eLMfgrr@1^L9JCQ7GTVf3(!nm5Ne{?bs*F6zOX;Tr+d17n?G zes{ZpTzeNFJLcjZOhK}_Z>X74JuFGdB~#7E{d_U^WmwewiJqn+@%r_swy z`nvh)epO(pVU9M0Wasz_fX3{r*m2LTgA= zwQyrmT&Yfp$YfPbW#_u`hL&8*VT{Z5txGM!0c-7wRM#!qZipwg!ya@S^xckNtWHwEmHz`+~%D7 zPxZI9t5}o5TZh8wnpdwadmk^BCoHxEpU~gLcdH$z=?L;~Oa%kW zn0RzpE!AM- z|26P}Cd{LQiNAZYQT{k#UbTX>YdiMCmx8?-;0g`d+;gfX7k=r)|345|N+gg0PXG3y z8D)D*IC?=B1`lT#qzzZ3q|C_upYCi*<=SpMa zmJ-qyy=jxw=orz5^X_35D%5I%=-iB0t1)CH{+|T#_)+R3TbbCs{%y}tavu91ZJ6r& zyk}-hujKMgzsj9nGgb$v_cKP`f{iyjbp&c9_MYpjJs)64YN7NHh#@gP5o$J}?t61` z!4lN?G!Mtqqt5eP^)Cl9$S7s9|Ew}T_vQ!P>8BPD+ehMkm?;CH7|Nk{*k8}$h~AgR zfJ<`?i(=xGJnNk$g2VTD6kRC@jF9AVKd9WS-13m3*mj125jV;$4xYjSrvvWr>b|ch;{uLWeeWoV>q70&QBWc!5 zcXM91{s8jK&$BHp!G27Y&54#A+?anv+_LKbW{hYbslw$!t~QYlwxwnuEALw=J%1m( z^Pz12**Rr@uNktNCOC2a*z;4vnq(5#sXTd!2&kZH+~V`o;qN;IdfF_NoQ+ijdRx=Y zWn9KN%AAv53a+Q0xIb6dnRo46pF1w0+h>C{&W%!T_(BVn`tO^X5zbzIkKMED<~UlS z0C(|)fZxb*myDyDo1z8-`0lcku;=||)mhwk`uFK4gYZ#w6lIG{!RY=qP#4Ym0gYtr zO9LbFn3~phD5Xt)$kEm8H_tsg+X?gGV)~NC$;nH|%gHw*N{6XKzh+?9xAtu}atXEP zOw1SQy`W_CEJVks_?e#0V@W-?uOWibq?)zv4GNWcE4%M75+jDoy%rckw6olqdQYLXhB#6AYdWHIORm zM!8jx#rf;J)@VGd1pAxDkf&$~iM^eI7n97_5wL3hYc_6Qs#237`fKD$j?DYNc`Myw zLL3tv0Wpr$!yB{Hdn6H3Ds={fd2fcW$*{h~ zcGmXv<_{_;*<6HLa#w!3E_qbk;BxqUtp_%o*2`OWATO#ef|@YT?n8pw>GaESWspZ( zO0Kk2HCGT0&E5_5uHE58dw9m%XB^EAi^pX*Xnh$fvRNu8edc`~#l1Kq@9t6kU7s7N zEBji6g{~HgP&$q0d~{TI4dZ5v;Tn%a0a5B6t@Tfu{0u^8BFo_QvOb3#1y- zw9|9JEj87`9!opwIa27-smA?S(tlTz6ylku6;t1Q6G-@ke3%(S_3f~FwL6PiC!w0O1;Pp6Ihf*s?ZxQd;bp;d#5F9H|nxs+-KME(=T?p z=pZsq={EvG=e3Is>~ZwfpD(tLdk6|%OBGmojR{%5T`|ZT%~y_jula3nvO2lO3zYMu zdUd(S_qjnpFNa3wLLS~4;Y0!QeYG4(s|-k}n|<0AM8D+OTeM&ZZ6PImerZ~`jAzoa zAVeJb$8Hx#rSH`5uaP~}+xZ=C2Svb!%&d`r9d1eN8uC-Btz-kdetn!NiO6-4u3|Rr z@~KgH)7#O>OspGTIoV{&sZ033gGzJxe}l?a=)O?wyZuOVPAk=@HN$(NH=!?Qvyq9_^YXHMS2ZefW=ad! z)%>X$U|krNbwq(_9o}a?cyDkNba2i(0TZ2=U4r;IJ@w?XdTk~6%4q0-JF@a-=-CTB zu{~gD73s9i)pJ-qs?s;D%b`#;)81Rj%aj~Kp-`=6TTc-_RTFU+Lpy*LI{63}21yN} z{u-K2V-*&L%>f+_uDWteqUT!AA|2QSNpL4mT>V0BqD7d2T_O-<6{SwfUaBBpU(G3F zYo%=7y|Zogp=F;_>Ggvm^+@bl9F%&BfXM|qg5_114-KKZPIz*j6ll`{ohZkmmKOT{ zizzLysp(K{>zKi?hJ@}SeLA>%PN0_G{%~f!!!Pa>`TxU|mZ)+HnpxlO(?0WEwobwC z!U8;CuzCJqc=Y};Hpz=f3Or)iZUvMhqv1}rezwAEKq~;}L89VwiaOz0R%TC5YYxnY@e1#qRK8dhk@&sOYhQkv_6&PtzmUla27HUtuN)g^neO z{DpfvOa6m)2=?bgEmUM~{T&k2=?R@}|3fC1g2X3z0##T@YKCaG1NUzo1f;EDVq(Ga zGbLX0RXEiTw@8J$->{5B=8g}_Qfd9&)?Li+|GLqaI!1I2!mVqY4uf3U|6X6X6E8UBmtv|K-({{$}o5<}<%zFC5; zm%9^-y1~jm?VxxOqu|BzqG&e>5GeZrG`K_fU@Ctjn-z0{f1y;3TTw@G0mE*=dDixh z;V2Yw%JMqMLAKVsAWL8EWaN{uM(elNUG`J&aQ_^FL;O)=ARvJ{%n5z zehOygC1O|tbd7@GSm=$eufSKiMOO-*;2ih9nTM^1{|b;bgxGcU^|Q@W4V+5^0nXOC zcCQQL95Bw-C4AkU+{S)x*qJflQ^krDEY zL;gxsrIteKk6Q8HbnxQ2S-=spcygUns=(r_0xd*1Q ze#-JK!=Cext?6Hi_`se#v9YnaC|vwFls#mq8)BX>NDpQ+vC<0fsVJgM=RT!#KMP`0 zdj|g7ue3gU)IU5t9Bhce!sgyJ<+=`(q7qpw2%bg<*Kv?O$JW8$`-^o(?oSfOL)$st zng6QmN(_&MaO6#Z{>2`zMz9}&+6Xc7`~507NL#l13&4ScC8{$K&Wy;3n;XgvUcGxck#Q!s9d&LOOM@-@YmHAAwwP!G+pj=w6! z_**<2g010dW?Lk{MO*eix{Uu4v@BZabpXJuVchW%jvTTK%f4RdDp^fKTpsctd)RLu z5Je2dhQI3UST3}uUVMQgMEp0$&`wioC(mm5R+s_&i(vf1h@rS}H$Q|CyuTPKp#h@!3!~bc5`|yS0{jSGZgyApe zE6OwxRbxLw$8fZAW&UBCK%P_^;&SAQ|-FAATdKu2wwDxAM)QHX>MFH68g z`it^*n2!PgN$b4n(SOn6Bh&q$lTNgMv;ls{>HAaPub`_hr%{XlriI1*phY>N!hcad zN%Y>@+ja70RDaPz4eb@wfRpsuUzGoUQ~3X;@c;5EyuSdBWiMb*z|eVY`X(=(4SFhd(LLa8^uc5!$Zqmw! z{(x~(kra7VKK9`N`UKWeSYG(mtEwo(C*!x!=Llbb>^WfmiS;k$a-k}790Y=;oLeebh6 zp0WpAbsOVhb7I|dOLyZ*LpxKWlym2%$hGyjKkg28lS)|8^D5!mWpOab%Ep|)dAV&4 z>(!MVyzJc4Cn3TK2%<}IL7!j4-J*WO0l{CNRn>G8(0t@Ouwf}Zrt_TP7#VhW0)Z{2 zO(&3Ig8;Q_vfTtX085k68My1HjH~BeCZ7!H1fJ28;gG$B9!{q3LZ%S4yW5L}x z6)->QmZ3!-GNQ`}D3Etr@9@ja%p6W&8c*d>1s(0`q~h+f+`Fim>1CPvB-*!d23~n` zF>kI-P!Id+yLk!l;G61A0YXDnEyq&B`xa^>g&vRezmhra(o0Dte(Osxv@kP2mLR9G z-W`aJ?d~FLX>F~tV#X^sY;UxXPqr%i86S_1l^gwbClHfL5Ca{(49A*pbgB|mQ9Ckl zm(PE#_^J9;gS0R`X4z>+#0>VsR_gz6zaNv%BSUQY&YjFVXxV z$H!)jM?9QkQFdK-b+my8RkJ}4ZmtOo-k&i^Hp0`h!$4ea%Nh-)kVl(-3W?IgNpqdd zs5`&UHsD%ukUyOLSSA@Osg3CEHwxcVsoF#E^$rKm-q5^BwvNfyTZWC7TUEj`L8kVv z&qY(t#Uef!no{aw8k0|c$$YH*#H z2%Xb@w9H?_F~z$ODfy=tn^Zt#Pvct+maXAsqGY-WhFp`)#d{yLx`9?7u2*jD*Gsn9 z^A>>k=RMP_{=u$oj;(@Qx9<)>!x5|iwr9+DQ>Ce%yA#q_=@uQRP)WC)n-_x0{Bz}c1E=4*_~W!aDV%5 zg~xYe#%a?;5=pO4h0R6{2sm~_RfuIIPkv?wV5ac8bxd(Rk&z=d0H0S(g`y4m7g)K# zFIv7J&K>Oe((z)sHFXJf`1F8+_cp~g;Mm}ICg-isi)if%&VHg^lbQ{28aQL>W#vB8 z=Q7vXrsH)*b{?senU|r59OOO>_QIj9LQx7~s2$f;gEghK!dhu(2}mh4#!J2 z#>s>CB7547VZmn}b)_%(k%GW?(ZL~+*a;-1D%ToTR@`7_e_=!IqTYblC`+B>$L75n zV6@PM(d`M39&}t3!rq*=Df31hzkTS#^7nSPy$0fwFbLrchCqcPa-L3)8MzI5>^XF? z^3Sk2eY0Q$Q_Psn29e3N8AR%kc;sr@>z&zQiK-pWE-;M<89U!Ozy*xNGQ@GR2oDOT zarA=73-gqyJ~?}NS!r!C1dJ(tW-1_S!&#ajX5pFx+83Fb+_K*lZplu(hQLIY{9QXpAGjI%Zw#_Q+KM+Wy-E`)VrLugzqjEGn0d=_}_8K3WQGG^vEM+#MFgZAyB)T8rY%w4i z>Fsp1w*Z)ve|q&rdA>H7V4Q`2$E2&J5;@IJF=GEaDDo(d#m(V9&ceN%QSn4#kCv8U znX+E*KC#h7ctUzGH$=LXlc=@0{{zzxH42GajQQzq+>#fPgM6XBG+-w&6d+$YF zMrp3?$5S?z+gnsQnHW+}b`eqX32wI&3Xh-F)iL_boQ(PpHCIt6m)qga*8Dc)akwx}h>crU%F;q4(2}^i$`pF;^SrrbnDG%`_Tdlub?8Zq6$a z7%runpNn!Ki{Ajy*eEIM({%XI2+)LEEnN(LY0Sj3`DWM7`Q6|LXWNHflKLzG69vFe zXzYu86yfy>Ct21>YYfnOQoLZKUdScw&;p49HFFe)PAiD zQ6!!Fh^a@obfZlu?j%DeR!-d>u2*~YhaJ08d8Fal+0Ud`u*bT77`a17fYphb4VqaT4y_7ZqS=cYMdX&vXG>8!1O)AO5EAar#F9QJ#AL10+V zz76hk_!1W@vd_@osyOZ<;Xjah817LMriXUe#%gFnhM8ph%0Pn5&x>vREI&Vfs#1<6 z{r&FQ{hf&{|FhCYbR<=QUDn5$6h$gtO-KLVuhOWm3vtroRmH*N8ra*L91g^m>66vn^o%t!=4AqJsSV9dUi=n#VB_qXjNPH}?$4h&?d z8raJVff7HXT0}$6aB)M)R)nwBy%6(_$~l=~%ri7HBmr_(H}1=gOg+Pz%O>%LzZ^yh z?!EjAgPr%X%eNgv!p0iv3>xSuOJgFjG~no0ew({stHFw#Ef;gCx>O9jcXRT7&PpjL z&qn7mo&XM-PEfb%J&oD~OSXX$^uMHgN~v~!s@o`s+|JC*oSl7XHE4G~-!vcA0b9oY zt~0#h%;&{xR%rrRl->MhVFxKlgIO$b2;9aDx!X$}Kl&{>o+m1+g3H5VnXUHGF0A@O zn3;KXrR>uor#nru@vFZZ506gzdCUPk^#wyXRH7TT88=&f zR`dNK`}~Z>g?x^!yO9+R;{((bLYot=N5+r%q>qcpebGpjP zjyd_+CC#Bc#bmTo5+>hcAZ5P($rCx8%msyu7y2$W{aby&h4H|&3&Gz!tH|Ci_5qAbl9G0p~`yZ|u1T(#wTSYbPqMN@c%V*t@UcX0zZvO1VqH`FHJ|ox*RLr-LVPT1+ zCL=Q*GGjQeX9v#jVIL@JzQZWhkRDRzJeyF4Ze`9ccP;^!ybud zf!KDzJ36sK7V6L>kcIa6BE-;;jd*JTL#r8Lv>c+5p;^jj5@VKzuid*jHg2usWGJVTRYS#{H0gt4or45Gc5^=$*0%8$(po+BwLjL&(dt_}GVeVH ziWix{%vb0s-qZQ28q(QMHVZN*f#j<~6!NOY_aTNAkxx%iRYi=Ui!GbUB-dcx1m*aN$A-Smk&y3tTJJ0y zPJnoiCf6=6Q+AdA$|`>l%WGB*4AYcJ37D|kDnG8(tnWw_aql(hqFope1cQ5-6mlVE zw8^TfRG!D(&lp8gN>#-g3K|8GYBRehAi*&T`f_`ddfa>VOa#FcZzHr0AY zgxzbz?Lw@PG}ChY+Z~Km?F8)G*DgyP=CWQR=^RD}gi|{oDPq1N+V+=$>|+Z3=(vHA zd_MA5NjFhv#O6-lUkeMlT}@k}_=t7Sd4EJC!r+qP+CI{DBqTsbmtVC$|ufL;U?&`;`)>R+*-NvT0^@s9gkUb8j#-POe!tIz-enR-pw+0Dq z@K2+j?WpE~%}KTH5?ZB=!a~j0%}!oDy{yz^6xN}ssRL-uZl_~|gZEd{isttQvB}Ac z6^8AJiHQa2)tQ5vYtjWM{e*;^*Z}NHeeay?cjYk{k4+_H z*m|Gr`PGt9mqakJLe@L|2Qxk56h4z#tF*t`qR9)9oX7UqE0-6TFgi=)}@V!-~ z9E}=H>S@wO%M$uA-D`X*EAXrWlzbh!rIb?sdxc43N|n!x@XA2k;2-_HK+=`X23TkL zayBc(Hnztd^*K{rZ{1X?Q&;RgBxA7SG{|1nHio3=#oAe)q*n2sSR3b#>^^0E0A$aJ zm&6*KPpQY}xv}1?JK;_ZbaijJ>romcGW3;V|B9(=H1_N^@6xS{I1+v`maC0Qh2xia z`kkFRycM76-r}SR?h&$fywMj)n3xb3heX22E0CJAkT*aOmqeQu!QRpoJTNpQf*cTJ zP;ojfnMzCBx;q}8&fs%7+;&fS>f%VqcGtZIhm770LFBXtf$|-NKXigzm^BYrW)3^s zrT2o;8g~-at(1A$oi!_bAXjYLwIPRxAY^Z<70Db&&lT1!+gQ)uPQ;05?^Xi$ZdH_$ z?6{;XXf>=QTaZx|Igunycz$^zw#2^rBTQgEe^}OQlDh>Ov-}PsZCjEs1@cFRbyd}? ztFBtCaYrjTNHXooA7>ET_Y=uimoZ&LXFL#gF|mG{_M>DIT;AMBm}}_iRRSMzYk#Jc z_B}?dE0vP11pSmZ8ROA7o}Y@tc|FeW5}8yNOlPp()R}%P z2J5la4)f`vuoq3p(zzz`cJ>F4W*g_@oNb|3p=sRbGF9^dsuY4ajf~86ncU)=As#@` zIg-*=WTsAb!01fm$HKe;Me%BBBYe}n^G0(+cm|nJAv1;*%SHOw>!=v}r7Z~6Flbc% zDucJwFa~cyzpK@MHG;fnTREK6$i*Tw_{+xk#I)F0(~aQU z^h&@|{l&%Cna?R)4)KhEA^3yQgVU3r4@5!8JeOTeHp4wzHrYNGrqjX>MMas;s^1O6 zec#UgSV$aF{d%DnuAuZ;Df|eGb6wZaK7BYkRfq5vr|e1?fl2Ycfv|!IMOgRqio`s3 zI8nuoUP@aN1)nrPQK^H3_o>OYa609XbNlgLsA6`AWc6osJ{O1xwn2OaFUXpQEXeHP zZB!kadkvG$Zh0YLjKTRNOndwBO%)&fqRInHiqSO31cTvn+CcT`U zKo(0#TRH+~7Xuh&>f= z&ktbEC!TNu%DJt^;M})D4zdj_5zUEQsKh>6cziowX1!$3;8|SjH^sJ8E+cZ}h(GeS zS(|g)t^;UaCT3@`w5I`5XUtXJcIGEdD9wWKvRpydglgDfk_30Kl+NJ^L?K992Jg38 zsLSFMc|dMv7G234nUfuJW!ZaI2Gh1LEl`pGwzaix`_6M0T9lFQ%p$LSpXi<(zdB)L zDlYouc!`LET3kf`B;X;3cXhZUjXM??+1jpAGHUqDcW~@p>1>)k6))EeDtQQWx(KU1^#ML*jZ=ZT* z6cs^<&2bD-baGKZZ4be1Lq!c8-A^dKbFV>R=RfX5H62$j-f(&f-LkcxC^y_Zn`$-` z{%E0K$}mHkj)y;}t1f@=RzF{9axW8{EAwzKC7d=;D(IP0SGS2WtJ{Cm%#S(W4=VF6 zB@E?+!i)ZeVxA1_*fp}d$DpRj;FsR~vEzX-`M^BF?pkv#5DQYbGjn5ioH1UIF<$;? z$5iCM94%r%qu#_9v>-=v;_uC&w-PtD8T6vWRpgR=R$| zRG)&Mf7lNGdLhG1sqGrCxOVi_4hTK8NX;IY_*~RtASe(jjDdR8O@XMxc7AzI4i~ZoEtwo+KV@yTyQ!wG^t8U)}iGYhutrOX_taeMRJ^)#eqjfC1Eui*z65&u-o|Z*2&?|8(1Dn z@e^{isx4>>jQ_?bR~Exc34aLf(i-}{(4@$4kd z(TU31o)DMB;jgkL0K<9`lxZ8eGHC<-HXd=vclu_8))adWy(kdFcl|V@BB7R6oVM8V z`i^SzVGK;n;o;#)Vop0e9{l{sY`SN{-MgHAKQ7xwtW`O=R9>fDJ@&D5frkal(-_Po zHcMfVE?D-qCsuMgTP_0Xc8MRUA8>Fsjv01W@Q{KI=b6g2r`>@vvcvH2F%TIs@47-U zNkT(HG{S4sEVA-47-G)lJ-`_Nt}t(@u5*-nJdl}x@Q3FrI?&F|Scf~q zp)T8bD~tscBCouOd1@t}EH9Z)nBPvNGYk*42_0N%2zXpm1k^sXJPlnJ$Pj8uL8SFa z)zP)ZFX3!(Y@Rk}v(M*}1&G~_=}I9%9cK&fR61Yi!}ueqWe?gCy%sVLowr-dh1{!3 z4_{3_YN;Px`yQ-R&xa3Gb;!$Jlox7|*fyd@=CnOR%dTIk`P|hMramvi=(`yK%ZwpYDI|)la_v8rK z;4aX4rB~t?9kkkk9aV0;S}i`QAx7PwMLb@tp0XwJwK>kx8udx650y{jgJ$nO(b0iR zZ7(NP8B!HnzuWTHrQM4&^NaHZJ*+QQG%V}AINqm&YB37f z2mf2$vsYkFo6z)mW3t&r)R&7pFE^jVjqOzJP(nMfWkA;5 zDfDX9Q{U<%*5_@H=LDHF;LO2wq8AOEHM+mX%S$ujeAGf>;@%6C(}r=@0!6w#1)s6* zR}|)@F_jZC(XR)h2DV^F4OGwK!VxaJIGx`KvScHIIjgNJ(S-NF7iQ<%?xo^+flEE{ zbR?J!jPSfPNmwjJ^UFD!y_!+D+O!xsUZEZR8{zSyCv|QL#wW)@Kg0SOcP_0D8yAfq zo^O*9A0Oe0SCXv)f+R8>PnM-GKAM|N*wyfL?T~k?x=OQ8^1bd7+26Ve5pDcS7b|*~ z5ZTX`d)ctxrg~Omu(7_Mjg(FJ#LLiFNV!bT(~w@Q;_!`=AJebj|M6ib;nS9eK1rev zz%U)1CXGPu zq%Ck$-BM;PXR$QC@V@wwiR zP?$-Q(D275>L0{kz$x_?{~=9l?M1aOV~h&J5iZ-sRcUY%-hO;zS|fyh%+X3T&2oTE z0-${!gQ5VNnkBcx??0(f9uXbUY#UEe^BxQ4LZmC~3pVrbPS1|Xau!kZ#uaofxEF+# zH#5{U7sWtL14zHo-qKM^Ctxd;SaPW}v0fqB$CaH^ z}?4d;{I_G%F0`eH#2hl9))BhCzky19v%RS2*a@UXzCHeobzb zPuhe}8>evPF*Wedo;MvWyYY_>oO=8grY*1i8Cx5`cR4~di?n0DYt%JpjVXoPPC-b( z=#~m6EWQew{~5 zn4!qmp?*;Bu$F*DOUP;W!QGz*vX{5-lu-}H#PtWa(6G}SY+LQM z|Ex!vQWPyv)i9X05I$hNN!=kIY!Hool5-Vv2X{UnGTc277Yg04R)TLtM2oPL{Jpvu zxfKO+i;SAuM-$g=?beIGaztOym01SABi*d+}`y z`Y0w4j=(49$Q-{Fvy{yAlEf{G$uIi~Zw$p-wVaIx{Lf($b5sRHFoziPOip$H8*KyE z;{`Irt+qzY+&}| zH$|jlNk_Sc#argR?b&STAqh-b-*U1&OE#zrm*S}q7lNtiR^LU(W_X(^bXSACD)_hRX(kRph`f^%4!xJ4l^-64zKVkI9Awm zY;l4G*KsE?l4i7)*QE0}lb7e^N|C8z_@_Bs)n#(_%~uRgd(wz;b&v+{`vVbvW`bX0 zX$3bUuWLiX|Ez!HspF#s(?qZT4TmMc`jWf)0W{0JdtH>3{B2A}|GBssm`|CR%NJ9@ zC0+f)kwgb*P<0X_9phqQh8@l)RA4;{B#n&4&fPjZr{7f3)bN{eEBgXGfbp-(mM(BLOJods!^P&$iHtQB$4!Cx#%}W zqx%RgLoPkT6r|mN@cy2}RJ9kLtiW-LqxWwfd-)F@>&&vc9PQ}uJUq0huSfsAT)^{+ zh}npnK#M&|i`iy|Vg!|V8RUIGK3^(5JPIH?(!mE8E2@Fy)eGJ8X29Ur>KvQuIR1m9 zG0!$g)@}3ktE>=`Ou#PA+z(xs6$)j4&LNycRrm_6zoWf=>s@c?Rfe3nlMOiFBg(C8 zE}3v|u}+l=t_WdK;pmDBFjYGH-OcpTd84DDlzt@M6#8O;`Kcw2<}+`Ocfp@7-lV?D z6%)VuwTiQT25sT*#hut$7@S>G5d5ebJjn#nWpzoz5MoarutO9faemqH;{6O`R^EyM zaCRtQO@r#wr=5u`QEhE)*?9Ws@@DpZ@e1t;ph?U{T6h8!C1s;u7vi}X6;@IR+@1s; z*(J_z(uw`%-kpQ{Po$Q?Q{MVU$2xLrzNcYLsLLyE6yZJW^YWx(2G1QjvhJlHy|dKv z$CaNomc0NgF)?k?jrbgPY{EwWHF{ujTUN>aX$h|4;N* z9>r;HF143`M2M6{1e`)M=~Wfd7sk-eSh&53eGXy} z`vTOI*XM$EDb2{=s(l@FOGge^e_bJK2>W8uY8YM$qpMH5xolju`L6YB=2zFWi8c)F zoErDS_!Q$ptCyRC!dO9u5AE=6GPH5!^Zd};)5CuqcYsurjDc=`FlCrJxYJ)vSFKps z%WJL-qO|+{N?Q8o&sT^$ayjwceJl-vo&IpK!k5%(nLFh)?vw288W^1AO+E7k=HuA% zn6;e3ewi734+m_1xq#EAae00lmjRjPen3u9Jma%}dwV0Xrlux?{sY_B;)!a&JAWA4 z$&L>Ib^|W}4u{tN8PX#2uM*JWnHSH531f*jKG| zfWu;ZY)mj)aueD@-b>&p_oUWpK-r}g2=WxT<2sYZZ{E+R24V^K9=0=V!P3@t~h!|EmNl*2lC$TgVUkEju{ls zRkS{*892-x&tomV26KWmbRuYeH|`dD=kT**R0#;f`0k(Wm1ik9Ks}e!JxI&V3C1^4 za(M@5K6ro^3VF9P+W*X81k z#>>4e9%pCWUB799OIQJEgKxz8xyq0%kz3?@NkE`vGFuQb0x@NLRN08YyzxAo@j)Lm zz`t1JT|0E0nyU7l*F_@p{`_z(V=5w{mv5OyO8bM`)Y7@pUoUY{5CsxhaY zQ9;}G_~k)^r(z+ku3vgFI8R68^DCt&w-pD4scbsEIpfovYAz;ngLTrWe;-%@|lqM zb44^`f_1|b!{cls_*RZYe2*I10XI>}P;rR-73GpMI8Ld!WRAy$F=hK{G_|7f-e(JG z+ErLwytP&*J&dpX#P$=v+PezeF1kyj2xkvYE-Zy~{wA;6ledUCQWZ5~JM+pq6zNkV z%yMk&zF`lBqp8%DUDU1;_L>-SFbcgmzrLFLW=H|65X608gBTDTjEc`{cD~uGTYnZahBRHj zfuhRwMav_%e0Ac>dP|ukm^EU$5H*-)Fo{h6_&cBaNod1$2Jg`ZwxUp-H7Vr*>y|>D z*NqEaxlwsA=#9}KPei&XY9Lh3F=%#04ma(KxIgPgEh;X<>K&sjDL}xGSk=HHE3n}R|+cdOWbe;T)UnPb^1yfFh*;wgM#ut zNtAX&0V#&318|Bs!sT8~^$jEdUrd*Q)<9+I-`nYzA zd}*WKenTD?qd?xrz^A8_K0rq1fnG*bTlrdC!02`$Z4#o_kI2i|w{OE`6>$HJ3ZB8p zdj~LihS7pommQbP40U%UR!9yN`(rirY6MGIftvX0EU-4o#QOPfAFlFE_Sb~K$H6r|jAM`|&_jN#>7p*NFg|e^DBB2mo{=aSAFj~zEv`Ker4tIJ%cUhN zv3mJDDiUefqQkzb11)XJfq~a+Xn2Cn<@tr{T38+g%JEY`mfLFK`GWy3ecv+^?Rl8& z+p6NU?@*k^%<=lPfdj`J0e$Q=+gs#Sf92zI6t~siG{Y4bS246Pd9^WJt@8m2%Na+X;@jGYoh&vA{3>{P zSDsOMZR<|M`B7RcEFhtF|L)T2hk>$EX{j3{Br*j32Sj`N!iG^biahDq**~}>c4k(T z&X|b61OssBwS?=W#KrN|l^vHGgX3=AT^ZRI*o&UcN5=fkOTS9~%}Wbo3x~#=RiQq` z+8C0XRl2Zap72Vev-a!T&C`|pvf$>;Q>H(br>baCe8-kFF+m~1zBiPZf{=Cp5L0VZ z4(sVok3!4cSEG6}(uIS?$l{66K6Rbog;d3I-)>(A%`L>h5s3u zR>)dKluL`?ODbsoernn%o3|NpA^f^qQp)S!$u;3HL9U{qpu_LqgMYxueud3D11Q{9 zu;bTr*SUJPxIX@fbdWK_U9j}iq)-H1LK;Mmj^OvQ{*1%_4HT)9z2}lBRd-`Lej1eX zf!7%x>Z>l*1IVMiLXqGguiOt^99w(BKY18H@>DFj=7k`ynIhev4+Re$FM8Tz704uJ zVcwPDTqD!^myiHeqJbjTv)>zcfa<%u#`YMph)~n@7xvmPUu^wd+tGd7&*i}I3j@U* zlg@|nI?3vZ4o#Y0_W84IOt~CuxKl1uVlx1%|H4JX(!-th6k_0L=;#*eY`3QJgk%*n z!fEJiQF(K6Op9=|TOY8CMF{H%G}458X&H`bu8b4_N2IjJtbeR#al=6bWoQJM)Iaii ztW)FgRjpc``1Tsb;R_U=jto$%aWU#^bgb#cnK$CvC7nm^SMC#0Zj}rKS(2T(*Mc4l zeY9EaXRrMZ=5KZmCNg4vs~Gwo{zMq(>QMQs)_RnR(85Lk=!sOJZolF_31PZdPJFrb zE+BNPSM`UsY?NBSatB^&DeCMbZ_(a2`VsKlS&PiPvr|O0@{&_qvF)=*ZmymPU%~>lsQiS}EO3%{4v9o+OGy}snQ{xh`XsPMr#j{`4LPp3< z^6C%kxT~-z&R;&3EXLS%3&+ha!ULGW&%J>{b6?g-WNsD9&|?jBUt?K%@Kr+vQcj=F zZcz)$z6czlocmy>nU5a`_HMi(JIfHB=e)aKJ7tTGAZjgPX;A4m9r-sem&SzkBd^f? zkC0KGDhq$VtbF+wWwqnqmDP&qWTQj~t5~mSA4yw=BV_`5RdjnO1XW`%telAU8J@f&j|Tm>=>1M--xZGECtV1` z>@v79m-#!!b^V)cy6^1lsJm;HqiY(Y^l_ODt`AAIh%MYEgTfnPfE+XHs`rg zomeTusiH*$ZTct7sw<(xcRH1<%FVWt(JhajUkBT#gTf@11B7osh5zD~VZ!yT@eEd> zx!>b;B-yt<`hGbhn*3g)!r;be%dMMKMOC%CyZhSn8QS?xV6ZL9&@h?zSz!AGHcA!U z0Vmfjn)XlZ^L{GoPt~?shR!uSRrhtilX@9ilPanEat_S;F{zJD;HG326mV2XlA;M~ax>l7e?E(R?A7^uh(UU@*+FDvirz2#f!UHhmZ*?@ z>E1@}Ne|Bh6%=fB49o&S$Wu&hZN$znmvM{%ogTadAVR_@@Jos^wy+3cM; z%mp6_DbetWH0O(n&pHx6Fg$etj7(Cbr;N}#Bb-9VuI#~=+tRHJZq;bM_g z7ZYEUl2f{9zjjc<^qhIOi>0pH)@<{aH~838SrcBHy1CM!xfdi?lQxa(@_4GPd{B5R^*rH<1Y$2<;H(5DfMc-Y5$Mw z!feEn#=iS*0*~+nbB>>Y8Ynr#( zQK~g;Oiv;poo{oHHl00SmM0&SVXk~!8B53hy0o<9HJ17oI<+z(2K%)*(|32I>G=_r z1J8!haIBkxuGEN+ejdl#^@}64p$sJ!Q1%${I03$d?kI9GrEKIS-0C_ClgW=F1XQ1D z-$T7He?l{%%=#Kx7Sbj6$FK~nY{*PK3&)gxtYXSD^p+hOiU;?z^ksFfbM9|b1=XQB zAGb6#zO-FvzT~%Q1Rz1J@FdVikJ|Kkc=(o5RD!;S8gQfpAD@lOpuVa`bo{HW<5bsP_78PkXj=xjVa@=&ofE8dULa zGXF%7JHOt1kgVYUK;BU4x?Frn8A?#A{2%Smz_7@F5J#~JV51=!HUh22Y?yi@+M<*= z;H3O;OAdphGUM;|0NAESEoefJ!Aq#75j>B-!^iN)+&+oP_T4BdPRKrdP!sN*W6UT; zsbrp?V&HGtwDy%xNTxmaczE}K>{B|ZIr1BU;rIqzqCxq#ftQAc2HHIw8XD56HVbv; zFo)*$f?3Ayq+&~S%!N?9H^RNXW3}~X8uF#i)4AhlTLqs7nH~B>jpgU3SL_jREqwm{ zEr0Tz8Lrm7(Y(gEb7wWgTIfuJ-|Y@-;nF)s-9^(I`hRGk;rRcp270bbJtdliXwJo$ zJw_~`OMRscEsCxYG`)O@BgNTW)3Gn#=p;cQrVUE$!`nnT8o(i&9QjA)DVe|2TKmH& z)AI9h+)LimF+3uIc+Tn+Z?xw6UHV<)7lcrBl{LB0)o^ik`{e~`;zcR54vJXy=@DFI z+xUN6O=OcKJO?54atEI8hs`!%(BD0l%oy3WOS_M-xbFH7WM^E5&pI~1dFgP=2^)ZA zgO8hi)ZHXf7`(I&8C5mQO%1flOHEBx6na*RKjkPYDtdmn4i63W0Mj7O-`%-Q6*+kzJ zd}$_mTe8@fK%Xid#e3*>pt=Kha1B;+&ZVXk+Tvp8*jSuIgj>TNxA**y=I86gq;rxN zf?@xsQiikL5C7Camr(y`p!I)ipqT#uu7L(y_;P*N{1**W0;++2Dk6wmpihf%Zu?6E z?K=EK;Mv-ym_dn}(r0UYW#_0*{kWUbGT&P^_Lq<$hJ?)oom2o5@SIw1uf1$y(rSdU z^gEN*x*QsnvtG$mz(FX}7+g2wZ}UVDv$FhfA5SxUf>LP#C%}b!U{O?HAp@OwR!+IG zuE#^|!9XSFHIV154NK2(9}k~*rf4qTnTf@TfkF1r=4MO%^&E7(4l79%>U3rkuuTF+ zG0?XoUx#CO%$S5^yh%>{0T-C8p;=)MgGvK&E#Y6NV)#<-4Y(KlmUi-Ee#ki8Wu@rF>8%nq!hivZZ69{w2L3iY zZ~itsJO3D-{rCSgJX;LxS6j3}SkSFml2TFf4O49H8?+YKO&9dY!i*<8!k^PHDyqT< zH?N@>F}bvr$&^-cP};p*LFw$3%h{}mRl zGOgzq5^h;H;xRWS{0l5}NuQ&zpOlRrjGAfM5q_P1)wV3{_1w06tGHcXNZ8HHAbEb^ zSh&>E!lB&V&LHjPzsh0P*SHRwqD0foM13;{m3eJsEW5IZk^};xuicf3Bh*mo5UO4hOqQTFZqi5 zOX${BTv3*Hemb^gd^!xM?LS3?sLntL4!+{Y+apbLQn!N&pB}ud?tR;f zt8P>1+hahVvNhMgzArZ6aVWX&2XUZAxtJ#A7fv%D7SlqD9Xo!Cuya^`$fL<00{Q1% zbTbnnoiLmKks^bv*`NvFzaJ&mi#6OakhZ1*$Ln zI0|lOiu$J|DI9(9@sEi3Y$JE=6;C2=Te@6gdz& z-*&Rv>ec!E?bIQ?^1VwO&LEWq8&M$C#KiD?cxW<3#x5&wE6i4Ku-YfuW%E+|5?;*Z zM#MJFh!EjPdStLmY0w2wa5+YYiLi(&+k3(lQbNcX|*~qVcsIuk54Yec=~*(uy*)` z$q=MM>tjLOrYPuk;({u(ZgsFV4+AzwSGD*9?zf~pO~lxZ7$qY8g~y2GT&^e-0GQZ&Lpwz zWjo#+O^yqCC8Q3d@*rYhP-dR*B;Z3cxyjG>9ACG$D=Xn09L|4x`$Lu0hh7d_f(k`z zYkXm00&OJ&ZpTe>bo5D^==y1T=t7Yhj)-s=QiZ6IA-;mn7fKOKd}7s-8=3s43t29p zCtL>)kO5-XX9&>Z>Hd-9iW2OS2wi+jg#c6)jTS%+^M`WQVpa>NwKjc%2>swi#mmZH z*59r~M2OTL3+)qj&0H*UtaC2!F6h~giE?ccsbs~oH@x>+N4 zI248e$C*nlSapXkA4wNcV^6!fte3PEb3~Gf9?6gnEoJeQ6h3=G$jk3H#EKNK1~32z zG@dKzoMKz?fqjqtq8Yjm_z6?|xWE;6!9p zh)%p_Q}%YP-DihmOra(mg78nTSDmwx`Z z2jV;JPmn^{oZV7=B>%}L)(=l_*30Gt(?7Ear_cKq%`A*wkGFqr@|P)mEbSk}gedSr zXXKa5m(UtMIGNiM@9IC?=8&PYD_O;aou;G)*mqu=mQNqD+^Q(N3&*Qf!NuRQxm~+m zvotw5B`I{Z%|<7n?Yqd}bBp1Z($*d<*C$M1eAf1S(38{F_L{&aB9g5e0MAw^VJ{ZW zR)U}IRjsWRv*4U;Oi`7s6aEO83=c9lSkPD_?xt{hJg@Rch@>u7>e!ISu2W9pV1;*R zni~oGT;-Bi`=0 zLBEUxtAbbcfq2#edsGr8;I)0G1!-LpS{=;N%#3wZ{L|O@YsaN>loste)MrOwnweJ% zJ^FRej9PK|rX^3QNBzP&$p;i?K$G=@z zS~qj#^VXoHn>fJr(Ow_zqQ}_Ru_}~f`Tt|@Era5Uwri8iR~OZE?_Rx^%{As2V_pVM-YZ-5 z=6-BYwo~>i_h%jn&TS%Q-_B8>Ldi@b( zv=cEUu?U~JuXj>iy2N*!<5%L~)FM)s+dWk6JeVkCC}v#*RQ+-|7m^@gO=8I88d-`C zhaIjvK_Vt*VP!U{ZFJuz`3~@W%csOU7|8%u4GI{hxf-}__6GW8zn1?{s1I@Pc-*4&wKg}K z-(K{me6b9W!WMRp;PZe2z6tQr857Q%0(yFAM z2Z$>eUGdNVkrAnTw~M)lQe3g9^(Nr11SBK4P%yKjNPq!Q`#Jw0ot$Fb7mvx&kF64j z^5yd2uONx~F zhD%Jc;$h0j7AFnC-be+2h?p(XFp1?lS1BR_kl#Tenf?M3f@0Y)9=zZYf88jqDIdZx zAiCiE@+^JtjWl|}BWK?K6OVKmKaM*3K*7$=&dd9$VvbR#)p?;hp?MU&V$w*il~(TpzV8`iXnH zxYa)C)-U9Wt#~w(RD>-@JS$5DvCtdg|D9z0RUYm(j&w3|beqPzKSE=3+w-o{2sLnS zL|isEA0(W#heV*v);XnjnHS*MN1A^>kVvBrTz#K^fqvQ2OGPup#OzHc)cw~Xu@JOZ zWJeXT6r(v_W5nIr+!IXu5!ZQhi_Ih)O+I(d$k%tjF@*=r{=II!n)jc&^><;LY1TuBeF4Dw^@iAw8zX-xlCk!Wi#D<3W-G>`bw~J=i_Ri_)kq;5-fZ zAtmwi`BRcbDZ|_Yx#7cA&%!PR`|B^nlp6XlOZrW-&=f1t?mw`stc*l->_8k$08jFS z7tp2{te^uj^3g$Bx%dR-+U@qJekp{qZXlvvgI&1HJ^Zai*iAO0X_t2=wC~IIoydyq zMjmVGq|mv-797>W{wb^l6_WX#F>6rEC*Iu4HG)2d##b!T=JEs$n}>AoAfP>TFR@Xt z+hqz%OXJi&Y)riJBmkdch=jpUiZBEo45W6Pa{jF&W1ITxJv40xJ-ng|1E-v`GR0dhBkaV)==YS7;3rP z`O;74EjMb9)c1-jRulwp&fy{$yW#---{4IAh<^iT#%KI{I8)T?ZLR#s&vE+l8wc@g zxu+SO(~`TZ>s-8_x7*CGs!&xoLRA8lig#vBkX(eupUJar{Lv;JCn%#50+m8f$3E~V zq7zm0$XiT1yIkHvp5XHIIHcg7UE9347iWuLm-DKM@-YTk_(MzEO>sQJVwoI3ZO;-3 ztgfz3pw}SNmc_fV3y?Qe*N&e^21XBGMm_(H`;pGz_W&1$hop9s$ZNTDcvP74-*{+@ zYI*hSLS0Z1O+t+M0~HdAhoqh_oxNNx^ZGZ2$L<8h_yoit}^rOCv59g;;%bkY?)`bnC*+ zfz-(fMIRjQIC0)We(Vjq9iU$~#|GT7;Btte>H%rxUiCIdL=(en2=8dMXGXJ~mM5V- zkkwC`b8+h51(apcD_gd5R%05YJ$D$d$#dJky>7z^HC=A3iRG=09`ur;EXn`Im_1AX zvcpaj^d@=O2rSsl3q#L2%}hJgJSS-cDH7dx76jqn9XFqgt=Y`p)(s|S&*T}D3agg} z5n!b^D>-Y@>r3|~hoErYbrLebyVT;OcezvWo|6Twr*DM?TAK~?O1mvKMn8e4IAF&E zr=5$SP-6wrp!Xeqq>e{F0S)ijUO~q2X&WUwd!25_S7v5rc|K#I*ghcFN)*A#VM)74 zyG?a1E>^U;n^LI{^_D_N7?M7YwMP?WX&@}lB;@+axsZ)yb{`sMoNGJz^$!c74EyUU z%l)N1gS6@^U5q$G$0ftW{{!h#7THY{$gZOk(qp0q^CsUYC@R*w*2R)%+D{pn;unQ9 zi{tNS{Tf;cOWb+$q>WFP5`>zY{s`#0#9`gc9R6li3>mkCH;AzIqg&d))wLmXuBqpV zH3wH?3j>!3J(#Gh>#W^ZA_drHZuC9zt{adf$jcz*5Vl>y$~B+JzQ)Q z%q$v^J!qCKllq!_Q}DxKL#m~~J(3>DJ^D`8)<~O^AWZkzb{U%4wqDb1XQb)Tw?9_* zuKNRCWV9#OK%4JsLucykQ8`9H19lS5N}5y+u^c@l^D2y)0`@eMj_~NRA?o?kq?z|s z1iZa`O;UxGBcyeNSKZ8U0Ex4e|1w@>S2{;^x3PG>Ol}dvT!aqSRk?FJMpWP?osQ2hSE%vb_96K2mPGwzzeJ7T9t%cH>`~-5j2#8Ez-F^8sj#? zb+rp0B>6TQ=3bo3KNAnEvAn|QLT|7=)jJ1eko>i`5@Cj<9?NMe! z{gp@2r^YuX%D=YM8x{V=*K{>_;%nxiF_Uw%xV*=w_K<8K1*C^C;q4(eLy@v@ZF%`V zld=e386L3Ic}$)V*P)1dN^0kRW`aM1T`j7gMK95XiQ0oSXM(u2u4%FjwNX|BSg_BPN_w8rFxl42(W87-0eE zE?(CY6|@>9<&Dn3AD^a=i%K=wf{_>X-2f}eP3m7-cFPO7dfuD{8@%g=j==>iIMfAK zAD;oj8mMJH6XF8^G!2f@p*tuZ|A@7kwluSExRM+=0BFnY8UKqi{SU)a%Ncrr?|#Np z|MPQGf#1325bMLsKNeqkqn{b{bLbiT{RgG8+Nc9x`9A&EK*j=U2#1mlX&XIXbmH?B z`aQtA4$o+%OUwI#3$>qN04iw;?c^E#amnE6dii4O6fP@*Qs3hM;P9X7=O<`aKMC6_ zFU4&l{sCm)u~tRs{EYMF|2i(EaA_C~Zx)ypU{U9tBL5FaOc-&>P#$YqWoDWR71X-{ z@K#8_rfo-{lD-%QW^4Q>faoe)qNHRM+{ywtPflm*JLs~E4qfG^CdV^GPCEtcoWtRdSDww4m^ile?M=(TSF*MzifIoM%7&0) z!*VU|v=Mbu#MXggL)O0Qt%UXzF=G78E9$)`UpiSuF(T{?+#fIw1Pe5VK5>+gmfJ@w zE-qg<{ z0Y?}WXCviIIk7^{47oE-EJFrsG=fZwJmQ(>Z;!=qUP{%Lf+fbqE4)*H%+6B#rZ=J6 z*;-?Ri4|V-EW=Yo$9wtZa%(h`R_-L8qo_I)z@jIVPD6sJM@#@RGwOzQM($`%xPuw-;lcg&1j(aOj})7uSS0q5oaM7Cn_;tp3W-#NIH9L<8>OE zBp~2S)4Hh#1EvVT9p;KCkmQ_H1x_IZYL}`Qt}@t13U1s84p+(COXJJY*qvjiloiz& zlm5AO&AU;l47z{KgF zqM=$+Y`o{8sEIEhZT(+di{AE!$c@wG)v45GY|e>hm_5QDDRNLzqh)!_>g#+obYata zd~~$}Nc%?KFY|zgSFAZ&GI^S@(^(p@{R8^|5Q(zx&i5LF-W29s99Eo*Try#g99rFs z^6pkZJ;}gg0C@DQAI_nkxr%I>Q_{X%r;XDtsuubO>@GX7Gr;?I6Xz*8H zgdt5C(y*8Qxy>OpK;WdxWB{xza{O0;AvkvXo{`S3vC8i2{%*4(Gg)(f4B(j%KC_UN zDR>1P-ru_YotYLNW1<8Hj})QDP|*1NfXEB%;69x|%?o|*>HyMDBnS1URo1oW zn6~?@GG#!9i-J<45*pR|B~|tEuK)k}|GPV2X7_%mL+(d|O;YV55e_5ZhKsN7k@usX zx{VrS5k|}a8eiX4G*izB|BCY``}(N1feqJ!u#F4^44=q?n!Ayg5$eqQtRf&Zf#UrL zPlvze$@DbuWJ)?G%lz@UP{kQ-VsQIm-D7HD6dJ|?dL`k1_>{vB=K&jEzUuD8q}BDQ z(Bo|fxp9_%VVO@d;&nKYXPGZooL=q?Go&Vo_MnYba!&m(7sHoaNJqP zBh=3RsldWmCK8xn?Qsixb5(mxWoyUh{`hEQu9Ye3wnu@>gWc@ltJNS{tT4SZTP9tH zPD5k6>ali!L@q8V&-11d4t$Z|=tf2+iBF4)hy|G_z1HJNZQQ_8C2$T8QznOfgq35M zXIG+>8)6QB5qO)uK4v6|M^{2f`dXMN1G1!W5Kvhp+Xm7Y`e!^~`uMK*gPac-k~m~@ z;fT?OQvV+KSBg~E#ItNhXBr7L!_xYq2bFuR{CYvjGo8TFTNd2dxGiP{R6L8wOi%H*x2FK~;)CrERb!tkQU`3ZcR=vgl& z3L*zliK@{|SmFFvl9-S0&Z-A%v8JPzZpft<%HE>F=~8_8rkokK0&UK&l4`EIv*nDt z^bt`3`jRUJtqsa!)PZa!vWt2;(IY7ZVfPG|u6{ zoWt#9qUC~;sOsSD5o&nYc}a2c?eChB$E(2C=@9C5=CrV-313ETaN$<0d^t@;RO^+&^6`3CZN=i^P02?G&queaW{qWdRdkZCNfp-N zA@g6RC`&#h-rpbj*YXU^I)u7l3d4D?uBiUm2P=G41ji=}_KZii=VK6d(Peu0{i(*BWW>h5M9cFup?-%P7ZnE=D^6tN-|J}y9sgi@6wzW~ zVHrIr_zLD~qjb$hVEkeTjgR=kTW){hHP%sjl?<5AZ?AJ1<0u-sc~ zwq`4-#aKRIb_e2n$z?PL5p>7Ldwp;3pWNI)5?_Ie?;gy!iH1|mJgx5Sty7pi=&KaD z6<5537Wb*WJuTfOA4lrF>kz6ZF8k+*FWetHJ!F%oL0Se-GW`5$w-=yPo`%bghmvWu z2Aer0EG*Bf9{6Q^>ktmf+iX~Kg1R87f)c6%DCAT)#m!!0tiRYg%FHfOdAqOL^*8o^ zD$q4}LB6Aw3yb4~trKogG>}l`%w*9Wgt4h1TA1pWvtCBK4nofsnBJI%_UrGQq0ZQ< zqeRqVvCU+IHxEwbqXQY7nK*Bu!=vIzqjSy|pwfahj0LE>y90tQKiCiojO$GKQ>qDJ z`LCjX{ZcaNRzC&6;_yWI1L~cz^tnkIu{ivoL+%J^^zmT zjH|`5U;dl643bPPfvq~f_kYlwIxDTTCL zRE_uo`L;^0A8=7C>YDmH!WdWtngCU{2TRe4{y*R2s!mmFiIyJ@P(%CYUk|m?sq5Z{ zN}gleZc;zUC`i=c9dO{N!^s<#2Wrx?0P~ZjTzo~xof)Mr&QA33W5<3*RHhK9!FCVQ7JD9!~$CWJ`CO)hEUaO^l0>A$@e7SYx9d$}@(9hjbU@mbBTtQyn>Cr7k1h=qrewN^X`AFLen zb65`07jeT`z0GM7#NhoF^3c@g<3qP20W+HZ)mO=6D0Lj1+q1n**9Z0_@9Y+PlHtV#8>jKvD?SQb)37Z zt#cNN21(+rS?C{B5SmlX$a+(#B=Np|{91JqEASXRc;5`{Ma%ODi@f@o7yDVJTz7vg zCG|t+n;3;t=u*CU7VHlhZXT%F-SaT0WgAQ{1r?HVsy5_>VGSc(8|DKSRZRFCCSIJi zM!s?}v~B{>=d{ZcZRq^-*BlGgW~>H>4#+;b>8YBQi&S>Z7g?p ze7hT-bX&%XeG_BN12L!G036FJY*m}1O`0DcDrHl|OAz?BL#;FYXlW;N&~bNFRaGw+ zEx5Nhf$)X2FKBYI<=z63EvPKBvv76an&4~&ebsZdyTtg0=A-}ch;$cwb2xTaihjpy zI~>HeBrmd8Cx~cv}EwtPiJe*cJ&p=%*3^)bCOuUD0{8>pex`_bGd?;xt?-aziqd(onv9EpR64dhj6C zJiwp+9y`#sO5;5o{Pz257$uAVn>s!t|C?>IcS&TuAakD0uFt`CWF1BW(q#25G-f=X zk?)U>en#90LxBGC$jR-Bp>CWgF3lVrB6hUmR*lFBtum?oz zX4=b4v!JH0+KI8sW`N-@dV72Lea-$Z8^-i*nikWyjkTupBv?E7Ah`xuU)*uOq14cW z^?gTlwrq4o=k+6wVK8qhpB16;y(^ckAZ~m3nE-yUa(P!RSCANhOl>!Vg3+0gNkJnc zV!2jJ997uCQ>>~EVy9EAa@$~*N%g{{w4U!C+?bwq&P;!9075Od8^yh(&Xig7|rPtpTvIM6Ut6Oh2Kco4&Pj6%$i_g39IW?v*13cJw*ezgZ67pSW<`1Dw3G4ml| zEBUQ?X0`iu=7hp(aq;_FD5y4K&reMP^-}JwS7UkVM8Xvm1tC%?v-vu~XnyC)i0>w3 z@f=htN#xq-C=(Ji5oR!nFoklC9y4%}{3jt0EK_?(s|vz%z9~dXO-rk!Ttt@z=Cgu`m$vG4}p(@+Bw4Oy&X zL1XKwaF!Cd8a55&!5$}Yktnz$d6(laI(q*wRvH^z!YrI!6nNgdiR4Nl8VCU6?Npn! z8*SmvvP48=)MQy{+V8%swtMtR)^$Am?O%O-H@g!Sc78ikaYGlM;Bv8m>pE0rc>3;c zU)8Qjj7lvUu0e0IpH$N6oz^TD(xfK+1g%qCp^ji~(&yp;88RwvUi#qKqzO6?&PF2q z0Arsa4vV-3nb)Fy=^SIH!*t;*nS&LcAStQt%=r|Ab!puGjq^zphZO1GD}8?uEHE^! z1a(Cvb*IeIDf`-Kl+Ksu87bl3eAUm+SR|bMd{tLmxLT2RYmU9&(04eIz&yv67WJX= z7Y_wB>;>cSW17^UEJgiZ5TA-lzk2SP{jvC^I&n^X*o9Z~XbjhZxRCEwc(;Y=5mq(QmG|A(BggMdVx|`q2K=EISqSNa zWi44OmX_7nixL7@2To|yqjOsHTn6pzbri#t%S0SYUyJRODeJ&0g?ZELTgQ5mwTf8m zBBrkNLiQ>Q+3)sEPV-GI1{WYD6)6+ZTFU{Rt`*$J9P7ucfwFP_mJmqbP=GS?Ixm~7 zZP7Q_^&l&-m*V)wA&s_DAw0U!bt{@WRuIPu;xC>xgnyjf0NvriMjvfR0_n8)3O!J( zqFxZNxgGs>*3f~qp*ZA|eMYD=cQ~t9B@C@o6Q1+NIeump^!f@qgpQd)n86@^xa_F6 zhGN4cbB&8%fSR=}t6HCKzLUO!tL{u@-KM^{A4(J@6&hks^NH!ULe)3bg-|pjhyV5D)aYd3u7bhv2 z{RkvvS7c+#Klb{a{1$L|DA%gFt;WC%y*gYI59_#uHFgj*1cE}c+FF8B&xCyKoVcNO zT7OJROs&E^YYsVr*SwDs^NCZ`zD)YJh6&*D)#|>HXg$w`(qU5-DC@uru{zFSnI4nE z2Gd(;cGhq1=CTdzvnrC0q_ymEUet?fM^@QO03@`C`Nt*MM=P^1rB8KMlVl)0e!E-KEb}|EnR#~Yi9c-xcRBjR7T)8+^j0@FVx-R{0}k;PPc{L#{md8MyXW#g zLdM5S!c6#yL%jB0f0jBS%hIgUfK#{U86qRj~n1+;Ybxyc^;ANoxJR zxl5%Q5`0DxkT0Oz=Z#5ZWhZo4BDa9dKt;r{F?FLS2y2_TizxpEB(;J~u$DQK@x|%y z-mG5hS`*sH8Wy&<^x8qx7lXP(E&I{;1VC6pCgy65r}O3Y)#@rB_X&5SUCni^t+Bpe z8Q2J5lBw2%;cZ=K!a|)P{u|J2#qm~LI7p4RRIv0vKE3q!U@mW_+y(LHjSbf^_V1Wq zZn74{m;Ao-f;6_@V1WFLV|eLObq>`nBdPmqA(CU!hAjg6j-1U>8KJb z$)Bn3EI5OT{I-e1XEbZKPmp~)yYAj^5qb;64#X}XkZfdS|F8^;n%zi#!2y7_!$dT* zN5YaZQOT|$)GnUz!iIW~3c~%;Z6FHv4Ge+%4a0xJB-i|OU-F5%6dO#EUdcQAlHez< zW4a_84LW0ow45Gi5zO` z+c+R*D}e7@OTI>0str#bA0SLM=GSL>2X{`6s=wK`)(tS(6Tb8z}%B81`+UJTg#eG>RZ!8G3 zFL-jl{ZR8tXxK{P=DL7rT7Qu+9n0Z^FGKA5-k*?6Av|v>W^0;wAB5vx&mIUBVQThD z?05+r_&roZh3p}0XB8%R3k$&p#0bN96wX&(>CDIE=7O2+O(eufUTbH^E2>=DaO_vF zH3|gb^j`5TCMly&$uTI?=kEaO}07r8ICF~sk zwprkMtO>-)gz8UCn_P*K-v0@;PUUG{Bysq`iLLzf(SG}>-M@n0J24(#Ss@YZiyML! zts~Sog%ps9cFm2P&q24YHBClsD*R^SsM3V0lpIx>ZF6l3&bFW6&hmF?CSS6|Ls%9$ z)n9wGhsz3Qc=3s!;ZC9hVXn+XCQ$?FmvZy`#BTf~-TlnU)8UXGsq`DJq5aJcn!}O~ z0$=anQ=gm`u=*;FTBR!aUxfOTQWsaVp7SUlQCqD*iLD^t1hjRu#s&7K4lCMpH}V?9B_Zbavn3>av+C@O)RKhNrx|1)itzy{5|2qDIN%zJ?%plp zZ-nfr*pqP|R6}e>NrJ0n%8Y;Dn*FH9i7cBj{W-;oBV>8iGZwu_md?@x&SW7uruqEb8C<7)8=U#`3+#X+K|*H#$hM>rgKud9R@Ij$z(du~XJpg{9q#bEpy? z@y+OXC#hkcWM(RvNSQDy0*&hE!r4!Rr2)h7og9PBq?A5qKaEEtT|sHd5{h@Jl0A*XW6_$oaF8{y*yg?VL2rkx>$ZFoqVJ~iIz zG6<*0;Jau}ZcmuyylNIQO;20NSlC|h7fHMkd9l#Kjo&<1$;gIeZ?Mm_oKR8mUyu_z<1kN7*Im;$=<&SmE<{$TDHQ_52B>(I5YmSG%X+cKFC z17E1~v&CF#4^DHqSR)-s!Mu6SqKHUq%8SueN#vFtPTdzL^Jmv+^^xBuXdvyfS+Z9N zMd}9K-iF|64HY#nxd@ksr&6H^>QWZVB(-rKe_rUyJ=BDFZ|RD(o!f&ldfyos^0aqM z1sul}68zl-`FpbeX{?@u%{>_JhOpj1p zB5qj^!@kEIDi+8H{FZ`lZ2Y-w^TGpC(Un}1nPfA?(_ZlM>&%8TM$YdE9It(%82iVC zD|gy3I3nQ8F3zgXl7d;5msU`8?Q5^UTt^mXH;w>9KuApB}3YeXF04y4d~guJ!jV?8bgTTghoj}ENN3} z-~e3jP#cbqjfIf(PTj;Ao6SJjXL(G^_OEjni$2ZG_uj835L3MTpX^@WG}C_-ax zjo7RktGI_zJ7^^UlSYK#vRn8GO=FVL>Qe4+W=@xiI5jP`Mq>r(yot==O~d20lFjVM zpSmt%|Kri?!|fd9$j{=L!7|H)02|+BgQO3`{gf!}KU*&(FbpL>-ifUw2saHPL5>~V zL*s`~0C(FSgI07+f~bt^2%Vj)qP$>WTwUNZ5X?O+`_jhS9*Vu$n$PkL=ijQqXVjyBUH(hL=J|Ol|$ZB*Gl*=Nx~3#^4RQrk@w-a~pY4T=Krvp|JQ8Q_Gvw3uOQi!C_bUJjtw& zgB(^gg&WGedKo)G#bhwBcMz1HJ9~>Jl-hb=%j)Y(<6^)rup$EAace#o&_93eCWLcu zvo!;=$vbS}R&6(@Ucm`ypGep{Sdk=f6QJ^(iV(QLke>X72i{w)sEKq&e2Er`gg(DSgTvCSAO|{jaSx_HP%& zi$mD)nM64>fa492G?|9JEPYka!PqiLp{+8J1y|47GbJUqv0@>_Hzz|r;Qgovj++k0QO$TIgJHy98B2DxrY zY(0&}Bo0xx(B`6fod;iYkisL};0kC?S%1P8&6haz(8_WjN%Az{d*J%EITwX?xjw`G zQ^`7j`3-Q9KhBycs9UTR$0sZ1D0q7Sm0+e}vl4SqTJBmdt2BVl2kLzYMK*V3k$eWm z7i!(rT~sUsU!|-h@)>oX8OF>1OeMFqB6NR?6j5V5QoFUKepdKQ zR#>afGu;ghxj5gIm3x{wW^~})Dr>4tKUc|_2$daNh!rJ0FZxR;4mtpXK?`cSOttp0N5`X6w+2dIZ}K{bvc8T zPsR)fO2`^-DRMuqj@T#Cw^i9qHRaiScxE-!61_i1o-(xkp!wZr1NBVsSSny%_IM4B zNgo0^kM?o{aEx#P`VVjqD?;GI#yO%MyHnFN!KI~TKALPm#X?UmQus)5C#Pqqd%*<7 zA=-ubOz$7iXtc!zfeASO(Cx86&Mf`2P#KWoW0G0Q5|LQ>l)-lME_E4xN50Dn|1}N- z1V-j9qGYaSLr#lp-RZd*z|Ia+Ah+LEG0N!VH64u7&+y~`s`sGYbNRY*147j}*TAZ( z3b*c77vGWL2R?os-{!-*xm0)Mr{TI;1>P-8(Yktln%GsdWPkFJo2IAGV%c9WG;+j%V9_ItY@rItaOMq7S^t2Y3yo(c7 zP>BqOe3wnZ65Nynz$#hGw|Iy=HNzBvZK=$xJ2&P$Ss4788TkkmznXn5u&G%(=%m`} zoVFO41+^?eeFz1Bfh{n9CJz33+_0el@Jk)wAm7BUX#rLA-k#&=FB_Wz>)&+FL`sap zy7|UQ({gHIsI{;i=VWKod|Ld%pOW85144#Feq(GyTF>ufWPJxL)6N`LEPt28o0&>d z$TZuZ};ul&SG9BO~B(`yjvUY4S#ZP)DA((q?x+R#;YDbO*2<0sQJ%Eyv&l zSX2x{WYg%hpO;DT-3eA1o;N}wy*IW6=@w)fwBzZ0t+5qhjP-6lfx$4JXzj=CY-pZB z%k4G1e4^+pC;XjQ@li<>;%Kjchi%!@T0_`-SC>hDdws*BiW&2>kB@S$Pn&)I;o2md ze>$IAvzP-=UrnZF!nbllp@8O!8tQjtA-_Qh(b+_qFyo`wWX~$0%WmLHIAay!$kP*7 z)&I2rqT!VAUl-?B9)I^oVvDR>0j$gtd8B}ACq*CuBJh81-_QHFQ_mBX^Z6w+zUDp~ zggxVC+zL1!xZprqq^Don!zHv7-fZOqw}+=jM2IQEY)Ihxkolg;ARS!y{>g#xl5It^sYzu=?|5Spv)fz4dkNZ|b79v8EXzaij4sG~+&atK|<5w)@@u?mys1cuC`4z3x1k_aCEr7-Exbm~M zK?Pa3dtnvxNdv_q>i+)Pdh6a2*4>(aszr-$Uyx6HR_?9F?g9AXX_FuyUBu#v=i+-}>h5TAsY;e-u2WFT;Z!tj>#?25Mmi&=mM$siM%X8=^s0X%PH zIo?+x5-9x8p4fOZbMzNrOXG%uUnLdJrcUr59IxdJ#0^!W-#;GIk>C|G^Eq#ZJku&= zZnH%q9e5xprbUV!bKeiZ? z0k&cGx{PCMm5IPG>oKfKlqIuegMCLy{f*4r{L@&vm>^*{05_Z}aC=1}PukB0WHt?6 zusY@b0``Ikf%~bE0~VuiPm9PR4$=Gl?VH>mPU~CZT%L&5Q&ElZ@JX*$J_-T_QpUYg zSml;oH%(^v@rwe48QwWxoF`cptN!?>jg&nJ03`tO`zI)&kTW)fK?sTFc`BQI{vX@C z7wvhkFuW>WY)s6T-HEKy(o%{K36dX`<>K>?7?MsC?+O8}D*|8*(|w0gh*(sDGg+C< z;RJ|U0gERtQSETFAb?V;_`}cKH>oHJ_aO4R$S1jV1D|bM7L6#*cqSot=^xfgW_2jf zaKV4w`B$EIezY6%|Gx8QCWQ3o=I37km76Fjw~GqWW8RU=1T^j;&oNaLVU$2%JQc`{ z1f0`(^DvodUgw?xwQr=vMAMc90htf3r%lIK6}I&NHFq!qU*CJ8+wnb=RE+WI?2SX( zngzg0RZ!{m+qa$F{*zPP6Z%tHOb{=|^5Y)X8$am(+10?&2g?`b%o#rKIxFeMYxlG! zwvUMyic*OzQj;ygf~`0F&eLm1B#Z8S4Ff3a>@3!IQl$qMf8!#yQCLR)oaTU-I=$U> z^E*nh*gIAC0O{{@A7UpCt;_=ubSHB{{Z*N0Ef@`n(V5hUuyD4i)SwiZRYF~g_=R$S zy50{~=q4h7SL&oweBMKms7+LeY?*oPhPA}!QdSJgR4+hZwtBk*PX73Dfl z%O=8K4b{VV`^B&xe|sbLPQY_@p+SdkmPiOfVvI?@hE}BAQeU*(5zC?J_4YyY4}*H0 zpZK93`B*bbg&uAi{5=m>>;S@1EUu(XD!-6OA+_&#>~&H}uz#MnLm)sH|72#ZMkf;g zAC%jv?O@y(Gb;zSz=cW(eEhX)_`h{*&YjNlKqa}sYCItR5&Y0%H~lOCkU7~ZB$%Rq z>zf_$?Yp5vn9Esasf=WULjo0FBRUPI1lDjhMgQX}#I#kcyeH$x^A5~(=nE(f6cH9s z4A@0X^3kl4>bY8ATDp95b3lL0^i5z{UW}zhRxW_Z0Hx_E#tMVs+Mk^z{fo_)PtVj{ zl*dvt0TCv=#Nty> zkdOCN#qgySFVBAha*SX8DwCqRo`W*=dhGgy)J$}IPk5E|#FYddVIdN{vfk7_U#6|_ z;gdkY1Z&(+?1HBif;XY9vJ&E<08MR><@vqH_Bf~^&FCrX)Z5W$!eTG6NPmu**JGBQ z%|9;3OpNo-u%&c82Hf)XzPa}0a!CmT7&+Fig?;Wsyt4oJaKLedJty?w2QQ1bC$5I*bHxzJ4Q))SP2`4T)LM zy;JS;)M9`mos1pQ{A1&d*>NTP)42wC5F=Fp3XrG24bgSxUZfpBCBcKI+JeB#wg0+p zQzp;JGT>F2l&;NeYd3w;Z7~J8e>7FR&v({=&JXMBT8{UtT2A3v;2z#RUx5jE9gsRm z!V9gaLH{a!O3eN1k%WRg{!g18Szg0ZE%hb$e)l~wGv`zp<3x-H7{haSxe&S1^BA^C9BpL&~59tzl3%vx-x$2>Bv59~ldPenn8?Jt&M3*3(%+rG5)hJRzE-S&_gPe8s2Ejc^6=$tKh?TVj#=2 zJ`a#Z{6oO1;Z!k*7}}w(@{DtGQzs0t$S6Sa2-qU7MROom4OA~>&qh8PreQF+b zxnY&L_Z8Do%f!@-$-Q3NM4gGZJtp5{hAXM`PUP$jPay919fD!lhAk9;%G)v{oh?go zzCKk3fr^rbf#WXg8MDR@mQsJ;$)|06k@AppKL8QI;kA;hEKS4P6$7!ae+csQ(g;3_ zMuc0z{#+jMfmY|%*&_BSAc|z4?P=1e+@YD@0oxSuSuU_x{aL>Px_Ol?gJ6w zqhlUQYEMHt3@@E?)@myUZ2?u7%ox3>-0SEO*jK z?PeD(m6KsjAA6PJnHUE>5XpL>^eB)XP<04lq1eLv{x(fM+zDL?WRsmXmQ9{spq9H4u*e3^+h5G>G{LM@642 z;7us2#H$S%%n_4yc&O5_1zzM2`u4>8&>XCpjs8{mASTh|A`wI^(|dM_K#^O4K|HET zaelbT#D^{HzP?13wNyElVwmjLWlFy9I8Bx>ErBxjeN)HlC_#RlzwQ{EpGx>)f1)!(g^ zlzREZbc{prdM4U!Wkal@>K|!J*wbGRz`hAG9)8Kw#qSXemi+$DRKhYkVK%soNXSw zcq{eiB&9cHO+`5|KUl?V%&gem>r`C-Yp(Aq>h8jjx99xAUYOw8rOW%^c(daJ)rr6( zqWn3O6^MQ)W@E2Hz;B4pKcMAtTpEddbkn?_jle;<%8nPl4UwQVnFht|m$S3lx3CiH zfh@fI`kg4HGKl@hS4}PJuC&Om3fH3y^$k@;jBkbr-jf8Rl&r^rHM$+6N}F%E0hBlP z)lvXR*<}1rpm>4Y!JuK7R<^a)n!gd65+ADd&j6myHSN=e8#9@A#jJqCTK2C>M_yXDiXjmt z9wV&?39Hdv zj0-%7zFV*3a?$M`{TrxpoQmLQ=adZ6d){Biy|FsL%*qd6V^-uujETqB{&^c78$jDp zC>t)9J85Bios{IL2N?IrIz>+@aDTkIGe-ZyQ$Ri4zOt?xh~OJyP4SXvT(_u|5N7<+ z929;$!(E2EYZCM6t#Kw>sXk9?zBq&y#2i(4I}#OV_qDQZN6KLT`e5ySgTMdAtif6* zC5GlvhpwN)czPR;WM*Gx>{GB|X74Ha>;k~jb_0CU2FW1p2ePpcYqP2$^IN5;46(s{3RTMeU&m!>afdPw) zKlkV^6G35^msGl*9^ZJMA{RrSfl(%p^RX812E?l4fx0OJabdlrU97RiT()K&fNj=e zHh=1#?+;O`HJv_MVO0W!PyfgH{c585 zhb1y3?*fqz@;vR!UNYrR*^$)Vn5iWg`}eWiGK^7p7L3AqS`ye zqiq^5?W(H$0;QQ5qn#lXjLE@|jd{GzOQByj-t0%R-~Ju%pAQiBo;J||(Uo_E(R5W= zqry!IO*)QAlftIG>8rs~2=mBT1eBHdHxYiNSse~T%V8;e$*5|R5_WH`YHAuGQu8pNbsNNUSHk`NmB69H{eJmZnHM87rvH ztf>Dl^4>D6s%UNh6%lEWMYkZ`-QA6JcgLbzKv5(Gq#LBWJEc>)ySuyP%%yw3d%y3y z&;Ohc=i6DA*QKtQG3K0O+|O^^&okl!tL(!7!^&VT!*?R*Ny$l_8L$*uP%s`Kg)wn^ zT1E@R^KgM1X9DZ&8{nj5vF)nI;LfFg=FM5es?V3>MGnIfUHK)P=M#~?lJ{*u=C7$t zQ&=Ha{%^%im1v7owSBDYLF!YN4q$yN`szJ42;>Az7-+8e=WqBb2%~u}dQ1oxJrY;T@@I9=-m&an%*;TCbhz2=! z!i^~}6)E`&LVgfH`qpenCbpH0M~`M*x-T6C`Wtqh3c9|jLyjK{lNEL}oq3{W!Qa|& zzxZ|y2byui{3Wjm;h$v3ODsmxj`vvE({o2DnBwh#0#T6L2WbNB^jpQBe*yOrp~pUw z3eW`se|nG<^=3-s4VR60)^PKwYMFAuw=Qtu6bys^bjKGn|9wM=N^vKxCDJ zRRF1B%^+JL{7bvv#zD0EIBT(XG^r?b&bgO`7*(sx(q|WLm^1}8XWV~lhw6h0yLZH2 z_d<>4Wh-}IwUCOH3cw7$?#vs+6dL|$!qbTn$~lYxjX$cYa*#i0_qBsDYZcRJnHCW5 zFwYD}wH*jjk1qwqm7HY>rN)U!MI!04uANZ3=H3({?n2k!hzU6%qHH7)L)2QzCY9 z{olgx)h9lY)84`DS`iOVnORyRv;u2>m}LgiE0E9IPa5RYW#SU83r2W&1%5I}ChVSv$1+g*AVS1c5H2`I zJiGB_>of0WXgHDdIvw1}J08)t^k7r%c`CsiMIJ^)d}79B?>vRt?XKD7AE{hE;SkN5_9;+& ziRe*rS5RTM7BBU^ZNfVNDEZ6j>iD;AF}q0g{n+60vvT4AnwO~w`!R#~klZQK5#ObN zOE_%LVYT{8*!queVl;w{#i)LzyhVyF9f&@+H&8a0f2L;=R@0 z-uCe{QB#irn4M<4<*Y{#m7t!ag&y_)MzC93WWkcp46g){ex7G2mdv8GV|!eM&lqWy zQz;BfXw~%JvfFOY*ly%4@e7ehhubL?HKlsIE-Uv6)g*tFvrxx7%+fjuDXtYwlcra!A;Q@GgMlr{o-^XnQ-W22}N2 zc~MFZBplgoGFS@Pg`SAtx^wC(eicTgNpI-B=HR%3A@da7>2z>rPl;lXWy2@ask1Y- z-X~$%9>%n9!u&72uJ|jpl@(=~ToBU3Qk*8_FSJSL0_(g5gYHsUa(+|`F9B@fd$(Wo zS0hItg2+?nsUd>)YedE!MHg5gcS#6x%YhNm4*qN#6@kl|iIj^KOb;LZ}V{ z=PjawaAQeqI|O^Mt!MD2d2B))oAU@ntew^IvF@lFOo1n_!4O&&qekXdUv)!OxaQS9qQ?<%`zo`y~4CRuZ*_YL&&P;2nbmV<=A$;i z4FZ-e!JVZ-XG^i==!)EYXMar7)tGz~`w~#K`%MwPGAZO=wOzj|tN-B8sO%QvRJGMg zE>_@$Q;i#E_bth~RLWjxIB;U2j{4z3kGXQxqE=9fakrZ&lfj*j+tT$7lJ1he0lj=A zS@sQ|SK~FRJ-a*u%MkzPs-aWzO~x-K&TFG|vnnr)5oB$XwRhqaI3Ur$(3%lIb7DhR z`Xsvv#%au`RZ|lm5v&_us;A^&+R4vz3CEBUR54P)z$7_%DFKrwawVXJcNMdAli&26 z82i*45h%ryON-4NGuX#Hd81-KfA+KlZ+S#!eGGxyTKs_YKEjjdTL$U+eRT0JX54i* z+29s6ZeI2ThzdCDH8D>RxZhrC)A_1-yD@LY{Emc4?lQz2tc$37ww!ri0$qWV*#FtXz{@g#n%{NVc0AvVNQY*d zN>>0%%e{Amy*t(wLerL-;F8r7+;H`fFa3v>V3x?q_y;Mc??#DAw$ z2h6^}WFCDL`J>+GJ(edhf-)vnTVd%KXSccEPa;bvF%sEN*{+6(*i94Xe5wbz+LUo& zxL!~#g2-3{vLG7pTVR;0%3di_VPRtl249+wjlZ3!7Kf|fWkQxf=5nK*Xo!&9j{^piPHZQWM$6N zg@iV2lh-|wGmk)7H<%T+`;N%f3<>K4RfJo|Yi@Uq;HnOSTaS09R>FCHpZYjzW?z|v z{jFoqo7M7f8mP&W}M1D42XMh^<+z4*N1y)0xB0)2;i5_du}KHScj4jN--6{q^D$mm!*`G zY*VpF_y^)Q2V^hIuPi(CG`|pI%HC?^bd+|q+ISSDxfdhk?QfHMM^UhLGq(m*S*no> zx>0VTN<&YRimaRjnjD2|KETm;=E5wY+@|GWL%=_Qt26PXSn=--d5eU3=vLEJvNNYp zn@~0w*9BWCz_1p7fu;S!2Axl8#LHSf1PM82;2;%uDc}$IK6?2WV%5X!yLUS!%Lo~k zl&ofy>HtM|`8L1kYwFKPq8noZS9}4zQib>rqy72#)PmU!^cWooli-K976`>r482-V z!Tcn<)aA{Z!FN>xC6OS`gb0hFv^Y4 zRdfjp=QX>#X@z)(l+K#xj>Ze_$3zeAaoxr6duhEfuoRuYN7MBYI&^oHp3h%#Jj_Dh zY0eeG?Q;bg3?zGULhBZQv>=huKN2~E{2$8L5yhL^u4@o~T|zdZHyUvr>gxZ*w3#&# z!4{s@kZzUS>L*||5X|@cK5iq^Kwfb|qT%Ma@vYDCivm(Y6ZSvd7$bYj${%Jc&E^*y zZmy0ARaLV)v&U}33Gow?AF_+hA@@JZmz^+I*%TNhXw$Z03D~-_jts>Zgm>lg9>im~ zAu-s($54IPOVXc%M?`KstdcKAhQjE<&W7ABCkXi0o#V*kS?5PIaL5>Hh`-aRD2DxJ zU!l=2B$cXivKXhGRI~e8rmSdR#N(=Miv2YThxQELsm<8{32RbLc(<_aVO7)S$>TAi zI}~yA3Et(fr6o-dma^7yP!_~~%VTesKVx0?WX+8m$?^F|$!p@{)V&Dk`9ksXWq!~C zHyo$ZsZwM)KN~$gcyq!2`9;{bZ&d{afuouYPKSexsFEfJ(}RE+5+f|h$-cL7DEUpZ zx%w+S9YwXFJ}NTG%C*FxxvZ{W{*NkW^PQNR)x;XD?vU19S~XItbEJO5i{Sn82N|)9 zy-*7jQcb0d*}QBfkT-0rq6bA1$#fW486rfP%d=G(#*N9G(O0EXN0PrlDncTK5Ke)# zOI;{)B2xj8z)HqRewD?${#@S@qy;ufyuz^~1lnj28la8U+`E68%%;HHKBbYgbD5<5%QG`sPy7Akvb`b+$X{D8GMQ^dKxey(GeX)%F6y& zBZCt_0X!^vp3mZJAW(`|<_E+tm4{ufXG046Gnbu`39l^?qTcecgY67j z(4x^V8hCKq|A-tv*+=0vqQ&&9e%b}8qF5Eopcyd5TrrnV=hW2PEwjzdE8%Q4hqu zR+bM-i!RGLQB)Kn#%43R!7`8W@M#o0H6QR4TG($gFvci;{4OVLKyw$O^iw|B07~Df zmg;|+Sh>Q}({H=%mTg&7>N7i(+s4g8G79_tECz)F7y>ZWf=-^!(3Eurn1tXAN=kjl zG!)XJZ*w*@A|&`+dZYdRg!Pi0z&uM1rx+0kUeH6tLEO8Gub zoj*~~Ut=C^cerJYH$U-^+rxPq<_O{yPLL?CT~L?P5VlHuAiE^B2wneAHkwZ+(H2); z89q(!CnDmXL$tx6UCWCd*Q}&+yE{u(ovdhpMJOO(-vuS40m8BIR{MqiaO|u#BPC8U z=N6oJb$v41=rjG+0nH-XIpaw@n%ZJ{^*q8?ZkXKCLV45-U#PSE&ssr^i17aH1Eg2>_&G%sQ3;A6^e@;iW zea4!8hQ6%nkU+(w82ma(11oJjhOko?BI_~Z!MM+nlc{E@Qay*&`Qj=euM>xcRHgl? z=<=UNU4j&%Cg;3_7JTBexuzS*P2qPe%0U@rKU?L9+|mA7z}KznD&`in@y@$oA?8n_ z%LW2bRVn^{?E?|8D)|r7y+e9vTZ@}c>MXS;fH-i=3nS;K^;P@wC;U72)Rba})mM+2TEoa077623k~T$aML8ieEQkXl zPweXxrPCb6C^fjWUbY1ZfHC2fsTPs$R@_yKdMB55xqP>`9_L2RyxbpcJ^H-_O7Pc| zn#i|!aF&KrET>CutT0OF(3FFW>PpU>*{qXuy4W5CqWfI^Sw{-@2eS<7vl)>GRC?<42LqTBYz^vIjFqihnd$clc&8t&exTeb+vzW^mA{`iF7F2DAn zI&)#M``^LzCj$@-$6uchrRm#0J|ALN9p>HlZ-F8OA8@!%6(6qkG$d>F8kFyrKTwwJ zaYTru#;*>%f&oUi0Hw3$JnCu^s{H`6A?%1!Ylc&E?7v_-`$^njk%;UfB|jM-NS^_2 zr7ysw$ppthE4xTt#%5BZkXMSR&$kv=AX7(}dmBQd6T@HlEL~1PCiVz%N0N=^B^v$- zpi`g?ELThpZ>ZmmM;X4yeXM<>{=JIu{huYDRHEhnNZTU4PX^4sW4EqZ@&^2nTQ_no zKRKDJfzSyR;aw)`rK{}{3sh@%uTMu?*yf>%u6iOgvAsVX{Vv;^H+!oh_-S(4?vyel zsi|Z7f7JLCLt7cn&s|cgUPi*7UVjV{JT!dMLook_m$?yIu`14m=pk)kgwypmf#>Ej zu@?WI>#|4vGi@h<1NxutUn^GNO>CwUrqoj;RSaHk{r?4&zq*x=VgrgdDg!Jl5h(W+Ya+gZ^A+Wgn)W_!NKQx)K&IAmQlPVH`!|M<0 zSZ0*TpT6bqEM%uxGJgot&*ST}x%9f8S*S?+^0R_YH8 z|Gp^zRU6*AG&J_!*{38Lg)lZas^iq7C0Sb&x(1iMzcs^X7EzD{bg{u|oG!&bQj5f9 z()EdB4J56`==U7qyki?-0E@<|#y5lN#sp$WZdC#b1on!fer{vRZ+I7~FxpboSB6Ck zll(rrR}T-<+1Rp;qe@XawclfTLnJK^AH?yo56k`r;`rbl9}-YAoa+u_ zCGAD#VKzM0FDDuXdR)c!)}_%(9^e0ojE&|I(>OcX9I?cZze82w5iYhO1pbOauZ90F zT>RoLlUJJQU&Oe=tm^SfgNYleT5WX4qTB@c+b*oHz1T*41 zbL1bD%e%t(i*@{q5_9}#N=!RXONwEx@FqY8uy#lWTfH8r%tT*jGN!ou9=OY`pZ}(~ z^2frPBl$>J+7Fy2|63quJ^a5H$TBjQKyE~ci+%Ii2sEsnR2l4lX=6$lTISXW!EMbg z02b`Z=AnOr$ii|!7J|(icek3okt#W)Bj5oKi~rRdQrjJSG3NgOg0ljv7_0Q(%ouZJ|4&4h)l-KGD26o>p|)JWEx9_+ zRqjq_GB288|19;((R1TqVXtZ68$YnR4#WLGB6l^!t05)yPVtxLzu0faX?Z?=m;z#G z1)svlRkDnQ@Bd95%j8WbzI|Uu0`1jd(d2KZ(m?)tn-fR_uVAUb*wR*u3^GUd(v?Uy zCVoRwXAS;hwiH0{q`WCWDq`|Wb62+U=#{RsQr%qte?q;OQ~`ygw7}X4?|6k8)Ky7Z zZ+a!E@?hJbq5bt|_V-gKz;F;2kOepr&rIJ^LWYj9({kM092s{_sqCN}`49c7ZC7|C zVMc-&XANr;;)7A%vp?1E)!t8`^*&P|ODgS9c_%~5a!Msrr2MYx=PEI$zE#)lXhH#n zAn$PtTh`ma5+0xZ`fqT!maMl8X07Pc|IP&)F@0?t^cnL{`qTB-v9fX)#u`;;zK!e zis*jbj^WLlr^6BRlA4*rIo7H`&&q3Un>w+9x7BIE^UNL`G9MQVDKO+pKQ2EK*Zjg; z(goQWnN|<6Bg$^EeUBDK3=YaKJ<}{o*5pSGeIC3tN9P%yjNNp(UycRyG)i~Xx*6qk zqTq3>>{-L%B+90Yf(P|^6I3tV7?cQ^p5kb@JQs`0?pvebNgukSI+Nu)bq;6`T$`7x z+od>eU%=!vjW50K>jG&}YW%EvZaAlKokG{asi)#bx+iIlHZ z_RxRao!y4sR%xyDIlsc)o&j1YDG8S!xYsDS>PpYgmeU2&H92bqog?j34TrG>tGIQ}u z_ezA#neLA1w`b@{|!l|?zc(;9eFBl!c0Zy=9K8n7xu;4_tY`kE03*-DWd@-(4({-QgqTq zgmUjMIF;ZYGCSJ7i-?7;z@O}2KxEC)Je5*H6jKVXnx4lw(`RK%D`^X;$CCZk*B-(r zVq0%jJr^n3Q&6~`EZWGhc^pd#K5os(edT4y2!TSVM4yXo?vYuq)%1jIx;)Q`+NE*O zuY0p88WkjuP48GmT@KCS&nHejY}wEShJ8;4WxN|K0{X_wK#~N7ASNcp5HWP1-eg&n zjN_Hw;HsvEY;QD1Q8!?p^A=QgMZO(ox@_edN>ba1h8B4`3pb%{eTPV47ybPppud)k zgT(7KZcH`q_^FImRmDw3h&W#M_Fw_FH+LN!P$MRcLt9`i-@w- z&0UKx>zQqoN4Pd-b)_k*mFAs_pd*nRQ! zH-Y_p8Fs+_GE65RO}~qs_y$FslknipZ+|0O*NeBQ1H7WJOrDN^tzCX6PsA|Z#}KV z3oc-0^e6pjcV_Di$GsC~Q-;?opDdrTtZO!^875HXqO2qTv@lxYm&hcp;PW1`y7IB_A?d!7gc4}&oxK5ZRswpdxzHo>l2&s(`?#b>OJf`lRjU6Uj(Zg)ubiRpx!tsBEf zR}OrgwIw>l6+0%I0)oml`dW$`iD`E8BQ$;9w1Hopam=?41aTifas8&Rwj4W!M`t(~ zUF&FWCe>0_iGGbFHQ3)UVHaM|bSgpn>k;RJa%4(?M3iNaK}3gl(;Y!U;*A!a&UFj6 z{;k5vGTPE;SWrIAGQQFLj(WDML^NA6CS}Ch;7xg_E=Ku%m~g1m6}fc%kX@XlEG5?`}-xv?<$ z+DD}6Brd+>Mnn;+v^-&2b6Yy77$nYmcVhvp9c*HGx2P2s3UgqInt5H@W*EZxACcJ? zO3iN;mg-5+eOOmhXw1mU%L_s%vLs(C>vXh=%#Fw##tVs6$w&&QbG&!#`6d9=BbCpS6 zTl}hLnQOTI>FMk%5y0I)%xfQB#awT>Y@yM$Vn$jR#y7q1_VhDrPzb#)79%l8emYZF z=BtOz?Z>xIGS1AGt0*dxG&jxtfNz>=&}!$Wh?b2y7W{c3eqD(N=w{K>m>PbNEF`MN za=cGMFIqBDL@Puw(RNws@h3cm-Gue?ZAbA`Ql4XPjpY=Q4M*aArD*W!qrWeM>sYtB zk4If}fy{5;D!avw{@dg)O=fyXJAFm=&+zD%eVM*aiNXFMipe0YrpVEx1!hu0`KWS= zkuI?E&R8pEQo9S~vF~CrU2l=ICD88v?$lRI8#GmFw6gt^v?*YtXag6$$I42KcEL;h zFA5+E_2&ses*7AUAy zv96a&AMetPps`}K zUd3s_mF)8^!7gd*+P)XpaYGopsHy zJ!+}_Ft;fEZ&z8T&2fPv?)r6|H%YTp4MggP-Qbfsk*jgn`YhIS+0#C4e7+V}^nhx1 zX5DAb6g+{K3sc@|bNkx}j(j4-`i-W${qpBNUso94^k_K$k4GVsh{aD_c zmjDg|ljo)nmR*y%d=zAuBaif(K8KkB zh8)#2T%-Br25U8sY(Bf_KDz!rm-PSxZOO}K_>~d1i#T>^)_D2n-a@bbva{Nn1|!v11#T-%j?89!BK_;mHp`5(8gPa*-5xXiu`@{Ug9%I zi&NxFq?AF>L3-zp{@sk^<}yrk>u8NTYp{naPTFu+Q`9kZ9+=UZB&n=+GdbMO zS2m`{y(W0T-%i0<2g>Htf|h`>;#w%o>^&xmjYdhF6t4d?t5SjJFb&Z&HM(;7Z2{i@$i9LKJID`xePkeB!vm?Pw?SBAn37Wq0wfY&_PAe9ms*=Rd=Q!NIvvf8%Ka9>#} zAWu^ZUA7?2#9K{7%dHd8o<4Q^CHGjdW5Y_Cp~UK}<^rBuwBl)2tsk;dc0SmDOE|yS zUPvy^r4n*+kX+knef8mC`=*xpuuX||rFUieM=yCUvmD5Mgk_61P0WUpV_a+T98qcg zk@18#K6!L4rvoe!eP7nBu_j{~J3{W_U$E>dU^r^&kVVXDg5g%$J0J3nazKo=Y$0T9 zG}N9aIZ2_q;`voTGZ-XeTugaS!rq^~WW}5PJE{3Cvb~L69ePQF_m1me>%?_R^ivKlvYJz|a z=Tz?DK08@ za<6EIJni4Nt*IsS1%7)!a!F$R)pZ8FHl&3pjN*F0BF2o;vSxy!L@ZxGrW)E>G`4f0 zOSz&h4K(S4Inf6)Lh4)WDg|$+Hd_kG>_Vfuq(Nj>DP(MV6_l}i%GZ6`==odmvj~-k zJmGrnr6z(8IeVBpQL}@i-uO_tsy z22m|HyK}-!nQ$>Y*qy>J>{EbU(M3;K>*@+C*W{BIX@16j4$7UPS5hmQ8d5P{mfB8L z=Ttn~e)y%%naR^_;p07(0nveyP-m8~h@}Q`b zpjgTD82m>Nxc?^zBt_`)i61_Cpfk|9J0H-{9KUy^$ZTxGFR_bX3F1xb>N7~(dPuZ% zZ=hbhsAJq+D$KcfTv-*+0gLT~J^%Q4TZt?8Lnh=` z_1mT@+&Z<@YggwhJiiTCFk%WLHMY?*9WCi0B&K&M{a4%w9Z3B>y>0Yp(P;P2Cmxwo zCAcT?y0Pz0-$ULJ+X>N-OaP$)eB%WW>7f9zW2fUsfpdW#d=3Ni7j}x`^U8eo7bHWy zEuv%cy;Kg$R6rPdQq)vpw{dzaJ9|yQG3#AI>ZrrxWe|SQnAOot6Ls_z-!xjaTs$`V zZtUi_7ebbQkF3rYeghUzjy?;_J8S5&sO&>At8@F3MgD8kLLAOb zBUk2E8!7x1QI~d95~XTe=gp+bQ6s3D=8$u06)_7M^o4tL!AHU*Pnz`6_Fg8cLW{5_MR` z&rlYz$*^k^y8bq0W*K=U@=D(pp;?ThJ@j1t)D9pg(Ay>A<#?$CRh> zK8kI-Jt}{$MW^yWWqia)efAF|qu&DISixkBIKh2j)5(cAy=P8X=&=_kI5~U2WkVdc zCoM%S(%uvss9PybGb#E738@-r53!gxd^7tTaPE_mm1J(~wDbj~uxHr83o=TNuYE7D zDzn8hONVYXK|^E11bMgz)zQqP`uin3hIi;t>)NF3EX4t)#}zwY zA-ORD5%K3Ha*~Sp}Ej;oB15nibNLWD#Uwh-Fo7M zY1wHvK^9sS?4aW*U_rEt(>~AugJH7e}QdhIJ`AaBOD$ASFIn za;sWcBeAo2;ah7KqqwVbP+b+R9K)q`i3+w9qLBlGk58R8uz@jJ=BN5NTfwhnhu z?V!c^yMRvnq4R!3n7RsraHO|xPCIn^#t|x|leb>N@H6?i&5dLYn~9` zMSr!S)eh9ucmKl8dU}S7uT*ELUf#BMr_!xVghQmT7`6T5qnLAoC_R-8>%^0kSk23_ zeavz1O>P~U9B4RiR9h|znMI1=8)l6vPUFvHZmY6Yb0odRj>)frGB!BS)@x{k7fcBi z7Ae%%)U+u3ztG@)QoyS#=_Tp`1ADIl>Q*JlTxJFTi05tM*&uh{uvxJQl3`>=IC_DN z6IdgRt##tw*xoQgs&x~r97%D29{Wp<7IkcQ^ro$}hd!wuc_OVd;KZa+%u461z`mE4 z-`tb54pGlc2^5XQ(K7x3iuEZY4<7UrnZ}3<5U`v4+EewSWPN5AMw|Pw(*v?_8+9b7-2PZG z6m^^6aSAqa*V2xmsM!$3ng)gRtvA9L zcKw&%59W*ijf5W&9?qEk)OchUFe>QO2CFU8F3~DQm!>RVrjMwrGZEr;4TTT(_Z@h zmD7dH&tC=fTKd(-hYud`C1hYxz5Pkg*C+m$crpye&p0bTaO8f zx;J&oZ){zGZx*^XPwj8Zr#j{oJ9jn(3OBce<&oJ%mmk7<%woYf*eel}+M#NCk7+WLb#a-L0!3(v_!OP8V?U&@X6BRE()mFhPFTN)2=rgH7JA7bVeE&JK#={v} zeO~zoZ|M`tZ+Q?fq}vD_x8U-tr1CPH4gh^;)-@Myu97Z}} zXNXJwV)ih77hwxAF@rq6lFc9^`ca2^-8=~sgdAt`^r4s7Rg4#>$&;nM%L9J~?vZ_# za3t8>J}DmvBcXo_*dzU5k8 zz$Wu+6fW$?g(iaP=zDXGJm#@H7vwH&LJ@n_Sg=!jpiE9P%tdh`WCPdNl~c5Wj)+y8 zskLsaF)0JWOqo|Qh{G19pYmFC?2uP?Fy~q1a6{}sJvAL)YJn$20yyihX+x2^h-IDo zuH*9{V4X3x0^+5){6^9mG`wum2HvDO(hz80{fw4y*UITK5;P@S@vC(E;^W-!`R-;v zlH$L3YsIhsdQC7E#g)ivaXOs3F`Sl4H8_?fsNdpMy(BcHWRf1Az*g|V?Hcv+U6nWx z6}I_@0;i}4e^QQy~f_>TY+_(Bgf%8ot$2 zM+do`i=;T3^H;4J42Po!x223u`t`k7vG9vA0*)Oy5&S7Bad8jBP3hsk{jk(!gN6@@ zjYkM}7>Y!ShPr!nMl+D{q%2r64nD4=8I{@@&WMq1%bI z7bW2Ocv?r??Ba0r%(GC!^WZs@;AmDkabk3_{rC;(0*3dbnR~cr)%e^~{E?816oGzB zd+9ozNjQRTpE5pCD*v{cIIZD629#N@5G-`AhT4}Z86;d$s(&S_bXS&s6xMRVU3FPgN{)iNnr{ce zN@Y&buS`VkM;RFZgHq}e0+bTga!ZvgLPC-ryZ8ONz$g|BD`Cs)jG8VeUZrwe$(xLF zG`v}`5x$^+=rrh+`Y^$#m;3RNK~w=CH~+o05AwETAFaw}Ll>5-zV7E7I7nJ-#;-=! zaCmqfP#{^^7}x)Xa{rBFt8t-bR+LQJbq41Xqk7wI?JT7=vzj(27u=N2q_d=M;)M|9 zm6e)}ZSq9LSGKh#`}0VH{(gx<@Y&#TCM@d6YlRl{3w*ca6Lox5bVL4@tNywq)&417 z1zXSe?)?lUQM8z&{&FC;`)Eg>KT&kPj;!PMP2b&%50se;SHm_)+JarB`kkZqT+iY9m!esA9q)wls*|ey~*ja|7ErG z*xZ%E{e^uvuFD^OyGRYX#4gm~St>ygmeb_fC}Yt2W-9rwzb_(IPO-m8WwXk|D?dVNJDg#kz(;qe7%r)PGsJ!3>I$YGs2jAgk zhDmXP^^QqX3^s2Oy!c9Un!u#S&K1_&9GDw1uN;b)m*Ug|?N9P^m&&f>E%|n4d}K2H zMoxaO4Rbq#1=0jMNs>ciUZGdo`M-V_+4^QiFi<#pOq7%SQ&zG-Wx>GNMIrN?hh}TQ z9aU6Wwl^~{52rK<^7gk1+AgBM%gst&0p*5xY@{yJgw=(69W(#>k6Ahb8U;j$tS9J$jHOsKe8 z1+U5en)p~WBPLtJd3kbCm-TzL%?tuG*~1Oz(le(W9dV};|6m*mFMc$|oUQld(8vM6 z-QJ-oA(49&>AasCHcJr(KU%0G@{A?*c*;uf;7S@!XaiGb^jn?3(&uWH3qC_vDp;BH zC=o4O_n#f5H_VNrn-k;|Io=#6jXH*o0W1XY7c}cUAqPEat<9M2f1ij`(HzRCmrX@n zz{M>XjGJ>zijtCLtVKxh)4~}TO^F%`gjHVK}Gxb2c$iy2_Tg$Nw1PZK{rRm4~cMIJ#RbS-xQl} zHZJk5K_w?CJhsLxH<@~FJrC%kNIBh`eU$+KXsM1h1VWo44W8bgzJJO3E{PYhG?(^T zhDC3HNXy2nR{BLArfK9`TaB-we$!P3N&1cq!M^}BmmI4nfSmjnK3#<^cW@JxajV$& zDx}SVElj!2N(f1I?UZ?Ue);_LEOI~K{ATN`VQ^v?uaBZ~*S-ypn86&S99jGiI3*bQ z2Ts}hzXpBu4&u+COoJ=5nfXa)&^mK8S8FqKrd8Eie^6?cR8kv^Ug23KO}6kQA{rQ5 zfQu02pE^U|J~_LDA=TxLS6k@L^--WFJQjy(85yWHOW>_X0z$Xorg-iVC(q`RaU*@v<~u`Gb&vOh z)CBXpQ5s(ARTtr@Y3fh71C>c8-XAs#i<6iZo2xUPNm)<77#2i>vap-+QW& zW3xt&y`5^<+kaWyf(YfVPC^=jqO$~wel+YG3Frc!qerP1QK+1v+&xX_^xs83%D;_p zx-ks>EF;~1f8}v&)B{#>S~@|XW}3@Dbj+zGp5Re8k-fI z2HC=ZNB)#NL`MOYvLQdJ>C|e@ep-fn)EB>_{l~tL&!Y6z?!(P-4K<)jNkaq~Ya4;i zuXtzG4!DJYO`fmw%VDqmj@+dW{@0ulM8Iw|&+c;|jFj~f0bT1AFux-L*}%DRkq!sZ zahTg3m3Cn2f`cKcehofkhg8On)~*x%!se^y$&`?9j{J>Z#DpF7If4IXYJa%^oFxEC z!TS>^{87k%&fdnObP9}{3-ALNNH9lA8XvgrI@tZolub%JBpciCNY6uSFc{c{lxO}F zJ+eHR-JmGc1_$JukXKImL+`a=IKk|OPRO9*8T+pqJCZA z0x8^3-wVew`ak;`(GH-tI8$aYpXY-dT(>ro_R{2mCglMe+n@LZty}k(NF8>?crIl7 zR076We@;TFnfZ@*q>$Yh_rJBLl5Mx4KIaT%7OsW70`~!Rqf3Y{XA5$5FwiTImc;%v zUXlQ+;MA)>I~1d1Ot4;zi^$xXWy3DA1>zBai;ZeElMNy*+Ftzmok|6 zaQyA8ETckV_%P_&=9^9{|F#FDMgM>GI(JWd;v`MwVXrFiukv|7OD>eFQs7W(BABy7 zk8RkeNj?pCJ+K8ryZm9^mEW?ECQs`f4FipOFD8d3TAW4E0dWuTT%Ufna$s&UoOcB= z99m9TFNtzEDopwz=7Q?N#08}{v+{BBwAX~`fk#8;g=^!~Q9otV)7^-VEro&tX69ys zo^`6CAp79c&4Ml5#rB%PbH|CVMb*wEaLulqY^_7mS%Ek_^OZ`TXq`eT9=qk69e2YA zKJPmNw*oyPIz+FukINJ^tiF5aP6|00!Nq}VR*=V>9CYoPC6k?(e3c=p zK#}cvVOw)(OQ{H)%b7AIu+nkX_;EvCYB4yiW2`V%YiEl)u@H$kyw&F{I(-%rrFTo( z22jhT&KKCsNXREsNPC?uXa0PCTFn&S61*D`Sa?TI-%x&fN&H;@K>S=@!lfv<)B;|J z$&!@S|8S&3pTe4FA>BX6xjgHBP*P$V9n&YOUcz%bK>Hy@QWKSLv_hk-=Uz8YA$6{$ zX}9GDrM@XPb(iAm@q%};#Y)|pL08jC@$qJPa4N58ndz%rU8WT$Sv>MQm!ALUqiyAa z^rAGjgCCt3KndvG&$sQAX{)u&tng zw2}ftw{$DrNDG4?Ae}=uf*=eCNXO9KNDd6$J(PejgmicJ_n`0l?sxBf_Br3Vt}}mm z>0HheYu)Q!zgmX8hx82}%*z=Zl6C{=FRyk?r(X2NE)X{Up!SMkkvLf9W)3B7b#Am6 zDSk}eb~J8yVvRd`we7q*Gp(a34^}vb+3eC>gRYgO^2(vu?(_ z1Q1Q4#hIB0UWXaSM8j)h)`+~(56*ldE10gu7A00JTv@(M7(|J)d8!#`xcoZKNg))N zys|{6U!ytcHK{Ap1agAATrPIfqq#O@6KW} zI(F4)WdYibVlt=CZ+y+TT}A2c-8tm)>ypM$u=U$ug5`*U&D{t&kSH9MZ-%)YJtN(SOGbw^_jX9tbZem?;r!ad%`9NaRV ziD*mhM&X;rYl{NrBIy)JU)-w@{<$hdW$kF2)qK}De!@h8p1;`LT8!y+ntcuamnqZd z8rzX(q6o1R{Z3IZPHqpseicIK^woCV2x4>HdR06d= zR)q2|yIwE22j7!l$gHUN)XxB|0Qp7uwYkEljkSlWY*-INP&z4qhOaiFa#I6myBOhQ z1+th30|vypw5QCeP}1=C;<9RH?t}zaI(gjK*`=YTYGzKf$*F3E&9ef92j*@sS&Dys z!lz5*PjlQdALBnwmBk5yrf%6I)*|HOYZLrTi(3P%M5S_qM6SAxy-&p=f4!r4j@9`O zp$6M+IT6RVTFquxy}9luV5#f*kO{IK#z0Hk-w&c5%2lp!X&J#1s*vfuDg>K|vO6vY z)@SEc-~xwf({dG5DE=PFV{PPY)*~^CEn5&sl6L@}Hp@xsN{ReJV%5M|_W=8b8@=hl z2i3GrhmoRwC0@st@MWEynR-;W-y-syfHxqpmR_LNqu`Ofp4Zx^&%`zr(8pwK9IXn; zmh*zM+%-S?+w+%xseMz$X)5Y)0Luc@&U=HwafQukaD~|jq_N%lAUsOV%X4fiX}Qy? zJ{YZ$0&~W3&(@*te%?!7u=#mzH;(Cr;N~^)J`W6OE1KT1ta*MC@H9t}SG$63BXxTG z(!pUHAG^Y{*xea+YN17yPTW_+Y`Y~d5WjX`^W8`7$r;zjVIpJ`(xd+-sj!y-S}(di zabiRgztQ>8&V>DbxRl)`LD6rw{cdZZIN}oknVA`qN7jwg4xUe$sakbHMyvSK!bU}7 z^^y{tvVRuB9GqS&n{GSMqfVSXj-p<^cgu|E^><|~J;LXx-9ZHOJ%2Ei>+viAUomM= zGL&=SO?#DfO?E*|hVuTgSNpwuejdKsi)z2#6Xbu!vd8JDD%=vNsi5+!#Ow470o+E_&k@JAi z)*(fTr<0nT(+*2SC0-8=bGXpyXdXd`K#EJt+W1m#A@dIv+C-dZ;xMnBK5{P1 z9aOYKL_We;UlaB`S-8+?n3@ivP1$rBlE`kC5a?K&0m>qNg+&sQ*@Pq1d|-n{U*iJo z+xN)MBOocdXvBqc{Wo58yNMgUD&95&`PATnrtwC+N)$o7-ve-toI;DUU!K$Fk$~|6 zo0Ok6Y-Z7pEid)YYiB3G+Giggjjm1j`8iC!R5YEfH0<2OqbSgX#c-tEmuO!Ii{;5& z(}C>N8E)Jn{8K9tq}NNVaeO1j4_9vCa0Xnf0+h%#WHrotiutaF{+t;!#-Y2H(W&I4 zY@Opm$g&Aw%%bFJ0#=4E`Cx0arSZWm_wT3j$FF>%cKkIxi?>iuD=XzqNuA-M^W4*4 zjJb-Mby6Fzximw2j1zfFCJzv#+5yu$ac}zJMsk!n^JUmk7)0?;R-u8ReB^=b6AvF!7uwG1)g0Ld{rDZbGRx1>E662(*?X`15zcyp zGLoQV`vq>a<-`448#->Ux|dO}Mi1v?WR~x3Twggc0zH8`9;}wW&94gaFv+NBS$)SE zy;Azr8Q2`%3dpgeq5V%(DR;WQ#A6%3%>FYR!`U1%#LG#t^%mYa2n3nf&5f9Z0&Uf? z;i@Eb`JW`d`PXaiQUI_PNApP|rhWyTNtj<*nakPS1GWli9b##yIQ9*}*OER!&(#G> zC(7E8Y%}dIG}2sOBARpATF0Y@Ar6T;Ai$lG+`!ptYgW|WIRH=Et_PSGZFHN zUy|OlqVcikTLzN`S(oXCDk$t709(_i&_Ft16I7s$r87>l6`GL`HXMyg5KOi{4J|w| z80mBolM4jsaz1L1vJtotS-|s5$pV75$z{H*k>!XtRkQ}az1Nkcarm7sUK)(#@| zn)0&eA`>AwDONPW%=|fZ_JXY|I&2g<-9IB0jy}?mTk+d@QPpngJh^dMjQWn7K}PiH zV=6Pyt`Ic?#K5x_(xY%DXws>yTs|iWZs#1tHMPG}?LjAQXliHTvi#&eevAe8Yr|MB zqHEENikTy;Yn_9idpfV{t|eX`t<$3T+=#N1$2~2F`M%BMI||-1=XMc4a6#D03j0%a z);Mn*+M5VWbM6NH`mA2QXQ)tcu`6n#Gx35M@l93pzX;Kod=nk~F%T`^jS8rNz}dQ#^E6jiTymE2`nc zRW@*7Jw;f;^iLAoXZ{D*rZSbGCW6Mv!U2MS;Aa2s*drg{)DPr=I7#` z-@$d@!&dYgXSFnAO_SuQhBlIX!Jdg1a&vVe>4;AI7qdMGdTq0@0g@@^4TGqi6ky!1 zq%~NFEnFQ}>)-%v=fI#R(RuH_s>3bk?|Vu{W*X{*V{(ax)jdYPN~Ihd zv-$~P@412?^(aUs+yO_WZ~3(loA}tqk54q)eQk7k$G(2{M#c-BZg9EYQ9dd*EfZc!CAI5DR0yPo%VH^;@f=V4?vGejHP5d37w5? zd;%=$PIbfU+?Zh&Un2dm8}9nC=21bQAV5wr<&?d3sx!8YFFEw9=9tzU(3!|(ru)zH zVxpqN$Rk3N(*&~CILMk5`yWx?{a(oW2AA&?{yoc|MJTzxYpBrl3rm^Pml|8$T7bLo zJG;&u>||0&EcKyy6m#u4*`3s@fH&-EsnTecZAEY6xi(*mo)j`R45hVXK!V8l>&_}b zle&i5RpOl+3Xu_b=U-*HoCGNoPddl(BO@k1ScIMpN*;(BF!r5vYVvlLqnGqd?u1dY z-$`;4$eDNBe5u}DsRp1^-!!$S5&R23j}5_tY@%jK)2EYgz1ZPi?|E+dkv0vF^=;WN zv=|0DlO)vaBUpQj3oat2cX&u}x%P<2M#bOZ-060^uW=?BB-=u-Pz}ozzfaE-_jIMQ zV6YPxd9i>F>6-(y6|#B9o_(-cJq+C6l2Si7Br-J*aKo{e7G=fkxM(po9d+|APBsvT zspn^7u`zUKzbIrr&p)7039)ZoZ|%eO%NkUm?? zP+;x((Mn`#R_K3oE$%IdySL6Jn6#Go!E;dec8Q_6MHLgdx`-LjL7Znet>(#tO&VO#koQmsKe7RAKFZEdmv2+L zc;Zyk^lH&P1%YYGaL8UjN&ALm^N_Qo@21;&3OE+9Ne-dE?t1@vgjO-Hp|qE%8#4oX zV<*C+prcUx)50^WhG`XbSLEIhxf1VA*rs<^B%$d=Oq&daTgzzQ1@86U6Ct5PHMA%w zb(!MVnss3PE}f6o;Hgg^zdwGaTm8%pTeTIF0&LUCdMl`MzpGqpdsg+)Y!_HA64ZUH zEZ@S)9NNT8`vJ08y6)xNDt) z9<5tM%$XU_niQ>EF+&_y0%CCm-tUpLZ#4P5jLa$0{+Ls^@s7gSZ!6~qpWCc>=7iDW zf^6lJCEPt9ZWZmEd{a5YWg2EPeMGP}s4VoX=oQoqsbgI{`_Z2}x;r=`0T6JQ=zx7R zr)?P$$BRWtlzxvjozV6fj=4@B79UX4o!|E=UTRq6X_!?T;q%;>kGLT_;fkPkKG*^0hq36Fe}ctfie>Gy!#zV;G=&X+mQ_K7>_l{+2}LRnk$+4o8{TRBkNNEg#%ato;R zTSM3MbLp6*E)6tm24bT#);bC>b=m-3KxTOx6j%(xRLiyB8qoJ6gqsbl)FKt^D)?^# z1#5Tep9AVfhPJ&xhS?OhFs(IE!G0@=OaEbzj7+_k!KByXirxYag~-;vJ1dlt-1J4W zL_ILcx@JIgU!R6gT(FkoVlUnCHw~rrJ(0TCGpMB2x}y}`NwwJaePn@CQJnw|psa%8 zM;y-?8=O^B?G?e(ZKm={VmUoTGX~a+my*++G)p`DR|amo4XSg4V|kIK)f8{#LutR( z9bcP9f&;1g!8)GxIA|ukTalsMp z8j>@;3hnDI2JIF*VSYz;26$<&#HVQX6In8Q*(Az=O_Y#L2pe_D#NrfD0pBFh@@nH? zIhR-qUiwR7s1BeI)u2@eeEoB4jn?4T>p+V#eGJbPjeJk4ROqsG6&^{^Z$^KE-dmaZ zx_9Z>y|3vgWx>eccx`EM@u9$VUo+sWMMIqWJ>R^XYC`$ZJ5w`Hd7@HHnP;XxM^|xX zUn@BoYT39gsI|d!6Fe%`*5*0*ALzIGMm*Ee0zJOCI9DK*{4F&QXs&qhO+sPvaeQdpIt|~;#i$=I0i>0!)ZDS) zY^>J5T9*Kp*SaW$nEqUDRU$l*y95G@JH{nGvJ>uVSq%y7Di>rg0Shh%z@T0w`nmn$ z`hqN1LSOsZe-pp6D8>vkjTNd=9W9sUG)sxL8y(sjN#wDhnx#|&*K ztv>_k%EcGPuzoPd1a^J-b1kb!gY2j8%DqHwj=0ETL&e?bk(XqA$zD3l69tT z;k2$K^wT;`T8PzKtL~KA<0f&~-2}(@+1&PDJqc4z!eb3$<&VxJOvto7R@=iu&GeDq zoc3E&oHq|MfeljZ;M*h0f z!DZ#DT>0}hv{>O|TRUy-ZGjyx{`1GT;!Jb#^h$)xVrHf6tY!209FE5L+y^K+9iLQvt68(4UrO!``14pg_Q zUc)N}%$(<>>BrIYx?k4AZV*!CFP+M9x7OxkqnCch-(yyjA=IJYh*+@T+*oN8;bjmx z+piT~sy%)|pkSJH+s~6Q2{PaI^H`1UF6}X=GpqK~)(6<9m02G~XB?IExU?F;2M%~UMQ#^At>QVfvLpU!-q2=FopUfwdRe3K zOV9K?!nw}2PUHDaZN{J9xzyf4me>&C0d|G4Lh>_5Z>MOqBM?daO-2ldwIzR9fLWZ* z?gTpzOL*IqH-1GzsjBZCW@yTId6-2@JtCG1QPV-Po&D#|Q{IF`^xa({Od7Jh-O@eC z-*=G>hIgM|X1>}g>*Tf^6o({V2>?)q`M0wj0fWl=5|kUsPsYq`|DRntKFbS`yngYy z`KQ*~BZ8;jo-q^aQf<_wM}yHfnaFyNF(QxrF^0Lo%tsOOkurfkStB#T6(08Cpbp&$ zm&tdyD@C*5`SC2zc|FWYwL}@ginBLRP;pIWT8vJLzONwbb;}|!O)-T}KLH|{Q1Ar&0>FCpSf+b+ye`sL5|EmT@y|)2( zrntibNYJbBm&a2LAEf$r-10}Ldf?>h z{Ua8sqzPQ#AZ#;)l41p87aU8qdD>RLM<9Ho1sAuyEKa?r*9n$0GTs89K-E;& z0pIuG7s-?s!lyru7)i!hAk5*fpA?y-r&wdm23=*0k-NEg&)IF|(fDY0b{I-k^o|u3 zU(WYG4iY{FZ&vY|zHhud9E|&|6Mq`}r9F#At$rcs=}}qgCyTOp=3HP5(~F#c>iiZX zgF`D+!8<8}&wvYPDLFdD0D??42Rv;sudwNIFGZm#AFy?k%a89ka1JRnbcB&NnvdpJ zT8so|`_#G$>RGCp1vLmz0B;nK}tcK=SmeCdCeg5B4 zlBa=EbiTXkmv5 zXq`Di1Qsjm@hPQm(xAAsPTNy8A8MTzIzq}Ngf9`*_|XXkHo&amV#Fl$X4$BSvhWOu zLT@Y_=H2P2D&S&du~MO+;Z-$1-yc`nE}VE1Oj9u&Y^~KBhP;Yhi`VTFH90TEWdykysPpmKObxyMdy zw&`kedaLwSCYZh#*?Ke7>4RYdR8AQMq3p_SLCUF1HCLjXWE4-hi{>!x~j8 zZoZ7DZ&-2swP!CdD_cCgk;v^#Xq{mW^+&svmMa&jQg5vCzt16*+cRveAVu57wmH1$ z802vKN}(vutI?~QSRp{$VXo3rg{c4X!R<^%#sLT~0Y3=|2VuilwC9ag-;t4bsYcCz zi;QRT)e3J7FJssWm>aC-3J-CGMelSmpuqsnp91~6oe)1%Ba||&Y%KVVk znA}bJUS-6{nYIE!p2mBkPr{>#mpMlf1?Y+63bb0$LG@t~?#^EIG_%TEk5`7QG!afB{Z2 zjr7#*_uBBK+mR~x=#adV$UTx~ZW*Rvu%<#wo<N3LuKBII2E%MvxBzG!(}*<bCanp91hCM1(FgS zWk8yip6#nH1|5bwVTsS&G&rq^KRx)idVG^ig0Sj6kyV;;p^H@j1RIslz|-aeAv2SQ zLX){hiz6y(6apwF4&TnZbG$$an(A|a%6)?D9O2dEhS7G^9bR{tr9xndFRJK1i(B## z5DeJNWzwH|;@A$IrwDjJ#`9Ly^Qr|{4Ahd#j8B{vbXFYzQHlG7ndbsodpf^$!!~Lrs z%1LUMo80-MX!39^{wr-_z*S$Za^BH}-RelvPY(da5W8Zx8|L;O&lfg5R{zGbw%>(R zIvm9PAF@(_2?zzgilP&2By$G=R`2_RG60GJ!2E!~Yr>_PXL2dSl+?+()d%V_YW?c= zzYc8A8&#lv9Pb1BD~A#c{;M#0*zWp|)|)l?Kf{fxtI$8w{iOp z7NHH+{Vri=`6SIwx3`Dn8Y{D#HamIE+5JnXa=&3KPnSD zO!%;x%qxQN1R9F00Xn1&u>IX5e^7-mQ=^5Zf<2cEvfHeBOU+&+SKUgC7OiwG9V6f8 z^G%Y*+ET0Fz^6m?oH{>3QK56GOgM0v8oeo+bZ-_e5?s{6{<-wFZ$lNGHDXSnY$jOY zEme7zi!Qee@O{$a?Z{M}y3+n}b*DvR#w6rf&B zDU)|c{DPKLfbJCyX^rX4k^A&pHc+}0&&Ba#hV|aJnhAIiC?c`qqQiU?y{w~ijo!-z zjwgN33Z%6l=57b9Ibq46BkY@qL+3{r)-J8!BC+3e03rW^>{gr8Eh$m1*K~+e)$PV8 zj6o#rf2M=L&AM8&ZsqhG25fdd381nc9b0m=nc5#w$$oB{^VvF^-@mv%_g)K3#$oLt zn-SIc*jZcrA{UZlS74?G*RO_ioa3i`BqRHYPVud?507&KdK4YPEyTzgeqRn40_ONw zz!o5mQjR`|n%Sbir;Hpm_1xt7_9=#jjt_AqF3eAsFja=|F#5YRW3JdQDhv7)ABnf% zE{6e%WD8!J^D+9SyU>C~naY8wTQI)|FsW>giRxJmDUiMQO$QvIBr4&8_r6CooF;3$ zv&$8;g#&s=sh`9<%Qz-&{*9TPr$f$KG^DO{jm>8wNQO6CB; z@ce)cgeE~#{2HcMEYxljBg8#=^2^s`yf8;c@!O8T283Vcl2{SZOX9Ww35m7 zYz#AXOj7kPkQ1X9OcV?MX5#xtI!6oaF2ElK)-~CCPJ?11j_z*$EG&Vz=)ljBd!?i) zz1p>fH6XzV{_Q}Y>ldC_#%7b6fh%@0b<`Hnd(){5bZG6Ln8Ra?J=bWUH=zB<`y-+d zk^n9WpKM@!vq*j|tX%4&hQJD2p{O>7I))99>pKacCM{GQ{b~hNoq@Sddt*;j(F{0m zv1h-MVx&tq09T(7r4MgJH)JB^r_N}ShaZ&}*p|oCii*U_!M3?SM%(;cS^=PJ@sE}( z))BnJ)A`MbkCNuirzkhXel2KxHyl~PAk~mG{tvvFD;uQ(6qbApz*aS;(ZZ2a-e`PP zVLKVr&`!{wuZaBd`HSL8)f*fDlYiE6Xc2>(mLeC@x{z=RAk36>r0;F};z`<+9v=?2 zHTER*OnpR#JcMP`7dp#%yf=Pwt$>@>+S4WfN0**`5OmI~qyQ9vN`Js|c8G3#7t?es z?5iFvM5o-~`L=0TFLn5rQEeQ$mxNvXY~oL^bn=-I-RIAbA5o&Dg79J!0REo~C}6mIT`E4-ZJG)QrYQ6AZ*L8q z)GFVOND&Q+vc3g*eZo=vT$o|C{o3=wb+-N^{d%Yw5B~$5eh>o(yB0nbf2Bwwro~YP z%&F%fcIYDu8&Xapp>XN+!mwg{J@;pRuDIx6ndhIJ24IN%G4ACF4DLTbSIo#Hix6(6 zox-20?%Vqp zt(80ZgVuUHt~ZB*fP%QmK)eH&a(2aUaJ&srNa3^{G<_%1!673(@wKuSP*vs!{#g-5 z`De@>F9>G_-zMPnNI$0v|Bm#{23O-~IpJuH+YpBtth5RfUu{&48Wn!Onx3 znr2o9T%3CRR|7oOswylSw)408;e5wiliq_rLRz)Qu7K4@BVn{0+Gf94p#bzh${#wg zv!iS!d7q9FT-McnN%42yEl=$!9W8SDSODhgV>@^y055&A#uDc~pu3t$Za1duSS9BP zv+L^@5!icEsT9b^yrCdnwCgEiQ&6XXzXo#}?t2+>rigg7dw{+?<)M4Y~{_Lh0uBzHF(`lu3N-*!HWtpA57@a(t^;;g~Q}@UA zhYqswucN?7;*pw3PiP)sjI%#*-7A0cHAUiC&CaK-Q>MCe_n!Y^{u^44d1_DPeuiWf zZ|7UcmuV!lFPM}e*u{;za1lbUGwnr&q`e{MSbn&j;&kzOf_qKrIz9Skr|Mo~`9m+` zbUm;RZ*fG;-r-H{EkX$_XIWwp2tAUi?HKF%TpZbz1y>h&YP5ibHqatquz&L&<0knlb3PWAhO_GL4=)WYqwMp$$+f-9A3_ep%UK?2@Ivjg zV#|epU%q5m^mBXWGAom!%7^5_I?vVw$|3@An|tqzfw=n73*2R3P6 z*pQ5#4aog7F)n-}y-WPeb#!Y$w1Jn8&pBDpwd7(tUc@_Yn&7S%f%5K^lDtT;MDSOX z6?Wk0jUm^WJ5g1xD0~v2b8C3YirFo~a?=*VZ@gP-eB&Q(Mx|iG3aZT5G^dyPgyEWU zF#Zjj&t8i2x#h(^&odbgei%IyCJ9)=)-!q%aQT==zr~1@UneeB6C`JDKK%Kv+5VSL zJnrwNuj|^%jAq^E{C5twr>B+&(hyf#&&X$lsi?SWHYbBToI66dNYoDrLV&+N+?<%Y zQYx%It?(eAlFF7k(lj+%JYnfP+j^=O*Oy(`X(l4uSsjMFS7SWNhd)&If<4$ zZeer-;+RlWM@?R0)x3FxeAGGTZbdoBNX)*a$6Yka;x^IEdnwx@NS3GJKvZ7V3n!x! zT}JF@gp5BKk!X^pEuE-)OzoPpl%ho7_r~DOfsbp3% ze!&T)Y0iy*-Fz+T;g6D+411PY<*+S5^GSrURPQ?DXCeA@mf`<0Hcsu}m$atYiRGtKcS{tD`NkprUF3zLY-H^NW)d&pDL8cD;w2_}$F9+mzw zQwvu7@8B>e5~pa?>i;h2O=+UV*3VTCXC~`s>$ieFjUpy$)e_sP_OQeTBDhT7Iw4$r z?K7_58ji2HA%;(9QniAGY_~T*T5KJf-HUyUt6xx5=5k4IF`=JQs8nX`2gsAH3nc%q zlMmOOL+z}La@d!xE9|SFn_08}r3v%W8;<)B25}%qCr*(Bo=riKu;!D?zIZ@-~ z6}gzr7{H2+>09BQst z`ciRZ4dZQ+`>|U=_0?NK;9Ok<2gDQe&Dllo;`K+!=*tiiZl--VWKx|-(S30-J&_XkHwumf_$Ckq7v`jbQ{ff(q5f;y5#(Cxmk6=mMEXb38;I*|799G&XThC6 zwixv;x_)Add~?8^d`H)Im|ZPEgq7U{`7xxNnqA-5H6z2yF?jhPAC=;t0u-Gvl6W%p z0%DP1S+$e$_w{avK#8bzB2`lI?k7;k+cHUO6mB_roO_PA+)pc35~P97*VSRMZm0V1 z#dHDPwPJ)R6Px1tY)_%cq~^?OmLtD7A6^ziG-;T{1ev?^_QQ$lE;}T!MO^go-4`ogqN z92hEF11;m3GSemXV|862#FepH;-^~T%#0Smc#H75I-=X2B|R_yJ}Z3oFlx40ZH0&Z zr=C)pmx6x&1Jhm{*OsnM3s ztla?AFFDS|8{sRx5>Y~M z&cM!2PqDDL=kQue{*cSRET<6_e=MhF#R+O+kkXoj8N|`U1oebya*BQp*rhkE2EUEw zYUnV#a;$Jkb>Q5JI;}{sOeBI_=zQVZH?^}K!NYf-?rOdS7C#Syi{m6)sW@3DAj)uJ zLfPRGYXx{I&B2ysLB%NDh~GulZ~1Z_RFSmz2Vcd~Vc6K<&Tyf}Ejb8pY<+9U8(Up< zVViX@$!ux*Of5@P@nGv=+RakDHO|Tm?AP7{Vc2JN!`(Sy+A>8c+-baQz?%9a3$Ui% z)Sm3vTpNe1BfO}DiAZpua4=)>>8wW4 za`*6$xn6Q_OUk^Nde}hRkQ7{!uFZs^@$%ZZn)FgH0?e_ilc6!2%5z>`gqa zn!XROhq6VNB<{c!uV+TW=!eg!ym`V*k_aEmvj)+a{rkE?3#ib0&Y94-<{K~+J2tn zwHlnL_vVarYV(=ucfF3lRW^T2+-=f27R2%7x^xA0Hlw5%E6JLrIsZ_{HSUY~5y!W; z5pQp$ylY3Cq_4PK-xAG?OO64OI`VTxB?jvw#%lk?`MI14T%c{LgFaSFst_eK>eEq5#I8hLe38LI}TFkbkl0&D;t65 zO+MP{n3;C8Z}uxcHdobdqm#vH3cW7KKcUrjyg2CTCoL&;OnoBtKMWD!hnQ&#&JjoSIw)*S!b<>Qrzoqc4_P2}nKgYI@w{KD!(|h9#M19|sekJ=zt~Ormt<~UBf-1Kf zFJ9PB`2eKD(f-^T=mno@@q*%<7OL#Ct-T4fw3ZI)27s=1lGC0-UUWTIlHmb$qcah_ zoAu*Q9^~nMLrPK)Tv;?ycrQ70RJK9`E{BL|N-bZyPYY|Oll5y5s-JyO` zGRn{nUrNEx90Lh+yP@T(y861V=v3yJ$w;39B{|sSah>NKrlSG}6u6^5Wh3wPrS& z0;MnD>)@%H{a$gt98A7gqV9UKnCI~NQHyzo}i zz5GI+nF$w(PDwdP;V@@%Ff1UZCO8{lOuT7a>}Aq3JG)VAn1M6|OBQzBsQ$^CYgAtR zlh6Iim2nXxyiwJH#v1psjsb#s`$(dJM^u)~-u-QcZD5xYi^vjogyOq21JK?PKQ$KsaXP`v$#9}0-fBv+kBM?*j{};y3)i5l8tw{eLVSEq( z_4 z+5XW$*3N(O5dd*px1@=!yk%JL235_|^T~9-!TaM}Qnd@b1_#X!tbBE%R{h}!G>cFmD)UZrZA53=qxZYjawQy@y04-*{$9xe<)=I$%yn5 z{JBDgMCIDh@Z{f;!{|9M!}OpqyHc@q#N)l#&{g`qL3R?4r&{E5j^J(xma$`}vqL}` zBbqZH&ql~heKo_8!>7Dao}%M&H&}gWN;#@AKTyU9?xq0OrrOw7L>_usx|7>qB};cH zJN_{mG{*x*gL4NU3UT{Ip})_yU%)3D{uYOSY5pb0EB4~zeQ5+r8_I^V0TXW_-w!~B zL)Yw5Fsk6orX{P)v?lhe$iHDS9VTu_P3K0GA}6j63j2q?{->u)nuugh>Yj!Nf>1H+GScj@-ovKnS|zO!@zor-8JUw$agb+&(sI(5 zCuF+c(I=2iO0&iy(C*BH2k!wz>O@#ohYW8nIJ(Vg3sM6Dxe*e>gzf@`-*oYo%%4lRsUXx!$S)RdoGCNvo0@<-|8XVmj*PXOAP-xJdYg^ zwm+e3P9ZK(mt?K^BUYD%bof0YeNSYHuNz&d*TnEBRn=w%I%YVKyKB4+RHk(8HhaKA z#u(w{iS(;AV-$9To3p`5Q!F&LI>yUls@DTt_91oTFPc9522xr{8@@_ag7D4Cgq6A7 zw??ZaaQ8C@^jlBZKOEBxYzWw;7jSf_I^nqFdV%&w{4N|IuL%oc3{}|`W$wUC=Th|zs?G;&vnbFZW<8&H`aSoz?_zlaVwailF1Ys55P*sZ3Sx(YmAWwC&N z`Cw0POIh>p8G3=5LO+v)w``-$81<8tbY6)36>meGsi!+#(SWHLB@M(_X79aYaWWl? zb%GphO_wz54D#+goZ`W_I?6Aw!QvjmSt}Fv6S8iiZBEo3ynL`@3gzzg^pyykmxTV( zZT{KhleG>CMX4=0tW3TwdM%;&k>}S-{dd$w*;s#-){^&cNnGU?fKY=Si$+${(x1NZ8nBC6*{{$|!tfQ9tr(V99w-{c*@~lViiuTlev` z)u2JyMYdjD!{~|xVLzZ$uVVs)GWS!xngbovr|}QK{Q8{$DJ6ABTKZ5-kRC1RsRGWt znTOZigu-UjHr-tS^l$ORQNy2mF9b4Mm~eM#h6_yE|9VH>eU4`hm;m^3Gb()Jd?fhg zo2`Z;?*n3IPk{oVz{YC$`mlK!90a=Qt2tipEm{*^qkX@)ExY14Qj3gDUBx=Bi3!*> z6pZwXvU*?pj1`q0#9IO|z{;Wk*a{|g2yc=mWDd8LEtmSCB!@8gTu4px$MnXz-qYNv zO{p^YKAjHQw^&-{C{lISZnaNG>YcAd5gs$P7lQKp1fN%Rp{%{$w6f( z7RbD>dTHTUP~ts@QSVTo#4ze`4^NN3rue}pbzP2Vbd{}tD2TC@)At9b@yt5_YZG|} z^-RLo>#9|q5e*)8qLGooyq>Q-R(4Mzj1T`TbwGqW5LCIBP4y_0QnNgHpF0^)2ey=v z|JDcNHPuUa239L9@=agF=m#0!&O~+>Yd^EPwLqU#xcRQH!f8$+bpy%&jJ>O&Mgcm! zL(!Rk%XRrJ`9cWmt`BJPRfa(Es3`S>!(oh{+UZpMHI-lO?*6^Peko-JmElA(pW8ut zXI)1R9-ElDm1A_mc61L82zBmQv%Z;mR9JELT7|^|ZHM!AopDt7M?YiNUqK_rgN6R= z4?pjF`xXj03rujKD_v$Vpi@al6e5pqeUp^=_3KklRMWMsj#a&{!crc-e9h!v)@=;j z9Yn$rS_)7FouOy5_^O`-Jit= zH}kyO*6aW@Wn`$e%zp8FrGrB7COq$ho1#@+oQQ61X%dazl7Gra>suP zo?jF3;#QsKmSJ+ani!wucJ8&6acUPKloMrmU=;~?ul?o#?SSq!$9Oqkgav9f;7?2* zZNa|;!wD1V)n;Qqoa+zz>y4;reAED)ooXb9tl~-vQ-7p{)9GlqeC>qP;Xsx)H%XKl zYo-2GMMV@v6MF zIIJ5#UFr%Cf_WOR6-I8Rhh$?!Y(jSKtly^BYI7+Rn6f zkE7D>0I|CuE@?8?gD}h6vY5y}^e-fPcXCh7n5^nsbHKun%ljoWJbjvgM7Inn@bZE# zA5fxRX(Q3D$J9^Asuy?8ME|3f0*sV?lvVUMKzMXZ8FWw5T(Ys|(7!1|YupVU#fxnJ}+=zC4^ zrD<#YxD^G1RoK~c_hnvZE_`h(7Va5eOshfZ;WIkjz%6T!7-+*w(|j}PyNL?woPVPB zaE|eNyfh3NA9y5SbT&HXIb62KT-I1%$ydDm_^#lrNcF3^hts({NtIDt&{%+4qmC}L-N84UNGBZO4XKXRPT47yq5-!RSx7{`! z28&)gr3b$V1s+dJZIoLaBzhu0I_uLqKCeFw3t4iYdq4*=huT47+A&Y@0-zUsxKR*AyVviPa)asGJ>Qt*&k z3cOSIwVuUI=Qx!sYjNNBCJ!tTX3T-$fid{oEeeD(^V$txuca#Gm^o^}8I7)%zH%jC zSZy4ae41t#a=8SoM3o;}W)$Xj>uI=Uiv#f8At?8%cl8dW+pFI$aRkf89x2&O`%zda zJR2AJy`Ac_W!{i)>1glIOO_TEf!_Gu3X^_=Xv#jG9&(~uR7-DKt8JuU^q-FK`0uza zjYePuH}s)Z1JSUXa_!Upt{x02V^1&B1P~}4sNDB>XSuoQ>(b96WsWQ(v&BUKIs3@D zm#AQ@+`9A=YNgUf+p{vyR!g(b&ufPj$|4;fd$X{oh)2d|D}Kj;?*}?f;Cv>dJ3qau zzh5c75tWGazJj3_B~N}o&KWm;NSgY4C0wuW@Cr;zB9JWN;xhF(7LZ%_%Pj&~$Fwq> z1TSchY>dXpw-{{>hxtia99~0IC-$miwn_sQb-#zC9P#D?@p@15!fWpJcP^;FpkV|U z7rok|bUc`m(x$V}6KaV57YAl+6*}yJ{A# z1x7nDs+equ1zeKrG7+MlH&7HLXc52GCrI*INF6 zt(|pT(|h0lZKXs)Q98y@k&==&=om^$Dm8jYm%vd_7#)(M1O(|27|oH895w0gmTr;z zGwbr4%j^8^>-V_#9~-bew(q{*cf4M&CyhuV&5~VcU{aTx$Dp#PvR|E#pv~P~HL@xL z&68&n_QMH*ZN*?RKQwq!*tVytwmvOrCQf^t;?H@V*;;CzGPC)R4-~0YJMW)+(`NGA zhk~4CRuHWU)-CihlaSY@MDf}iHULdP`Y)P9gT?7b?e3;7^`(&Qbzoyxb8s$!cHiuc zjas;vl`A1VG=3YO!T>%QQrg_NCm8>)UNZHl1?rE2@Il$>FuH0>Tc*_~A4RQ{@WdWSPWGhZzl z>Rhs`td-lkpeR~GKV35-l56VzU~#e`2v>I^j(xg(h+T6$^oD%d9LSoT5zPXMmsi1k zy+B6t2<>HOFxZ_g6ItqMOrW?ds8lgxwfiFBXt%$0*cDy%rTEC{^tDL)DE<~u9S^W( zbY$ZquS-0edhAN4g& z@W)*6$)}SzrKh-VF`;tX#2f9XaU0x^Q!QXlwqPICpV4(c!1d0z!JzGL27~@ApY(7c z8{*?Yi~3h}FULr&9myv;_lxT{zKMCs$-hkpGkCwY zav<>T$28D0`&%I1OOSjBTA{3s`(O2Cj5f|Dx@hfIc}Y)|6ls^^JtHq7i(+w4@yc6s zxT`~aqF9(57l-ui1|+=SEQMyF{QG6RazkJ$2%_Lyo=I>rD)KBv4{~OQlNL zYUt>>-b)mLwKk|+>B-{XNPpra3cJ|~BnuLgM#uk>3+^M#^jd2ef-wI`$joA~9gB@9 z9?E{t^e*U&2_ImBl=^N8n%Ykm-81$)CT_K4A^{>yCh4V-bqKwU9ii zTI?l!u)%1w;jek9=Y-PQx|cdwIX=HZpok6@`b|4e_BdRoLo?RSYNfpfgz zJPmtm3u`DdFR$sJe-y^X3N6DylWS1Xi=%c*FZx4G`B-7JwUH}&-laYUTU4HxBBT6X zC(#oNur{O5SDnq~wh-)K$yM)DG_g9wCkk8JIxp{9AK{~(HnETsb>t|_Hwu^95GOG`Rn>@Q@*BWW5IuddAR)Yu<9GsGbuP!08@{=>m75z;H&jZ+0@G$j zW@Q~$PTLNx`>Der4{Ng}NiYCb5i44A`|>ZNokod(?cyt62Q}}ce{;8j_p?~A`FDEnZjL14Ee8Jdo^9Sfn^4gYQ{UdyVj`Sl57wD&x3jE1c{Vyi!6NEDF#F32BWuP z6n5*iSvd4yd6HFrvHRYRLeUvhEBuQe*kb*wzfWTO7Y00PPKgw}P0)rjzMjCQiuWKO zg)%FjIlNRBFw=7O zjno{j62fDPrE3iEXi$gQK97)YoIXzy-j~x~Kg~>&Thr|rwY!A5(gvqvN=3m-4^jEe zX_%}sz`koDk~ehNV44BCS(}OQo#w&uf=}=Fm$&if$6vq?2hkRuKmfyUDV=FH_tw69 z2h-i9%(Av^P+XT!iB%5%NCkbU{S%k?EiC<&HZkk=MDdQrYnOS!q0TFN%ua^cMDZhK zc=rZkF6SIk!HDSoL$5VS_`x3ZS|q8j8-f>llw$WpY()PYLC!f;Zp5F>rqfr?)iZI6 zJpx9r59+`b+Yw;MqBw$z)o#yyX8Gl_oz`+S%YWR zN*=R1M<$P)lOucP$0~ew)0dpITekb|*>E&|X#cwpR3!oUt4FGifsvCux)an;#8W}g#7=cvA~QmVDY39cQ2MjRPEGT1w*$sqM$J#_+y7kB6X2TBst2a6ic&5vYlB zxs4|=jcVkr*MkmeD9xwe6zD&a(XYNRsTv5i5-i(edq6qb4ZTiQCV;U#oprpEn9}X1 zI;HM=Ao>CkH9I?>`g1LG)$Mn(@AmerEnKnN!ypD-83q%^RT&(s@|h^Uyto_X*~-;i zeD{T%TbqOm+j1Az%g36Vc_6!1`%c9cefU+8LM|)g z!aG}v!SH&x+bwJA-8Mh^GSiL>pqlKf%iJ^sHHYFFAZ@>FBi2gL!d&jUYaD}3`eSvm z#`ol+;2Bh9PcH0~ny{(y;qJ25<@MlzCU?7JjkA;okjm4^8bt@Ts^1+p3vN|vRVn2pqk`1aXi5R zmHFVVM0QF8GQk>^6-7!;6P}XJplB|9pNs#dy&B3PT{{>vxGZkYKI%MNuu>>8YbaK5)=`(((a_{p15@EU9iNbl zZc05ts+0CLeCnVJs`8XPlub=mr|9dA{f}&SpxBk2gL4~Qy3yy*tJ8Kl<`{12d^O)W zwcB#A!2!yL_YR`1CDN|T*$ouhUt#VkG2#{l(wOJMvF99!ldMF!P+nf1O3F$6c&Hkd zwdnIu`?Jigx?a8NG3#MQ%FZ&J>d}9`$Nyy)prC8OY_0X`N4q!gE0QiBSs>LDbDOQY zPA%A|*Ln%x;c%~?Lm~H8WSwr+Mj57=owzqeb4HN+T~5T?CxI+8Bk$QOpQb~~fJ>7N zrw{o~g1<`F%%J$dms^t^q`Z*J{BhYODLApr;jm?W+I2YI5=j3Nco+SeaVmIOr;&2h z^93&INH_jnFUumo;xgpxo#;U=)vxVW_^9k1aqPEFZRQ%6DP*G_Y~PdWX7Z~LIXy7% z^qN{2l;MWQ`#MX~h+)qDh*O{mdju%<>yOXa-tcT+F80xvQe+ds0GFG21y{|-xR(k< z)K&+D%ex<&SbUewF=eJy*e$kT@|TXl7XZu6`bqgw%8nS!k7w5)Ab&XWxpi*N-l-n*B2@&4^xy}!dx``TUmb#|zz63%*4cD9x9H-$5#e8W%n$s@i5v86i$ z=U}B|-<2gBwKJyn*tf7#!wXCl+{_5AK!w`XLNv~8D#43+l{Pi}$}c=2`Wp8H+6q+7|51-{jz}qFh^Fn(fvg@Rx0`=E)JR>t(%UXN z0#f{6`h%&FDYNMn3mN);$i;Dd|L5;|ew^CB{t}QQN@u0# zA$>^YCW^~sHkr7BZxu8&H3Xb8lZ*dz>A*UD12ILRKOz=Obn%5_80*vW_gQaj8egLO zVuq+RdZUV@oR*!gbN>rO)Wym63)UUt2PXD@JNso@r58=(Iw2T%eUriNy2uhIg>@Df zx=)bWa;cC{F&Ini^}OFnw125^c7JLM{{W9+kyd-86M}HBYl_^P*@512JzxSIfZ?M! zUy?(Gq+N1YL==IE)^<{Ld%$>6u2yw<@W^1{Tedbk*?W`%Cy6-f&{V8cmKn9jYUv&> zn5hv9Om^I?hu2SeOgxJ(;VBXp;%G>HR7tCz*59nPzBX{FRd>bW33W~d!2wY9XWzKp zZAP(2sJh9Dx8anc*=gF^%s%RpcrJReIfyT|3c+xO4j>_Hn-Tr#-81@=Y;zrF0w8fg z`lBNj(Q~M0sWEEd_Wme;+AGqQcnA1KI4%AOQA|dM4i?@z$8GQ-ys3?M9)sH8zS-(0 z_MJV{<;*@|>+j<;fdL6py+=Z2ggn+-G9k!5LpI736(97=qqAMPJQVkcKXKZp*tDaT zpv*4{VjbMe46`*fAdLjv2<5}_XruM3sEed;WuEjf5Dhl7*XRzkW%XLraLfog?9cI?w;YF|q_4qkipTj&Dnq^R)lQPIq}e-vrJk@e^;< z&?~UJ1hZ#tCP&x0yVgnZN{1MdNC$b#ODa+(RZI5IlOkE~|qiwc9`n1As1*)zLNsrIw41rQ} z$tg7)YN&h7WoLG7d0G!2s+fD3&T*yuWw-Kgc=WY!HvH6P$pQh}Gm5b#vSeh?s7RfY z-#JD1-MF{uJ|Let$+jSU=3+PGGqrln4=4FLQ^GY8ZY>zb3IZNk>_xsodmouo%b3(i zwz}Tj{5v`&>z{-aR%WmdJ*n)d%fC03OA5(Vc9*Z*Kn4sxU zF|8}3&)^A}SV-r?$FUzroqK<%;%{*Kj47@*JMkJjj*)N;$plQ*N zn;n`z%G1_!*zLCN+#057FjobE$}9~0pSuK;W)*hbQ=_5TGBKqV`#ThtrE+PCWC=&z zP{zEYJPk*)Wy3#0PPV#WQpb`nfa2afV0*&gFV4}fxh#AKJlMTLlKIr^79B6_`1P-v zc2g&cSc3^}agt4;e_yLK9TcqP#liv82vNCv{x#pQ+=LkE^*gA|)*brnb?%?@>eI ztg|MLs-(lQ!oT5*kBdC5hgIkQge3hNVEq17=J_JCcrB5BP{b$;^VJl--lzrBG#o}8 z8T$<*-iGMr>RT#uw`Y7;wM46y3*$Ym?auHi-bn7VfA#q$*o`8+$S~q3&8A1#KMHUF zOB;4Wp-B9*MQaHfY;)q~l(TGC<_)QFs&R1LctvdcVKUzK$7ZJFc)n=Z^p@JvghQjL zE33bq2`3KS0*)IkIyQ4BAvp9)-$v1ukdC*}rPs@Pu9RN0b4q`L!lumhbl(vyEcH~C z^L>&^4x*qf?MXIWv3HW|)8q}en_c1epK}aTev~k981LBW?wwIQIB-oVNOjg6p}_vZvFbx%r_bY_dP3-GyfqbDRa>niudsuFF}R z)^MO{$a&nGkZ{1!*qG%b`n2t))=6f%r*xVab2kodDs`k!c)x>_P-lQKa*&0Q0J z2(s_HNc%PQI{BMh$4C9q*XO&! z>kYE5r7u#m5&Cm(Guvvad=+53I1SL6orPu08D>Rg&a(29O;2&b9-uSH%0*=sVf8XP zqT?sEOVhJBKGKZ_aUwQ~KA$E-%RF?bHPj+)1nMAgQfc(O(wa{wiXLS2r4cFG<#vZ@7$^sOW9+efsf$|l*9ccGZMDSdYTWBwz8c?DFVB{u$%Zx% z(J5f0e9ZJq&1_>Pqp8RZzN9g4*`tar2l@Cq2P<=5>$(Z;Cf@Ot@e_H3qP3c>0vW%_>@iQutN*}l2t?mFWt_Fe|&nI8>Y58qn;p@Hl>$e z$9AI~CVYRHf;-Kq5-l5R z$m(KQy(#otbcGLkFKe@GeN7o`AXf7ML{C3XtB8vvU%kIYaiEhp;e8F_|C8#iGUz;m zz{i#ADi?FVAw83h>4IZh@02bl%_bAI(1jF5ty~h5p_`k9^f`Maj#tax2=LcUah`s! zhtEZw8jRb(gw~RSY8si1;FVkP>7J(KPWc#VSgvc%cRG$gg%LUUAqmWV*2!9$(E135 zoL<+5-6`Lxo{)3lQl+kW5+t~mCqpHr5qHhNA$mAu=G4%l=p+UHSkV`6jtu0?;;k}K zZG?=^+m0nYhD!)uZd0A(#;xfV++ok8gM0}8v_g)ho zN@TY14V$C+YU5I}Sd0S5`N(0cglP_!u)$pTq--q9&!YmNTggHjs_NVak33Z%j^4J_ z!{Td#Jx$+_4li204BL8|;aS58gY~NwTdY&9T*~j83Rc=5u6qqnHB>frH;?v*-o{bA zGlK%v`$^aHsH3P>zC%HsqPUHpz}n)#%+GauNn9h4_HgadB5qUu*RS1vjn~eoelj{;4xF+ZwF#g&L2>ho|uW7qk0XZ*+U3v;w>NpuBW()b zX98T**Uj~vQIge}=I8cO{~Frwu#){8+K204BiIgf|K)mZjp{TWC>$ZJoSu#3v81f< z)RPx%mv|ZoG?x|5S>4O~9#WCdpa|A$H%U-g5}vQ{*LqfuZtsWB=+C{UNexu_!_*YG*p%G)pyfqu+-%<`*>OhKhmp6=QTzBWdy& zt=f>Mw-QKMqyl7s#&Gv4L!^Ko#Ko5HgJ1k(mjZABPjgD|UM>&osM&iqwCnh^sIWr( zF1w@8+d2mfJ3Gg`)5V;s+B##awkLcCm$`;{T9!xsRUZtAxsN7bcsqDePd1oR$xz}p zjCCUOwlh(GB3g7e6ZGZ2mhCm=MHQvQZfWi_m$t0L;BwS|Vb#RecHGZO5~zaOijo2{Kim3d$;akJaMWlhz`u-SVhSA7{$b!KjC4BXTY@Fl|0i8mGv_ zFc|50y2idQ`Q)C#Tf?(?S!r0)m%Cc3?QEYA$#9P2$VTGUy`=?S!t9_85Z>6o+kEM? z@~~vVcPr|O8d{>n10w&n>K8(qT^ks-WiJ+eu|}D6HD@VO+uwxIAP2?U@KMWxb&%)V zaF8j{Kr9d~edrvmAy*f1n599HP-8Wk0WhO$Da)JN1EX;j#NaP(S)(5Aq-yY+%o#Ql z-DUy2Vgtof)>`z)FbE}qf7rgz%D&V=GgW0F?Ch*WouX00q-JpgZK&%VKKGu*Ulp^qLj+S8sxMSW znU|NG*4*H65v+a!&>UOXhp4}R+j#^ttBUX*{Un(-3pO`A=$N!-BU*WGEC2N6+;ex9 ze-}pSE2nOL3`CqfTV?4t!9+#eVj2;|h%2JMu7Z!pg9(mg0h6fMaNOAeFR(_43uSyq z-R~Kf5UqFinKeq<(z0hjm7P*!Cn`~4xtX`J|3pA_n>I^jVK#CZg2=p4>^C4@AxNlb zJfS1AbH|me-|lAMpQ%Mz z=B=8|-qESCwz>bB+i!D|?|+YSRP!)-@;B4x>kqhz?mD#HpR;nSv*0D#06q}}3NI48 zfSBmaBy$SE@aC71_-FwIGlULJ$~~0O!=jXP#=Qj55g*tF^yoOeylAH zwKEyC0qmQT6+i%j#BgUL21Sdx^JSu##|IXix1XoOY*Ix(XX6ky5dAO-vrALs;(4wY z+%}N?5D4|F7~t0FBNs)s+i|A59=F?O#1=xQSz1!pGj1TT+X7<$d1C)Nf!6yRF|mJe zfz}NHM`t8QxVSnHr@iR7EJK<%vQhq&4dl0L!h{PZVY;L%(xrE4;yykr>X|aPt*rUyfYa#cbXb z43u;y14vRo@mQFRISr;+Hl)EsA6Pif*qID`05B`ai}B$k_fjmY`OoYgmCR{}tTZ__ z@sk$c43OeecA;UiFgBUR@BdB>-C|Woqo_ZX+q!-zUsygw{%LPuNZ@+N(>4ABUrk+o zg#EN!0fi9SArv1KAtVuAM!>=G=fG3)H;l||Nlnm3^R9)2G`X-1CS>I=PjQ|2H11Rk z2ia+jauuDu%ibKQ_op&a8s!NJgoN%)@BuSIX74#_F%zw^r!uAIHsBg0dXGT)mNdZr zO+}So3a7j!&!7kLe`e3)Aeu=7ZB#&I25wggb!ol{oQ_ur=4#cPt9UGkllag}Clu>4 zb(9#*ncmUfuwJ=uhvmW_SFHNlq+s((XJ!)OoDv5(;II}KG9}ihkxVE6cC`hTM*w!! z1MS2}ofUkTLQb?VpL8syb-yU*$N{b79p?6Uv%S=gkUPA}J zO`O!LIeAE=FUhBIK7}cA8tjEzfomZo5&|-D6SO*0sbC2;T}S!MyzS`j?A~)io;q#K z^w|i?Zd|nA)GyI~<4CE@LEp|s6JI`$ynfp^;9%kI%w=Pz_8tq%J2g^UcyrQv{=T-h zFE>H{;Ysnn6|ASD^23+c?sY2El&Cr3()U7)!Ly?3ECXU*PkCYDZ3ns{%6Xj(w>#-D zP?A2VdWbGdHe%=!iwG*YXIPz^Mqxq9aV9fI+S2Pxy7Z^>v+m`{3Hz+DqIfuvB=O>j z)Tqq*3YE1t)ir<<&Z2r_v}Y{==D+C#R@>qx+v4Niwsa+OPc+i9(9!X4)d!E5^nZkhQ6+ltXE}Aj-TrqI`zPR3Q*qCmU}N3a@EW^l zTucm)jp6=6ck=(Yg6EvZ&e(b&)Ov#nR@KU1E#=NI^5t9*hQD7uEoO^Fi_?|l!y|7N zcf*|5$p4}r_$On;I%%&E6}30(O3fGGi(ngdhg=lZ$f#9(sH$Y-k+t@Z;vg| zaxnX@;d!>lv+-bQ5XA;k+V5Y=61u*4ng8#O2vt=Fg_dT@JbUx^ejI{al@%8S9N~sh z=&_28853kelwG{vE;VqzIBh)49NanzWIw4eq^4xZ$fx0V=Gw)H?D3;#o2;1n4o@L@ zn)IO!Xt|8c>l1W{Tj8TqeLJ;Hc4HQ{9$;YNy`U%JO>r<|%9# gurmvv+C4h1rLWj<`*hc}W8fwu0Ta);`}q0)0D%SiV*mgE From 59d486540bc21b4efaf6d5e5e069a45e77f06fdc Mon Sep 17 00:00:00 2001 From: simonzack Date: Thu, 9 Oct 2014 23:43:28 +1100 Subject: [PATCH 099/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] "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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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/199] 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