From a5ab5a4c7fae057f133a4a92d8ba981eccc0e980 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 13 Nov 2020 08:20:00 -0600
Subject: [PATCH 01/55] Update jsdoc-spec.coffee
---
spec/jsdoc-spec.coffee | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spec/jsdoc-spec.coffee b/spec/jsdoc-spec.coffee
index 8baf4e28..bd6b4c0e 100644
--- a/spec/jsdoc-spec.coffee
+++ b/spec/jsdoc-spec.coffee
@@ -372,7 +372,7 @@ describe "JSDoc grammar", ->
expect(tokens[10]).toEqual value: 'variable', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc']
expect(tokens[11]).toEqual value: '=', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'keyword.operator.assignment.jsdoc']
expect(tokens[12]).toEqual value: 'default', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'source.embedded.js', 'variable.other.object.js']
- expect(tokens[13]).toEqual value: '.', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'source.embedded.js', 'meta.delimiter.property.period.js']
+ expect(tokens[13]).toEqual value: '.', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'source.embedded.js', 'meta.delimiter.property.js']
expect(tokens[14]).toEqual value: 'value', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'source.embedded.js', 'support.variable.property.dom.js']
expect(tokens[15]).toEqual value: ']', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'punctuation.definition.optional-value.end.bracket.square.jsdoc']
expect(tokens[16]).toEqual value: ' this is the description ', scopes: ['source.js', 'comment.block.documentation.js']
From 0151d84f2ba6e608728432b94fea5dfd9f37ac2e Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 13 Nov 2020 08:21:48 -0600
Subject: [PATCH 02/55] Update javascript-spec.coffee
---
spec/javascript-spec.coffee | 109 +++++++++++++++++++++---------------
1 file changed, 65 insertions(+), 44 deletions(-)
diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee
index 6c91abe4..ed564c4d 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -172,9 +172,9 @@ describe "JavaScript grammar", ->
expect(tokens[4]).toEqual value: 'new', scopes: ['source.js', 'meta.class.instance.constructor.js', 'keyword.operator.new.js']
expect(tokens[5]).toEqual value: ' ', scopes: ['source.js', 'meta.class.instance.constructor.js']
expect(tokens[6]).toEqual value: 'obj', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js']
- expect(tokens[7]).toEqual value: '.', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js', 'meta.delimiter.property.period.js']
+ expect(tokens[7]).toEqual value: '.', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js', 'meta.delimiter.property.js']
expect(tokens[8]).toEqual value: 'ct', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js']
- expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js', 'meta.delimiter.property.period.js']
+ expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js', 'meta.delimiter.property.js']
expect(tokens[10]).toEqual value: 'Cla$s', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js']
expect(tokens[11]).toEqual value: '(', scopes: ['source.js', 'meta.brace.round.js']
expect(tokens[12]).toEqual value: ')', scopes: ['source.js', 'meta.brace.round.js']
@@ -435,7 +435,7 @@ describe "JavaScript grammar", ->
expect(tokens[1]).toEqual value: '--', scopes: ['source.js', 'keyword.operator.decrement.js']
describe "logical", ->
- operators = ["&&", "||", "!"]
+ operators = ["&&", "||", "!", "??"]
it "tokenizes them", ->
for operator in operators
@@ -681,7 +681,7 @@ describe "JavaScript grammar", ->
expect(tokens[0]).toEqual value: 'awesome ', scopes: ['source.js']
expect(tokens[1]).toEqual value: '=', scopes: ['source.js', 'keyword.operator.assignment.js']
expect(tokens[3]).toEqual value: 'cool', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[4]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[4]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[5]).toEqual value: 'EPSILON', scopes: ['source.js', 'support.constant.js']
expect(tokens[6]).toEqual value: ';', scopes: ['source.js', 'punctuation.terminator.statement.js']
@@ -751,7 +751,7 @@ describe "JavaScript grammar", ->
it "tokenizes innerHTML attribute declarations with string template tags", ->
{tokens} = grammar.tokenizeLine('text.innerHTML = `hey ${name}`')
expect(tokens[0]).toEqual value: 'text', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'innerHTML', scopes: ['source.js', 'variable.other.property.js']
expect(tokens[3]).toEqual value: ' ', scopes: ['source.js']
expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'keyword.operator.assignment.js']
@@ -1218,7 +1218,7 @@ describe "JavaScript grammar", ->
it "tokenizes functions as object properties", ->
{tokens} = grammar.tokenizeLine('obj.method = function foo(')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.js']
expect(tokens[2]).toEqual value: 'method', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'meta.function.js', 'keyword.operator.assignment.js']
expect(tokens[6]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
@@ -1227,12 +1227,12 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('this.register = function(')
expect(tokens[0]).toEqual value: 'this', scopes: ['source.js', 'variable.language.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.js']
expect(tokens[2]).toEqual value: 'register', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
expect(tokens[6]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
{tokens} = grammar.tokenizeLine('document.getElementById("foo").onclick = function(')
- expect(tokens[8]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.period.js']
+ expect(tokens[8]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.js']
expect(tokens[9]).toEqual value: 'onclick', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
expect(tokens[13]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
@@ -1480,7 +1480,7 @@ describe "JavaScript grammar", ->
expect(tokens[4]).toEqual value: 'thing', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'variable.parameter.function.js']
expect(tokens[6]).toEqual value: '=', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'keyword.operator.assignment.js']
expect(tokens[8]).toEqual value: 'this', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'variable.language.js']
- expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(tokens[10]).toEqual value: 'something', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'meta.method-call.js', 'entity.name.function.js']
it "tokenizes the rest parameter", ->
@@ -1488,6 +1488,10 @@ describe "JavaScript grammar", ->
expect(tokens[1]).toEqual value: '...', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'keyword.operator.spread.js']
expect(tokens[2]).toEqual value: 'args', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'variable.parameter.rest.function.js']
+ {tokens} = grammar.tokenizeLine('(c, ...val) => c + val')
+ expect(tokens[4]).toEqual value: '...', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'keyword.operator.spread.js']
+ expect(tokens[5]).toEqual value: 'val', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'variable.parameter.rest.function.js']
+
it "tokenizes illegal parameters", ->
{tokens} = grammar.tokenizeLine('0abc => {}')
expect(tokens[0]).toEqual value: '0abc', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'invalid.illegal.identifier.js']
@@ -1626,7 +1630,7 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('a(1.prop)')
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[3]).toEqual value: '.', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'meta.delimiter.property.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", ->
@@ -1649,7 +1653,7 @@ describe "JavaScript grammar", ->
it "tokenizes method calls", ->
{tokens} = grammar.tokenizeLine('a.b(1+1)')
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[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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.bracket.round.js']
expect(tokens[4]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js']
@@ -1658,7 +1662,7 @@ describe "JavaScript grammar", ->
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[2]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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']
@@ -1674,25 +1678,25 @@ describe "JavaScript grammar", ->
.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][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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.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.bracket.round.js']
- expect(lines[1][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(lines[1][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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.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.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][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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.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][5]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'meta.method-call.js', 'meta.delimiter.method.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.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']
@@ -1708,7 +1712,7 @@ describe "JavaScript grammar", ->
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[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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.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']
@@ -1716,7 +1720,7 @@ describe "JavaScript grammar", ->
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[0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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.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']
@@ -1725,17 +1729,17 @@ describe "JavaScript grammar", ->
it "tokenizes properties", ->
{tokens} = grammar.tokenizeLine('obj.property')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'property', scopes: ['source.js', 'variable.other.property.js']
{tokens} = grammar.tokenizeLine('obj.property.property')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'property', scopes: ['source.js', 'variable.other.object.property.js']
{tokens} = grammar.tokenizeLine('obj.Property')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'Property', scopes: ['source.js', 'variable.other.property.js']
{tokens} = grammar.tokenizeLine('obj.$abc$')
@@ -1746,37 +1750,59 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('a().b')
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[3]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'variable.other.property.js']
{tokens} = grammar.tokenizeLine('a.123illegal')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: '123illegal', scopes: ['source.js', 'invalid.illegal.identifier.js']
it "tokenizes constant properties", ->
{tokens} = grammar.tokenizeLine('obj.MY_CONSTANT')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.property.js']
{tokens} = grammar.tokenizeLine('obj.MY_CONSTANT.prop')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.object.property.js']
{tokens} = grammar.tokenizeLine('a.C')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'C', scopes: ['source.js', 'constant.other.property.js']
+ it "supports the optional chaining operator", ->
+ {tokens} = grammar.tokenizeLine('obj?.prop')
+ expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
+ expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[2]).toEqual value: 'prop', scopes: ['source.js', 'variable.other.property.js']
+
+ {tokens} = grammar.tokenizeLine('obj?.$_')
+ expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
+ expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
+ 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.bracket.round.js']
+ expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js']
+
+ {tokens} = grammar.tokenizeLine('a()?.MY_CONSTANT')
+ expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']
+ expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[4]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.property.js']
+
+
describe "strings and functions", ->
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']
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[3]).toEqual value: ".", scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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']
expect(tokens[6]).toEqual value: "'", scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'string.quoted.single.js', 'punctuation.definition.string.begin.js']
@@ -1832,11 +1858,6 @@ describe "JavaScript grammar", ->
expect(tokens[1]).toEqual value: ' foo ', scopes: ['source.js', 'comment.block.documentation.js']
expect(tokens[2]).toEqual value: '*/', scopes: ['source.js', 'comment.block.documentation.js', 'punctuation.definition.comment.end.js']
- it "tokenizes // comments", ->
- {tokens} = grammar.tokenizeLine('// comment')
- expect(tokens[0]).toEqual value: '//', scopes: ['source.js', 'comment.line.double-slash.js', 'punctuation.definition.comment.js']
- expect(tokens[1]).toEqual value: ' comment', scopes: ['source.js', 'comment.line.double-slash.js']
-
it "tokenizes comments inside constant definitions", ->
{tokens} = grammar.tokenizeLine('const a, // comment')
expect(tokens[0]).toEqual value: 'const', scopes: ['source.js', 'storage.type.const.js']
@@ -1911,7 +1932,7 @@ describe "JavaScript grammar", ->
it "tokenizes console support functions", ->
{tokens} = grammar.tokenizeLine('console.log().log()')
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[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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.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']
@@ -1921,7 +1942,7 @@ 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', 'comment.block.empty.js', 'punctuation.definition.comment.begin.js']
expect(tokens[2]).toEqual value: '*/', scopes: ['source.js', 'comment.block.empty.js', 'punctuation.definition.comment.end.js']
- expect(tokens[3]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(tokens[3]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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']
@@ -1931,7 +1952,7 @@ describe "JavaScript grammar", ->
.log();
'''
expect(lines[0][0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.console.js']
- expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(lines[1][1]).toEqual value: 'log', scopes: ['source.js', 'meta.method-call.js', 'support.function.console.js']
expect(lines[1][2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js']
expect(lines[1][3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
@@ -1939,7 +1960,7 @@ describe "JavaScript grammar", ->
{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[2]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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']
@@ -1948,7 +1969,7 @@ describe "JavaScript grammar", ->
it "tokenizes console custom functions", ->
{tokens} = grammar.tokenizeLine('console.foo();')
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[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(tokens[2]).toEqual value: 'foo', 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.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']
@@ -1966,7 +1987,7 @@ describe "JavaScript grammar", ->
it "tokenizes math support functions/properties", ->
{tokens} = grammar.tokenizeLine('Math.random();')
expect(tokens[0]).toEqual value: 'Math', scopes: ['source.js', 'support.class.math.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(tokens[2]).toEqual value: 'random', scopes: ['source.js', 'meta.method-call.js', 'support.function.math.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']
@@ -1977,7 +1998,7 @@ describe "JavaScript grammar", ->
.random();
'''
expect(lines[0][0]).toEqual value: 'Math', scopes: ['source.js', 'support.class.math.js']
- expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(lines[1][1]).toEqual value: 'random', scopes: ['source.js', 'meta.method-call.js', 'support.function.math.js']
expect(lines[1][2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js']
expect(lines[1][3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
@@ -1985,14 +2006,14 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('Math.PI;')
expect(tokens[0]).toEqual value: 'Math', scopes: ['source.js', 'support.class.math.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'PI', scopes: ['source.js', 'support.constant.property.math.js']
expect(tokens[3]).toEqual value: ';', scopes: ['source.js', 'punctuation.terminator.statement.js']
it "tokenizes math custom functions", ->
{tokens} = grammar.tokenizeLine('Math.PI();')
expect(tokens[0]).toEqual value: 'Math', scopes: ['source.js', 'support.class.math.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(tokens[2]).toEqual value: 'PI', 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.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']
@@ -2007,7 +2028,7 @@ describe "JavaScript grammar", ->
it "tokenizes promise support functions", ->
{tokens} = grammar.tokenizeLine('Promise.race();')
expect(tokens[0]).toEqual value: 'Promise', scopes: ['source.js', 'support.class.promise.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(tokens[2]).toEqual value: 'race', scopes: ['source.js', 'meta.method-call.js', 'support.function.promise.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']
@@ -2018,7 +2039,7 @@ describe "JavaScript grammar", ->
.resolve();
'''
expect(lines[0][0]).toEqual value: 'Promise', scopes: ['source.js', 'support.class.promise.js']
- expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(lines[1][1]).toEqual value: 'resolve', scopes: ['source.js', 'meta.method-call.js', 'support.function.promise.js']
expect(lines[1][2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js']
expect(lines[1][3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
@@ -2027,7 +2048,7 @@ describe "JavaScript grammar", ->
it "tokenizes promise custom functions", ->
{tokens} = grammar.tokenizeLine('Promise.anExtraFunction();')
expect(tokens[0]).toEqual value: 'Promise', scopes: ['source.js', 'support.class.promise.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
expect(tokens[2]).toEqual value: 'anExtraFunction', 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.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']
From f88510adc7c10f65b2fd1e5dcd8883a6ad1f8636 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 13 Nov 2020 08:25:05 -0600
Subject: [PATCH 03/55] Update tree-sitter-javascript.cson
---
grammars/tree-sitter-javascript.cson | 2 ++
1 file changed, 2 insertions(+)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index a061c4d3..e0d9ca80 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -206,6 +206,7 @@ scopes:
'"<"': 'keyword.operator.js'
'":"': 'keyword.operator.js'
'"?"': 'keyword.operator.js'
+ '"??"': 'keyword.operator.js'
'"&&"': 'keyword.operator.js'
'"||"': 'keyword.operator.js'
'"&"': 'keyword.operator.js'
@@ -228,6 +229,7 @@ scopes:
'"get"': 'keyword.operator.setter'
'"set"': 'keyword.operator.setter'
+ '"?."': 'meta.delimiter.optional'
'"."': 'meta.delimiter.period'
'","': 'meta.delimiter.comma'
From ebe65f1d58d49e65573c685f1f51417fb17fc2ca Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 13 Nov 2020 08:28:03 -0600
Subject: [PATCH 04/55] Update javascript.cson
---
grammars/javascript.cson | 102 +++++++++++++++++++++------------------
1 file changed, 55 insertions(+), 47 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 09b456cb..78265666 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1,3 +1,6 @@
+# Note: Because of the optional chaining operator (?.), "object.property" in the comments usually means ("object.property" or "object?.property")
+# Even though sometimes it doesn't seem like using the chaining operator would make any sense, it's still supported. example: Math?.PI
+# Negative lookbehinds for "." Shouldddd cover "?."
'scopeName': 'source.js'
'fileTypes': [
'js'
@@ -284,8 +287,8 @@
]
}
{
- # [.]foo = function...
- 'begin': '(?=(\\.)?[a-zA-Z_$][\\w$]*\\s*=\\s*(\\basync\\b\\s*)?\\bfunction\\b)'
+ # [?].foo = function...
+ 'begin': '(?=(\\?\\.|\\.)?[a-zA-Z_$][\\w$]*\\s*=\\s*(\\basync\\b\\s*)?\\bfunction\\b)'
'end': '(?<=})'
'patterns': [
{
@@ -300,10 +303,10 @@
'name': 'meta.function.js'
'patterns': [
{
- 'match': '(\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
+ 'match': '(\\?\\.|\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
'captures':
'1':
- 'name': 'meta.delimiter.method.period.js'
+ 'name': 'meta.delimiter.method.js'
'2':
'name': 'entity.name.function.js'
'3':
@@ -533,10 +536,10 @@
]
}
{
- # [.]foo = ... => ...
+ # [.|?.]foo = ... => ...
'begin': '''(?x)
(?=
- (\\.)?[a-zA-Z_$][\\w$]*
+ (\\?\\.|\\.)?[a-zA-Z_$][\\w$]*
\\s*(=)\\s*
((\\(([^\\(\\)]*)?\\))|[\\w$]+)
\\s*=>
@@ -546,8 +549,8 @@
(?<=})|
((?!
\\s*{|
- \\G(\\.)?[a-zA-Z_$][\\w$]*\\s*(=)\\s*\\(|
- \\G(\\.)?[a-zA-Z_$][\\w$]*\\s*(=)\\s*[\\w$]+|
+ \\G(\\?\\.|\\.)?[a-zA-Z_$][\\w$]*\\s*(=)\\s*\\(|
+ \\G(\\?\\.|\\.)?[a-zA-Z_$][\\w$]*\\s*(=)\\s*[\\w$]+|
\\s*/\\*|\\s*//
)(?=\\s*\\S))
'''
@@ -564,10 +567,10 @@
'name': 'meta.function.arrow.js'
'patterns': [
{
- 'match': '\\G(\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
+ 'match': '\\G(\\?\\.|\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
'captures':
'1':
- 'name': 'meta.delimiter.method.period.js'
+ 'name': 'meta.delimiter.method.js'
'2':
'name': 'entity.name.function.js'
'3':
@@ -729,8 +732,8 @@
'name': 'entity.name.type.instance.js'
'patterns': [
{
- 'match': '\\.'
- 'name': 'meta.delimiter.property.period.js'
+ 'match': '\\?\\.|\\.'
+ 'name': 'meta.delimiter.property.js'
}
]
}
@@ -743,7 +746,7 @@
'name': 'entity.name.type.object.console.js'
'end': '''(?x)
(?<=\\)) | (?=
- (?! (\\s*//)|(\\s*/\\*)|(\\s*(\\.)\\s*
+ (?! (\\s*//)|(\\s*/\\*)|(\\s*(\\?\\.|\\.)\\s*
(assert|clear|debug|error|info|log|profile|profileEnd|time|timeEnd|warn)
\\s*\\(
)) \\s*\\S
@@ -754,10 +757,10 @@
'include': '#comments'
}
{
- 'begin': '\\s*(\\.)\\s*(\\w+)\\s*(?=\\()'
+ 'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
'1':
- 'name': 'meta.delimiter.method.period.js'
+ 'name': 'meta.delimiter.method.js'
'2':
'name': 'support.function.console.js'
'end': '(?<=\\))'
@@ -779,7 +782,7 @@
'end': '''(?x)
(?<=E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2|\\)
) | (?=
- (?! (\\s*//)|(\\s*/\\*)|(\\s*\\.\\s* (
+ (?! (\\s*//)|(\\s*/\\*)|(\\s*(\\?\\.|\\.)\\s* (
((abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp|
expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random|
round|sign|sin|sinh|sqrt|tan|tanh|trunc)\\s*\\(
@@ -793,10 +796,10 @@
}
{
# Math.random()
- 'begin': '\\s*(\\.)\\s*(\\w+)\\s*(?=\\()'
+ 'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
'1':
- 'name': 'meta.delimiter.method.period.js'
+ 'name': 'meta.delimiter.method.js'
'2':
'name': 'support.function.math.js'
'end': '(?<=\\))'
@@ -809,10 +812,10 @@
}
{
# Math.PI
- 'match': '\\s*(\\.)\\s*(\\w+)\\b'
+ 'match': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\b'
'captures':
'1':
- 'name': 'meta.delimiter.property.period.js'
+ 'name': 'meta.delimiter.property.js'
'2':
'name': 'support.constant.property.math.js'
}
@@ -826,7 +829,7 @@
'name': 'support.class.promise.js'
'end': '''(?x)
(?<=\\)) | (?=
- (?! (\\s*//)|(\\s*/\\*)|(\\s*\\.\\s*(all|race|reject|resolve)\\s*\\() )\\s*\\S
+ (?! (\\s*//)|(\\s*/\\*)|(\\s*(\\?\\.|\\.)\\s*(all|race|reject|resolve)\\s*\\() )\\s*\\S
)
'''
'patterns': [
@@ -835,10 +838,10 @@
}
{
# Promise.all()
- 'begin': '\\s*(\\.)\\s*(\\w+)\\s*(?=\\()'
+ 'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
'1':
- 'name': 'meta.delimiter.method.period.js'
+ 'name': 'meta.delimiter.method.js'
'2':
'name': 'support.function.promise.js'
'end': '(?<=\\))'
@@ -941,6 +944,7 @@
'name': 'meta.control.yield.js'
}
{
+ # Isn't about "." but rather "...", don't need to check "?."
'match': '(?:(?<=\\.{3})|(?
Date: Fri, 13 Nov 2020 09:06:26 -0600
Subject: [PATCH 05/55] More accurate comment
What a silly commit
---
grammars/javascript.cson | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 78265666..6bdcf368 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -287,7 +287,7 @@
]
}
{
- # [?].foo = function...
+ # [?.]foo = function...
'begin': '(?=(\\?\\.|\\.)?[a-zA-Z_$][\\w$]*\\s*=\\s*(\\basync\\b\\s*)?\\bfunction\\b)'
'end': '(?<=})'
'patterns': [
From 9f9767d837651d26ebd27b446b3a032bd19cd489 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 4 Jan 2021 11:24:21 -0600
Subject: [PATCH 06/55] Add all missing operators
"delete" is not listed as an operator like typeof... not changing for now
---
grammars/tree-sitter-javascript.cson | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index e0d9ca80..f926ec2f 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -184,18 +184,23 @@ scopes:
'"*="': 'keyword.operator.js'
'"/="': 'keyword.operator.js'
'"%="': 'keyword.operator.js'
+ '"**="': 'keyword.operator.js'
'"<<="': 'keyword.operator.js'
'">>="': 'keyword.operator.js'
'">>>="': 'keyword.operator.js'
'"&="': 'keyword.operator.js'
'"^="': 'keyword.operator.js'
'"|="': 'keyword.operator.js'
+ '"&&="': 'keyword.operator.js'
+ '"||="': 'keyword.operator.js'
+ '"??="': 'keyword.operator.js'
'"!"': 'keyword.operator.js'
'"+"': 'keyword.operator.js'
'"-"': 'keyword.operator.js'
'"*"': 'keyword.operator.js'
'"/"': 'keyword.operator.js'
'"%"': 'keyword.operator.js'
+ '"**"': 'keyword.operator.js'
'"=="': 'keyword.operator.js'
'"==="': 'keyword.operator.js'
'"!="': 'keyword.operator.js'
From ea7f122a51b9d892b7ce58d3a52f8361197f7881 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 4 Jan 2021 11:29:00 -0600
Subject: [PATCH 07/55] Add missing assignment operators
---
grammars/javascript.cson | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 6bdcf368..ee01c8bd 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1294,9 +1294,13 @@
'operators':
'patterns': [
{
- 'match': '%=|\\+=|-=|\\*=|(?>=|>>>=|\\|='
'name': 'keyword.operator.assignment.compound.bitwise.js'
From eedb1dc409e6677e1d4d6527f7fc27ca1903d5ee Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 4 Jan 2021 11:40:39 -0600
Subject: [PATCH 08/55] Start trying to make ?. work
---
grammars/javascript.cson | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index ee01c8bd..5d51a945 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1194,10 +1194,13 @@
'name': 'meta.delimiter.object.comma.js'
}
{
- # Optional chaining operator
- 'match': '\\?\\.|\\.'
+ 'match': '\\.'
'name': 'meta.delimiter.method.js'
}
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js
+ }
{
# Allows the special return snippet to fire.
'match': '({)(})'
From 71a109452d2f78ffca2e5380a1b044f29eb4d67b Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 4 Jan 2021 11:50:40 -0600
Subject: [PATCH 09/55] test for extra operators
add "optional", "**=", and other test
---
spec/javascript-spec.coffee | 32 ++++++++++++++++++++++++++------
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee
index ed564c4d..f27185cd 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -504,13 +504,22 @@ describe "JavaScript grammar", ->
describe "compound", ->
it "tokenizes them", ->
- operators = ["+=", "-=", "*=", "/=", "%="]
+ operators = ["+=", "-=", "*=", "/=", "%=", "**="]
for operator in operators
{tokens} = grammar.tokenizeLine('a ' + operator + ' b')
expect(tokens[0]).toEqual value: 'a ', scopes: ['source.js']
expect(tokens[1]).toEqual value: operator, scopes: ['source.js', 'keyword.operator.assignment.compound.js']
expect(tokens[2]).toEqual value: ' b', scopes: ['source.js']
+ describe "logical", ->
+ it "tokenizes them", ->
+ operators = ["||=", "&&=", "??="]
+ for operator in operators
+ {tokens} = grammar.tokenizeLine('a ' + operator + ' b')
+ expect(tokens[0]).toEqual value: 'a ', scopes: ['source.js']
+ expect(tokens[1]).toEqual value: operator, scopes: ['source.js', 'keyword.operator.assignment.compound.logical.js']
+ expect(tokens[2]).toEqual value: ' b', scopes: ['source.js']
+
describe "bitwise", ->
it "tokenizes them", ->
operators = ["<<=", ">>=", ">>>=", "&=", "^=", "|="]
@@ -1774,27 +1783,38 @@ describe "JavaScript grammar", ->
expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
expect(tokens[2]).toEqual value: 'C', scopes: ['source.js', 'constant.other.property.js']
- it "supports the optional chaining operator", ->
+ it "tokenizes the optional chaining operator", ->
{tokens} = grammar.tokenizeLine('obj?.prop')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
expect(tokens[2]).toEqual value: 'prop', scopes: ['source.js', 'variable.other.property.js']
{tokens} = grammar.tokenizeLine('obj?.$_')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
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.bracket.round.js']
- expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.optional.js']
expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js']
{tokens} = grammar.tokenizeLine('a()?.MY_CONSTANT')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']
- expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
expect(tokens[4]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.property.js']
+ {tokens} = grammar.tokenizeLine('a.b?.()')
+ expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.optional.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.delimiter.method.optional.js']
+
+ {tokens} = grammar.tokenizeLine('a?.[5]')
+ expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
+ expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
+ expect(tokens[2]).toEqual value: '[', scopes: ['source.js', 'meta.brace.square.js']
+
describe "strings and functions", ->
it "doesn't confuse them", ->
From 6ecd4eb769800ab1a7a475dfc30e17cafae95d58 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 25 Jan 2021 21:50:04 -0600
Subject: [PATCH 10/55] what am i doing
---
grammars/javascript.cson | 46 ++++++++++++++++++++++++++++++++++------
1 file changed, 40 insertions(+), 6 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 5d51a945..99b13596 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -303,10 +303,20 @@
'name': 'meta.function.js'
'patterns': [
{
- 'match': '(\\?\\.|\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
+ 'match': '(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
'captures':
'1':
- 'name': 'meta.delimiter.method.js'
+ 'name': 'meta.delimiter.method.optional.js'
+ '2':
+ 'name': 'entity.name.function.js'
+ '3':
+ 'name': 'keyword.operator.assignment.js'
+ }
+ {
+ 'match': '(\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
+ 'captures':
+ '1':
+ 'name': 'meta.delimiter.method.period.js'
'2':
'name': 'entity.name.function.js'
'3':
@@ -567,10 +577,20 @@
'name': 'meta.function.arrow.js'
'patterns': [
{
- 'match': '\\G(\\?\\.|\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
+ 'match': '\\G(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
+ 'captures':
+ '1':
+ 'name': 'meta.delimiter.method.optional.js'
+ '2':
+ 'name': 'entity.name.function.js'
+ '3':
+ 'name': 'keyword.operator.assignment.js'
+ }
+ {
+ 'match': '\\G(\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
'captures':
'1':
- 'name': 'meta.delimiter.method.js'
+ 'name': 'meta.delimiter.method.period.js'
'2':
'name': 'entity.name.function.js'
'3':
@@ -1193,9 +1213,23 @@
'match': ','
'name': 'meta.delimiter.object.comma.js'
}
- {
- 'match': '\\.'
+ {
+ 'match': '\\?\\.|\\.'
'name': 'meta.delimiter.method.js'
+ 'patterns': [
+ {
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js
+ }
+ ]
+ }
+ {
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
}
{
'match': '\\?\\.'
From bd2b3895b59a5d1b7a8558b08f1a5a61cfdc81c3 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 20:46:15 -0600
Subject: [PATCH 11/55] add end quote
---
grammars/javascript.cson | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 99b13596..1ae852c0 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1233,7 +1233,7 @@
}
{
'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js
+ 'name': 'meta.delimiter.method.optional.js'
}
{
# Allows the special return snippet to fire.
From 6f32f5ad84fe1ca2034c104a27e34c39a4ec7c3a Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 20:53:15 -0600
Subject: [PATCH 12/55] add Another quote!
ok no syntax stuff now
---
grammars/javascript.cson | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 1ae852c0..91a11c2b 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1223,7 +1223,7 @@
}
{
'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js
+ 'name': 'meta.delimiter.method.optional.js'
}
]
}
From 58366b80a8d7828bbfd2563673f212cba5a73a33 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 21:09:56 -0600
Subject: [PATCH 13/55] add .period / .optional [skip ci]
See the previous result
---
spec/javascript-spec.coffee | 76 ++++++++++++++++++-------------------
1 file changed, 38 insertions(+), 38 deletions(-)
diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee
index f27185cd..46051d66 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -172,9 +172,9 @@ describe "JavaScript grammar", ->
expect(tokens[4]).toEqual value: 'new', scopes: ['source.js', 'meta.class.instance.constructor.js', 'keyword.operator.new.js']
expect(tokens[5]).toEqual value: ' ', scopes: ['source.js', 'meta.class.instance.constructor.js']
expect(tokens[6]).toEqual value: 'obj', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js']
- expect(tokens[7]).toEqual value: '.', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js', 'meta.delimiter.property.js']
+ expect(tokens[7]).toEqual value: '.', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js', 'meta.delimiter.property.period.js']
expect(tokens[8]).toEqual value: 'ct', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js']
- expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js', 'meta.delimiter.property.js']
+ expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js', 'meta.delimiter.property.period.js']
expect(tokens[10]).toEqual value: 'Cla$s', scopes: ['source.js', 'meta.class.instance.constructor.js', 'entity.name.type.instance.js']
expect(tokens[11]).toEqual value: '(', scopes: ['source.js', 'meta.brace.round.js']
expect(tokens[12]).toEqual value: ')', scopes: ['source.js', 'meta.brace.round.js']
@@ -690,7 +690,7 @@ describe "JavaScript grammar", ->
expect(tokens[0]).toEqual value: 'awesome ', scopes: ['source.js']
expect(tokens[1]).toEqual value: '=', scopes: ['source.js', 'keyword.operator.assignment.js']
expect(tokens[3]).toEqual value: 'cool', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[4]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[4]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[5]).toEqual value: 'EPSILON', scopes: ['source.js', 'support.constant.js']
expect(tokens[6]).toEqual value: ';', scopes: ['source.js', 'punctuation.terminator.statement.js']
@@ -760,7 +760,7 @@ describe "JavaScript grammar", ->
it "tokenizes innerHTML attribute declarations with string template tags", ->
{tokens} = grammar.tokenizeLine('text.innerHTML = `hey ${name}`')
expect(tokens[0]).toEqual value: 'text', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: 'innerHTML', scopes: ['source.js', 'variable.other.property.js']
expect(tokens[3]).toEqual value: ' ', scopes: ['source.js']
expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'keyword.operator.assignment.js']
@@ -1227,7 +1227,7 @@ describe "JavaScript grammar", ->
it "tokenizes functions as object properties", ->
{tokens} = grammar.tokenizeLine('obj.method = function foo(')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.period.js']
expect(tokens[2]).toEqual value: 'method', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'meta.function.js', 'keyword.operator.assignment.js']
expect(tokens[6]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
@@ -1236,12 +1236,12 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('this.register = function(')
expect(tokens[0]).toEqual value: 'this', scopes: ['source.js', 'variable.language.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.period.js']
expect(tokens[2]).toEqual value: 'register', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
expect(tokens[6]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
{tokens} = grammar.tokenizeLine('document.getElementById("foo").onclick = function(')
- expect(tokens[8]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.js']
+ expect(tokens[8]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.delimiter.method.period.js']
expect(tokens[9]).toEqual value: 'onclick', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
expect(tokens[13]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
@@ -1489,7 +1489,7 @@ describe "JavaScript grammar", ->
expect(tokens[4]).toEqual value: 'thing', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'variable.parameter.function.js']
expect(tokens[6]).toEqual value: '=', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'keyword.operator.assignment.js']
expect(tokens[8]).toEqual value: 'this', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'variable.language.js']
- expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(tokens[10]).toEqual value: 'something', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'meta.method-call.js', 'entity.name.function.js']
it "tokenizes the rest parameter", ->
@@ -1639,7 +1639,7 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('a(1.prop)')
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.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", ->
@@ -1662,7 +1662,7 @@ describe "JavaScript grammar", ->
it "tokenizes method calls", ->
{tokens} = grammar.tokenizeLine('a.b(1+1)')
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.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.bracket.round.js']
expect(tokens[4]).toEqual value: '1', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'constant.numeric.decimal.js']
@@ -1671,7 +1671,7 @@ describe "JavaScript grammar", ->
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.js']
+ 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']
@@ -1687,25 +1687,25 @@ describe "JavaScript grammar", ->
.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.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.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.bracket.round.js']
- expect(lines[1][1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.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.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.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.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.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.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.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']
@@ -1721,7 +1721,7 @@ describe "JavaScript grammar", ->
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.js']
+ 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.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']
@@ -1729,7 +1729,7 @@ describe "JavaScript grammar", ->
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.js']
+ 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.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']
@@ -1738,17 +1738,17 @@ describe "JavaScript grammar", ->
it "tokenizes properties", ->
{tokens} = grammar.tokenizeLine('obj.property')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: 'property', scopes: ['source.js', 'variable.other.property.js']
{tokens} = grammar.tokenizeLine('obj.property.property')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: 'property', scopes: ['source.js', 'variable.other.object.property.js']
{tokens} = grammar.tokenizeLine('obj.Property')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: 'Property', scopes: ['source.js', 'variable.other.property.js']
{tokens} = grammar.tokenizeLine('obj.$abc$')
@@ -1759,28 +1759,28 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('a().b')
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.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']
{tokens} = grammar.tokenizeLine('a.123illegal')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: '123illegal', scopes: ['source.js', 'invalid.illegal.identifier.js']
it "tokenizes constant properties", ->
{tokens} = grammar.tokenizeLine('obj.MY_CONSTANT')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.property.js']
{tokens} = grammar.tokenizeLine('obj.MY_CONSTANT.prop')
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.object.property.js']
{tokens} = grammar.tokenizeLine('a.C')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: 'C', scopes: ['source.js', 'constant.other.property.js']
it "tokenizes the optional chaining operator", ->
@@ -1822,7 +1822,7 @@ describe "JavaScript grammar", ->
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']
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.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.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']
@@ -1952,7 +1952,7 @@ describe "JavaScript grammar", ->
it "tokenizes console support functions", ->
{tokens} = grammar.tokenizeLine('console.log().log()')
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.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.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']
@@ -1962,7 +1962,7 @@ 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', 'comment.block.empty.js', 'punctuation.definition.comment.begin.js']
expect(tokens[2]).toEqual value: '*/', scopes: ['source.js', 'comment.block.empty.js', 'punctuation.definition.comment.end.js']
- expect(tokens[3]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(tokens[3]).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']
@@ -1972,7 +1972,7 @@ describe "JavaScript grammar", ->
.log();
'''
expect(lines[0][0]).toEqual value: 'console', scopes: ['source.js', 'entity.name.type.object.console.js']
- expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(lines[1][1]).toEqual value: 'log', scopes: ['source.js', 'meta.method-call.js', 'support.function.console.js']
expect(lines[1][2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js']
expect(lines[1][3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
@@ -1980,7 +1980,7 @@ describe "JavaScript grammar", ->
{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.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']
@@ -1989,7 +1989,7 @@ describe "JavaScript grammar", ->
it "tokenizes console custom functions", ->
{tokens} = grammar.tokenizeLine('console.foo();')
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.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(tokens[2]).toEqual value: 'foo', 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.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']
@@ -2007,7 +2007,7 @@ describe "JavaScript grammar", ->
it "tokenizes math support functions/properties", ->
{tokens} = grammar.tokenizeLine('Math.random();')
expect(tokens[0]).toEqual value: 'Math', scopes: ['source.js', 'support.class.math.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(tokens[2]).toEqual value: 'random', scopes: ['source.js', 'meta.method-call.js', 'support.function.math.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']
@@ -2018,7 +2018,7 @@ describe "JavaScript grammar", ->
.random();
'''
expect(lines[0][0]).toEqual value: 'Math', scopes: ['source.js', 'support.class.math.js']
- expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(lines[1][1]).toEqual value: 'random', scopes: ['source.js', 'meta.method-call.js', 'support.function.math.js']
expect(lines[1][2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js']
expect(lines[1][3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
@@ -2026,14 +2026,14 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('Math.PI;')
expect(tokens[0]).toEqual value: 'Math', scopes: ['source.js', 'support.class.math.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
expect(tokens[2]).toEqual value: 'PI', scopes: ['source.js', 'support.constant.property.math.js']
expect(tokens[3]).toEqual value: ';', scopes: ['source.js', 'punctuation.terminator.statement.js']
it "tokenizes math custom functions", ->
{tokens} = grammar.tokenizeLine('Math.PI();')
expect(tokens[0]).toEqual value: 'Math', scopes: ['source.js', 'support.class.math.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(tokens[2]).toEqual value: 'PI', 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.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']
@@ -2048,7 +2048,7 @@ describe "JavaScript grammar", ->
it "tokenizes promise support functions", ->
{tokens} = grammar.tokenizeLine('Promise.race();')
expect(tokens[0]).toEqual value: 'Promise', scopes: ['source.js', 'support.class.promise.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(tokens[2]).toEqual value: 'race', scopes: ['source.js', 'meta.method-call.js', 'support.function.promise.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']
@@ -2059,7 +2059,7 @@ describe "JavaScript grammar", ->
.resolve();
'''
expect(lines[0][0]).toEqual value: 'Promise', scopes: ['source.js', 'support.class.promise.js']
- expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(lines[1][0]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(lines[1][1]).toEqual value: 'resolve', scopes: ['source.js', 'meta.method-call.js', 'support.function.promise.js']
expect(lines[1][2]).toEqual value: '(', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.begin.bracket.round.js']
expect(lines[1][3]).toEqual value: ')', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
@@ -2068,7 +2068,7 @@ describe "JavaScript grammar", ->
it "tokenizes promise custom functions", ->
{tokens} = grammar.tokenizeLine('Promise.anExtraFunction();')
expect(tokens[0]).toEqual value: 'Promise', scopes: ['source.js', 'support.class.promise.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.period.js']
expect(tokens[2]).toEqual value: 'anExtraFunction', 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.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']
From 9b77470cc26c418567ddd10c5ff5a716e53fd322 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 22:03:13 -0600
Subject: [PATCH 14/55] use #includes instead
---
grammars/javascript.cson | 205 +++++++++++++++++++++++++++++----------
1 file changed, 155 insertions(+), 50 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 91a11c2b..e1f65034 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -306,17 +306,11 @@
'match': '(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
'captures':
'1':
- 'name': 'meta.delimiter.method.optional.js'
- '2':
- 'name': 'entity.name.function.js'
- '3':
- 'name': 'keyword.operator.assignment.js'
- }
- {
- 'match': '(\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
- 'captures':
- '1':
- 'name': 'meta.delimiter.method.period.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'entity.name.function.js'
'3':
@@ -580,17 +574,11 @@
'match': '\\G(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
'captures':
'1':
- 'name': 'meta.delimiter.method.optional.js'
- '2':
- 'name': 'entity.name.function.js'
- '3':
- 'name': 'keyword.operator.assignment.js'
- }
- {
- 'match': '\\G(\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
- 'captures':
- '1':
- 'name': 'meta.delimiter.method.period.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'entity.name.function.js'
'3':
@@ -752,8 +740,7 @@
'name': 'entity.name.type.instance.js'
'patterns': [
{
- 'match': '\\?\\.|\\.'
- 'name': 'meta.delimiter.property.js'
+ 'include': '#period_or_optional_property'
}
]
}
@@ -780,7 +767,11 @@
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
'1':
- 'name': 'meta.delimiter.method.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'support.function.console.js'
'end': '(?<=\\))'
@@ -819,7 +810,11 @@
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
'1':
- 'name': 'meta.delimiter.method.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'support.function.math.js'
'end': '(?<=\\))'
@@ -835,7 +830,11 @@
'match': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\b'
'captures':
'1':
- 'name': 'meta.delimiter.property.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'support.constant.property.math.js'
}
@@ -861,7 +860,11 @@
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
'1':
- 'name': 'meta.delimiter.method.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'support.function.promise.js'
'end': '(?<=\\))'
@@ -1013,7 +1016,11 @@
'''
'captures':
'1':
- 'name': 'meta.delimiter.property.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'support.variable.property.js'
'3':
@@ -1129,7 +1136,11 @@
'''
'captures':
'1':
- 'name': 'meta.delimiter.property.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'support.constant.dom.js'
'3':
@@ -1213,20 +1224,6 @@
'match': ','
'name': 'meta.delimiter.object.comma.js'
}
- {
- 'match': '\\?\\.|\\.'
- 'name': 'meta.delimiter.method.js'
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.method.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
- ]
- }
{
'match': '\\.'
'name': 'meta.delimiter.method.period.js'
@@ -1689,7 +1686,11 @@
'begin': '(\\?\\.|\\.)\\s*([\\w$]+)\\s*(?=\\()'
'beginCaptures':
'1':
- 'name': 'meta.delimiter.method.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'patterns': [
{
@@ -1827,6 +1828,44 @@
}
]
}
+ {
+ # functionCall?.(arg1, "arg2", [...])
+ 'begin': '([\\w$]+)\\s*(\\?\\.)(?=\\()'
+ 'beginCaptures':
+ '1':
+ 'patterns': [
+ {
+ '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': "[a-zA-Z_$][\\w$]*"
+ 'name': 'entity.name.function.js'
+ }
+ {
+ 'match': '\\d[\\w$]*'
+ 'name': 'invalid.illegal.identifier.js'
+ }
+ ]
+ '2':
+ 'patterns': [
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js'
+ }
+ ]
+ 'end': '(?<=\\))'
+ 'name': 'meta.function-call.js'
+ 'patterns': [
+ {
+ 'include': '#arguments'
+ }
+ ]
+ }
]
'objects':
'patterns': [
@@ -1849,7 +1888,11 @@
'match': '(\\?\\.|\\.)\\s*([A-Z][A-Z0-9_$]*\\b\\$*)(?=\\s*(\\?\\.|\\.)\\s*[a-zA-Z_$]\\w*)'
'captures':
'1':
- 'name': 'meta.delimiter.property.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'constant.other.object.property.js'
}
@@ -1858,7 +1901,11 @@
'match': '(\\?\\.|\\.)\\s*(\\$*[a-zA-Z_$][\\w$]*)(?=\\s*(\\?\\.|\\.)\\s*[a-zA-Z_$]\\w*)'
'captures':
'1':
- 'name': 'meta.delimiter.property.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'variable.other.object.property.js'
}
@@ -1867,7 +1914,11 @@
'match': '(\\?\\.|\\.)\\s*([A-Z][A-Z0-9_$]*\\b\\$*)'
'captures':
'1':
- 'name': 'meta.delimiter.property.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'constant.other.property.js'
}
@@ -1876,7 +1927,11 @@
'match': '(\\?\\.|\\.)\\s*(\\$*[a-zA-Z_$][\\w$]*)'
'captures':
'1':
- 'name': 'meta.delimiter.property.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'variable.other.property.js'
}
@@ -1885,7 +1940,11 @@
'match': '(\\?\\.|\\.)\\s*([0-9][\\w$]*)'
'captures':
'1':
- 'name': 'meta.delimiter.property.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'invalid.illegal.identifier.js'
}
@@ -2050,3 +2109,49 @@
]
}
]
+ 'period_or_optional_property':
+ 'patterns': [
+ {
+ 'match': '(\\.)'
+ 'captures':
+ '1':
+ 'patterns': [
+ {
+ 'meta.delimiter.property.period.js'
+ }
+ ]
+ }
+ {
+ 'match': '(\\?\\.)'
+ 'captures':
+ '1':
+ 'patterns': [
+ {
+ 'meta.delimiter.property.optional.js'
+ }
+ ]
+ }
+ ]
+ 'period_or_optional_method':
+ 'patterns': [
+ {
+ 'match': '(\\.)'
+ 'captures':
+ '1':
+ 'patterns': [
+ {
+ 'meta.delimiter.method.period.js'
+ }
+ ]
+ }
+ {
+ 'match': '(\\?\\.)'
+ 'captures':
+ '1':
+ 'patterns': [
+ {
+ 'meta.delimiter.method.optional.js'
+ }
+ ]
+ }
+ ]
From daf57b2bd4235487a9c948ed3aef3fc8d9529043 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 22:12:39 -0600
Subject: [PATCH 15/55] only fixes 1 error
---
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 46051d66..ee1fde79 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -1806,7 +1806,7 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('a.b?.()')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.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.delimiter.method.optional.js']
From 0594be36c7b1060aabcf7cbeed2da68171709b05 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 22:18:55 -0600
Subject: [PATCH 16/55] fix caputres
---
grammars/javascript.cson | 32 ++++++++------------------------
1 file changed, 8 insertions(+), 24 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index e1f65034..66a61207 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -2114,22 +2114,14 @@
{
'match': '(\\.)'
'captures':
- '1':
- 'patterns': [
- {
- 'meta.delimiter.property.period.js'
- }
- ]
+ '0':
+ 'name': 'meta.delimiter.property.period.js'
}
{
'match': '(\\?\\.)'
'captures':
- '1':
- 'patterns': [
- {
- 'meta.delimiter.property.optional.js'
- }
- ]
+ '0':
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'period_or_optional_method':
@@ -2137,21 +2129,13 @@
{
'match': '(\\.)'
'captures':
- '1':
- 'patterns': [
- {
- 'meta.delimiter.method.period.js'
- }
- ]
+ '0':
+ 'name': 'meta.delimiter.method.period.js'
}
{
'match': '(\\?\\.)'
'captures':
- '1':
- 'patterns': [
- {
- 'meta.delimiter.method.optional.js'
- }
- ]
+ '0':
+ 'name': 'meta.delimiter.method.optional.js'
}
]
From 1976fc01ab99dd3503dadd83aad7c81bd5596ec2 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 22:21:50 -0600
Subject: [PATCH 17/55] update name [skip ci]
---
spec/jsdoc-spec.coffee | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spec/jsdoc-spec.coffee b/spec/jsdoc-spec.coffee
index bd6b4c0e..8baf4e28 100644
--- a/spec/jsdoc-spec.coffee
+++ b/spec/jsdoc-spec.coffee
@@ -372,7 +372,7 @@ describe "JSDoc grammar", ->
expect(tokens[10]).toEqual value: 'variable', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc']
expect(tokens[11]).toEqual value: '=', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'keyword.operator.assignment.jsdoc']
expect(tokens[12]).toEqual value: 'default', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'source.embedded.js', 'variable.other.object.js']
- expect(tokens[13]).toEqual value: '.', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'source.embedded.js', 'meta.delimiter.property.js']
+ expect(tokens[13]).toEqual value: '.', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'source.embedded.js', 'meta.delimiter.property.period.js']
expect(tokens[14]).toEqual value: 'value', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'source.embedded.js', 'support.variable.property.dom.js']
expect(tokens[15]).toEqual value: ']', scopes: ['source.js', 'comment.block.documentation.js', 'variable.other.jsdoc', 'punctuation.definition.optional-value.end.bracket.square.jsdoc']
expect(tokens[16]).toEqual value: ' this is the description ', scopes: ['source.js', 'comment.block.documentation.js']
From 71c1297cbd0c1a941bc4ddc194520d2f429581b6 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 22:42:21 -0600
Subject: [PATCH 18/55] simplify
---
grammars/javascript.cson | 33 +++++++++------------------------
1 file changed, 9 insertions(+), 24 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 66a61207..6bfc9f24 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -731,6 +731,7 @@
'name': 'meta.class.js'
}
{
+ # TODO: optional chaining is possible here
'match': '(new)\\s+([\\w$]+[\\w.$]*)'
'name': 'meta.class.instance.constructor.js'
'captures':
@@ -1224,14 +1225,6 @@
'match': ','
'name': 'meta.delimiter.object.comma.js'
}
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.method.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
{
# Allows the special return snippet to fire.
'match': '({)(})'
@@ -2112,30 +2105,22 @@
'period_or_optional_property':
'patterns': [
{
- 'match': '(\\.)'
- 'captures':
- '0':
- 'name': 'meta.delimiter.property.period.js'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
}
{
- 'match': '(\\?\\.)'
- 'captures':
- '0':
- 'name': 'meta.delimiter.property.optional.js'
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'period_or_optional_method':
'patterns': [
{
- 'match': '(\\.)'
- 'captures':
- '0':
- 'name': 'meta.delimiter.method.period.js'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
}
{
- 'match': '(\\?\\.)'
- 'captures':
- '0':
- 'name': 'meta.delimiter.method.optional.js'
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js'
}
]
From ae026eaf9aecddfed149e8739e80b649d781ba3a Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 29 Jan 2021 22:52:35 -0600
Subject: [PATCH 19/55] oops wrong one
---
grammars/javascript.cson | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 6bfc9f24..e388dbb0 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1681,7 +1681,7 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'include': '#period_or_optional_method'
}
]
'2':
From 61c6f508ed29bd2b86bdeac85e9c1a219945b1a0 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 11:38:15 -0600
Subject: [PATCH 20/55] include doesn't give a name....
very verbose code!
---
grammars/javascript.cson | 127 +++++++++++++++++++++++++++------------
1 file changed, 90 insertions(+), 37 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index e388dbb0..aae766da 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -308,7 +308,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_method'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js'
}
]
'2':
@@ -576,7 +581,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_method'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js'
}
]
'2':
@@ -741,7 +751,12 @@
'name': 'entity.name.type.instance.js'
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
}
@@ -770,7 +785,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_method'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js'
}
]
'2':
@@ -813,7 +833,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_method'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js'
}
]
'2':
@@ -833,7 +858,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'2':
@@ -863,7 +893,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_method'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js'
}
]
'2':
@@ -1019,7 +1054,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'2':
@@ -1139,7 +1179,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'2':
@@ -1681,7 +1726,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_method'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.method.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.method.optional.js'
}
]
'2':
@@ -1883,7 +1933,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'2':
@@ -1896,7 +1951,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'2':
@@ -1909,7 +1969,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'2':
@@ -1922,7 +1987,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'2':
@@ -1935,7 +2005,12 @@
'1':
'patterns': [
{
- 'include': '#period_or_optional_property'
+ 'match': '\\.'
+ 'name': 'meta.delimiter.property.period.js'
+ }
+ {
+ 'match': '\\?\\.'
+ 'name': 'meta.delimiter.property.optional.js'
}
]
'2':
@@ -2102,25 +2177,3 @@
]
}
]
- 'period_or_optional_property':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.property.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.property.optional.js'
- }
- ]
- 'period_or_optional_method':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.method.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
- ]
From b7a37d2f3f6b6baaa7dd65e5f68a160c09810500 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 12:36:07 -0600
Subject: [PATCH 21/55] use outer strategies instead?
fixes something at line 782...
---
grammars/javascript.cson | 352 +++++++++++++++++++++------------------
1 file changed, 193 insertions(+), 159 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index aae766da..d2044124 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -305,21 +305,15 @@
{
'match': '(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
'captures':
- '1':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.method.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
- ]
'2':
'name': 'entity.name.function.js'
'3':
'name': 'keyword.operator.assignment.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
}
{
'include': '#function_innards'
@@ -578,21 +572,15 @@
{
'match': '\\G(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
'captures':
- '1':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.method.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
- ]
'2':
'name': 'entity.name.function.js'
'3':
'name': 'keyword.operator.assignment.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
}
{
'include': '#arrow_function_innards'
@@ -749,16 +737,11 @@
'name': 'keyword.operator.new.js'
'2':
'name': 'entity.name.type.instance.js'
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.property.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.property.optional.js'
- }
- ]
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
}
{
# console
@@ -782,17 +765,6 @@
{
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
- '1':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.method.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
- ]
'2':
'name': 'support.function.console.js'
'end': '(?<=\\))'
@@ -801,6 +773,9 @@
{
'include': '#arguments'
}
+ {
+ 'include': '#period_or_optional_method'
+ }
]
}
]
@@ -830,17 +805,6 @@
# Math.random()
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
- '1':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.method.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
- ]
'2':
'name': 'support.function.math.js'
'end': '(?<=\\))'
@@ -849,25 +813,22 @@
{
'include': '#arguments'
}
+ {
+ 'include': '#period_or_optional_method'
+ }
]
}
{
# Math.PI
'match': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\b'
'captures':
- '1':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.property.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.property.optional.js'
- }
- ]
'2':
'name': 'support.constant.property.math.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
}
]
}
@@ -890,17 +851,6 @@
# Promise.all()
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
- '1':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.method.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
- ]
'2':
'name': 'support.function.promise.js'
'end': '(?<=\\))'
@@ -909,6 +859,9 @@
{
'include': '#arguments'
}
+ {
+ 'include': '#period_or_optional_method'
+ }
]
}
]
@@ -1051,21 +1004,15 @@
)\\b
'''
'captures':
- '1':
- 'patterns': [
- {
- 'match': '\\.'
- 'name': 'meta.delimiter.property.period.js'
- }
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.property.optional.js'
- }
- ]
'2':
'name': 'support.variable.property.js'
'3':
'name': 'support.constant.js'
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
}
{
'match': '''(?x) (?
Date: Sat, 30 Jan 2021 12:39:40 -0600
Subject: [PATCH 22/55] undo last 2 commits, but keep line 740 fix
---
grammars/javascript.cson | 249 +++++++++++++--------------------------
1 file changed, 81 insertions(+), 168 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index d2044124..e294660f 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -305,15 +305,16 @@
{
'match': '(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
'captures':
+ '1':
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'entity.name.function.js'
'3':
'name': 'keyword.operator.assignment.js'
- 'patterns': [
- {
- 'include': '#period_or_optional_method'
- }
- ]
}
{
'include': '#function_innards'
@@ -572,15 +573,16 @@
{
'match': '\\G(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
'captures':
+ '1':
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'entity.name.function.js'
'3':
'name': 'keyword.operator.assignment.js'
- 'patterns': [
- {
- 'include': '#period_or_optional_method'
- }
- ]
}
{
'include': '#arrow_function_innards'
@@ -765,6 +767,12 @@
{
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
+ '1':
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'support.function.console.js'
'end': '(?<=\\))'
@@ -773,9 +781,6 @@
{
'include': '#arguments'
}
- {
- 'include': '#period_or_optional_method'
- }
]
}
]
@@ -805,6 +810,12 @@
# Math.random()
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
+ '1':
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'support.function.math.js'
'end': '(?<=\\))'
@@ -813,22 +824,20 @@
{
'include': '#arguments'
}
- {
- 'include': '#period_or_optional_method'
- }
]
}
{
# Math.PI
'match': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\b'
'captures':
+ '1':
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'support.constant.property.math.js'
- 'patterns': [
- {
- 'include': '#period_or_optional_property'
- }
- ]
}
]
}
@@ -851,6 +860,12 @@
# Promise.all()
'begin': '\\s*(\\?\\.|\\.)\\s*(\\w+)\\s*(?=\\()'
'beginCaptures':
+ '1':
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
'2':
'name': 'support.function.promise.js'
'end': '(?<=\\))'
@@ -859,9 +874,6 @@
{
'include': '#arguments'
}
- {
- 'include': '#period_or_optional_method'
- }
]
}
]
@@ -1004,15 +1016,16 @@
)\\b
'''
'captures':
+ '1':
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
'2':
'name': 'support.variable.property.js'
'3':
'name': 'support.constant.js'
- 'patterns': [
- {
- 'include': '#period_or_optional_property'
- }
- ]
}
{
'match': '''(?x) (?
Date: Sat, 30 Jan 2021 12:48:01 -0600
Subject: [PATCH 23/55] nvm / found different fix
742 was on purpose, meanwhile some regex weren't correct because of my sloppy editing
---
grammars/javascript.cson | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index e294660f..f22802fe 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -303,7 +303,7 @@
'name': 'meta.function.js'
'patterns': [
{
- 'match': '(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
+ 'match': '(\\?\\.|\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)\\s*'
'captures':
'1':
'patterns': [
@@ -571,7 +571,7 @@
'name': 'meta.function.arrow.js'
'patterns': [
{
- 'match': '\\G(\\?\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
+ 'match': '\\G(\\?\\.|\\.)?([a-zA-Z_$][\\w$]*)\\s*(=)'
'captures':
'1':
'patterns': [
@@ -739,11 +739,11 @@
'name': 'keyword.operator.new.js'
'2':
'name': 'entity.name.type.instance.js'
- 'patterns': [
- {
- 'include': '#period_or_optional_property'
- }
- ]
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_property'
+ }
+ ]
}
{
# console
From 9f0f20bb05b6a12b46fd4df75f729bbc48f678e5 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 13:08:44 -0600
Subject: [PATCH 24/55] add ?.[8]
---
grammars/javascript.cson | 35 ++++++++++++++++++++++++++++++++---
1 file changed, 32 insertions(+), 3 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index f22802fe..7c460c2d 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1265,8 +1265,19 @@
]
}
{
- 'match': '\\[|\\]'
- 'name': 'meta.brace.square.js'
+ 'begin': '\\['
+ 'beginCaptures':
+ '0':
+ 'name': 'meta.brace.square.js'
+ 'end': '\\]'
+ 'endCaptures':
+ '0':
+ 'name': 'meta.brace.square.js'
+ 'patterns': [
+ {
+ 'include': '$self'
+ }
+ ]
}
{
'match': '\\A#!.*$'
@@ -1875,7 +1886,25 @@
]
'properties':
'patterns': [
- # object.prop means (object.prop OR object?.prop) in this square bracket
+ # object.prop includes object?.prop
+ {
+ # Specifically ?.[], for example divArray?.[8]
+ 'begin': '(\\?\\.)(\\[)'
+ 'beginCaptures':
+ '1':
+ 'name': 'meta.delimiter.property.optional.js'
+ '2':
+ 'name': 'meta.brace.square.js'
+ 'end': '\\]'
+ 'endCaptures':
+ '0':
+ 'name': 'meta.brace.square.js'
+ 'patterns': [
+ {
+ 'include': '$self'
+ }
+ ]
+ }
{
# PROP1 in obj.PROP1.prop2, func().PROP1.prop2
'match': '(\\?\\.|\\.)\\s*([A-Z][A-Z0-9_$]*\\b\\$*)(?=\\s*(\\?\\.|\\.)\\s*[a-zA-Z_$]\\w*)'
From a03dba9e20f2bec3dd4d30f30e2372c57c38627f Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 13:21:00 -0600
Subject: [PATCH 25/55] add ?.()
---
grammars/javascript.cson | 47 +++++++++++++++++++++++++++++-----------
1 file changed, 34 insertions(+), 13 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 7c460c2d..04a3533c 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1265,19 +1265,9 @@
]
}
{
- 'begin': '\\['
- 'beginCaptures':
- '0':
- 'name': 'meta.brace.square.js'
- 'end': '\\]'
- 'endCaptures':
- '0':
- 'name': 'meta.brace.square.js'
- 'patterns': [
- {
- 'include': '$self'
- }
- ]
+ # This is inconsistent with the () and {}, however the current docs *rely* on this
+ 'match': '\\[|\\]'
+ 'name': 'meta.brace.square.js'
}
{
'match': '\\A#!.*$'
@@ -1596,6 +1586,37 @@
}
]
}
+ {
+ # Or starting with coptional chaining
+ 'begin': '(\\?\\.)(\\()'
+ 'beginCaptures':
+ '1':
+ 'name': 'meta.delimiter.method.optional.js'
+ '2':
+ 'name': 'punctuation.definition.parameters.begin.bracket.round.js'
+ 'end': '\\)'
+ 'endCaptures':
+ '0':
+ 'name': 'punctuation.definition.parameters.end.bracket.round.js'
+ 'name': 'meta.parameters.js'
+ 'patterns': [
+ {
+ 'match': '(\\.\\.\\.)([a-zA-Z_$][\\w$]*)'
+ 'captures':
+ '1':
+ 'name': 'keyword.operator.spread.js'
+ '2':
+ 'name': 'variable.parameter.rest.function.js'
+ }
+ {
+ 'include': '$self'
+ }
+ {
+ 'match': '[a-zA-Z_$][\\w$]*'
+ 'name': 'variable.parameter.function.js'
+ }
+ ]
+ }
]
'function_body':
'patterns': [
From d6097cd3ffe1a481027015556a8d5f8f8ca7726d Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 17:12:40 -0600
Subject: [PATCH 26/55] possibly fix one of the 3 errors
---
grammars/javascript.cson | 3 +++
1 file changed, 3 insertions(+)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 04a3533c..41372023 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -781,6 +781,9 @@
{
'include': '#arguments'
}
+ {
+ 'include': '#period_or_optional_method'
+ }
]
}
]
From 7be76b78b055140a2f79a4a41f23b2b0adbbefab Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 17:21:37 -0600
Subject: [PATCH 27/55] oh *method*
simplify function_calls also
previous commit was wrong
---
grammars/javascript.cson | 125 ++++++++++++++++++++++++++++++++++++---
1 file changed, 116 insertions(+), 9 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 41372023..ba31a837 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -781,9 +781,6 @@
{
'include': '#arguments'
}
- {
- 'include': '#period_or_optional_method'
- }
]
}
]
@@ -1822,6 +1819,121 @@
}
]
}
+ {
+ # [?].methodCall?.(arg1, "arg2", [...])
+ 'begin': '(\\?\\.|\\.)\\s*([\\w$]+)\\s*(\\?\\.)(?=\\()'
+ 'beginCaptures':
+ '1':
+ 'patterns': [
+ {
+ 'include': '#period_or_optional_method'
+ }
+ ]
+ '2':
+ 'patterns': [
+ {
+ '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(catch|finally|then|shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
+ scrollByLines|scrollY|scrollTo|stop|strike|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|slice|
+ savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
+ contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
+ createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
+ test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
+ untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|stringify|
+ print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
+ fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
+ forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
+ abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
+ releaseCapture|releaseEvents|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)|moveBy|moveBelow|moveTo|
+ moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back)\\b
+ '''
+ 'name': 'support.function.js'
+ }
+ {
+ 'match': '''(?x)
+ \\b(acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
+ appendChild|appendData|before|blur|canPlayType|captureStream|
+ caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
+ cloneContents|cloneNode|cloneRange|close|closest|collapse|
+ compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
+ convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
+ createAttributeNS|createCaption|createCDATASection|createComment|
+ createContextualFragment|createDocument|createDocumentFragment|
+ createDocumentType|createElement|createElementNS|createEntityReference|
+ createEvent|createExpression|createHTMLDocument|createNodeIterator|
+ createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
+ createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
+ deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
+ deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
+ enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
+ exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
+ getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
+ getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
+ getClientRects|getContext|getDestinationInsertionPoints|getElementById|
+ getElementsByClassName|getElementsByName|getElementsByTagName|
+ getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
+ getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
+ hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
+ insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
+ insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
+ isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
+ lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
+ moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
+ parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
+ previousSibling|probablySupportsContext|queryCommandEnabled|
+ queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
+ querySelector|querySelectorAll|registerContentHandler|registerElement|
+ registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
+ removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
+ removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
+ requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
+ scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
+ setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
+ setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
+ setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
+ slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
+ submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
+ toDataURL|toggle|toString|values|write|writeln)\\b
+ '''
+ 'name': 'support.function.dom.js'
+ }
+ {
+ 'match': "[a-zA-Z_$][\\w$]*"
+ 'name': 'entity.name.function.js'
+ }
+ {
+ 'match': '\\d[\\w$]*'
+ 'name': 'invalid.illegal.identifier.js'
+ }
+ ]
+ '3':
+ 'name': 'meta.delimiter.method.optional.js'
+ 'end': '(?<=\\))'
+ 'name': 'meta.method-call.js'
+ 'patterns': [
+ {
+ 'include': '#arguments'
+ }
+ ]
+ }
]
'function_calls':
'patterns': [
@@ -1880,12 +1992,7 @@
}
]
'2':
- 'patterns': [
- {
- 'match': '\\?\\.'
- 'name': 'meta.delimiter.method.optional.js'
- }
- ]
+ 'name': 'meta.delimiter.method.optional.js'
'end': '(?<=\\))'
'name': 'meta.function-call.js'
'patterns': [
From e7a099e081713bd3bc3d4e7e360eff1f52d92591 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 17:28:42 -0600
Subject: [PATCH 28/55] fix 1 spec error
---
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 ee1fde79..6539a475 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -1806,7 +1806,7 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('a.b?.()')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.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.delimiter.method.optional.js']
From 43c4cd421d8a5cffc16e1df244e2329c06755eb1 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 17:43:24 -0600
Subject: [PATCH 29/55] add exponentation [skip ci]
---
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 6539a475..b460e39f 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -479,7 +479,7 @@ describe "JavaScript grammar", ->
expect(tokens[2]).toEqual value: ' b', scopes: ['source.js']
describe "arithmetic", ->
- operators = ["*", "/", "-", "%", "+"]
+ operators = ["*", "/", "-", "%", "+", "**"]
it "tokenizes them", ->
for operator in operators
From 5cbcfa3ec1fc35eba65e2293418d3a5709daf797 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 17:43:41 -0600
Subject: [PATCH 30/55] add exponentation
---
grammars/javascript.cson | 282 ++++++++++++++-------------------------
1 file changed, 100 insertions(+), 182 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index ba31a837..2eead860 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1326,7 +1326,8 @@
'name': 'keyword.operator.assignment.compound.js'
}
{
- 'match': '&&=|\\?\\?=|\\|\\|='
+ # &&= ||= ??=
+ 'match': '&&=|\\|\\|=|\\?\\?='
'name': 'keyword.operator.assignment.compound.logical.js'
}
{
@@ -1363,7 +1364,7 @@
'name': 'keyword.operator.increment.js'
}
{
- 'match': '%|\\*|/|-|\\+'
+ 'match': '%|\\*|/|-|\\+|\\*\\*'
'name': 'keyword.operator.js'
}
]
@@ -1719,96 +1720,7 @@
'2':
'patterns': [
{
- '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(catch|finally|then|shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
- scrollByLines|scrollY|scrollTo|stop|strike|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|slice|
- savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
- contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
- createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
- test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
- untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|stringify|
- print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
- fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
- forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
- abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
- releaseCapture|releaseEvents|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)|moveBy|moveBelow|moveTo|
- moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back)\\b
- '''
- 'name': 'support.function.js'
- }
- {
- 'match': '''(?x)
- \\b(acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
- appendChild|appendData|before|blur|canPlayType|captureStream|
- caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
- cloneContents|cloneNode|cloneRange|close|closest|collapse|
- compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
- convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
- createAttributeNS|createCaption|createCDATASection|createComment|
- createContextualFragment|createDocument|createDocumentFragment|
- createDocumentType|createElement|createElementNS|createEntityReference|
- createEvent|createExpression|createHTMLDocument|createNodeIterator|
- createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
- createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
- deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
- deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
- enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
- exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
- getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
- getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
- getClientRects|getContext|getDestinationInsertionPoints|getElementById|
- getElementsByClassName|getElementsByName|getElementsByTagName|
- getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
- getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
- hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
- insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
- insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
- isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
- lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
- moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
- parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
- previousSibling|probablySupportsContext|queryCommandEnabled|
- queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
- querySelector|querySelectorAll|registerContentHandler|registerElement|
- registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
- removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
- removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
- requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
- scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
- setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
- setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
- setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
- slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
- submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
- toDataURL|toggle|toString|values|write|writeln)\\b
- '''
- 'name': 'support.function.dom.js'
- }
- {
- 'match': "[a-zA-Z_$][\\w$]*"
- 'name': 'entity.name.function.js'
- }
- {
- 'match': '\\d[\\w$]*'
- 'name': 'invalid.illegal.identifier.js'
+ 'include': '#method_names'
}
]
'end': '(?<=\\))'
@@ -1832,96 +1744,7 @@
'2':
'patterns': [
{
- '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(catch|finally|then|shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
- scrollByLines|scrollY|scrollTo|stop|strike|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|slice|
- savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
- contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
- createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
- test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
- untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|stringify|
- print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
- fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
- forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
- abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
- releaseCapture|releaseEvents|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)|moveBy|moveBelow|moveTo|
- moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back)\\b
- '''
- 'name': 'support.function.js'
- }
- {
- 'match': '''(?x)
- \\b(acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
- appendChild|appendData|before|blur|canPlayType|captureStream|
- caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
- cloneContents|cloneNode|cloneRange|close|closest|collapse|
- compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
- convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
- createAttributeNS|createCaption|createCDATASection|createComment|
- createContextualFragment|createDocument|createDocumentFragment|
- createDocumentType|createElement|createElementNS|createEntityReference|
- createEvent|createExpression|createHTMLDocument|createNodeIterator|
- createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
- createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
- deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
- deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
- enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
- exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
- getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
- getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
- getClientRects|getContext|getDestinationInsertionPoints|getElementById|
- getElementsByClassName|getElementsByName|getElementsByTagName|
- getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
- getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
- hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
- insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
- insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
- isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
- lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
- moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
- parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
- previousSibling|probablySupportsContext|queryCommandEnabled|
- queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
- querySelector|querySelectorAll|registerContentHandler|registerElement|
- registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
- removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
- removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
- requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
- scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
- setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
- setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
- setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
- slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
- submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
- toDataURL|toggle|toString|values|write|writeln)\\b
- '''
- 'name': 'support.function.dom.js'
- }
- {
- 'match': "[a-zA-Z_$][\\w$]*"
- 'name': 'entity.name.function.js'
- }
- {
- 'match': '\\d[\\w$]*'
- 'name': 'invalid.illegal.identifier.js'
+ 'include': '#method_names'
}
]
'3':
@@ -1935,6 +1758,101 @@
]
}
]
+ 'method_names':
+ 'patterns': [
+ {
+ '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(catch|finally|then|shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
+ scrollByLines|scrollY|scrollTo|stop|strike|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|slice|
+ savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
+ contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
+ createEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
+ test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
+ untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|stringify|
+ print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
+ fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
+ forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
+ abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
+ releaseCapture|releaseEvents|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)|moveBy|moveBelow|moveTo|
+ moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back)\\b
+ '''
+ 'name': 'support.function.js'
+ }
+ {
+ 'match': '''(?x)
+ \\b(acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
+ appendChild|appendData|before|blur|canPlayType|captureStream|
+ caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
+ cloneContents|cloneNode|cloneRange|close|closest|collapse|
+ compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
+ convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
+ createAttributeNS|createCaption|createCDATASection|createComment|
+ createContextualFragment|createDocument|createDocumentFragment|
+ createDocumentType|createElement|createElementNS|createEntityReference|
+ createEvent|createExpression|createHTMLDocument|createNodeIterator|
+ createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
+ createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
+ deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
+ deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
+ enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
+ exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
+ getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
+ getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
+ getClientRects|getContext|getDestinationInsertionPoints|getElementById|
+ getElementsByClassName|getElementsByName|getElementsByTagName|
+ getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
+ getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
+ hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
+ insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
+ insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
+ isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
+ lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
+ moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
+ parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
+ previousSibling|probablySupportsContext|queryCommandEnabled|
+ queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
+ querySelector|querySelectorAll|registerContentHandler|registerElement|
+ registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
+ removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
+ removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
+ requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
+ scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
+ setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
+ setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
+ setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
+ slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
+ submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
+ toDataURL|toggle|toString|values|write|writeln)\\b
+ '''
+ 'name': 'support.function.dom.js'
+ }
+ {
+ 'match': "[a-zA-Z_$][\\w$]*"
+ 'name': 'entity.name.function.js'
+ }
+ {
+ 'match': '\\d[\\w$]*'
+ 'name': 'invalid.illegal.identifier.js'
+ }
+ ]
'function_calls':
'patterns': [
{
From 1fdff0b78fd0cb3337926e2faa6fa2bfbe2cd66b Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 18:06:49 -0600
Subject: [PATCH 31/55] Add meta.method-call and some extra tests
wow
---
spec/javascript-spec.coffee | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee
index b460e39f..8cc27b58 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -1806,15 +1806,40 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('a.b?.()')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
- expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.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.delimiter.method.optional.js']
+
+ {tokens} = grammar.tokenizeLine('a?.b?.()')
+ 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.optional.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.delimiter.method.optional.js']
- {tokens} = grammar.tokenizeLine('a?.[5]')
+ {tokens} = grammar.tokenizeLine('a?.[3]')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
expect(tokens[2]).toEqual value: '[', scopes: ['source.js', 'meta.brace.square.js']
+ {tokens} = grammar.tokenizeLine('a()?.[1]')
+ 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.delimiter.property.optional.js']
+ expect(tokens[2]).toEqual value: '[', scopes: ['source.js', 'meta.brace.square.js']
+
+ {tokens} = grammar.tokenizeLine('a[4]?.()')
+ expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
+ expect(tokens[4]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.optional.js']
+
+ {tokens} = grammar.tokenizeLine('a[1]?.b()')
+ expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
+ expect(tokens[4]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.optional.js']
+ expect(tokens[5]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js']
+
+ {tokens} = grammar.tokenizeLine('a[5]?.b')
+ expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
+ expect(tokens[4]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
+ expect(tokens[5]).toEqual value: 'b', scopes: ['source.js', 'variable.other.property.js']
+
describe "strings and functions", ->
it "doesn't confuse them", ->
From a6fc423b48bc858cc9bdf8bb6b198bc1f26ad78e Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 18:10:28 -0600
Subject: [PATCH 32/55] avoid 0: '*', 1: '*'
---
grammars/javascript.cson | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 2eead860..09361ec8 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1364,7 +1364,7 @@
'name': 'keyword.operator.increment.js'
}
{
- 'match': '%|\\*|/|-|\\+|\\*\\*'
+ 'match': '%|\\*(?!\\*)|/|-|\\+|\\*\\*'
'name': 'keyword.operator.js'
}
]
From aea466a6980e228127e87be95ad857caafa04bb6 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 18:14:22 -0600
Subject: [PATCH 33/55] spec error
---
spec/javascript-spec.coffee | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee
index 8cc27b58..bb3218ae 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -1823,8 +1823,8 @@ describe "JavaScript grammar", ->
{tokens} = grammar.tokenizeLine('a()?.[1]')
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.delimiter.property.optional.js']
- expect(tokens[2]).toEqual value: '[', scopes: ['source.js', 'meta.brace.square.js']
+ expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
+ expect(tokens[4]).toEqual value: '[', scopes: ['source.js', 'meta.brace.square.js']
{tokens} = grammar.tokenizeLine('a[4]?.()')
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
From bc1519c45dc902c796d15f91bdd24df5afe5704e Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 18:36:02 -0600
Subject: [PATCH 34/55] support a?.[8]
---
grammars/javascript.cson | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 09361ec8..ecfbd665 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1922,14 +1922,27 @@
]
'objects':
'patterns': [
+ # "Obj." is already enough to prove objectness,
+ # however "Obj.[8]" is impossible, and
+ # "Obj?.()" is a function
{
# OBJ in OBJ.prop, OBJ.methodCall()
- 'match': '[A-Z][A-Z0-9_$]*(?=\\s*(\\?\\.|\\.)\\s*[a-zA-Z_$]\\w*)'
+ 'match': '[A-Z][A-Z0-9_$]*(?=\\s*\\??\\.\\s*[a-zA-Z_$]\\w*)'
'name': 'constant.other.object.js'
}
{
# obj in obj.prop, obj.methodCall()
- 'match': '[a-zA-Z_$][\\w$]*(?=\\s*(\\?\\.|\\.)\\s*[a-zA-Z_$]\\w*)'
+ 'match': '[a-zA-Z_$][\\w$]*(?=\\s*\\??\\.\\s*[a-zA-Z_$]\\w*)'
+ 'name': 'variable.other.object.js'
+ }
+ {
+ # OBJ in OBJ[8], OBJ?.[8]
+ 'match': '[A-Z][A-Z0-9_$]*(?=\\s*(\\?\\.)?\\s*\\[)'
+ 'name': 'constant.other.object.js'
+ }
+ {
+ # obj in obj[8], obj?.[8]
+ 'match': '[a-zA-Z_$][\\w$]*(?=\\s*(\\?\\.)?\\s*\\[)'
'name': 'variable.other.object.js'
}
]
From b1530fa76d76b700f4f57cfbb7350ad94cfc1b4c Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 30 Jan 2021 18:54:10 -0600
Subject: [PATCH 35/55] support [array]?.()
---
grammars/javascript.cson | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index ecfbd665..1e1eff04 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1733,7 +1733,7 @@
}
{
# [?].methodCall?.(arg1, "arg2", [...])
- 'begin': '(\\?\\.|\\.)\\s*([\\w$]+)\\s*(\\?\\.)(?=\\()'
+ 'begin': '(\\?\\.|\\.)\\s*([\\w$]+)\\s*(\\?\\.)\\s*(?=\\()'
'beginCaptures':
'1':
'patterns': [
@@ -1757,6 +1757,21 @@
}
]
}
+ {
+ # [array]?.(arg1, "arg2", [...])
+ # The array itself is not in the method-call scope, maybe later
+ 'begin': '(?<=\\])\\s*(\\?\\.)\\s*(?=\\()'
+ 'beginCaptures':
+ '1':
+ 'name': 'meta.delimiter.method.optional.js'
+ 'end': '(?<=\\))'
+ 'name': 'meta.method-call.js'
+ 'patterns': [
+ {
+ 'include': '#arguments'
+ }
+ ]
+ }
]
'method_names':
'patterns': [
@@ -1951,7 +1966,7 @@
# object.prop includes object?.prop
{
# Specifically ?.[], for example divArray?.[8]
- 'begin': '(\\?\\.)(\\[)'
+ 'begin': '(\\?\\.)\\s*(\\[)'
'beginCaptures':
'1':
'name': 'meta.delimiter.property.optional.js'
From 1c225404586e26f559f72eef3062a8daaf64a92e Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 1 Feb 2021 13:26:58 -0600
Subject: [PATCH 36/55] remove todo
---
grammars/javascript.cson | 1 -
1 file changed, 1 deletion(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 1e1eff04..47d0a412 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -731,7 +731,6 @@
'name': 'meta.class.js'
}
{
- # TODO: optional chaining is possible here
'match': '(new)\\s+([\\w$]+[\\w.$]*)'
'name': 'meta.class.instance.constructor.js'
'captures':
From 479d34b240030f1c2c0063feaa146c6300c56719 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 1 Feb 2021 16:30:37 -0600
Subject: [PATCH 37/55] try some silly precedence changes [skip-ci skip ci]
---
grammars/tree-sitter-javascript.cson | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index f926ec2f..de69ea38 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -178,6 +178,8 @@ scopes:
'"function"': 'storage.type.function'
'"=>"': 'storage.type.function.arrow'
+ '"?."': 'meta.delimiter.optional'
+
'"="': 'keyword.operator.js'
'"+="': 'keyword.operator.js'
'"-="': 'keyword.operator.js'
@@ -195,12 +197,12 @@ scopes:
'"||="': 'keyword.operator.js'
'"??="': 'keyword.operator.js'
'"!"': 'keyword.operator.js'
+ '"**"': 'keyword.operator.js'
'"+"': 'keyword.operator.js'
'"-"': 'keyword.operator.js'
'"*"': 'keyword.operator.js'
'"/"': 'keyword.operator.js'
'"%"': 'keyword.operator.js'
- '"**"': 'keyword.operator.js'
'"=="': 'keyword.operator.js'
'"==="': 'keyword.operator.js'
'"!="': 'keyword.operator.js'
@@ -210,8 +212,8 @@ scopes:
'">"': 'keyword.operator.js'
'"<"': 'keyword.operator.js'
'":"': 'keyword.operator.js'
- '"?"': 'keyword.operator.js'
'"??"': 'keyword.operator.js'
+ '"?"': 'keyword.operator.js'
'"&&"': 'keyword.operator.js'
'"||"': 'keyword.operator.js'
'"&"': 'keyword.operator.js'
@@ -234,7 +236,6 @@ scopes:
'"get"': 'keyword.operator.setter'
'"set"': 'keyword.operator.setter'
- '"?."': 'meta.delimiter.optional'
'"."': 'meta.delimiter.period'
'","': 'meta.delimiter.comma'
From 32c306fc03bac0702478b1098fe6db6ef38e5c55 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 1 Feb 2021 16:47:45 -0600
Subject: [PATCH 38/55] maybe this will work
---
grammars/tree-sitter-javascript.cson | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index de69ea38..16fed8c8 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -178,8 +178,7 @@ scopes:
'"function"': 'storage.type.function'
'"=>"': 'storage.type.function.arrow'
- '"?."': 'meta.delimiter.optional'
-
+
'"="': 'keyword.operator.js'
'"+="': 'keyword.operator.js'
'"-="': 'keyword.operator.js'
@@ -212,8 +211,8 @@ scopes:
'">"': 'keyword.operator.js'
'"<"': 'keyword.operator.js'
'":"': 'keyword.operator.js'
+ '"?"': {match: /(?
Date: Mon, 1 Feb 2021 16:56:55 -0600
Subject: [PATCH 39/55] Undo last 2 commits
It's possible that the eslint package messed things up....
---
grammars/tree-sitter-javascript.cson | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index 16fed8c8..b9dc2b85 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -178,7 +178,6 @@ scopes:
'"function"': 'storage.type.function'
'"=>"': 'storage.type.function.arrow'
-
'"="': 'keyword.operator.js'
'"+="': 'keyword.operator.js'
'"-="': 'keyword.operator.js'
@@ -196,12 +195,12 @@ scopes:
'"||="': 'keyword.operator.js'
'"??="': 'keyword.operator.js'
'"!"': 'keyword.operator.js'
- '"**"': 'keyword.operator.js'
'"+"': 'keyword.operator.js'
'"-"': 'keyword.operator.js'
'"*"': 'keyword.operator.js'
'"/"': 'keyword.operator.js'
'"%"': 'keyword.operator.js'
+ '"**"': 'keyword.operator.js'
'"=="': 'keyword.operator.js'
'"==="': 'keyword.operator.js'
'"!="': 'keyword.operator.js'
@@ -211,7 +210,7 @@ scopes:
'">"': 'keyword.operator.js'
'"<"': 'keyword.operator.js'
'":"': 'keyword.operator.js'
- '"?"': {match: /(? identifier': 'entity.name.tag'
'jsx_closing_element > identifier': 'entity.name.tag'
'jsx_self_closing_element > identifier': 'entity.name.tag'
+
From ca728f84df056001048ba55c0b5758f0950e4d07 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Mon, 1 Feb 2021 17:24:39 -0600
Subject: [PATCH 40/55] Try the ? again
---
grammars/tree-sitter-javascript.cson | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index b9dc2b85..b8b7fbd7 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -209,8 +209,6 @@ scopes:
'"<="': 'keyword.operator.js'
'">"': 'keyword.operator.js'
'"<"': 'keyword.operator.js'
- '":"': 'keyword.operator.js'
- '"?"': 'keyword.operator.js'
'"??"': 'keyword.operator.js'
'"&&"': 'keyword.operator.js'
'"||"': 'keyword.operator.js'
@@ -223,6 +221,8 @@ scopes:
'"|"': 'keyword.operator.js'
'"++"': 'keyword.operator.js'
'"--"': 'keyword.operator.js'
+ '":"': 'keyword.operator.js'
+ '"?"': {match: /(?
Date: Fri, 5 Feb 2021 08:43:37 -0600
Subject: [PATCH 41/55] That was a weird comment
Thanks
Co-authored-by: Sadick
---
grammars/javascript.cson | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 47d0a412..67d2b101 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1,6 +1,6 @@
# Note: Because of the optional chaining operator (?.), "object.property" in the comments usually means ("object.property" or "object?.property")
# Even though sometimes it doesn't seem like using the chaining operator would make any sense, it's still supported. example: Math?.PI
-# Negative lookbehinds for "." Shouldddd cover "?."
+# Negative look-behinds for "." Should cover "?."
'scopeName': 'source.js'
'fileTypes': [
'js'
From 96063f109115ba9e8fed9d91e47367e2b6b6e8d4 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Fri, 5 Feb 2021 09:47:04 -0600
Subject: [PATCH 42/55] Try reordering the operators instead. Add void.
To check later (I don't have atom on this machine)
The colon, which is part of the ternary operator, may also be parsed at part of a:
label - https://github.com/tree-sitter/tree-sitter-javascript/blob/master/src/grammar.json#L1304
switch case - https://github.com/tree-sitter/tree-sitter-javascript/blob/master/src/grammar.json#L1359
switch default - https://github.com/tree-sitter/tree-sitter-javascript/blob/master/src/grammar.json#L1380
Generators, e.g. function*
https://github.com/tree-sitter/tree-sitter-javascript/blob/master/src/grammar.json#L2676
A JSX fragment, ```<>>```, is also in the grammar, and will obviously fail.
Resources I found
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
https://github.com/tree-sitter/tree-sitter-javascript/blob/master/src/grammar.json with ctrl+f "type": "STRING"
---
grammars/tree-sitter-javascript.cson | 66 ++++++++++++++--------------
1 file changed, 34 insertions(+), 32 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index b8b7fbd7..8d491c4c 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -178,51 +178,53 @@ scopes:
'"function"': 'storage.type.function'
'"=>"': 'storage.type.function.arrow'
- '"="': 'keyword.operator.js'
- '"+="': 'keyword.operator.js'
- '"-="': 'keyword.operator.js'
+ '"?."': 'meta.delimiter.optional'
+
+ '">>>="': 'keyword.operator.js'
+ '">>="': 'keyword.operator.js'
+ '"<<="': 'keyword.operator.js'
+ '">="': 'keyword.operator.js'
+ '"<="': 'keyword.operator.js'
+ '"**="': 'keyword.operator.js'
'"*="': 'keyword.operator.js'
'"/="': 'keyword.operator.js'
'"%="': 'keyword.operator.js'
- '"**="': 'keyword.operator.js'
- '"<<="': 'keyword.operator.js'
- '">>="': 'keyword.operator.js'
- '">>>="': 'keyword.operator.js'
- '"&="': 'keyword.operator.js'
- '"^="': 'keyword.operator.js'
- '"|="': 'keyword.operator.js'
+ '"+="': 'keyword.operator.js'
+ '"-="': 'keyword.operator.js'
'"&&="': 'keyword.operator.js'
'"||="': 'keyword.operator.js'
'"??="': 'keyword.operator.js'
- '"!"': 'keyword.operator.js'
- '"+"': 'keyword.operator.js'
- '"-"': 'keyword.operator.js'
- '"*"': 'keyword.operator.js'
- '"/"': 'keyword.operator.js'
- '"%"': 'keyword.operator.js'
- '"**"': 'keyword.operator.js'
- '"=="': 'keyword.operator.js'
+ '"&="': 'keyword.operator.js'
+ '"^="': 'keyword.operator.js'
+ '"|="': 'keyword.operator.js'
'"==="': 'keyword.operator.js'
- '"!="': 'keyword.operator.js'
+ '"=="': 'keyword.operator.js'
'"!=="': 'keyword.operator.js'
- '">="': 'keyword.operator.js'
- '"<="': 'keyword.operator.js'
+ '"!="': 'keyword.operator.js'
+ '"="': 'keyword.operator.js'
+ '">>>"': 'keyword.operator.js'
+ '">>"': 'keyword.operator.js'
+ '"<<"': 'keyword.operator.js'
'">"': 'keyword.operator.js'
'"<"': 'keyword.operator.js'
- '"??"': 'keyword.operator.js'
+ '"**"': 'keyword.operator.js'
+ '"*"': 'keyword.operator.js'
+ '"/"': 'keyword.operator.js'
+ '"%"': 'keyword.operator.js'
+ '"++"': 'keyword.operator.js'
+ '"--"': 'keyword.operator.js'
+ '"+"': 'keyword.operator.js'
+ '"-"': 'keyword.operator.js'
'"&&"': 'keyword.operator.js'
'"||"': 'keyword.operator.js'
+ '"??"': 'keyword.operator.js'
'"&"': 'keyword.operator.js'
- '"~"': 'keyword.operator.js'
'"^"': 'keyword.operator.js'
- '">>"': 'keyword.operator.js'
- '">>>"': 'keyword.operator.js'
- '"<<"': 'keyword.operator.js'
'"|"': 'keyword.operator.js'
- '"++"': 'keyword.operator.js'
- '"--"': 'keyword.operator.js'
+ '"~"': 'keyword.operator.js'
+ '"!"': 'keyword.operator.js'
+ '"?"': 'keyword.operator.js'
'":"': 'keyword.operator.js'
- '"?"': {match: /(?
Date: Sat, 6 Feb 2021 10:53:12 -0600
Subject: [PATCH 43/55] try doing the reverse order, fix ?:
The colon is used for a lot of different things. I'm using what the non-tree sitter labels them. Although there's probably better names.
---
grammars/tree-sitter-javascript.cson | 97 +++++++++++++++-------------
1 file changed, 51 insertions(+), 46 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index 8d491c4c..1211cfd1 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -178,54 +178,58 @@ scopes:
'"function"': 'storage.type.function'
'"=>"': 'storage.type.function.arrow'
- '"?."': 'meta.delimiter.optional'
+ '
+ switch_case > ":",
+ switch_default > ":"
+ ': 'punctuation.definition.section.case-statement.js'
- '">>>="': 'keyword.operator.js'
- '">>="': 'keyword.operator.js'
- '"<<="': 'keyword.operator.js'
- '">="': 'keyword.operator.js'
- '"<="': 'keyword.operator.js'
- '"**="': 'keyword.operator.js'
- '"*="': 'keyword.operator.js'
- '"/="': 'keyword.operator.js'
- '"%="': 'keyword.operator.js'
- '"+="': 'keyword.operator.js'
- '"-="': 'keyword.operator.js'
- '"&&="': 'keyword.operator.js'
- '"||="': 'keyword.operator.js'
- '"??="': 'keyword.operator.js'
- '"&="': 'keyword.operator.js'
- '"^="': 'keyword.operator.js'
- '"|="': 'keyword.operator.js'
- '"==="': 'keyword.operator.js'
- '"=="': 'keyword.operator.js'
- '"!=="': 'keyword.operator.js'
- '"!="': 'keyword.operator.js'
- '"="': 'keyword.operator.js'
- '">>>"': 'keyword.operator.js'
- '">>"': 'keyword.operator.js'
- '"<<"': 'keyword.operator.js'
- '">"': 'keyword.operator.js'
- '"<"': 'keyword.operator.js'
- '"**"': 'keyword.operator.js'
- '"*"': 'keyword.operator.js'
- '"/"': 'keyword.operator.js'
- '"%"': 'keyword.operator.js'
- '"++"': 'keyword.operator.js'
- '"--"': 'keyword.operator.js'
- '"+"': 'keyword.operator.js'
- '"-"': 'keyword.operator.js'
- '"&&"': 'keyword.operator.js'
- '"||"': 'keyword.operator.js'
- '"??"': 'keyword.operator.js'
- '"&"': 'keyword.operator.js'
- '"^"': 'keyword.operator.js'
- '"|"': 'keyword.operator.js'
- '"~"': 'keyword.operator.js'
- '"!"': 'keyword.operator.js'
- '"?"': 'keyword.operator.js'
- '":"': 'keyword.operator.js'
+ 'ternary_expression > "?"': 'keyword.operator.ternary.js'
+ 'ternary_expression > ":"': 'keyword.operator.ternary.js'
+ '":"': 'keyword.operator.assignment.js'
'"..."': 'keyword.operator.spread.js'
+ '"!"': 'keyword.operator.js'
+ '"~"': 'keyword.operator.js'
+ '"|"': 'keyword.operator.js'
+ '"^"': 'keyword.operator.js'
+ '"&"': 'keyword.operator.js'
+ '"??"': 'keyword.operator.js'
+ '"||"': 'keyword.operator.js'
+ '"&&"': 'keyword.operator.js'
+ '"-"': 'keyword.operator.js'
+ '"+"': 'keyword.operator.js'
+ '"--"': 'keyword.operator.js'
+ '"++"': 'keyword.operator.js'
+ '"%"': 'keyword.operator.js'
+ '"/"': 'keyword.operator.js'
+ '"*"': 'keyword.operator.js'
+ '"**"': 'keyword.operator.js'
+ '"<"': 'keyword.operator.js'
+ '">"': 'keyword.operator.js'
+ '"<<"': 'keyword.operator.js'
+ '">>"': 'keyword.operator.js'
+ '">>>"': 'keyword.operator.js'
+ '"="': 'keyword.operator.js'
+ '"!="': 'keyword.operator.js'
+ '"!=="': 'keyword.operator.js'
+ '"=="': 'keyword.operator.js'
+ '"==="': 'keyword.operator.js'
+ '"|="': 'keyword.operator.js'
+ '"^="': 'keyword.operator.js'
+ '"&="': 'keyword.operator.js'
+ '"??="': 'keyword.operator.js'
+ '"||="': 'keyword.operator.js'
+ '"&&="': 'keyword.operator.js'
+ '"-="': 'keyword.operator.js'
+ '"+="': 'keyword.operator.js'
+ '"%="': 'keyword.operator.js'
+ '"/="': 'keyword.operator.js'
+ '"*="': 'keyword.operator.js'
+ '"**="': 'keyword.operator.js'
+ '"<="': 'keyword.operator.js'
+ '">="': 'keyword.operator.js'
+ '"<<="': 'keyword.operator.js'
+ '">>="': 'keyword.operator.js'
+ '">>>="': 'keyword.operator.js'
'"in"': 'keyword.operator.in'
'"instanceof"': 'keyword.operator.instanceof'
@@ -238,6 +242,7 @@ scopes:
'"set"': 'keyword.operator.setter'
'"."': 'meta.delimiter.period'
+ '"?."': 'meta.delimiter.optional'
'","': 'meta.delimiter.comma'
'"if"': 'keyword.control'
From 4cf3132157ebb1050fa73831f6f4bfde9a652b4a Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 6 Feb 2021 11:01:18 -0600
Subject: [PATCH 44/55] Some operators don't exist
---
grammars/tree-sitter-javascript.cson | 3 ---
1 file changed, 3 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index 1211cfd1..8098e741 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -216,9 +216,6 @@ scopes:
'"|="': 'keyword.operator.js'
'"^="': 'keyword.operator.js'
'"&="': 'keyword.operator.js'
- '"??="': 'keyword.operator.js'
- '"||="': 'keyword.operator.js'
- '"&&="': 'keyword.operator.js'
'"-="': 'keyword.operator.js'
'"+="': 'keyword.operator.js'
'"%="': 'keyword.operator.js'
From c04bb07c64f6fe765c8ae3084d17a7ad8163efd0 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 6 Feb 2021 11:04:05 -0600
Subject: [PATCH 45/55] Nevermind, they do exist
The atom console is outdated
---
grammars/tree-sitter-javascript.cson | 3 +++
1 file changed, 3 insertions(+)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index 8098e741..1211cfd1 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -216,6 +216,9 @@ scopes:
'"|="': 'keyword.operator.js'
'"^="': 'keyword.operator.js'
'"&="': 'keyword.operator.js'
+ '"??="': 'keyword.operator.js'
+ '"||="': 'keyword.operator.js'
+ '"&&="': 'keyword.operator.js'
'"-="': 'keyword.operator.js'
'"+="': 'keyword.operator.js'
'"%="': 'keyword.operator.js'
From 2c6b55b430f04b9f68d867b3c7e3f9d125a96a79 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 6 Feb 2021 11:36:53 -0600
Subject: [PATCH 46/55] order doesn't matter, visual appeal [skip ci]
This is a visual commit.
Really it's about precedence, how specific the selectors are. Since they're the same it should work no matter what.
The reason ?. isn't detected is because of the parser itself.
See https://github.com/jcs-PR/tree-sitter-javascript/pull/1/files and https://github.com/tree-sitter/tree-sitter-javascript/pull/150
---
grammars/tree-sitter-javascript.cson | 65 ++++++++++++++--------------
1 file changed, 33 insertions(+), 32 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index 1211cfd1..b31adfab 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -186,50 +186,51 @@ scopes:
'ternary_expression > "?"': 'keyword.operator.ternary.js'
'ternary_expression > ":"': 'keyword.operator.ternary.js'
'":"': 'keyword.operator.assignment.js'
- '"..."': 'keyword.operator.spread.js'
+
+ '"="': 'keyword.operator.js'
+ '"=="': 'keyword.operator.js'
+ '"==="': 'keyword.operator.js'
'"!"': 'keyword.operator.js'
- '"~"': 'keyword.operator.js'
- '"|"': 'keyword.operator.js'
- '"^"': 'keyword.operator.js'
- '"&"': 'keyword.operator.js'
- '"??"': 'keyword.operator.js'
- '"||"': 'keyword.operator.js'
- '"&&"': 'keyword.operator.js'
- '"-"': 'keyword.operator.js'
+ '"!="': 'keyword.operator.js'
+ '"!=="': 'keyword.operator.js'
'"+"': 'keyword.operator.js'
- '"--"': 'keyword.operator.js'
'"++"': 'keyword.operator.js'
- '"%"': 'keyword.operator.js'
- '"/"': 'keyword.operator.js'
+ '"+="': 'keyword.operator.js'
+ '"-"': 'keyword.operator.js'
+ '"--"': 'keyword.operator.js'
+ '"-="': 'keyword.operator.js'
'"*"': 'keyword.operator.js'
+ '"*="': 'keyword.operator.js'
'"**"': 'keyword.operator.js'
+ '"**="': 'keyword.operator.js'
+ '"/"': 'keyword.operator.js'
+ '"/="': 'keyword.operator.js'
+ '"%"': 'keyword.operator.js'
+ '"%="': 'keyword.operator.js'
'"<"': 'keyword.operator.js'
- '">"': 'keyword.operator.js'
+ '"<="': 'keyword.operator.js'
'"<<"': 'keyword.operator.js'
+ '"<<="': 'keyword.operator.js'
+ '">"': 'keyword.operator.js'
+ '">="': 'keyword.operator.js'
'">>"': 'keyword.operator.js'
+ '">>="': 'keyword.operator.js'
'">>>"': 'keyword.operator.js'
- '"="': 'keyword.operator.js'
- '"!="': 'keyword.operator.js'
- '"!=="': 'keyword.operator.js'
- '"=="': 'keyword.operator.js'
- '"==="': 'keyword.operator.js'
- '"|="': 'keyword.operator.js'
+ '">>>="': 'keyword.operator.js'
+ '"~"': 'keyword.operator.js'
+ '"^"': 'keyword.operator.js'
+ '"&"': 'keyword.operator.js'
+ '"|"': 'keyword.operator.js'
'"^="': 'keyword.operator.js'
'"&="': 'keyword.operator.js'
- '"??="': 'keyword.operator.js'
- '"||="': 'keyword.operator.js'
+ '"|="': 'keyword.operator.js'
+ '"&&"': 'keyword.operator.js'
+ '"||"': 'keyword.operator.js'
+ '"??"': 'keyword.operator.js'
'"&&="': 'keyword.operator.js'
- '"-="': 'keyword.operator.js'
- '"+="': 'keyword.operator.js'
- '"%="': 'keyword.operator.js'
- '"/="': 'keyword.operator.js'
- '"*="': 'keyword.operator.js'
- '"**="': 'keyword.operator.js'
- '"<="': 'keyword.operator.js'
- '">="': 'keyword.operator.js'
- '"<<="': 'keyword.operator.js'
- '">>="': 'keyword.operator.js'
- '">>>="': 'keyword.operator.js'
+ '"||="': 'keyword.operator.js'
+ '"??="': 'keyword.operator.js'
+ '"..."': 'keyword.operator.spread.js'
'"in"': 'keyword.operator.in'
'"instanceof"': 'keyword.operator.instanceof'
From 0becd7b79449047a647d8d4e46ac1fee422dc025 Mon Sep 17 00:00:00 2001
From: steven nguyen <58114641+icecream17@users.noreply.github.com>
Date: Sat, 6 Feb 2021 11:40:09 -0600
Subject: [PATCH 47/55] slight visual change [skip ci]
---
grammars/tree-sitter-javascript.cson | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index b31adfab..7365a748 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -242,8 +242,8 @@ scopes:
'"get"': 'keyword.operator.setter'
'"set"': 'keyword.operator.setter'
- '"."': 'meta.delimiter.period'
'"?."': 'meta.delimiter.optional'
+ '"."': 'meta.delimiter.period'
'","': 'meta.delimiter.comma'
'"if"': 'keyword.control'
From 2fec918d6677bd888098996f67f5d86b5350b7de Mon Sep 17 00:00:00 2001
From: steven nguyen
Date: Thu, 25 Feb 2021 10:10:57 -0600
Subject: [PATCH 48/55] add rest and bitwise shift
---
grammars/javascript.cson | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 7b766021..d65582cc 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1355,16 +1355,12 @@
'name': 'keyword.operator.assignment.compound.logical.js'
}
{
- 'match': '&=|\\^=|<<=|>>=|>>>=|\\|='
+ 'match': '&=|\\^=|\\|='
'name': 'keyword.operator.assignment.compound.bitwise.js'
}
{
- 'match': '<<|>>>|>>'
- 'name': 'keyword.operator.bitwise.shift.js'
- }
- {
- 'match': '!==|!=|<=|>=|===|==|<|>'
- 'name': 'keyword.operator.comparison.js'
+ 'match': '<<=|>>=|>>>=|'
+ 'name': 'keyword.operator.assignment.compound.bitwise.shift.js'
}
{
# One of: && !! ! || ??
@@ -1375,6 +1371,14 @@
'match': '&|\\||\\^|~'
'name': 'keyword.operator.bitwise.js'
}
+ {
+ 'match': '<<|>>>|>>'
+ 'name': 'keyword.operator.bitwise.shift.js'
+ }
+ {
+ 'match': '!==|!=|<=|>=|===|==|<|>'
+ 'name': 'keyword.operator.comparison.js'
+ }
{
'match': '=|:'
'name': 'keyword.operator.assignment.js'
@@ -1598,7 +1602,7 @@
'match': '(\\.\\.\\.)([a-zA-Z_$][\\w$]*)'
'captures':
'1':
- 'name': 'keyword.operator.spread.js'
+ 'name': 'keyword.operator.rest.js'
'2':
'name': 'variable.parameter.rest.function.js'
}
@@ -1629,7 +1633,7 @@
'match': '(\\.\\.\\.)([a-zA-Z_$][\\w$]*)'
'captures':
'1':
- 'name': 'keyword.operator.spread.js'
+ 'name': 'keyword.operator.rest.js'
'2':
'name': 'variable.parameter.rest.function.js'
}
From 743fcd5b42fe9efe1f91c61ea7c9aee0c089f946 Mon Sep 17 00:00:00 2001
From: steven nguyen
Date: Thu, 25 Feb 2021 10:20:18 -0600
Subject: [PATCH 49/55] correct get, add scopes, consistency [skip ci]
---
grammars/tree-sitter-javascript.cson | 85 ++++++++++++++--------------
1 file changed, 43 insertions(+), 42 deletions(-)
diff --git a/grammars/tree-sitter-javascript.cson b/grammars/tree-sitter-javascript.cson
index b2cdb0c5..344c03fd 100644
--- a/grammars/tree-sitter-javascript.cson
+++ b/grammars/tree-sitter-javascript.cson
@@ -187,50 +187,51 @@ scopes:
'ternary_expression > ":"': 'keyword.operator.ternary.js'
'":"': 'keyword.operator.assignment.js'
- '"="': 'keyword.operator.js'
- '"=="': 'keyword.operator.js'
- '"==="': 'keyword.operator.js'
- '"!"': 'keyword.operator.js'
- '"!="': 'keyword.operator.js'
- '"!=="': 'keyword.operator.js'
+ '"="': 'keyword.operator.assignment.js'
+ 'binary_expression > "=="': 'keyword.operator.comparison.js'
+ 'binary_expression > "==="': 'keyword.operator.comparison.js'
+ 'unary_expression > "!"': 'keyword.operator.logical.js'
+ 'binary_expression > "!="': 'keyword.operator.comparison.js'
+ 'binary_expression > "!=="': 'keyword.operator.comparison.js'
'"+"': 'keyword.operator.js'
- '"++"': 'keyword.operator.js'
- '"+="': 'keyword.operator.js'
+ 'update_expression > "++"': 'keyword.operator.increment.js'
+ 'augmented_assignment_expression > "+="': 'keyword.operator.assignment.compound.js'
'"-"': 'keyword.operator.js'
- '"--"': 'keyword.operator.js'
- '"-="': 'keyword.operator.js'
+ 'update_expression > "--"': 'keyword.operator.decrement.js'
+ 'augmented_assignment_expression > "-="': 'keyword.operator.assignment.compound.js'
'"*"': 'keyword.operator.js'
- '"*="': 'keyword.operator.js'
- '"**"': 'keyword.operator.js'
- '"**="': 'keyword.operator.js'
- '"/"': 'keyword.operator.js'
- '"/="': 'keyword.operator.js'
- '"%"': 'keyword.operator.js'
- '"%="': 'keyword.operator.js'
- '"<"': 'keyword.operator.js'
- '"<="': 'keyword.operator.js'
- '"<<"': 'keyword.operator.js'
- '"<<="': 'keyword.operator.js'
- '">"': 'keyword.operator.js'
- '">="': 'keyword.operator.js'
- '">>"': 'keyword.operator.js'
- '">>="': 'keyword.operator.js'
- '">>>"': 'keyword.operator.js'
- '">>>="': 'keyword.operator.js'
- '"~"': 'keyword.operator.js'
- '"^"': 'keyword.operator.js'
- '"&"': 'keyword.operator.js'
- '"|"': 'keyword.operator.js'
- '"^="': 'keyword.operator.js'
- '"&="': 'keyword.operator.js'
- '"|="': 'keyword.operator.js'
- '"&&"': 'keyword.operator.js'
- '"||"': 'keyword.operator.js'
- '"??"': 'keyword.operator.js'
- '"&&="': 'keyword.operator.js'
- '"||="': 'keyword.operator.js'
- '"??="': 'keyword.operator.js'
- '"..."': 'keyword.operator.spread.js'
+ 'augmented_assignment_expression > "*="': 'keyword.operator.assignment.compound.js'
+ 'binary_expression > "**"': 'keyword.operator.js'
+ 'augmented_assignment_expression > "**="': 'keyword.operator.assignment.compound.js'
+ 'binary_expression > "/"': 'keyword.operator.js'
+ 'augmented_assignment_expression > "/="': 'keyword.operator.assignment.compound.js'
+ 'binary_expression > "%"': 'keyword.operator.js'
+ 'augmented_assignment_expression > "%="': 'keyword.operator.assignment.compound.js'
+ 'binary_expression > "<"': 'keyword.operator.comparison.js'
+ 'binary_expression > "<="': 'keyword.operator.comparison.js'
+ 'binary_expression > "<<"': 'keyword.operator.bitwise.shift.js'
+ 'augmented_assignment_expression > "<<="': 'keyword.operator.assignment.compound.bitwise.js'
+ 'binary_expression > ">"': 'keyword.operator.comparison.js'
+ 'binary_expression > ">="': 'keyword.operator.comparison.js'
+ 'binary_expression > ">>"': 'keyword.operator.bitwise.shift.js'
+ 'augmented_assignment_expression > ">>="': 'keyword.operator.assignment.compound.bitwise.js'
+ 'binary_expression > ">>>"': 'keyword.operator.bitwise.shift.js'
+ 'augmented_assignment_expression > ">>>="': 'keyword.operator.assignment.compound.bitwise.js'
+ 'unary_expression > "~"': 'keyword.operator.bitwise.js'
+ 'binary_expression > "^"': 'keyword.operator.bitwise.js'
+ 'binary_expression > "&"': 'keyword.operator.bitwise.js'
+ 'binary_expression > "|"': 'keyword.operator.bitwise.js'
+ 'augmented_assignment_expression > "^="': 'keyword.operator.assignment.compound.bitwise.js'
+ 'augmented_assignment_expression > "&="': 'keyword.operator.assignment.compound.bitwise.js'
+ 'augmented_assignment_expression > "|="': 'keyword.operator.assignment.compound.bitwise.js'
+ 'binary_expression > "&&"': 'keyword.operator.logical.js'
+ 'binary_expression > "||"': 'keyword.operator.logical.js'
+ 'binary_expression > "??"': 'keyword.operator.logical.js'
+ 'augmented_assignment_expression > "&&="': 'keyword.operator.assignment.compound.logical.js'
+ 'augmented_assignment_expression > "||="': 'keyword.operator.assignment.compound.logical.js'
+ 'augmented_assignment_expression > "??="': 'keyword.operator.assignment.compound.logical.js'
+ 'rest_parameter > "..."': 'keyword.operator.rest.js'
+ 'spread_element > "..."': 'keyword.operator.spread.js'
'"in"': 'keyword.operator.in'
'"instanceof"': 'keyword.operator.instanceof'
@@ -239,7 +240,7 @@ scopes:
'"typeof"': 'keyword.operator.typeof'
'"void"': 'keyword.operator.void'
- '"get"': 'keyword.operator.setter'
+ '"get"': 'keyword.operator.getter'
'"set"': 'keyword.operator.setter'
'"?."': 'meta.delimiter.optional'
From 7648f785e34c55a34e4433381bd05abcf2729979 Mon Sep 17 00:00:00 2001
From: steven nguyen
Date: Thu, 25 Feb 2021 12:50:37 -0600
Subject: [PATCH 50/55] add rest matcher
---
grammars/javascript.cson | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index d65582cc..45677bc6 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -986,6 +986,10 @@
'match': '\\.\\.\\.'
'name': 'keyword.operator.spread.js'
}
+ {
+ 'match': '\\.\\.\\.'
+ 'name': 'keyword.operator.rest.js'
+ }
{
'match': '(?
Date: Thu, 25 Feb 2021 12:53:48 -0600
Subject: [PATCH 51/55] undo rest, try to fix infinite loop
---
grammars/javascript.cson | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 45677bc6..dd3dd742 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -986,10 +986,10 @@
'match': '\\.\\.\\.'
'name': 'keyword.operator.spread.js'
}
- {
- 'match': '\\.\\.\\.'
- 'name': 'keyword.operator.rest.js'
- }
+ # {
+ # 'match': '\\.\\.\\.'
+ # 'name': 'keyword.operator.rest.js'
+ # }
{
'match': '(?
Date: Thu, 25 Feb 2021 12:59:57 -0600
Subject: [PATCH 52/55] ...i figured out the infinite loop
Empty string "" times infinity is why
Undo the undo
---
grammars/javascript.cson | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index dd3dd742..d37ef90e 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -986,10 +986,10 @@
'match': '\\.\\.\\.'
'name': 'keyword.operator.spread.js'
}
- # {
- # 'match': '\\.\\.\\.'
- # 'name': 'keyword.operator.rest.js'
- # }
+ {
+ 'match': '\\.\\.\\.'
+ 'name': 'keyword.operator.rest.js'
+ }
{
'match': '(?>=|>>>=|'
+ 'match': '<<=|>>=|>>>='
'name': 'keyword.operator.assignment.compound.bitwise.shift.js'
}
{
@@ -1606,7 +1606,7 @@
'match': '(\\.\\.\\.)([a-zA-Z_$][\\w$]*)'
'captures':
'1':
- 'name': 'keyword.operator.spread.js' # Todo: change to keyword.operator.rest.js
+ 'name': 'keyword.operator.rest.js'
'2':
'name': 'variable.parameter.rest.function.js'
}
@@ -1637,7 +1637,7 @@
'match': '(\\.\\.\\.)([a-zA-Z_$][\\w$]*)'
'captures':
'1':
- 'name': 'keyword.operator.spread.js' # Todo: change to keyword.operator.rest.js
+ 'name': 'keyword.operator.rest.js'
'2':
'name': 'variable.parameter.rest.function.js'
}
From 4220dd720c688818bcf0273e5e5977a9ab9eed45 Mon Sep 17 00:00:00 2001
From: steven nguyen
Date: Thu, 25 Feb 2021 13:07:43 -0600
Subject: [PATCH 53/55] update spec to match
---
spec/javascript-spec.coffee | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee
index b7599ec3..15650559 100644
--- a/spec/javascript-spec.coffee
+++ b/spec/javascript-spec.coffee
@@ -641,13 +641,21 @@ describe "JavaScript grammar", ->
describe "bitwise", ->
it "tokenizes them", ->
- operators = ["<<=", ">>=", ">>>=", "&=", "^=", "|="]
+ operators = ["&=", "^=", "|="]
for operator in operators
{tokens} = grammar.tokenizeLine('a ' + operator + ' b')
expect(tokens[0]).toEqual value: 'a ', scopes: ['source.js']
expect(tokens[1]).toEqual value: operator, scopes: ['source.js', 'keyword.operator.assignment.compound.bitwise.js']
expect(tokens[2]).toEqual value: ' b', scopes: ['source.js']
+ it "tokenizes bitwise shift", ->
+ operators = ["<<=", ">>=", ">>>="]
+ for operator in operators
+ {tokens} = grammar.tokenizeLine('a ' + operator + ' b')
+ expect(tokens[0]).toEqual value: 'a ', scopes: ['source.js']
+ expect(tokens[1]).toEqual value: operator, scopes: ['source.js', 'keyword.operator.assignment.compound.bitwise.shift.js']
+ expect(tokens[2]).toEqual value: ' b', scopes: ['source.js']
+
describe "constants", ->
it "tokenizes ALL_CAPS variables as constants", ->
{tokens} = grammar.tokenizeLine('var MY_COOL_VAR = 42;')
@@ -1613,11 +1621,11 @@ describe "JavaScript grammar", ->
it "tokenizes the rest parameter", ->
{tokens} = grammar.tokenizeLine('(...args) => args[0]')
- expect(tokens[1]).toEqual value: '...', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'keyword.operator.spread.js']
+ expect(tokens[1]).toEqual value: '...', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'keyword.operator.rest.js']
expect(tokens[2]).toEqual value: 'args', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'variable.parameter.rest.function.js']
{tokens} = grammar.tokenizeLine('(c, ...val) => c + val')
- expect(tokens[4]).toEqual value: '...', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'keyword.operator.spread.js']
+ expect(tokens[4]).toEqual value: '...', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'keyword.operator.rest.js']
expect(tokens[5]).toEqual value: 'val', scopes: ['source.js', 'meta.function.arrow.js', 'meta.parameters.js', 'variable.parameter.rest.function.js']
it "tokenizes illegal parameters", ->
From cf0b7109c166978a32232802df5a0172a0a1a2e2 Mon Sep 17 00:00:00 2001
From: steven nguyen
Date: Thu, 25 Feb 2021 13:11:45 -0600
Subject: [PATCH 54/55] fix operator precedence
---
grammars/javascript.cson | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index d37ef90e..1599c0c2 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1366,6 +1366,16 @@
'match': '<<=|>>=|>>>='
'name': 'keyword.operator.assignment.compound.bitwise.shift.js'
}
+ # Bitwise shift to match >> instead of >
+ # Then comparison to match != instead of !
+ {
+ 'match': '<<|>>>|>>'
+ 'name': 'keyword.operator.bitwise.shift.js'
+ }
+ {
+ 'match': '!==|!=|<=|>=|===|==|<|>'
+ 'name': 'keyword.operator.comparison.js'
+ }
{
# One of: && !! ! || ??
'match': '&&|!!|!|\\|\\||\\?\\?'
@@ -1375,14 +1385,6 @@
'match': '&|\\||\\^|~'
'name': 'keyword.operator.bitwise.js'
}
- {
- 'match': '<<|>>>|>>'
- 'name': 'keyword.operator.bitwise.shift.js'
- }
- {
- 'match': '!==|!=|<=|>=|===|==|<|>'
- 'name': 'keyword.operator.comparison.js'
- }
{
'match': '=|:'
'name': 'keyword.operator.assignment.js'
@@ -1620,7 +1622,7 @@
]
}
{
- # Or starting with coptional chaining
+ # Or starting with optional chaining
'begin': '(\\?\\.)(\\()'
'beginCaptures':
'1':
From fb6adecf4b5887abfcb96d0df27c6bc48b8acddf Mon Sep 17 00:00:00 2001
From: steven nguyen
Date: Thu, 25 Feb 2021 13:46:10 -0600
Subject: [PATCH 55/55] fix **=
---
grammars/javascript.cson | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/grammars/javascript.cson b/grammars/javascript.cson
index 1599c0c2..d37eb38e 100644
--- a/grammars/javascript.cson
+++ b/grammars/javascript.cson
@@ -1350,7 +1350,8 @@
'operators':
'patterns': [
{
- 'match': '%=|\\+=|-=|\\*=|(?