From 5484c411a41cbad4980a9154859f8b0de0fed96d Mon Sep 17 00:00:00 2001 From: Sam J Date: Thu, 31 Dec 2015 14:40:21 +1000 Subject: [PATCH 01/28] Fix function/method calls being superseded --- grammars/javascript.cson | 43 +++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index c972f29f..31bf3888 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -782,22 +782,6 @@ 'match': '(? Date: Thu, 31 Dec 2015 14:48:03 +1000 Subject: [PATCH 02/28] Tidy whitespace/newlines --- grammars/javascript.cson | 2 -- 1 file changed, 2 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 31bf3888..3e3bcf3b 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -844,7 +844,6 @@ { 'include': '#method_call' } - { 'include': '#function_call' } @@ -1030,7 +1029,6 @@ ] } ] - 'function-params': 'patterns': [ { From 84c59378bc63c01374c596f10542633864fda530 Mon Sep 17 00:00:00 2001 From: Sam J Date: Thu, 31 Dec 2015 14:57:19 +1000 Subject: [PATCH 03/28] Replace instead of nest function scopes --- grammars/javascript.cson | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 3e3bcf3b..3b01c091 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1080,7 +1080,6 @@ '1': 'name': 'meta.delimiter.method.period.js' '2': - 'name': 'entity.name.function.js' 'patterns': [ { 'include': '#functions' @@ -1109,7 +1108,6 @@ '1': 'name': 'invalid.illegal.js' '2': - 'name': 'entity.name.function.js' 'patterns': [ { 'include': '#functions' @@ -1143,7 +1141,12 @@ '1': 'name': 'support.function.dom.js' } + { + 'match': ".*" + 'name': 'entity.name.function.js' + } ] + 'object_variable': 'patterns': [ { From 44c2c0762103ee07b0a781ca7bd721fab645637b Mon Sep 17 00:00:00 2001 From: Sam J Date: Fri, 1 Jan 2016 13:42:16 +1000 Subject: [PATCH 04/28] Added function builtins Builtins tests added for function calls to builtin methods of `support.function.js` and `support.function.dom.js`. --- spec/javascript-spec.coffee | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index bb65cf40..8ef25d91 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1103,6 +1103,26 @@ describe "Javascript grammar", -> expect(tokens[9]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] expect(tokens[11]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + + describe "built-in methods", -> + methods = [ "require", "paddings", "parse", "parseInt", "parseFloat", "print", "prompt", "preference", "escape", "enableExternalCapture", "eval", "elementFromPoint", "exp", "exec", "execScript", "execCommand", "valueOf", "UTC", "queryCommandState", "queryCommandIndeterm", "queryCommandEnabled", "queryCommandValue", "find", "file", "fileModifiedDate", "fileSize", "fileCreatedDate", "fileUpdatedDate", "fixed", "fontsize", "fontcolor", "forward", "floor", "fromCharCode", "watch", "link", "load", "log", "lastIndexOf", "asin", "anchor", "acos", "attachEvent", "atob", "atan", "atan2", "apply", "alert", "abs", "abort", "round", "routeEvents", "resize", "resizeBy", "resizeTo", "recalc", "returnValue", "replace", "reverse", "reload", "releaseCapture", "releaseEvents", "random", "go", "get", "getMilliseconds", "getSeconds", "getMinutes", "getHours", "getMonth", "getDay", "getYear", "getFullYear", "getTime", "getDate", "getTimezoneOffset", "getUTC", "getUTCMilliseconds", "getUTCSeconds", "getUTCMinutes", "getUTCHours", "getUTCDay", "getUTCMonth", "getUTCFullYear", "getUTCDate", "getAttention", "getSelection", "getResponseHeader", "getAllResponseHeaders", "min", "moveBy", "moveBelow", "moveTo", "moveToAbsolute", "moveAbove", "mergeAttributes", "match", "margins", "max", "btoa", "big", "bold", "borderWidths", "blink", "back" ] + domMethods = [ "substringData", "submit", "splitText", "setNamedItem", "setAttribute", "setAttributeNode", "select", "hasChildNodes", "hasFeature", "namedItem", "click", "close", "cloneNode", "createComment", "createCDATASection", "createCaption", "createTHead", "createTextNode", "createTFoot", "createDocumentFragment", "createProcessingInstruction", "createEntityReference", "createElement", "createAttribute", "tabIndex", "insertRow", "insertBefore", "insertCell", "insertData", "item", "open", "deleteRow", "deleteCell", "deleteCaption", "deleteTHead", "deleteTFoot", "deleteData", "focus", "write", "writeln", "add", "appendChild", "appendData", "reset", "replaceChild", "replaceData", "move", "moveNamedItem", "moveChild", "moveAttribute", "moveAttributeNode", "getNamedItem", "getElementsByName", "getElementsByTagName", "getElementById", "getAttribute", "getAttributeNode", "blur" ] + + for method in methods + it "tokenizes '#{method}'", -> + {tokens} = grammar.tokenizeLine('.' + method + '()') + expect(tokens[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(tokens[1]).toEqual value: method, scopes: ['source.js', 'meta.method-call.js', 'support.function.js'] + expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + + for domMethod in domMethods + it "tokenizes '#{domMethod}'", -> + {tokens} = grammar.tokenizeLine('.' + domMethod + '()') + expect(tokens[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(tokens[1]).toEqual value: domMethod, scopes: ['source.js', 'meta.method-call.js', 'support.function.dom.js'] + expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] describe "properties", -> it "tokenizes properties", -> From 745ad609f2f752253a9098327651fcb50b2db18c Mon Sep 17 00:00:00 2001 From: Sam J Date: Fri, 1 Jan 2016 14:07:38 +1000 Subject: [PATCH 05/28] remove whitelist --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index a6b772f1..e845fbb1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,3 @@ notifications: script: 'curl -s https://raw.githubusercontent.com/atom/ci/master/build-package.sh | sh' -branches: - only: - - master From e025d871838dfa82d7a839faa7a9360717da3cca Mon Sep 17 00:00:00 2001 From: Sam J Date: Fri, 1 Jan 2016 14:12:35 +1000 Subject: [PATCH 06/28] Make old function tests pass --- spec/javascript-spec.coffee | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 8ef25d91..2695104b 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1194,18 +1194,18 @@ describe "Javascript grammar", -> for scope, delim of delimsByScope {tokens} = grammar.tokenizeLine('a.push(' + delim + 'x' + delim + ' + y + ' + delim + ':function()' + delim + ');') - expect(tokens[2]).toEqual value: 'push', scopes: ['source.js', 'support.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.brace.round.js'] - expect(tokens[4]).toEqual value: delim, scopes: ['source.js', scope, 'punctuation.definition.string.begin.js'] - expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', scope] - expect(tokens[6]).toEqual value: delim, scopes: ['source.js', scope, 'punctuation.definition.string.end.js'] - expect(tokens[8]).toEqual value: '+', scopes: ['source.js', 'keyword.operator.js'] - expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js'] - expect(tokens[10]).toEqual value: '+', scopes: ['source.js', 'keyword.operator.js'] - expect(tokens[12]).toEqual value: delim, scopes: ['source.js', scope, 'punctuation.definition.string.begin.js'] - expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', scope] - expect(tokens[14]).toEqual value: delim, scopes: ['source.js', scope, 'punctuation.definition.string.end.js'] - expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.brace.round.js'] + expect(tokens[2]).toEqual value: 'push', scopes: ['source.js', 'meta.method-call.js', 'support.function.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.brace.round.js'] + expect(tokens[4]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.begin.js'] + expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', 'meta.method-call.js', scope] + expect(tokens[6]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.end.js'] + expect(tokens[8]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'keyword.operator.js'] + expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js''meta.method-call.js', ] + expect(tokens[10]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'keyword.operator.js'] + expect(tokens[12]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.begin.js'] + expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', 'meta.method-call.js', scope] + expect(tokens[14]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.end.js'] + expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.brace.round.js'] describe "comments", -> it "tokenizes /* */ comments", -> From 53320891bd1f0a91b5ce826a3b893e4e6e82a7ae Mon Sep 17 00:00:00 2001 From: Sam J Date: Fri, 1 Jan 2016 14:17:56 +1000 Subject: [PATCH 07/28] Syntax fix --- spec/javascript-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 2695104b..56569528 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1200,7 +1200,7 @@ describe "Javascript grammar", -> expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', 'meta.method-call.js', scope] expect(tokens[6]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.end.js'] expect(tokens[8]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'keyword.operator.js'] - expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js''meta.method-call.js', ] + expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js', 'meta.method-call.js' ] expect(tokens[10]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'keyword.operator.js'] expect(tokens[12]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.begin.js'] expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', 'meta.method-call.js', scope] From 374478f046661bf330e761df781fcf8bad3a99bb Mon Sep 17 00:00:00 2001 From: Sam J Date: Fri, 1 Jan 2016 15:17:01 +1000 Subject: [PATCH 08/28] Syntax refix --- spec/javascript-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 56569528..020048d7 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1166,7 +1166,7 @@ describe "Javascript grammar", -> expect(tokens[2]).toEqual value: 'C', scopes: ['source.js', 'constant.other.property.js'] describe "strings and functions", -> - it "doesn't confuse them", -> + it "doesn't confuse them", -> {tokens} = grammar.tokenizeLine("'a'.b(':c(d)')") expect(tokens[0]).toEqual value: "'", scopes: ['source.js', 'string.quoted.single.js', 'punctuation.definition.string.begin.js'] expect(tokens[1]).toEqual value: "a", scopes: ['source.js', 'string.quoted.single.js'] From 27753337dcc92dacaa0a91a79bf063174746812c Mon Sep 17 00:00:00 2001 From: Sam J Date: Fri, 1 Jan 2016 16:15:42 +1000 Subject: [PATCH 09/28] Trailing whitespace --- spec/javascript-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 020048d7..56569528 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1166,7 +1166,7 @@ describe "Javascript grammar", -> expect(tokens[2]).toEqual value: 'C', scopes: ['source.js', 'constant.other.property.js'] describe "strings and functions", -> - it "doesn't confuse them", -> + it "doesn't confuse them", -> {tokens} = grammar.tokenizeLine("'a'.b(':c(d)')") expect(tokens[0]).toEqual value: "'", scopes: ['source.js', 'string.quoted.single.js', 'punctuation.definition.string.begin.js'] expect(tokens[1]).toEqual value: "a", scopes: ['source.js', 'string.quoted.single.js'] From 158f561915abc20f32ef0e9188b0ceaad94d83fa Mon Sep 17 00:00:00 2001 From: Sam J Date: Fri, 1 Jan 2016 17:09:49 +1000 Subject: [PATCH 10/28] Fix for new brace/punctuation scopes. --- spec/javascript-spec.coffee | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 56569528..4372d5f7 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1103,11 +1103,11 @@ describe "Javascript grammar", -> expect(tokens[9]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] expect(tokens[11]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] - + describe "built-in methods", -> methods = [ "require", "paddings", "parse", "parseInt", "parseFloat", "print", "prompt", "preference", "escape", "enableExternalCapture", "eval", "elementFromPoint", "exp", "exec", "execScript", "execCommand", "valueOf", "UTC", "queryCommandState", "queryCommandIndeterm", "queryCommandEnabled", "queryCommandValue", "find", "file", "fileModifiedDate", "fileSize", "fileCreatedDate", "fileUpdatedDate", "fixed", "fontsize", "fontcolor", "forward", "floor", "fromCharCode", "watch", "link", "load", "log", "lastIndexOf", "asin", "anchor", "acos", "attachEvent", "atob", "atan", "atan2", "apply", "alert", "abs", "abort", "round", "routeEvents", "resize", "resizeBy", "resizeTo", "recalc", "returnValue", "replace", "reverse", "reload", "releaseCapture", "releaseEvents", "random", "go", "get", "getMilliseconds", "getSeconds", "getMinutes", "getHours", "getMonth", "getDay", "getYear", "getFullYear", "getTime", "getDate", "getTimezoneOffset", "getUTC", "getUTCMilliseconds", "getUTCSeconds", "getUTCMinutes", "getUTCHours", "getUTCDay", "getUTCMonth", "getUTCFullYear", "getUTCDate", "getAttention", "getSelection", "getResponseHeader", "getAllResponseHeaders", "min", "moveBy", "moveBelow", "moveTo", "moveToAbsolute", "moveAbove", "mergeAttributes", "match", "margins", "max", "btoa", "big", "bold", "borderWidths", "blink", "back" ] domMethods = [ "substringData", "submit", "splitText", "setNamedItem", "setAttribute", "setAttributeNode", "select", "hasChildNodes", "hasFeature", "namedItem", "click", "close", "cloneNode", "createComment", "createCDATASection", "createCaption", "createTHead", "createTextNode", "createTFoot", "createDocumentFragment", "createProcessingInstruction", "createEntityReference", "createElement", "createAttribute", "tabIndex", "insertRow", "insertBefore", "insertCell", "insertData", "item", "open", "deleteRow", "deleteCell", "deleteCaption", "deleteTHead", "deleteTFoot", "deleteData", "focus", "write", "writeln", "add", "appendChild", "appendData", "reset", "replaceChild", "replaceData", "move", "moveNamedItem", "moveChild", "moveAttribute", "moveAttributeNode", "getNamedItem", "getElementsByName", "getElementsByTagName", "getElementById", "getAttribute", "getAttributeNode", "blur" ] - + for method in methods it "tokenizes '#{method}'", -> {tokens} = grammar.tokenizeLine('.' + method + '()') @@ -1115,7 +1115,7 @@ describe "Javascript grammar", -> expect(tokens[1]).toEqual value: method, scopes: ['source.js', 'meta.method-call.js', 'support.function.js'] expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] - + for domMethod in domMethods it "tokenizes '#{domMethod}'", -> {tokens} = grammar.tokenizeLine('.' + domMethod + '()') @@ -1195,7 +1195,7 @@ describe "Javascript grammar", -> for scope, delim of delimsByScope {tokens} = grammar.tokenizeLine('a.push(' + delim + 'x' + delim + ' + y + ' + delim + ':function()' + delim + ');') expect(tokens[2]).toEqual value: 'push', scopes: ['source.js', 'meta.method-call.js', 'support.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.brace.round.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] expect(tokens[4]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.begin.js'] expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', 'meta.method-call.js', scope] expect(tokens[6]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.end.js'] @@ -1205,7 +1205,7 @@ describe "Javascript grammar", -> expect(tokens[12]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.begin.js'] expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', 'meta.method-call.js', scope] expect(tokens[14]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.end.js'] - expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.brace.round.js'] + expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] describe "comments", -> it "tokenizes /* */ comments", -> From 007a8a2f73b085bb61d608f1e635a8697bfcc208 Mon Sep 17 00:00:00 2001 From: Sam J Date: Sat, 2 Jan 2016 09:11:44 +1000 Subject: [PATCH 11/28] Refactored lists and minor regex --- grammars/javascript.cson | 2 +- spec/javascript-spec.coffee | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 3b01c091..3c10f5f1 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1142,7 +1142,7 @@ 'name': 'support.function.dom.js' } { - 'match': ".*" + 'match': ".+" 'name': 'entity.name.function.js' } ] diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 4372d5f7..5c5ebbfd 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1105,8 +1105,8 @@ describe "Javascript grammar", -> expect(tokens[11]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] describe "built-in methods", -> - methods = [ "require", "paddings", "parse", "parseInt", "parseFloat", "print", "prompt", "preference", "escape", "enableExternalCapture", "eval", "elementFromPoint", "exp", "exec", "execScript", "execCommand", "valueOf", "UTC", "queryCommandState", "queryCommandIndeterm", "queryCommandEnabled", "queryCommandValue", "find", "file", "fileModifiedDate", "fileSize", "fileCreatedDate", "fileUpdatedDate", "fixed", "fontsize", "fontcolor", "forward", "floor", "fromCharCode", "watch", "link", "load", "log", "lastIndexOf", "asin", "anchor", "acos", "attachEvent", "atob", "atan", "atan2", "apply", "alert", "abs", "abort", "round", "routeEvents", "resize", "resizeBy", "resizeTo", "recalc", "returnValue", "replace", "reverse", "reload", "releaseCapture", "releaseEvents", "random", "go", "get", "getMilliseconds", "getSeconds", "getMinutes", "getHours", "getMonth", "getDay", "getYear", "getFullYear", "getTime", "getDate", "getTimezoneOffset", "getUTC", "getUTCMilliseconds", "getUTCSeconds", "getUTCMinutes", "getUTCHours", "getUTCDay", "getUTCMonth", "getUTCFullYear", "getUTCDate", "getAttention", "getSelection", "getResponseHeader", "getAllResponseHeaders", "min", "moveBy", "moveBelow", "moveTo", "moveToAbsolute", "moveAbove", "mergeAttributes", "match", "margins", "max", "btoa", "big", "bold", "borderWidths", "blink", "back" ] - domMethods = [ "substringData", "submit", "splitText", "setNamedItem", "setAttribute", "setAttributeNode", "select", "hasChildNodes", "hasFeature", "namedItem", "click", "close", "cloneNode", "createComment", "createCDATASection", "createCaption", "createTHead", "createTextNode", "createTFoot", "createDocumentFragment", "createProcessingInstruction", "createEntityReference", "createElement", "createAttribute", "tabIndex", "insertRow", "insertBefore", "insertCell", "insertData", "item", "open", "deleteRow", "deleteCell", "deleteCaption", "deleteTHead", "deleteTFoot", "deleteData", "focus", "write", "writeln", "add", "appendChild", "appendData", "reset", "replaceChild", "replaceData", "move", "moveNamedItem", "moveChild", "moveAttribute", "moveAttributeNode", "getNamedItem", "getElementsByName", "getElementsByTagName", "getElementById", "getAttribute", "getAttributeNode", "blur" ] + methods = ["require", "parseInt", "parseFloat", "print"] + domMethods = ["substringData", "submit", "splitText", "setNamedItem", "setAttribute"] for method in methods it "tokenizes '#{method}'", -> From 0958c88e3954d65e70944a42ed68c99acebd1804 Mon Sep 17 00:00:00 2001 From: Sam J Date: Sat, 2 Jan 2016 09:17:57 +1000 Subject: [PATCH 12/28] Refactor @functions patterns --- grammars/javascript.cson | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 3c10f5f1..133c86f0 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1131,22 +1131,17 @@ 'patterns': [ { 'match': '\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort|sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|Time|Hotkeys|Cursor|Timeout|Interval|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice|savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat|contextual|confirm|compile|ceil|clear|clearTimeout|clearInterval|captureEvents|call|createStyleSheet|createPopup|createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|test|tan|taint|taintEnabled|isNaN|isFinite|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|untaint|unescape|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse|parseInt|parseFloat|print|prompt|preference|escape|enableExternalCapture|eval|elementFromPoint|exp|exec|execScript|execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf|asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|Time|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo|moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back)\\b' - 'captures': - '1': - 'name': 'support.function.js' + 'name': 'support.function.js' } { 'match': '\\b(substringData|submit|splitText|setNamedItem|setAttribute|setAttributeNode|select|hasChildNodes|hasFeature|namedItem|click|close|cloneNode|createComment|createCDATASection|createCaption|createTHead|createTextNode|createTFoot|createDocumentFragment|createProcessingInstruction|createEntityReference|createElement|createAttribute|tabIndex|insertRow|insertBefore|insertCell|insertData|item|open|deleteRow|deleteCell|deleteCaption|deleteTHead|deleteTFoot|deleteData|focus|write|writeln|add|appendChild|appendData|reset|replaceChild|replaceData|move|moveNamedItem|moveChild|moveAttribute|moveAttributeNode|getNamedItem|getElementsByName|getElementsByTagName|getElementById|getAttribute|getAttributeNode|blur)\\b' - 'captures': - '1': - 'name': 'support.function.dom.js' + 'name': 'support.function.dom.js' } { - 'match': ".+" + 'match': ".*" 'name': 'entity.name.function.js' } ] - 'object_variable': 'patterns': [ { From b3a339965d650c2bdefc9eceb18b2b73be0a9566 Mon Sep 17 00:00:00 2001 From: Sam J Date: Sat, 2 Jan 2016 11:12:36 +1000 Subject: [PATCH 13/28] Refactor require, events, console functions --- grammars/javascript.cson | 64 +++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 133c86f0..d7ff196c 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -616,16 +616,31 @@ 'name': 'meta.class.instance.constructor' } { - 'match': '\\b(console)\\b' - 'name': 'entity.name.type.object.js.console' - } - { - 'match': '\\b(\\.)(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)(?=\\()' - 'captures': + 'comment': 'console.log(arg1, "arg2", [...])' + 'begin': '\\b(console)(\\.)(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)\\s*(\\()' + 'beginCaptures': '1': - 'name': 'meta.delimiter.method.period.js' + 'name': 'entity.name.type.object.js.console' '2': + 'name': 'meta.delimiter.method.period.js' + '3': 'name': 'support.function.js.console' + '4': + 'name': 'punctuation.definition.arguments.begin.js' + 'end': '\\)' + 'endCaptures': + '0': + 'name': 'punctuation.definition.arguments.end.js' + 'name': 'meta.method-call.js' + 'patterns': [ + { + 'include': '#arguments' + } + ] + } + { + 'match': '\\b(console)\\b' + 'name': 'entity.name.type.object.js.console' } { 'include': '#object_variable' @@ -802,14 +817,6 @@ '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': '\\bon(Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|Before(cut|deactivate|unload|update|paste|print|editfocus|activate)|Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)\\b' - 'name': 'support.function.event-handler.js' - } - { - 'match': '(? Date: Sat, 2 Jan 2016 11:22:18 +1000 Subject: [PATCH 14/28] Fix specs for console support functions --- spec/javascript-spec.coffee | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 5c5ebbfd..afa3c851 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1286,11 +1286,11 @@ describe "Javascript grammar", -> it "tokenizes console support functions", -> {tokens} = grammar.tokenizeLine('console.log()') - expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.js.console'] - expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.js'] - expect(tokens[2]).toEqual value: 'log', scopes: ['source.js', 'support.function.js.console'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.brace.round.js'] - expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.brace.round.js'] + expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'meta.method-call.js', 'entity.name.type.object.js.console'] + expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(tokens[2]).toEqual value: 'log', scopes: ['source.js', 'meta.method-call.js', 'support.function.js.console'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] describe "indentation", -> editor = null From 6a77036ee06695e7f8742efebff0c507659ffe2a Mon Sep 17 00:00:00 2001 From: Sam J Date: Sun, 3 Jan 2016 09:23:04 +1000 Subject: [PATCH 15/28] Reapply word boundaries to support functions --- grammars/javascript.cson | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index d7ff196c..3f07c9c3 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1137,15 +1137,15 @@ 'function_methods': 'patterns': [ { - 'match': 'on(Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|Before(cut|deactivate|unload|update|paste|print|editfocus|activate)|Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)\\b' + 'match': '\\bon(Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|Before(cut|deactivate|unload|update|paste|print|editfocus|activate)|Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)\\b' 'name': 'support.function.event-handler.js' } { - 'match': 'shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort|sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|Time|Hotkeys|Cursor|Timeout|Interval|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice|savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat|contextual|confirm|compile|ceil|clear|clearTimeout|clearInterval|captureEvents|call|createStyleSheet|createPopup|createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|test|tan|taint|taintEnabled|isNaN|isFinite|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|untaint|unescape|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse|parseInt|parseFloat|print|prompt|preference|escape|enableExternalCapture|eval|elementFromPoint|exp|exec|execScript|execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf|asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|Time|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo|moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back' + 'match': '\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort|sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|Time|Hotkeys|Cursor|Timeout|Interval|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice|savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat|contextual|confirm|compile|ceil|clear|clearTimeout|clearInterval|captureEvents|call|createStyleSheet|createPopup|createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|test|tan|taint|taintEnabled|isNaN|isFinite|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|untaint|unescape|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse|parseInt|parseFloat|print|prompt|preference|escape|enableExternalCapture|eval|elementFromPoint|exp|exec|execScript|execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf|asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|Time|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo|moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back)\\b' 'name': 'support.function.js' } { - 'match': 'substringData|submit|splitText|setNamedItem|setAttribute|setAttributeNode|select|hasChildNodes|hasFeature|namedItem|click|close|cloneNode|createComment|createCDATASection|createCaption|createTHead|createTextNode|createTFoot|createDocumentFragment|createProcessingInstruction|createEntityReference|createElement|createAttribute|tabIndex|insertRow|insertBefore|insertCell|insertData|item|open|deleteRow|deleteCell|deleteCaption|deleteTHead|deleteTFoot|deleteData|focus|write|writeln|add|appendChild|appendData|reset|replaceChild|replaceData|move|moveNamedItem|moveChild|moveAttribute|moveAttributeNode|getNamedItem|getElementsByName|getElementsByTagName|getElementById|getAttribute|getAttributeNode|blur' + 'match': '\\b(substringData|submit|splitText|setNamedItem|setAttribute|setAttributeNode|select|hasChildNodes|hasFeature|namedItem|click|close|cloneNode|createComment|createCDATASection|createCaption|createTHead|createTextNode|createTFoot|createDocumentFragment|createProcessingInstruction|createEntityReference|createElement|createAttribute|tabIndex|insertRow|insertBefore|insertCell|insertData|item|open|deleteRow|deleteCell|deleteCaption|deleteTHead|deleteTFoot|deleteData|focus|write|writeln|add|appendChild|appendData|reset|replaceChild|replaceData|move|moveNamedItem|moveChild|moveAttribute|moveAttributeNode|getNamedItem|getElementsByName|getElementsByTagName|getElementById|getAttribute|getAttributeNode|blur)\\b' 'name': 'support.function.dom.js' } { @@ -1156,7 +1156,7 @@ 'function_calls': 'patterns': [ { - 'match': 'require' + 'match': '\\b(require)\\b' 'name': 'support.function.js' } { From bedde7cece888fcf9160c8f84f4358153f86beaf Mon Sep 17 00:00:00 2001 From: Sam J Date: Sun, 3 Jan 2016 10:02:13 +1000 Subject: [PATCH 16/28] Separate function-calls and method-calls --- grammars/javascript.cson | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 3f07c9c3..2ee04174 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1141,7 +1141,7 @@ 'name': 'support.function.event-handler.js' } { - 'match': '\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort|sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|Time|Hotkeys|Cursor|Timeout|Interval|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice|savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat|contextual|confirm|compile|ceil|clear|clearTimeout|clearInterval|captureEvents|call|createStyleSheet|createPopup|createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|test|tan|taint|taintEnabled|isNaN|isFinite|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|untaint|unescape|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse|parseInt|parseFloat|print|prompt|preference|escape|enableExternalCapture|eval|elementFromPoint|exp|exec|execScript|execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf|asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|Time|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo|moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back)\\b' + 'match': '\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort|sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|Time|Hotkeys|Cursor|Timeout|Interval|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice|savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat|contextual|confirm|compile|ceil|clear|clearTimeout|clearInterval|captureEvents|call|createStyleSheet|createPopup|createEventObject|to(|GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|test|tan|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|untaint|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse|print|prompt|preference|enableExternalCapture|elementFromPoint|exp|exec|execScript|execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf|asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|Time|Date|TimezoneOffset|UTC(|Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo|moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back)\\b' 'name': 'support.function.js' } { @@ -1156,7 +1156,7 @@ 'function_calls': 'patterns': [ { - 'match': '\\b(require)\\b' + 'match': '\\b(isNaN|isFinite|eval|uneval|parseInt|parseFloat|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|unescape|require)\\b' 'name': 'support.function.js' } { From cbd605bc68b9fd35814b548980db64891eab40e9 Mon Sep 17 00:00:00 2001 From: Sam J Date: Sun, 3 Jan 2016 10:17:20 +1000 Subject: [PATCH 17/28] Add set/clear timeout/interval, revalidate regex --- grammars/javascript.cson | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 2ee04174..9e2df4fe 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1141,7 +1141,7 @@ 'name': 'support.function.event-handler.js' } { - 'match': '\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort|sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|Time|Hotkeys|Cursor|Timeout|Interval|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice|savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat|contextual|confirm|compile|ceil|clear|clearTimeout|clearInterval|captureEvents|call|createStyleSheet|createPopup|createEventObject|to(|GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|test|tan|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|untaint|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse|print|prompt|preference|enableExternalCapture|elementFromPoint|exp|exec|execScript|execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf|asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|Time|Date|TimezoneOffset|UTC(|Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo|moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back)\\b' + 'match': '\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort|sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice|savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat|contextual|confirm|compile|ceil|clear|captureEvents|call|createStyleSheet|createPopup|createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|test|tan|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|untaint|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse|print|prompt|preference|enableExternalCapture|elementFromPoint|exp|exec|execScript|execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf|asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|Time|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo|moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back)\\b' 'name': 'support.function.js' } { @@ -1156,7 +1156,7 @@ 'function_calls': 'patterns': [ { - 'match': '\\b(isNaN|isFinite|eval|uneval|parseInt|parseFloat|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|unescape|require)\\b' + 'match': '\\b(isNaN|isFinite|eval|uneval|parseInt|parseFloat|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|unescape|require|set(Interval|Timeout)|clear(Interval|Timeout))\\b' 'name': 'support.function.js' } { From 46bdecb9884c5126f987a5ce45fa9f379a0adc91 Mon Sep 17 00:00:00 2001 From: Sam J Date: Sun, 3 Jan 2016 18:41:23 +1000 Subject: [PATCH 18/28] Revert .travis.yml changes --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index e845fbb1..a6b772f1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,3 +7,6 @@ notifications: script: 'curl -s https://raw.githubusercontent.com/atom/ci/master/build-package.sh | sh' +branches: + only: + - master From 4cce8caf2e48901ce3d97f3e4b4e1a69ecc64e7a Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Tue, 2 Feb 2016 17:11:56 +0300 Subject: [PATCH 19/28] Don't scope the console keyword as method call --- grammars/javascript.cson | 41 ++++++++++++++++++++----------------- spec/javascript-spec.coffee | 6 +++--- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 9927c5ae..788d0e86 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -617,32 +617,35 @@ 'name': 'meta.class.instance.constructor' } { - 'comment': 'console.log(arg1, "arg2", [...])' - 'begin': '\\b(console)(\\.)(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)\\s*(\\()' + # console.log(arg1, "arg2", [...]) + 'begin': '\\bconsole' 'beginCaptures': - '1': - 'name': 'entity.name.type.object.js.console' - '2': - 'name': 'meta.delimiter.method.period.js' - '3': - 'name': 'support.function.js.console' - '4': - 'name': 'punctuation.definition.arguments.begin.js' - 'end': '\\)' - 'endCaptures': '0': - 'name': 'punctuation.definition.arguments.end.js' - 'name': 'meta.method-call.js' + 'name': 'entity.name.type.object.console.js' + 'end': '(?!\\G)' 'patterns': [ { - 'include': '#arguments' + 'begin': '\\b(\\.)(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)\\s*(\\()' + 'beginCaptures': + '1': + 'name': 'meta.delimiter.method.period.js' + '2': + 'name': 'support.function.console.js' + '3': + 'name': 'punctuation.definition.arguments.begin.js' + 'end': '\\)' + 'endCaptures': + '0': + 'name': 'punctuation.definition.arguments.end.js' + 'name': 'meta.method-call.js' + 'patterns': [ + { + 'include': '#arguments' + } + ] } ] } - { - 'match': '\\b(console)\\b' - 'name': 'entity.name.type.object.js.console' - } { 'include': '#strings' } diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index dc41e25c..054b4844 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1404,13 +1404,13 @@ describe "Javascript grammar", -> describe "console", -> it "tokenizes the console keyword", -> {tokens} = grammar.tokenizeLine('console') - expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.js.console'] + expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.console.js'] it "tokenizes console support functions", -> {tokens} = grammar.tokenizeLine('console.log()') - expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'meta.method-call.js', 'entity.name.type.object.js.console'] + expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.console.js'] expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] - expect(tokens[2]).toEqual value: 'log', scopes: ['source.js', 'meta.method-call.js', 'support.function.js.console'] + expect(tokens[2]).toEqual value: 'log', scopes: ['source.js', 'meta.method-call.js', 'support.function.console.js'] expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] From 99fc6dbbd9f33328abd75fe91acdf8c9b5fbee51 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Tue, 2 Feb 2016 17:12:12 +0300 Subject: [PATCH 20/28] :art: --- grammars/javascript.cson | 108 +++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 38 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 788d0e86..4a820d10 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -847,10 +847,10 @@ 'include': '#operators' } { - 'include': '#method_call' + 'include': '#method_calls' } { - 'include': '#function_call' + 'include': '#function_calls' } { 'include': '#numbers' @@ -1182,10 +1182,10 @@ 'include': '$self' } ] - 'method_call': + 'method_calls': 'patterns': [ { - 'comment': '.methodCall(arg1, "arg2", [...])' + # .methodCall(arg1, "arg2", [...]) 'begin': '(\\.)([a-zA-Z_$][\\w$]*)\\s*(\\()' 'beginCaptures': '1': @@ -1193,7 +1193,60 @@ '2': 'patterns': [ { - 'include': '#function_methods' + 'match': '''(?x) + \\bon(Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset| + Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove| + Before(cut|deactivate|unload|update|paste|print|editfocus|activate)| + Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help| + Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate| + Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover| + Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error| + Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)\\b + ''' + 'name': 'support.function.event-handler.js' + } + { + 'match': '''(?x) + \\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages| + scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort| + sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours| + Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)| + Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice| + savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat| + contextual|confirm|compile|ceil|clear|captureEvents|call|createStyleSheet|createPopup| + createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)| + test|tan|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift| + untaint|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse| + print|prompt|preference|enableExternalCapture|elementFromPoint|exp|exec|execScript| + execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled| + queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate| + fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf| + asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents| + resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture| + releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear| + Time|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)| + Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo| + moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back)\\b + ''' + 'name': 'support.function.js' + } + { + 'match': '''(?x) + \\b(substringData|submit|splitText|setNamedItem|setAttribute|setAttributeNode|select| + hasChildNodes|hasFeature|namedItem|click|close|cloneNode|createComment|createCDATASection| + createCaption|createTHead|createTextNode|createTFoot|createDocumentFragment| + createProcessingInstruction|createEntityReference|createElement|createAttribute| + tabIndex|insertRow|insertBefore|insertCell|insertData|item|open|deleteRow|deleteCell| + deleteCaption|deleteTHead|deleteTFoot|deleteData|focus|write|writeln|add|appendChild| + appendData|reset|replaceChild|replaceData|move|moveNamedItem|moveChild|moveAttribute| + moveAttributeNode|getNamedItem|getElementsByName|getElementsByTagName|getElementById| + getAttribute|getAttributeNode|blur)\\b + ''' + 'name': 'support.function.dom.js' + } + { + 'match': ".+" + 'name': 'entity.name.function.js' } ] '3': @@ -1210,10 +1263,10 @@ ] } ] - 'function_call': + 'function_calls': 'patterns': [ { - 'comment': 'functionCall(arg1, "arg2", [...])' + # functionCall(arg1, "arg2", [...]) 'begin': '(?:(\\d\\w*)|([a-zA-Z_$][\\w$]*))\\s*(\\()' 'beginCaptures': '1': @@ -1221,7 +1274,16 @@ '2': 'patterns': [ { - 'include': '#function_calls' + 'match': '''(?x) + \\b(isNaN|isFinite|eval|uneval|parseInt|parseFloat|decodeURI| + decodeURIComponent|encodeURI|encodeURIComponent|escape|unescape| + require|set(Interval|Timeout)|clear(Interval|Timeout))\\b + ''' + 'name': 'support.function.js' + } + { + 'match': ".+" + 'name': 'entity.name.function.js' } ] '3': @@ -1238,36 +1300,6 @@ ] } ] - 'function_methods': - 'patterns': [ - { - 'match': '\\bon(Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|Before(cut|deactivate|unload|update|paste|print|editfocus|activate)|Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)\\b' - 'name': 'support.function.event-handler.js' - } - { - 'match': '\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|scrollByLines|scrollY|scrollTo|stop|strike|sin|sizeToContent|sidebar|signText|sort|sup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|Month|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|sqrt|slice|savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|cos|concat|contextual|confirm|compile|ceil|clear|captureEvents|call|createStyleSheet|createPopup|createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|test|tan|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|untaint|unwatch|updateCommands|join|javaEnabled|pop|pow|push|plugins.refresh|paddings|parse|print|prompt|preference|enableExternalCapture|elementFromPoint|exp|exec|execScript|execCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|queryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|forward|floor|fromCharCode|watch|link|load|log|lastIndexOf|asin|anchor|acos|attachEvent|atob|atan|atan2|apply|alert|abs|abort|round|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|releaseEvents|random|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|Time|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|Attention|Selection|ResponseHeader|AllResponseHeaders)|min|moveBy|moveBelow|moveTo|moveToAbsolute|moveAbove|mergeAttributes|match|margins|max|btoa|big|bold|borderWidths|blink|back)\\b' - 'name': 'support.function.js' - } - { - 'match': '\\b(substringData|submit|splitText|setNamedItem|setAttribute|setAttributeNode|select|hasChildNodes|hasFeature|namedItem|click|close|cloneNode|createComment|createCDATASection|createCaption|createTHead|createTextNode|createTFoot|createDocumentFragment|createProcessingInstruction|createEntityReference|createElement|createAttribute|tabIndex|insertRow|insertBefore|insertCell|insertData|item|open|deleteRow|deleteCell|deleteCaption|deleteTHead|deleteTFoot|deleteData|focus|write|writeln|add|appendChild|appendData|reset|replaceChild|replaceData|move|moveNamedItem|moveChild|moveAttribute|moveAttributeNode|getNamedItem|getElementsByName|getElementsByTagName|getElementById|getAttribute|getAttributeNode|blur)\\b' - 'name': 'support.function.dom.js' - } - { - 'match': ".+" - 'name': 'entity.name.function.js' - } - ] - 'function_calls': - 'patterns': [ - { - 'match': '\\b(isNaN|isFinite|eval|uneval|parseInt|parseFloat|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|unescape|require|set(Interval|Timeout)|clear(Interval|Timeout))\\b' - 'name': 'support.function.js' - } - { - 'match': ".+" - 'name': 'entity.name.function.js' - } - ] 'object_variable': 'patterns': [ { From 5e5329af9f751a73306b5cc5e1d1b40b3666f42c Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Fri, 5 Feb 2016 10:28:57 +0300 Subject: [PATCH 21/28] :art: --- spec/javascript-spec.coffee | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 054b4844..0f7fa507 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -248,6 +248,15 @@ describe "Javascript grammar", -> {tokens} = grammar.tokenizeLine(operator) expect(tokens[0]).toEqual value: operator, scopes: ['source.js', 'keyword.operator.' + operator + '.js'] + it "tokenizes spread operator", -> + {tokens} = grammar.tokenizeLine('myFunction(...args);') + expect(tokens[2]).toEqual value: '...', scopes: ['source.js', 'meta.function-call.js', 'keyword.operator.spread.js'] + expect(tokens[3]).toEqual value: 'args', scopes: ['source.js', 'meta.function-call.js'] + + {tokens} = grammar.tokenizeLine('[...iterableObj]') + expect(tokens[1]).toEqual value: '...', scopes: ['source.js', 'keyword.operator.spread.js'] + expect(tokens[2]).toEqual value: 'iterableObj', scopes: ['source.js'] + describe "increment, decrement", -> it "tokenizes increment", -> {tokens} = grammar.tokenizeLine('i++') @@ -278,15 +287,6 @@ describe "Javascript grammar", -> expect(tokens[1]).toEqual value: operator, scopes: ['source.js', 'keyword.operator.logical.js'] expect(tokens[2]).toEqual value: ' b', scopes: ['source.js'] - it "tokenizes spread operator", -> - {tokens} = grammar.tokenizeLine('myFunction(...args);') - expect(tokens[2]).toEqual value: '...', scopes: ['source.js', 'meta.function-call.js', 'keyword.operator.spread.js'] - expect(tokens[3]).toEqual value: 'args', scopes: ['source.js', 'meta.function-call.js'] - - {tokens} = grammar.tokenizeLine('[...iterableObj]') - expect(tokens[1]).toEqual value: '...', scopes: ['source.js', 'keyword.operator.spread.js'] - expect(tokens[2]).toEqual value: 'iterableObj', scopes: ['source.js'] - describe "comparison", -> operators = ["<=", ">=", "!=", "!==", "===", "==", "<", ">" ] From c902aade6e7f7d27f632875acd746c75ea6ab937 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Fri, 5 Feb 2016 10:32:17 +0300 Subject: [PATCH 22/28] :memo: Clarify comment --- grammars/javascript.cson | 1 + 1 file changed, 1 insertion(+) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 4a820d10..3124c24a 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -617,6 +617,7 @@ 'name': 'meta.class.instance.constructor' } { + # console # console.log(arg1, "arg2", [...]) 'begin': '\\bconsole' 'beginCaptures': From adc05379aa321fd124f35ae7988ac17a6cb01185 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Fri, 5 Feb 2016 10:32:37 +0300 Subject: [PATCH 23/28] :bug: Fix word boundary --- grammars/javascript.cson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 3124c24a..7118ac55 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -619,7 +619,7 @@ { # console # console.log(arg1, "arg2", [...]) - 'begin': '\\bconsole' + 'begin': '\\bconsole\\b' 'beginCaptures': '0': 'name': 'entity.name.type.object.console.js' From 76f197a96ad15fa9501cd518c5f62c9e8233db78 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Fri, 5 Feb 2016 13:42:03 +0300 Subject: [PATCH 24/28] Make sure the function name is valid --- grammars/javascript.cson | 55 +++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 7118ac55..d7561321 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -626,18 +626,13 @@ 'end': '(?!\\G)' 'patterns': [ { - 'begin': '\\b(\\.)(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)\\s*(\\()' + 'begin': '\\b(\\.)(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)\\s*(?=\\()' 'beginCaptures': '1': 'name': 'meta.delimiter.method.period.js' '2': 'name': 'support.function.console.js' - '3': - 'name': 'punctuation.definition.arguments.begin.js' - 'end': '\\)' - 'endCaptures': - '0': - 'name': 'punctuation.definition.arguments.end.js' + 'end': '(?<=\\))' 'name': 'meta.method-call.js' 'patterns': [ { @@ -1180,14 +1175,26 @@ 'arguments': 'patterns': [ { - 'include': '$self' + 'begin': '\\(' + 'beginCaptures': + '0': + 'name': 'punctuation.definition.arguments.begin.js' + 'end': '\\)' + 'endCaptures': + '0': + 'name': 'punctuation.definition.arguments.end.js' + 'patterns': [ + { + 'include': '$self' + } + ] } ] 'method_calls': 'patterns': [ { # .methodCall(arg1, "arg2", [...]) - 'begin': '(\\.)([a-zA-Z_$][\\w$]*)\\s*(\\()' + 'begin': '(\\.)([\\w$]+)\\s*(?=\\()' 'beginCaptures': '1': 'name': 'meta.delimiter.method.period.js' @@ -1246,16 +1253,15 @@ 'name': 'support.function.dom.js' } { - 'match': ".+" + 'match': "[a-zA-Z_$][\\w$]*" 'name': 'entity.name.function.js' } + { + 'match': '[\\d][\\w$]*' + 'name': 'invalid.illegal.identifier.js' + } ] - '3': - 'name': 'punctuation.definition.arguments.begin.js' - 'end': '\\)' - 'endCaptures': - '0': - 'name': 'punctuation.definition.arguments.end.js' + 'end': '(?<=\\))' 'name': 'meta.method-call.js' 'patterns': [ { @@ -1268,11 +1274,9 @@ 'patterns': [ { # functionCall(arg1, "arg2", [...]) - 'begin': '(?:(\\d\\w*)|([a-zA-Z_$][\\w$]*))\\s*(\\()' + 'begin': '([\\w$]+)\\s*(?=\\()' 'beginCaptures': '1': - 'name': 'invalid.illegal.identifier.js' - '2': 'patterns': [ { 'match': '''(?x) @@ -1283,16 +1287,15 @@ 'name': 'support.function.js' } { - 'match': ".+" + 'match': "[a-zA-Z_$][\\w$]*" 'name': 'entity.name.function.js' } + { + 'match': '[\\d][\\w$]*' + 'name': 'invalid.illegal.identifier.js' + } ] - '3': - 'name': 'punctuation.definition.arguments.begin.js' - 'end': '\\)' - 'endCaptures': - '0': - 'name': 'punctuation.definition.arguments.end.js' + 'end': '(?<=\\))' 'name': 'meta.function-call.js' 'patterns': [ { From 8dbc7b0896c76abc299b1526e0226006eb6c5d99 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Fri, 5 Feb 2016 13:42:40 +0300 Subject: [PATCH 25/28] Scope arguments as `meta.arguments` --- grammars/javascript.cson | 1 + spec/javascript-spec.coffee | 226 +++++++++++++++++------------------- 2 files changed, 110 insertions(+), 117 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index d7561321..f8bbaf37 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1183,6 +1183,7 @@ 'endCaptures': '0': 'name': 'punctuation.definition.arguments.end.js' + 'name': 'meta.arguments.js' 'patterns': [ { 'include': '$self' diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 0f7fa507..43abc51d 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -250,8 +250,8 @@ describe "Javascript grammar", -> it "tokenizes spread operator", -> {tokens} = grammar.tokenizeLine('myFunction(...args);') - expect(tokens[2]).toEqual value: '...', scopes: ['source.js', 'meta.function-call.js', 'keyword.operator.spread.js'] - expect(tokens[3]).toEqual value: 'args', scopes: ['source.js', 'meta.function-call.js'] + expect(tokens[2]).toEqual value: '...', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'keyword.operator.spread.js'] + expect(tokens[3]).toEqual value: 'args', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js'] {tokens} = grammar.tokenizeLine('[...iterableObj]') expect(tokens[1]).toEqual value: '...', scopes: ['source.js', 'keyword.operator.spread.js'] @@ -1090,31 +1090,31 @@ describe "Javascript grammar", -> it "tokenizes function calls", -> {tokens} = grammar.tokenizeLine('functionCall()') expect(tokens[0]).toEqual value: 'functionCall', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] {tokens} = grammar.tokenizeLine('functionCall(arg1, "test", {a: 123})') expect(tokens[0]).toEqual value: 'functionCall', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: 'arg1', scopes: ['source.js', 'meta.function-call.js'] - expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.function-call.js', 'meta.delimiter.object.comma.js'] - expect(tokens[5]).toEqual value: '"', scopes: ['source.js', 'meta.function-call.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] - expect(tokens[6]).toEqual value: 'test', scopes: ['source.js', 'meta.function-call.js', 'string.quoted.double.js'] - expect(tokens[7]).toEqual value: '"', scopes: ['source.js', 'meta.function-call.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] - expect(tokens[8]).toEqual value: ',', scopes: ['source.js', 'meta.function-call.js', 'meta.delimiter.object.comma.js'] - expect(tokens[10]).toEqual value: '{', scopes: ['source.js', 'meta.function-call.js', 'meta.brace.curly.js'] - expect(tokens[11]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js'] - expect(tokens[12]).toEqual value: ':', scopes: ['source.js', 'meta.function-call.js', 'keyword.operator.js'] - expect(tokens[14]).toEqual value: '123', scopes: ['source.js', 'meta.function-call.js', 'constant.numeric.decimal.js'] - expect(tokens[15]).toEqual value: '}', scopes: ['source.js', 'meta.function-call.js', 'meta.brace.curly.js'] - expect(tokens[16]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[2]).toEqual value: 'arg1', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js'] + expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.delimiter.object.comma.js'] + expect(tokens[5]).toEqual value: '"', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] + expect(tokens[6]).toEqual value: 'test', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'string.quoted.double.js'] + expect(tokens[7]).toEqual value: '"', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] + expect(tokens[8]).toEqual value: ',', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.delimiter.object.comma.js'] + expect(tokens[10]).toEqual value: '{', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.curly.js'] + expect(tokens[11]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js'] + expect(tokens[12]).toEqual value: ':', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'keyword.operator.js'] + expect(tokens[14]).toEqual value: '123', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] + expect(tokens[15]).toEqual value: '}', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.curly.js'] + expect(tokens[16]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] {tokens} = grammar.tokenizeLine('functionCall((123).toString())') - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.brace.round.js'] - expect(tokens[3]).toEqual value: '123', scopes: ['source.js', 'meta.function-call.js', 'constant.numeric.decimal.js'] - expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.brace.round.js'] - expect(tokens[9]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.round.js'] + expect(tokens[3]).toEqual value: '123', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] + expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.round.js'] + expect(tokens[9]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] {tokens} = grammar.tokenizeLine('$abc$()') expect(tokens[0]).toEqual value: '$abc$', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] @@ -1125,55 +1125,49 @@ describe "Javascript grammar", -> it "tokenizes function calls when they are arguments", -> {tokens} = grammar.tokenizeLine('a(b(c))') expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: 'b', scopes: ['source.js', 'meta.function-call.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[4]).toEqual value: 'c', scopes: ['source.js', 'meta.function-call.js', 'meta.function-call.js'] - expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] - expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[2]).toEqual value: 'b', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'entity.name.function.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[4]).toEqual value: 'c', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js'] + expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] it "tokenizes illegal function calls", -> {tokens} = grammar.tokenizeLine('0illegal()') expect(tokens[0]).toEqual value: '0illegal', scopes: ['source.js', 'meta.function-call.js', 'invalid.illegal.identifier.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] it "tokenizes illegal arguments", -> {tokens} = grammar.tokenizeLine('a(1a)') expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: '1a', scopes: ['source.js', 'meta.function-call.js', 'invalid.illegal.identifier.js'] - expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[2]).toEqual value: '1a', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'invalid.illegal.identifier.js'] + expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] {tokens} = grammar.tokenizeLine('a(123a)') - expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: '123a', scopes: ['source.js', 'meta.function-call.js', 'invalid.illegal.identifier.js'] - expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[2]).toEqual value: '123a', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'invalid.illegal.identifier.js'] {tokens} = grammar.tokenizeLine('a(1.prop)') - expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: '1', scopes: ['source.js', 'meta.function-call.js', 'invalid.illegal.identifier.js'] - expect(tokens[3]).toEqual value: '.', scopes: ['source.js', 'meta.function-call.js', 'meta.delimiter.property.period.js'] - expect(tokens[4]).toEqual value: 'prop', scopes: ['source.js', 'meta.function-call.js', 'variable.other.property.js'] - expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[2]).toEqual value: '1', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'invalid.illegal.identifier.js'] + expect(tokens[3]).toEqual value: '.', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.delimiter.property.period.js'] + expect(tokens[4]).toEqual value: 'prop', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'variable.other.property.js'] it "tokenizes function declaration as an argument", -> {tokens} = grammar.tokenizeLine('a(function b(p) { return p; })') expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: 'function', scopes: ['source.js', 'meta.function-call.js', 'meta.function.js', 'storage.type.function.js'] - expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.function-call.js', 'meta.function.js', 'entity.name.function.js'] - expect(tokens[5]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js'] - expect(tokens[6]).toEqual value: 'p', scopes: ['source.js', 'meta.function-call.js', 'meta.function.js', 'variable.parameter.function.js'] - expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.function.js', 'punctuation.definition.parameters.end.js'] - expect(tokens[9]).toEqual value: '{', scopes: ['source.js', 'meta.function-call.js', 'meta.brace.curly.js'] - expect(tokens[11]).toEqual value: 'return', scopes: ['source.js', 'meta.function-call.js', 'keyword.control.js'] - expect(tokens[12]).toEqual value: ' p', scopes: ['source.js', 'meta.function-call.js'] - expect(tokens[13]).toEqual value: ';', scopes: ['source.js', 'meta.function-call.js', 'punctuation.terminator.statement.js'] - expect(tokens[15]).toEqual value: '}', scopes: ['source.js', 'meta.function-call.js', 'meta.brace.curly.js'] - expect(tokens[16]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[2]).toEqual value: 'function', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function.js', 'storage.type.function.js'] + expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function.js', 'entity.name.function.js'] + expect(tokens[5]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js'] + expect(tokens[6]).toEqual value: 'p', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function.js', 'variable.parameter.function.js'] + expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[9]).toEqual value: '{', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.curly.js'] + expect(tokens[11]).toEqual value: 'return', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'keyword.control.js'] + expect(tokens[12]).toEqual value: ' p', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js'] + expect(tokens[13]).toEqual value: ';', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.terminator.statement.js'] + expect(tokens[15]).toEqual value: '}', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.curly.js'] + expect(tokens[16]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] describe "method calls", -> it "tokenizes method calls", -> @@ -1181,11 +1175,11 @@ describe "Javascript grammar", -> expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js'] expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[2]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[4]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'constant.numeric.decimal.js'] - expect(tokens[5]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'keyword.operator.js'] - expect(tokens[6]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'constant.numeric.decimal.js'] - expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[4]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] + expect(tokens[5]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'keyword.operator.js'] + expect(tokens[6]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] + expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] {tokens} = grammar.tokenizeLine('a.$abc$()') expect(tokens[2]).toEqual value: '$abc$', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] @@ -1193,38 +1187,38 @@ describe "Javascript grammar", -> {tokens} = grammar.tokenizeLine('a.$$()') expect(tokens[2]).toEqual value: '$$', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - {tokens} = grammar.tokenizeLine('gulp.src("./*.js")') - expect(tokens[0]).toEqual value: 'gulp', scopes: ['source.js', 'variable.other.object.js'] - expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] - expect(tokens[2]).toEqual value: 'src', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[4]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] - expect(tokens[5]).toEqual value: './*.js', scopes: ['source.js', 'meta.method-call.js', 'string.quoted.double.js'] - expect(tokens[6]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] - expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] - - {tokens} = grammar.tokenizeLine('.pipe(minify())') - expect(tokens[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] - expect(tokens[1]).toEqual value: 'pipe', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[3]).toEqual value: 'minify', scopes: ['source.js', 'meta.method-call.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[4]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] - expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] - - {tokens} = grammar.tokenizeLine('.pipe(gulp.dest("build"))') - expect(tokens[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] - expect(tokens[1]).toEqual value: 'pipe', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[3]).toEqual value: 'gulp', scopes: ['source.js', 'meta.method-call.js', 'variable.other.object.js'] - expect(tokens[4]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] - expect(tokens[5]).toEqual value: 'dest', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(tokens[6]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[7]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] - expect(tokens[8]).toEqual value: 'build', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'string.quoted.double.js'] - expect(tokens[9]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] - expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] - expect(tokens[11]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + lines = grammar.tokenizeLines """ + gulp.src("./*.js") + .pipe(minify()) + .pipe(gulp.dest("build")) + """ + expect(lines[0][0]).toEqual value: 'gulp', scopes: ['source.js', 'variable.other.object.js'] + expect(lines[0][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(lines[0][2]).toEqual value: 'src', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] + expect(lines[0][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[0][4]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] + expect(lines[0][5]).toEqual value: './*.js', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js'] + expect(lines[0][6]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] + expect(lines[0][7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(lines[1][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(lines[1][2]).toEqual value: 'pipe', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] + expect(lines[1][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[1][4]).toEqual value: 'minify', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.function-call.js', 'entity.name.function.js'] + expect(lines[1][5]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[1][6]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(lines[1][7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(lines[2][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(lines[2][2]).toEqual value: 'pipe', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] + expect(lines[2][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[2][4]).toEqual value: 'gulp', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'variable.other.object.js'] + expect(lines[2][5]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(lines[2][6]).toEqual value: 'dest', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'entity.name.function.js'] + expect(lines[2][7]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[2][8]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] + expect(lines[2][9]).toEqual value: 'build', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js'] + expect(lines[2][10]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] + expect(lines[2][11]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(lines[2][12]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] describe "built-in methods", -> methods = ["require", "parseInt", "parseFloat", "print"] @@ -1235,16 +1229,16 @@ describe "Javascript grammar", -> {tokens} = grammar.tokenizeLine('.' + method + '()') expect(tokens[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[1]).toEqual value: method, scopes: ['source.js', 'meta.method-call.js', 'support.function.js'] - expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] for domMethod in domMethods it "tokenizes '#{domMethod}'", -> {tokens} = grammar.tokenizeLine('.' + domMethod + '()') expect(tokens[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[1]).toEqual value: domMethod, scopes: ['source.js', 'meta.method-call.js', 'support.function.dom.js'] - expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] describe "properties", -> it "tokenizes properties", -> @@ -1265,9 +1259,7 @@ describe "Javascript grammar", -> expect(tokens[2]).toEqual value: '$$', scopes: ['source.js', 'variable.other.property.js'] {tokens} = grammar.tokenizeLine('a().b') - expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] expect(tokens[3]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js'] expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'variable.other.property.js'] @@ -1295,11 +1287,11 @@ describe "Javascript grammar", -> expect(tokens[2]).toEqual value: "'", scopes: ['source.js', 'string.quoted.single.js', 'punctuation.definition.string.end.js'] expect(tokens[3]).toEqual value: ".", scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[4]).toEqual value: "b", scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(tokens[5]).toEqual value: "(", scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[6]).toEqual value: "'", scopes: ['source.js', 'meta.method-call.js', 'string.quoted.single.js', 'punctuation.definition.string.begin.js'] - expect(tokens[7]).toEqual value: ":c(d)", scopes: ['source.js', 'meta.method-call.js', 'string.quoted.single.js'] - expect(tokens[8]).toEqual value: "'", scopes: ['source.js', 'meta.method-call.js', 'string.quoted.single.js', 'punctuation.definition.string.end.js'] - expect(tokens[9]).toEqual value: ")", scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[5]).toEqual value: "(", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[6]).toEqual value: "'", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.single.js', 'punctuation.definition.string.begin.js'] + expect(tokens[7]).toEqual value: ":c(d)", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.single.js'] + expect(tokens[8]).toEqual value: "'", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.single.js', 'punctuation.definition.string.end.js'] + expect(tokens[9]).toEqual value: ")", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] {tokens} = grammar.tokenizeLine('write("){");') expect(tokens[0]).toEqual value: 'write', scopes: ['source.js', 'meta.method.js', 'entity.name.function.js'] @@ -1317,17 +1309,17 @@ describe "Javascript grammar", -> for scope, delim of delimsByScope {tokens} = grammar.tokenizeLine('a.push(' + delim + 'x' + delim + ' + y + ' + delim + ':function()' + delim + ');') expect(tokens[2]).toEqual value: 'push', scopes: ['source.js', 'meta.method-call.js', 'support.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[4]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.begin.js'] - expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', 'meta.method-call.js', scope] - expect(tokens[6]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.end.js'] - expect(tokens[8]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'keyword.operator.js'] - expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js', 'meta.method-call.js' ] - expect(tokens[10]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'keyword.operator.js'] - expect(tokens[12]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.begin.js'] - expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', 'meta.method-call.js', scope] - expect(tokens[14]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', scope, 'punctuation.definition.string.end.js'] - expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[4]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.begin.js'] + expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope] + expect(tokens[6]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.end.js'] + expect(tokens[8]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'keyword.operator.js'] + expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js' ] + expect(tokens[10]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'keyword.operator.js'] + expect(tokens[12]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.begin.js'] + expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope] + expect(tokens[14]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.end.js'] + expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] describe "comments", -> it "tokenizes /* */ comments", -> @@ -1411,8 +1403,8 @@ describe "Javascript grammar", -> expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.console.js'] expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[2]).toEqual value: 'log', scopes: ['source.js', 'meta.method-call.js', 'support.function.console.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] describe "indentation", -> editor = null From f63d12f66056f17cc7d92c74570743843a4bf4b0 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Sun, 7 Feb 2016 13:18:28 +0300 Subject: [PATCH 26/28] Add 'bracket.round' subscope --- grammars/javascript.cson | 4 +- spec/javascript-spec.coffee | 78 ++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index f8bbaf37..3be7d45a 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1178,11 +1178,11 @@ 'begin': '\\(' 'beginCaptures': '0': - 'name': 'punctuation.definition.arguments.begin.js' + 'name': 'punctuation.definition.arguments.begin.bracket.round.js' 'end': '\\)' 'endCaptures': '0': - 'name': 'punctuation.definition.arguments.end.js' + 'name': 'punctuation.definition.arguments.end.bracket.round.js' 'name': 'meta.arguments.js' 'patterns': [ { diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 43abc51d..ec669508 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1090,12 +1090,12 @@ describe "Javascript grammar", -> it "tokenizes function calls", -> {tokens} = grammar.tokenizeLine('functionCall()') expect(tokens[0]).toEqual value: 'functionCall', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] + expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] {tokens} = grammar.tokenizeLine('functionCall(arg1, "test", {a: 123})') expect(tokens[0]).toEqual value: 'functionCall', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[2]).toEqual value: 'arg1', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js'] expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.delimiter.object.comma.js'] expect(tokens[5]).toEqual value: '"', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] @@ -1107,14 +1107,14 @@ describe "Javascript grammar", -> expect(tokens[12]).toEqual value: ':', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'keyword.operator.js'] expect(tokens[14]).toEqual value: '123', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] expect(tokens[15]).toEqual value: '}', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.curly.js'] - expect(tokens[16]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[16]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] {tokens} = grammar.tokenizeLine('functionCall((123).toString())') - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.round.js'] expect(tokens[3]).toEqual value: '123', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.round.js'] - expect(tokens[9]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[9]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] {tokens} = grammar.tokenizeLine('$abc$()') expect(tokens[0]).toEqual value: '$abc$', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] @@ -1125,25 +1125,25 @@ describe "Javascript grammar", -> it "tokenizes function calls when they are arguments", -> {tokens} = grammar.tokenizeLine('a(b(c))') expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[2]).toEqual value: 'b', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[4]).toEqual value: 'c', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js'] - expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] - expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] + expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] it "tokenizes illegal function calls", -> {tokens} = grammar.tokenizeLine('0illegal()') expect(tokens[0]).toEqual value: '0illegal', scopes: ['source.js', 'meta.function-call.js', 'invalid.illegal.identifier.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] + expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] it "tokenizes illegal arguments", -> {tokens} = grammar.tokenizeLine('a(1a)') expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[2]).toEqual value: '1a', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'invalid.illegal.identifier.js'] - expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] {tokens} = grammar.tokenizeLine('a(123a)') expect(tokens[2]).toEqual value: '123a', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'invalid.illegal.identifier.js'] @@ -1156,7 +1156,7 @@ describe "Javascript grammar", -> it "tokenizes function declaration as an argument", -> {tokens} = grammar.tokenizeLine('a(function b(p) { return p; })') expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[2]).toEqual value: 'function', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function.js', 'storage.type.function.js'] expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function.js', 'entity.name.function.js'] expect(tokens[5]).toEqual value: '(', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js'] @@ -1167,7 +1167,7 @@ describe "Javascript grammar", -> expect(tokens[12]).toEqual value: ' p', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js'] expect(tokens[13]).toEqual value: ';', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.terminator.statement.js'] expect(tokens[15]).toEqual value: '}', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.brace.curly.js'] - expect(tokens[16]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[16]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] describe "method calls", -> it "tokenizes method calls", -> @@ -1175,11 +1175,11 @@ describe "Javascript grammar", -> expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js'] expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[2]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[4]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] expect(tokens[5]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'keyword.operator.js'] expect(tokens[6]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] - expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] {tokens} = grammar.tokenizeLine('a.$abc$()') expect(tokens[2]).toEqual value: '$abc$', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] @@ -1195,30 +1195,30 @@ describe "Javascript grammar", -> expect(lines[0][0]).toEqual value: 'gulp', scopes: ['source.js', 'variable.other.object.js'] expect(lines[0][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(lines[0][2]).toEqual value: 'src', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(lines[0][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[0][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(lines[0][4]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] expect(lines[0][5]).toEqual value: './*.js', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js'] expect(lines[0][6]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] - expect(lines[0][7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(lines[0][7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] expect(lines[1][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(lines[1][2]).toEqual value: 'pipe', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(lines[1][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[1][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(lines[1][4]).toEqual value: 'minify', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.function-call.js', 'entity.name.function.js'] - expect(lines[1][5]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] - expect(lines[1][6]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] - expect(lines[1][7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(lines[1][5]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] + expect(lines[1][6]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] + expect(lines[1][7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] expect(lines[2][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(lines[2][2]).toEqual value: 'pipe', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(lines[2][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[2][3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(lines[2][4]).toEqual value: 'gulp', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'variable.other.object.js'] expect(lines[2][5]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(lines[2][6]).toEqual value: 'dest', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(lines[2][7]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(lines[2][7]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(lines[2][8]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.begin.js'] expect(lines[2][9]).toEqual value: 'build', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js'] expect(lines[2][10]).toEqual value: '"', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] - expect(lines[2][11]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] - expect(lines[2][12]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(lines[2][11]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] + expect(lines[2][12]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] describe "built-in methods", -> methods = ["require", "parseInt", "parseFloat", "print"] @@ -1229,16 +1229,16 @@ describe "Javascript grammar", -> {tokens} = grammar.tokenizeLine('.' + method + '()') expect(tokens[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[1]).toEqual value: method, scopes: ['source.js', 'meta.method-call.js', 'support.function.js'] - expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] + expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] for domMethod in domMethods it "tokenizes '#{domMethod}'", -> {tokens} = grammar.tokenizeLine('.' + domMethod + '()') expect(tokens[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[1]).toEqual value: domMethod, scopes: ['source.js', 'meta.method-call.js', 'support.function.dom.js'] - expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] + expect(tokens[3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] describe "properties", -> it "tokenizes properties", -> @@ -1259,7 +1259,7 @@ describe "Javascript grammar", -> expect(tokens[2]).toEqual value: '$$', scopes: ['source.js', 'variable.other.property.js'] {tokens} = grammar.tokenizeLine('a().b') - expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] expect(tokens[3]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js'] expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'variable.other.property.js'] @@ -1287,11 +1287,11 @@ describe "Javascript grammar", -> expect(tokens[2]).toEqual value: "'", scopes: ['source.js', 'string.quoted.single.js', 'punctuation.definition.string.end.js'] expect(tokens[3]).toEqual value: ".", scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[4]).toEqual value: "b", scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] - expect(tokens[5]).toEqual value: "(", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[5]).toEqual value: "(", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[6]).toEqual value: "'", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.single.js', 'punctuation.definition.string.begin.js'] expect(tokens[7]).toEqual value: ":c(d)", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.single.js'] expect(tokens[8]).toEqual value: "'", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.single.js', 'punctuation.definition.string.end.js'] - expect(tokens[9]).toEqual value: ")", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[9]).toEqual value: ")", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] {tokens} = grammar.tokenizeLine('write("){");') expect(tokens[0]).toEqual value: 'write', scopes: ['source.js', 'meta.method.js', 'entity.name.function.js'] @@ -1309,7 +1309,7 @@ describe "Javascript grammar", -> for scope, delim of delimsByScope {tokens} = grammar.tokenizeLine('a.push(' + delim + 'x' + delim + ' + y + ' + delim + ':function()' + delim + ');') expect(tokens[2]).toEqual value: 'push', scopes: ['source.js', 'meta.method-call.js', 'support.function.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[4]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.begin.js'] expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope] expect(tokens[6]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.end.js'] @@ -1319,7 +1319,7 @@ describe "Javascript grammar", -> expect(tokens[12]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.begin.js'] expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope] expect(tokens[14]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.end.js'] - expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] describe "comments", -> it "tokenizes /* */ comments", -> @@ -1403,8 +1403,8 @@ describe "Javascript grammar", -> expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.console.js'] expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] expect(tokens[2]).toEqual value: 'log', scopes: ['source.js', 'meta.method-call.js', 'support.function.console.js'] - expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.js'] - expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] + expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] describe "indentation", -> editor = null From 357da2e2754967fa505bda5104763eee6a8f7550 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Sun, 7 Feb 2016 13:20:14 +0300 Subject: [PATCH 27/28] :art: --- grammars/javascript.cson | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 3be7d45a..c6f7b0ba 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1258,7 +1258,7 @@ 'name': 'entity.name.function.js' } { - 'match': '[\\d][\\w$]*' + 'match': '\\d[\\w$]*' 'name': 'invalid.illegal.identifier.js' } ] @@ -1292,7 +1292,7 @@ 'name': 'entity.name.function.js' } { - 'match': '[\\d][\\w$]*' + 'match': '\\d[\\w$]*' 'name': 'invalid.illegal.identifier.js' } ] From da6cb676e9728a0fb36db74b297fcdffd30540a3 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Sun, 7 Feb 2016 13:54:09 +0300 Subject: [PATCH 28/28] Allow whitespaces in method calls --- grammars/javascript.cson | 4 ++-- spec/javascript-spec.coffee | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index c6f7b0ba..ba61a276 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -626,7 +626,7 @@ 'end': '(?!\\G)' 'patterns': [ { - 'begin': '\\b(\\.)(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)\\s*(?=\\()' + 'begin': '\\s*(\\.)\\s*(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)\\s*(?=\\()' 'beginCaptures': '1': 'name': 'meta.delimiter.method.period.js' @@ -1195,7 +1195,7 @@ 'patterns': [ { # .methodCall(arg1, "arg2", [...]) - 'begin': '(\\.)([\\w$]+)\\s*(?=\\()' + 'begin': '(\\.)\\s*([\\w$]+)\\s*(?=\\()' 'beginCaptures': '1': 'name': 'meta.delimiter.method.period.js' diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index ec669508..1668037d 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1181,6 +1181,11 @@ describe "Javascript grammar", -> expect(tokens[6]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js'] expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] + {tokens} = grammar.tokenizeLine('a . b(1+1)') + expect(tokens[2]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] + expect(tokens[5]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] + {tokens} = grammar.tokenizeLine('a.$abc$()') expect(tokens[2]).toEqual value: '$abc$', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js'] @@ -1406,6 +1411,13 @@ describe "Javascript grammar", -> expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] + {tokens} = grammar.tokenizeLine('console . log()') + expect(tokens[0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.console.js'] + expect(tokens[2]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js'] + expect(tokens[4]).toEqual value: 'log', scopes: ['source.js', 'meta.method-call.js', 'support.function.console.js'] + expect(tokens[5]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js'] + expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js'] + describe "indentation", -> editor = null