From ada21172b984df1429fc1356a3d6630de9d1a62b Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Mon, 10 Oct 2016 15:28:34 -0500 Subject: [PATCH 01/10] Added template matching following innerHTML --- grammars/javascript.cson | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 89ee4c14..4bf8fb82 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1359,6 +1359,30 @@ } ] } + { + 'begin': '(?<=innerHTML)\\s*(=)\\s*(`)' + 'beginCaptures': + '1': + 'name': 'keyword.operator.assignment.js' + '2': + 'name': 'punctuation.definition.string.begin.js' + 'end': '`' + 'endCaptures': + '0': + 'name': 'punctuation.definition.string.end.js' + 'name': 'string.quoted.template.html.js' + 'patterns': [ + { + 'include': '#string_escapes' + } + { + 'include': '#interpolated_js' + } + { + 'include': 'text.html.basic' + } + ] + } { 'begin': '(Relay\\.QL)\\s*(`)' 'beginCaptures': From d1e51105de78d0c2187962cc7dc80dcc1b528c9c Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Sun, 16 Oct 2016 12:58:54 -0500 Subject: [PATCH 02/10] Tweaking regex --- grammars/javascript.cson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 4bf8fb82..ae55d8f9 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1360,7 +1360,7 @@ ] } { - 'begin': '(?<=innerHTML)\\s*(=)\\s*(`)' + 'begin': '(?<=innerHTML)\\s*(\\+?=)\\s*(`)' 'beginCaptures': '1': 'name': 'keyword.operator.assignment.js' From 578ab0a510d209a325dc6fec27bcae093a6d0c94 Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Sun, 23 Oct 2016 16:48:27 -0500 Subject: [PATCH 03/10] Added test for innerHTML template match --- spec/javascript-spec.coffee | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 45c83805..e0668090 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -612,6 +612,21 @@ describe "Javascript grammar", -> expect(tokens[6]).toEqual value: '', scopes: ['source.js', 'string.quoted.template.html.js'] expect(tokens[7]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js'] + describe "innerHTML attribute declarations with string template tags", -> + it "tokenizes them as strings", -> + {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[2]).toEqual value: 'innerHTML', scopes: [ 'source.js', 'variable.other.property.js' ] + expect(tokens[3]).toEqual value: '=', scopes: [ 'source.js', 'keyword.operator.assignment.js' ] + expect(tokens[4]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[5]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[6]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[7]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] + expect(tokens[8]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[9]).toEqual value: '', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[10]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js'] + describe "ES6 tagged HTML string templates with expanded function name", -> it "tokenizes them as strings", -> {tokens} = grammar.tokenizeLine('escapeHTML`hey ${name}`') From 925d776357e21fdf9381d62ba21b504db4a3e934 Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Mon, 24 Oct 2016 12:59:38 -0500 Subject: [PATCH 04/10] Regex tweaks --- grammars/javascript.cson | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index ae55d8f9..382a4c97 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1360,11 +1360,9 @@ ] } { - 'begin': '(?<=innerHTML)\\s*(\\+?=)\\s*(`)' + 'begin': '(?<=innerHTML\\s*(\\+?=)\\s*)(`)' 'beginCaptures': '1': - 'name': 'keyword.operator.assignment.js' - '2': 'name': 'punctuation.definition.string.begin.js' 'end': '`' 'endCaptures': From e7f64f1b85258d77c391c4f9c969e63865a26469 Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Mon, 24 Oct 2016 15:46:44 -0500 Subject: [PATCH 05/10] Regex reverted, updating tests --- grammars/javascript.cson | 2 +- spec/javascript-spec.coffee | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 382a4c97..65d649e8 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1360,7 +1360,7 @@ ] } { - 'begin': '(?<=innerHTML\\s*(\\+?=)\\s*)(`)' + 'begin': '(?<=innerHTML)\\s*(\\+?=)\\s*(`)' 'beginCaptures': '1': 'name': 'punctuation.definition.string.begin.js' diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index e0668090..c8364c30 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -618,14 +618,16 @@ describe "Javascript grammar", -> 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[2]).toEqual value: 'innerHTML', scopes: [ 'source.js', 'variable.other.property.js' ] - expect(tokens[3]).toEqual value: '=', scopes: [ 'source.js', 'keyword.operator.assignment.js' ] - expect(tokens[4]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] - expect(tokens[5]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] - expect(tokens[6]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] - expect(tokens[7]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] - expect(tokens[8]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] - expect(tokens[9]).toEqual value: '', scopes: ['source.js', 'string.quoted.template.html.js'] - expect(tokens[10]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js'] + expect(tokens[3]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] + expect(tokens[4]).toEqual value: '=', scopes: [ 'source.js', 'string.quoted.template.html.js', 'keyword.operator.assignment.js' ] + expect(tokens[5]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] + expect(tokens[6]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[7]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[8]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[9]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] + expect(tokens[10]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[11]).toEqual value: '', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[12]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js'] describe "ES6 tagged HTML string templates with expanded function name", -> it "tokenizes them as strings", -> From a47ec1d6ed75f2c871cc49d6f5aba0bbb3a0040b Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Mon, 24 Oct 2016 16:37:26 -0500 Subject: [PATCH 06/10] Updated test --- grammars/javascript.cson | 2 ++ spec/javascript-spec.coffee | 15 +++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 65d649e8..ae55d8f9 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1363,6 +1363,8 @@ 'begin': '(?<=innerHTML)\\s*(\\+?=)\\s*(`)' 'beginCaptures': '1': + 'name': 'keyword.operator.assignment.js' + '2': 'name': 'punctuation.definition.string.begin.js' 'end': '`' 'endCaptures': diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index c8364c30..1fd66ea9 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -620,14 +620,13 @@ describe "Javascript grammar", -> expect(tokens[2]).toEqual value: 'innerHTML', scopes: [ 'source.js', 'variable.other.property.js' ] expect(tokens[3]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] expect(tokens[4]).toEqual value: '=', scopes: [ 'source.js', 'string.quoted.template.html.js', 'keyword.operator.assignment.js' ] - expect(tokens[5]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] - expect(tokens[6]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] - expect(tokens[7]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] - expect(tokens[8]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] - expect(tokens[9]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] - expect(tokens[10]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] - expect(tokens[11]).toEqual value: '', scopes: ['source.js', 'string.quoted.template.html.js'] - expect(tokens[12]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js'] + expect(tokens[5]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[6]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[7]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[8]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] + expect(tokens[9]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[10]).toEqual value: '', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[11]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js'] describe "ES6 tagged HTML string templates with expanded function name", -> it "tokenizes them as strings", -> From b188911518fbc81c65d82e267fafc8ee93d4ddac Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Mon, 24 Oct 2016 16:49:26 -0500 Subject: [PATCH 07/10] Test updated --- spec/javascript-spec.coffee | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 1fd66ea9..c8364c30 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -620,13 +620,14 @@ describe "Javascript grammar", -> expect(tokens[2]).toEqual value: 'innerHTML', scopes: [ 'source.js', 'variable.other.property.js' ] expect(tokens[3]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] expect(tokens[4]).toEqual value: '=', scopes: [ 'source.js', 'string.quoted.template.html.js', 'keyword.operator.assignment.js' ] - expect(tokens[5]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] - expect(tokens[6]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] - expect(tokens[7]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] - expect(tokens[8]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] - expect(tokens[9]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] - expect(tokens[10]).toEqual value: '', scopes: ['source.js', 'string.quoted.template.html.js'] - expect(tokens[11]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js'] + expect(tokens[5]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] + expect(tokens[6]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[7]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[8]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[9]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] + expect(tokens[10]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[11]).toEqual value: '', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[12]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js'] describe "ES6 tagged HTML string templates with expanded function name", -> it "tokenizes them as strings", -> From 25853e6c2ff713cb7e453d6f0d6a63d880690c68 Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Wed, 2 Nov 2016 20:45:02 -0500 Subject: [PATCH 08/10] Fixed scopes. --- grammars/javascript.cson | 32 ++++++++++++++++++++++---------- spec/javascript-spec.coffee | 6 +++--- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index ae55d8f9..5a4ee666 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1360,26 +1360,38 @@ ] } { - 'begin': '(?<=innerHTML)\\s*(\\+?=)\\s*(`)' + 'begin': '(?<=innerHTML)\\s*(\\+?=)\\s*(?=`)' 'beginCaptures': '1': 'name': 'keyword.operator.assignment.js' '2': 'name': 'punctuation.definition.string.begin.js' - 'end': '`' + 'end': '(?<=`)' 'endCaptures': '0': 'name': 'punctuation.definition.string.end.js' - 'name': 'string.quoted.template.html.js' + 'contentName': 'string.quoted.template.html.js' 'patterns': [ { - 'include': '#string_escapes' - } - { - 'include': '#interpolated_js' - } - { - 'include': 'text.html.basic' + 'begin': '`' + 'beginCaptures': + '0': + 'name': 'punctuation.definition.string.begin.js' + 'end': '`' + 'endCaptures': + '0': + 'name': 'punctuation.definition.string.end.js' + 'patterns': [ + { + 'include': '#string_escapes' + } + { + 'include': '#interpolated_js' + } + { + 'include': 'text.html.basic' + } + ] } ] } diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index c8364c30..1fdb63e9 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -618,9 +618,9 @@ describe "Javascript grammar", -> 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[2]).toEqual value: 'innerHTML', scopes: [ 'source.js', 'variable.other.property.js' ] - expect(tokens[3]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] - expect(tokens[4]).toEqual value: '=', scopes: [ 'source.js', 'string.quoted.template.html.js', 'keyword.operator.assignment.js' ] - expect(tokens[5]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] + expect(tokens[3]).toEqual value: ' ', scopes: [ 'source.js' ] + expect(tokens[4]).toEqual value: '=', scopes: [ 'source.js', 'keyword.operator.assignment.js' ] + expect(tokens[5]).toEqual value: ' ', scopes: [ 'source.js' ] expect(tokens[6]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] expect(tokens[7]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] expect(tokens[8]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] From d44275c3e73609d5b3d4d8865a34e792edc49c6e Mon Sep 17 00:00:00 2001 From: DamnedScholar Date: Wed, 2 Nov 2016 20:47:13 -0500 Subject: [PATCH 09/10] Removed unused capture name. --- grammars/javascript.cson | 2 -- 1 file changed, 2 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 5a4ee666..e3c3ac3e 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1364,8 +1364,6 @@ 'beginCaptures': '1': 'name': 'keyword.operator.assignment.js' - '2': - 'name': 'punctuation.definition.string.begin.js' 'end': '(?<=`)' 'endCaptures': '0': From 96c3bda0c5095e39a78303c6c4c6090e5ffcb09e Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Wed, 2 Nov 2016 22:21:33 -0400 Subject: [PATCH 10/10] :art: --- spec/javascript-spec.coffee | 38 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 1fdb63e9..86a36184 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -603,8 +603,8 @@ describe "Javascript grammar", -> describe "ES6 tagged HTML string templates", -> it "tokenizes them as strings", -> {tokens} = grammar.tokenizeLine('html`hey ${name}`') - expect(tokens[0]).toEqual value: 'html', scopes: [ 'source.js', 'string.quoted.template.html.js', 'entity.name.function.js' ] - expect(tokens[1]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[0]).toEqual value: 'html', scopes: ['source.js', 'string.quoted.template.html.js', 'entity.name.function.js'] + expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js'] expect(tokens[2]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] expect(tokens[3]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] expect(tokens[4]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] @@ -615,13 +615,13 @@ describe "Javascript grammar", -> describe "innerHTML attribute declarations with string template tags", -> it "tokenizes them as strings", -> {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[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' ] - expect(tokens[5]).toEqual value: ' ', scopes: [ 'source.js' ] - expect(tokens[6]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] + 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[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'] + expect(tokens[5]).toEqual value: ' ', scopes: ['source.js'] + expect(tokens[6]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js'] expect(tokens[7]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] expect(tokens[8]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] expect(tokens[9]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] @@ -632,8 +632,8 @@ describe "Javascript grammar", -> describe "ES6 tagged HTML string templates with expanded function name", -> it "tokenizes them as strings", -> {tokens} = grammar.tokenizeLine('escapeHTML`hey ${name}`') - expect(tokens[0]).toEqual value: 'escapeHTML', scopes: [ 'source.js', 'string.quoted.template.html.js', 'entity.name.function.js' ] - expect(tokens[1]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[0]).toEqual value: 'escapeHTML', scopes: ['source.js', 'string.quoted.template.html.js', 'entity.name.function.js'] + expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js'] expect(tokens[2]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] expect(tokens[3]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] expect(tokens[4]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] @@ -644,9 +644,9 @@ describe "Javascript grammar", -> describe "ES6 tagged HTML string templates with expanded function name and white space", -> it "tokenizes them as strings", -> {tokens} = grammar.tokenizeLine('escapeHTML `hey ${name}`') - expect(tokens[0]).toEqual value: 'escapeHTML', scopes: [ 'source.js', 'string.quoted.template.html.js', 'entity.name.function.js' ] - expect(tokens[1]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ] - expect(tokens[2]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[0]).toEqual value: 'escapeHTML', scopes: ['source.js', 'string.quoted.template.html.js', 'entity.name.function.js'] + expect(tokens[1]).toEqual value: ' ', scopes: ['source.js', 'string.quoted.template.html.js'] + expect(tokens[2]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js'] expect(tokens[3]).toEqual value: 'hey ', scopes: ['source.js', 'string.quoted.template.html.js'] expect(tokens[4]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] expect(tokens[5]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source'] @@ -657,16 +657,16 @@ describe "Javascript grammar", -> describe "ES6 tagged Relay.QL string templates", -> it "tokenizes them as strings", -> {tokens} = grammar.tokenizeLine('Relay.QL`fragment on Foo { id }`') - expect(tokens[0]).toEqual value: 'Relay.QL', scopes: [ 'source.js', 'string.quoted.template.graphql.js', 'entity.name.function.js' ] - expect(tokens[1]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[0]).toEqual value: 'Relay.QL', scopes: ['source.js', 'string.quoted.template.graphql.js', 'entity.name.function.js'] + expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.begin.js'] expect(tokens[2]).toEqual value: 'fragment on Foo { id }', scopes: ['source.js', 'string.quoted.template.graphql.js'] expect(tokens[3]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.end.js'] describe "ES6 tagged Relay.QL string templates with interpolation", -> it "tokenizes them as strings", -> {tokens} = grammar.tokenizeLine('Relay.QL`fragment on Foo { ${myFragment} }`') - expect(tokens[0]).toEqual value: 'Relay.QL', scopes: [ 'source.js', 'string.quoted.template.graphql.js', 'entity.name.function.js' ] - expect(tokens[1]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.begin.js' ] + expect(tokens[0]).toEqual value: 'Relay.QL', scopes: ['source.js', 'string.quoted.template.graphql.js', 'entity.name.function.js'] + expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.begin.js'] expect(tokens[2]).toEqual value: 'fragment on Foo { ', scopes: ['source.js', 'string.quoted.template.graphql.js'] expect(tokens[3]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.graphql.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] expect(tokens[4]).toEqual value: 'myFragment', scopes: ['source.js', 'string.quoted.template.graphql.js', 'source.js.embedded.source'] @@ -1539,7 +1539,7 @@ describe "Javascript grammar", -> expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope] expect(tokens[6]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.end.js'] expect(tokens[8]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'keyword.operator.js'] - expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js' ] + expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js'] expect(tokens[10]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'keyword.operator.js'] expect(tokens[12]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.begin.js'] expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope]