Skip to content

Commit c66d63a

Browse files
author
Wliu
authored
Merge pull request atom#487 from repsac-by/support-sql-strings
Add support tagged SQL template strings
2 parents f975e17 + fa19adc commit c66d63a

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

grammars/javascript.cson

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1456,6 +1456,30 @@
14561456
}
14571457
]
14581458
}
1459+
{
1460+
'begin': '(sql|SQL|Sql)\\s*(`)'
1461+
'beginCaptures':
1462+
'1':
1463+
'name': 'entity.name.function.js'
1464+
'2':
1465+
'name': 'punctuation.definition.string.begin.js'
1466+
'end': '`'
1467+
'endCaptures':
1468+
'0':
1469+
'name': 'punctuation.definition.string.end.js'
1470+
'name': 'string.quoted.template.sql.js'
1471+
'patterns': [
1472+
{
1473+
'include': '#string_escapes'
1474+
}
1475+
{
1476+
'include': '#interpolated_js'
1477+
}
1478+
{
1479+
'include': 'source.sql'
1480+
}
1481+
]
1482+
}
14591483
{
14601484
'begin': '`'
14611485
'beginCaptures':

spec/javascript-spec.coffee

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,25 @@ describe "JavaScript grammar", ->
707707
expect(tokens[6]).toEqual value: ' }', scopes: ['source.js', 'string.quoted.template.graphql.js']
708708
expect(tokens[7]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.graphql.js', 'punctuation.definition.string.end.js']
709709

710+
describe "ES6 tagged SQL string templates", ->
711+
it "tokenizes them as strings", ->
712+
{tokens} = grammar.tokenizeLine('SQL`SELECT foo FROM bar WHERE id = :id`')
713+
expect(tokens[0]).toEqual value: 'SQL', scopes: ['source.js', 'string.quoted.template.sql.js', 'entity.name.function.js']
714+
expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.sql.js', 'punctuation.definition.string.begin.js']
715+
expect(tokens[2]).toEqual value: 'SELECT foo FROM bar WHERE id = :id', scopes: ['source.js', 'string.quoted.template.sql.js']
716+
expect(tokens[3]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.sql.js', 'punctuation.definition.string.end.js']
717+
718+
describe "ES6 tagged SQL string templates with interpolation", ->
719+
it "tokenizes them as strings", ->
720+
{tokens} = grammar.tokenizeLine('SQL`SELECT foo FROM bar WHERE id = ${id}`')
721+
expect(tokens[0]).toEqual value: 'SQL', scopes: ['source.js', 'string.quoted.template.sql.js', 'entity.name.function.js']
722+
expect(tokens[1]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.sql.js', 'punctuation.definition.string.begin.js']
723+
expect(tokens[2]).toEqual value: 'SELECT foo FROM bar WHERE id = ', scopes: ['source.js', 'string.quoted.template.sql.js']
724+
expect(tokens[3]).toEqual value: '${', scopes: ['source.js', 'string.quoted.template.sql.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
725+
expect(tokens[4]).toEqual value: 'id', scopes: ['source.js', 'string.quoted.template.sql.js', 'source.js.embedded.source']
726+
expect(tokens[5]).toEqual value: '}', scopes: ['source.js', 'string.quoted.template.sql.js', 'source.js.embedded.source', 'punctuation.section.embedded.js']
727+
expect(tokens[6]).toEqual value: '`', scopes: ['source.js', 'string.quoted.template.sql.js', 'punctuation.definition.string.end.js']
728+
710729
describe "ES6 class", ->
711730
it "tokenizes class", ->
712731
{tokens} = grammar.tokenizeLine('class MyClass')

0 commit comments

Comments
 (0)