Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 3da89a1

Browse files
author
Wliu
authored
Merge pull request #441 from DamnedScholar/master
Added template matching following innerHTML
2 parents 3228dac + 96c3bda commit 3da89a1

File tree

2 files changed

+63
-12
lines changed

2 files changed

+63
-12
lines changed

grammars/javascript.cson

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1388,6 +1388,40 @@
13881388
}
13891389
]
13901390
}
1391+
{
1392+
'begin': '(?<=innerHTML)\\s*(\\+?=)\\s*(?=`)'
1393+
'beginCaptures':
1394+
'1':
1395+
'name': 'keyword.operator.assignment.js'
1396+
'end': '(?<=`)'
1397+
'endCaptures':
1398+
'0':
1399+
'name': 'punctuation.definition.string.end.js'
1400+
'contentName': 'string.quoted.template.html.js'
1401+
'patterns': [
1402+
{
1403+
'begin': '`'
1404+
'beginCaptures':
1405+
'0':
1406+
'name': 'punctuation.definition.string.begin.js'
1407+
'end': '`'
1408+
'endCaptures':
1409+
'0':
1410+
'name': 'punctuation.definition.string.end.js'
1411+
'patterns': [
1412+
{
1413+
'include': '#string_escapes'
1414+
}
1415+
{
1416+
'include': '#interpolated_js'
1417+
}
1418+
{
1419+
'include': 'text.html.basic'
1420+
}
1421+
]
1422+
}
1423+
]
1424+
}
13911425
{
13921426
'begin': '(Relay\\.QL)\\s*(`)'
13931427
'beginCaptures':

spec/javascript-spec.coffee

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -603,20 +603,37 @@ describe "JavaScript grammar", ->
603603
describe "ES6 tagged HTML string templates", ->
604604
it "tokenizes them as strings", ->
605605
{tokens} = grammar.tokenizeLine('html`hey <b>${name}</b>`')
606-
expect(tokens[0]).toEqual value: 'html', scopes: [ 'source.js', 'string.quoted.template.html.js', 'entity.name.function.js' ]
607-
expect(tokens[1]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ]
606+
expect(tokens[0]).toEqual value: 'html', scopes: ['source.js', 'string.quoted.template.html.js', 'entity.name.function.js']
607+
expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js']
608608
expect(tokens[2]).toEqual value: 'hey <b>', scopes: ['source.js', 'string.quoted.template.html.js']
609609
expect(tokens[3]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
610610
expect(tokens[4]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source']
611611
expect(tokens[5]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
612612
expect(tokens[6]).toEqual value: '</b>', scopes: ['source.js', 'string.quoted.template.html.js']
613613
expect(tokens[7]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js']
614614

615+
describe "innerHTML attribute declarations with string template tags", ->
616+
it "tokenizes them as strings", ->
617+
{tokens} = grammar.tokenizeLine('text.innerHTML = `hey <b>${name}</b>`')
618+
expect(tokens[0]).toEqual value: 'text', scopes: ['source.js', 'variable.other.object.js']
619+
expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.period.js']
620+
expect(tokens[2]).toEqual value: 'innerHTML', scopes: ['source.js', 'variable.other.property.js']
621+
expect(tokens[3]).toEqual value: ' ', scopes: ['source.js']
622+
expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'keyword.operator.assignment.js']
623+
expect(tokens[5]).toEqual value: ' ', scopes: ['source.js']
624+
expect(tokens[6]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js']
625+
expect(tokens[7]).toEqual value: 'hey <b>', scopes: ['source.js', 'string.quoted.template.html.js']
626+
expect(tokens[8]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
627+
expect(tokens[9]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source']
628+
expect(tokens[10]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
629+
expect(tokens[11]).toEqual value: '</b>', scopes: ['source.js', 'string.quoted.template.html.js']
630+
expect(tokens[12]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.end.js']
631+
615632
describe "ES6 tagged HTML string templates with expanded function name", ->
616633
it "tokenizes them as strings", ->
617634
{tokens} = grammar.tokenizeLine('escapeHTML`hey <b>${name}</b>`')
618-
expect(tokens[0]).toEqual value: 'escapeHTML', scopes: [ 'source.js', 'string.quoted.template.html.js', 'entity.name.function.js' ]
619-
expect(tokens[1]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ]
635+
expect(tokens[0]).toEqual value: 'escapeHTML', scopes: ['source.js', 'string.quoted.template.html.js', 'entity.name.function.js']
636+
expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js']
620637
expect(tokens[2]).toEqual value: 'hey <b>', scopes: ['source.js', 'string.quoted.template.html.js']
621638
expect(tokens[3]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
622639
expect(tokens[4]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source']
@@ -627,9 +644,9 @@ describe "JavaScript grammar", ->
627644
describe "ES6 tagged HTML string templates with expanded function name and white space", ->
628645
it "tokenizes them as strings", ->
629646
{tokens} = grammar.tokenizeLine('escapeHTML `hey <b>${name}</b>`')
630-
expect(tokens[0]).toEqual value: 'escapeHTML', scopes: [ 'source.js', 'string.quoted.template.html.js', 'entity.name.function.js' ]
631-
expect(tokens[1]).toEqual value: ' ', scopes: [ 'source.js', 'string.quoted.template.html.js' ]
632-
expect(tokens[2]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js' ]
647+
expect(tokens[0]).toEqual value: 'escapeHTML', scopes: ['source.js', 'string.quoted.template.html.js', 'entity.name.function.js']
648+
expect(tokens[1]).toEqual value: ' ', scopes: ['source.js', 'string.quoted.template.html.js']
649+
expect(tokens[2]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.html.js', 'punctuation.definition.string.begin.js']
633650
expect(tokens[3]).toEqual value: 'hey <b>', scopes: ['source.js', 'string.quoted.template.html.js']
634651
expect(tokens[4]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
635652
expect(tokens[5]).toEqual value: 'name', scopes: ['source.js', 'string.quoted.template.html.js', 'source.js.embedded.source']
@@ -640,16 +657,16 @@ describe "JavaScript grammar", ->
640657
describe "ES6 tagged Relay.QL string templates", ->
641658
it "tokenizes them as strings", ->
642659
{tokens} = grammar.tokenizeLine('Relay.QL`fragment on Foo { id }`')
643-
expect(tokens[0]).toEqual value: 'Relay.QL', scopes: [ 'source.js', 'string.quoted.template.graphql.js', 'entity.name.function.js' ]
644-
expect(tokens[1]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.begin.js' ]
660+
expect(tokens[0]).toEqual value: 'Relay.QL', scopes: ['source.js', 'string.quoted.template.graphql.js', 'entity.name.function.js']
661+
expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.begin.js']
645662
expect(tokens[2]).toEqual value: 'fragment on Foo { id }', scopes: ['source.js', 'string.quoted.template.graphql.js']
646663
expect(tokens[3]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.end.js']
647664

648665
describe "ES6 tagged Relay.QL string templates with interpolation", ->
649666
it "tokenizes them as strings", ->
650667
{tokens} = grammar.tokenizeLine('Relay.QL`fragment on Foo { ${myFragment} }`')
651-
expect(tokens[0]).toEqual value: 'Relay.QL', scopes: [ 'source.js', 'string.quoted.template.graphql.js', 'entity.name.function.js' ]
652-
expect(tokens[1]).toEqual value: '`', scopes: [ 'source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.begin.js' ]
668+
expect(tokens[0]).toEqual value: 'Relay.QL', scopes: ['source.js', 'string.quoted.template.graphql.js', 'entity.name.function.js']
669+
expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.begin.js']
653670
expect(tokens[2]).toEqual value: 'fragment on Foo { ', scopes: ['source.js', 'string.quoted.template.graphql.js']
654671
expect(tokens[3]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.graphql.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
655672
expect(tokens[4]).toEqual value: 'myFragment', scopes: ['source.js', 'string.quoted.template.graphql.js', 'source.js.embedded.source']
@@ -1657,7 +1674,7 @@ describe "JavaScript grammar", ->
16571674
expect(tokens[5]).toEqual value: 'x', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope]
16581675
expect(tokens[6]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.end.js']
16591676
expect(tokens[8]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'keyword.operator.js']
1660-
expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js' ]
1677+
expect(tokens[9]).toEqual value: ' y ', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js']
16611678
expect(tokens[10]).toEqual value: '+', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', 'keyword.operator.js']
16621679
expect(tokens[12]).toEqual value: delim, scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope, 'punctuation.definition.string.begin.js']
16631680
expect(tokens[13]).toEqual value: ':function()', scopes: ['source.js', 'meta.method-call.js', 'meta.arguments.js', scope]

0 commit comments

Comments
 (0)