@@ -53,6 +53,28 @@ describe "Javascript grammar", ->
5353 {tokens } = grammar .tokenizeLine (' with' )
5454 expect (tokens[0 ]).toEqual value : ' with' , scopes : [' source.js' , ' keyword.control.js' ]
5555
56+ map =
57+ super : ' variable.language.js'
58+ this : ' variable.language.js'
59+ null : ' constant.language.null.js'
60+ true : ' constant.language.boolean.true.js'
61+ false : ' constant.language.boolean.false.js'
62+ debugger : ' keyword.other.js'
63+ exports : ' support.variable.js'
64+ __filename : ' support.variable.js'
65+
66+ for keyword, scope of map
67+ do (keyword , scope ) ->
68+ it " does not tokenize `#{ keyword} ` when object key" , ->
69+ {tokens } = grammar .tokenizeLine (" #{ keyword} : 1" )
70+ expect (tokens[0 ]).toEqual value : keyword, scopes : [' source.js' ]
71+ expect (tokens[1 ]).toEqual value : ' :' , scopes : [' source.js' , ' keyword.operator.js' ]
72+
73+ it " tokenizes `#{ keyword} ` in ternary expression" , ->
74+ {tokens } = grammar .tokenizeLine (" a ? #{ keyword} : b" )
75+ expect (tokens[2 ]).toEqual value : ' ' , scopes : [' source.js' ]
76+ expect (tokens[3 ]).toEqual value : keyword, scopes : [' source.js' , scope]
77+
5678 describe " built-in globals" , ->
5779 it " tokenizes them as support classes" , ->
5880 {tokens } = grammar .tokenizeLine (' window' )
@@ -336,6 +358,15 @@ describe "Javascript grammar", ->
336358 expect (tokens[4 ]).toEqual value : ' systemLanguage' , scopes : [' source.js' , ' support.constant.js' ]
337359 expect (tokens[5 ]).toEqual value : ' ;' , scopes : [' source.js' , ' punctuation.terminator.statement.js' ]
338360
361+ it " does not tokenize constant when object key" , ->
362+ {tokens } = grammar .tokenizeLine (' FOO: 1' )
363+ expect (tokens[0 ]).toEqual value : ' FOO' , scopes : [' source.js' ]
364+ expect (tokens[1 ]).toEqual value : ' :' , scopes : [' source.js' , ' keyword.operator.js' ]
365+
366+ it " tokenizes constant in ternary expression" , ->
367+ {tokens } = grammar .tokenizeLine (' a ? FOO : b' )
368+ expect (tokens[3 ]).toEqual value : ' FOO' , scopes : [' source.js' , ' constant.other.js' ]
369+
339370 describe " ES6 string templates" , ->
340371 it " tokenizes them as strings" , ->
341372 {tokens } = grammar .tokenizeLine (' `hey ${name}`' )
@@ -399,6 +430,15 @@ describe "Javascript grammar", ->
399430 expect (tokens[0 ]).toEqual value : ' yield' , scopes : [' source.js' , ' meta.control.yield.js' , ' keyword.control.js' ]
400431 expect (tokens[2 ]).toEqual value : ' *' , scopes : [' source.js' , ' meta.control.yield.js' , ' storage.modifier.js' ]
401432
433+ it " does not tokenize yield when object key" , ->
434+ {tokens } = grammar .tokenizeLine (' yield: 1' )
435+ expect (tokens[0 ]).toEqual value : ' yield' , scopes : [' source.js' ]
436+ expect (tokens[1 ]).toEqual value : ' :' , scopes : [' source.js' , ' keyword.operator.js' ]
437+
438+ it " tokenizes yield in ternary expression" , ->
439+ {tokens } = grammar .tokenizeLine (' a ? yield : b' )
440+ expect (tokens[3 ]).toEqual value : ' yield' , scopes : [' source.js' , ' meta.control.yield.js' , ' keyword.control.js' ]
441+
402442 describe " default: in a switch statement" , ->
403443 it " tokenizes it as a keyword" , ->
404444 {tokens } = grammar .tokenizeLine (' default: ' )
0 commit comments