From 0e785049327a108bb858e3f1a75644dc9c5b146c Mon Sep 17 00:00:00 2001 From: NullVoxPopuli Date: Tue, 2 Nov 2021 22:35:54 -0400 Subject: [PATCH 1/3] support embedded hbs --- grammars/javascript.cson | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 7f947188..582c9854 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1494,6 +1494,30 @@ } ] } + { + 'begin': '(hbs|handlebars)\\s*(`)' + 'beginCaptures': + '1': + 'name': 'entity.name.function.js' + '2': + 'name': 'punctuation.definition.string.begin.js' + 'end': '`' + 'endCaptures': + '0': + 'name': 'punctuation.definition.string.end.js' + 'name': 'string.quoted.template.sql.js' + 'patterns': [ + { + 'include': '#string_escapes' + } + { + 'include': '#interpolated_js' + } + { + 'include': 'source.handlebars' + } + ] + } { 'begin': '`' 'beginCaptures': From 3d12b85877ed5387214ed986b3c29987a7c0325e Mon Sep 17 00:00:00 2001 From: steven nguyen Date: Tue, 14 Dec 2021 10:04:25 -0600 Subject: [PATCH 2/3] add tests for hbs assuming hbs template scope --- spec/javascript-spec.coffee | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 192850ec..6e003f70 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -968,6 +968,25 @@ describe "JavaScript grammar", -> expect(tokens[5]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.sql.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] expect(tokens[6]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.sql.js', 'punctuation.definition.string.end.js'] + describe "ES6 tagged HBS string templates", -> + it "tokenizes them as strings", -> + {tokens} = grammar.tokenizeLine('hbs`{{#if isAdmin`') + expect(tokens[0]).toEqual value: 'hbs', scopes: ['source.js', 'string.quoted.template.hbs.js', 'entity.name.function.js'] + expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.hbs.js', 'punctuation.definition.string.begin.js'] + expect(tokens[2]).toEqual value: '{{#if isAdmin', scopes: ['source.js', 'string.quoted.template.hbs.js'] + expect(tokens[3]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.hbs.js', 'punctuation.definition.string.end.js'] + + describe "ES6 tagged HBS string templates with interpolation", -> + it "tokenizes them as strings", -> + {tokens} = grammar.tokenizeLine('hbs`{{#if ${isAdmin}`') + expect(tokens[0]).toEqual value: 'hbs', scopes: ['source.js', 'string.quoted.template.hbs.js', 'entity.name.function.js'] + expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.hbs.js', 'punctuation.definition.string.begin.js'] + expect(tokens[2]).toEqual value: '{{#if ', scopes: ['source.js', 'string.quoted.template.hbs.js'] + expect(tokens[3]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.hbs.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[4]).toEqual value: 'isAdmin', scopes: ['source.js', 'string.quoted.template.hbs.js', 'source.js.embedded.source'] + expect(tokens[5]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.hbs.js', 'source.js.embedded.source', 'punctuation.section.embedded.js'] + expect(tokens[6]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.hbs.js', 'punctuation.definition.string.end.js'] + describe "ES6 class", -> it "tokenizes class", -> {tokens} = grammar.tokenizeLine('class MyClass') From 79a8ac30319f830f7be6d37128382a1860d2253a Mon Sep 17 00:00:00 2001 From: NullVoxPopuli Date: Tue, 14 Dec 2021 11:43:31 -0500 Subject: [PATCH 3/3] Update grammars/javascript.cson Co-authored-by: steven nguyen --- grammars/javascript.cson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 582c9854..4af64789 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -1505,7 +1505,7 @@ 'endCaptures': '0': 'name': 'punctuation.definition.string.end.js' - 'name': 'string.quoted.template.sql.js' + 'name': 'string.quoted.template.hbs.js' 'patterns': [ { 'include': '#string_escapes'