@@ -504,13 +504,22 @@ describe "JavaScript grammar", ->
504504
505505 describe "compound" , - >
506506 it "tokenizes them" , - >
507- operators = [ "+=" , "-=" , "*=" , "/=" , "%=" ]
507+ operators = [ "+=" , "-=" , "*=" , "/=" , "%=" , "**=" ]
508508 for operator in operators
509509 { tokens } = grammar . tokenizeLine ( 'a ' + operator + ' b' )
510510 expect ( tokens [ 0 ] ) . toEqual value: 'a ' , scopes : [ 'source.js' ]
511511 expect ( tokens [ 1 ] ) . toEqual value: operator , scopes : [ 'source.js' , 'keyword.operator.assignment.compound.js' ]
512512 expect ( tokens [ 2 ] ) . toEqual value: ' b' , scopes : [ 'source.js' ]
513513
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+
514523 describe "bitwise" , - >
515524 it "tokenizes them" , - >
516525 operators = [ "<<=" , ">>=" , ">>>=" , "&=" , "^=" , "|=" ]
@@ -1774,27 +1783,38 @@ describe "JavaScript grammar", ->
17741783 expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
17751784 expect(tokens[2]).toEqual value: 'C', scopes: ['source.js', 'constant.other.property.js']
17761785
1777- it "supports the optional chaining operator", ->
1786+ it "tokenizes the optional chaining operator", ->
17781787 {tokens} = grammar.tokenizeLine('obj?.prop')
17791788 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']
17811790 expect(tokens[2]).toEqual value: 'prop', scopes: ['source.js', 'variable.other.property.js']
17821791
17831792 {tokens} = grammar.tokenizeLine('obj?.$_')
17841793 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']
17861795 expect(tokens[2]).toEqual value: '$_', scopes: ['source.js', 'variable.other.property.js']
17871796
17881797 {tokens} = grammar.tokenizeLine('a()?.b()')
17891798 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']
17911800 expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js']
17921801
17931802 {tokens} = grammar.tokenizeLine('a()?.MY_CONSTANT')
17941803 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']
17961805 expect(tokens[4]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.property.js']
17971806
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+
17981818
17991819 describe "strings and functions", ->
18001820 it "doesn't confuse them", ->
0 commit comments