From 230e95c893d022a7bd5e5b342ac7104adc906f66 Mon Sep 17 00:00:00 2001 From: simonzack Date: Sun, 29 Dec 2013 00:41:01 +1100 Subject: [PATCH 01/79] 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 02/79] 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 03/79] 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 04/79] 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 05/79] 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 06/79] 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 07/79] 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 08/79] 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 09/79] 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 10/79] 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 11/79] 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 12/79] 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 13/79] 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 14/79] 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 15/79] 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 16/79] 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 17/79] 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 18/79] 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 19/79] 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 20/79] 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 21/79] 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 22/79] 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 23/79] 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 24/79] 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 25/79] 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 26/79] 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 27/79] 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 28/79] 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 29/79] 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 30/79] 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 31/79] 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 32/79] 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 33/79] 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 34/79] 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 35/79] 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 36/79] 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 37/79] 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 38/79] 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 39/79] 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 40/79] 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 41/79] 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 42/79] 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 43/79] 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 44/79] 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 45/79] 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 46/79] 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 47/79] 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 48/79] 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 49/79] 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 50/79] 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 51/79] 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 52/79] 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 53/79] 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 54/79] 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 55/79] 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 56/79] 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 57/79] 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 58/79] 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 59/79] 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 60/79] 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 61/79] 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 62/79] 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 63/79] 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 64/79] 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 65/79] 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 66/79] 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 67/79] 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 68/79] 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 69/79] 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 70/79] 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 71/79] 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 72/79] 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 73/79] 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 a4d7a4640d54ef1ccdcb81a87442eb98b83622f1 Mon Sep 17 00:00:00 2001 From: Esco Obong Date: Sat, 26 Apr 2014 21:05:10 -0400 Subject: [PATCH 74/79] 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 75/79] 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 76/79] 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 77/79] 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 78/79] 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 79/79] 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__