@@ -504,13 +504,22 @@ describe "JavaScript grammar", ->
504
504
505
505
describe "compound" , - >
506
506
it "tokenizes them" , - >
507
- operators = [ "+=" , "-=" , "*=" , "/=" , "%=" ]
507
+ operators = [ "+=" , "-=" , "*=" , "/=" , "%=" , "**=" ]
508
508
for operator in operators
509
509
{ tokens } = grammar . tokenizeLine ( 'a ' + operator + ' b' )
510
510
expect ( tokens [ 0 ] ) . toEqual value: 'a ' , scopes : [ 'source.js' ]
511
511
expect ( tokens [ 1 ] ) . toEqual value: operator , scopes : [ 'source.js' , 'keyword.operator.assignment.compound.js' ]
512
512
expect ( tokens [ 2 ] ) . toEqual value: ' b' , scopes : [ 'source.js' ]
513
513
514
+ describe "logical" , - >
515
+ it "tokenizes them" , - >
516
+ operators = [ "||=" , "&&=" , "??=" ]
517
+ for operator in operators
518
+ { tokens } = grammar . tokenizeLine ( 'a ' + operator + ' b' )
519
+ expect ( tokens [ 0 ] ) . toEqual value: 'a ' , scopes : [ 'source.js' ]
520
+ expect ( tokens [ 1 ] ) . toEqual value: operator , scopes : [ 'source.js' , 'keyword.operator.assignment.compound.logical.js' ]
521
+ expect ( tokens [ 2 ] ) . toEqual value: ' b' , scopes : [ 'source.js' ]
522
+
514
523
describe "bitwise" , - >
515
524
it "tokenizes them" , - >
516
525
operators = [ "<<=" , ">>=" , ">>>=" , "&=" , "^=" , "|=" ]
@@ -1774,27 +1783,38 @@ describe "JavaScript grammar", ->
1774
1783
expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
1775
1784
expect(tokens[2]).toEqual value: 'C', scopes: ['source.js', 'constant.other.property.js']
1776
1785
1777
- it "supports the optional chaining operator", ->
1786
+ it "tokenizes the optional chaining operator", ->
1778
1787
{tokens} = grammar.tokenizeLine('obj?.prop')
1779
1788
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
1780
- expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
1789
+ expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional. js']
1781
1790
expect(tokens[2]).toEqual value: 'prop', scopes: ['source.js', 'variable.other.property.js']
1782
1791
1783
1792
{tokens} = grammar.tokenizeLine('obj?.$_')
1784
1793
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
1785
- expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
1794
+ expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional. js']
1786
1795
expect(tokens[2]).toEqual value: '$_', scopes: ['source.js', 'variable.other.property.js']
1787
1796
1788
1797
{tokens} = grammar.tokenizeLine('a()?.b()')
1789
1798
expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
1790
- expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
1799
+ expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.optional. js']
1791
1800
expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js']
1792
1801
1793
1802
{tokens} = grammar.tokenizeLine('a()?.MY_CONSTANT')
1794
1803
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']
1795
- expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
1804
+ expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional. js']
1796
1805
expect(tokens[4]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.property.js']
1797
1806
1807
+ {tokens} = grammar.tokenizeLine('a.b?.()')
1808
+ expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
1809
+ expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
1810
+ expect(tokens[2]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js']
1811
+ expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.optional.js']
1812
+
1813
+ {tokens} = grammar.tokenizeLine('a?.[5]')
1814
+ expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
1815
+ expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
1816
+ expect(tokens[2]).toEqual value: '[', scopes: ['source.js', 'meta.brace.square.js']
1817
+
1798
1818
1799
1819
describe "strings and functions", ->
1800
1820
it "doesn't confuse them", ->
0 commit comments