@@ -53,6 +53,33 @@ 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 it is an 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 the middle of ternary expressions" , ->
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+
78+ it " tokenizes `#{ keyword} ` at the end of ternary expressions" , ->
79+ {tokens } = grammar .tokenizeLine (" a ? b : #{ keyword} " )
80+ expect (tokens[4 ]).toEqual value : ' ' , scopes : [' source.js' ]
81+ expect (tokens[5 ]).toEqual value : keyword, scopes : [' source.js' , scope]
82+
5683 describe " built-in globals" , ->
5784 it " tokenizes them as support classes" , ->
5885 {tokens } = grammar .tokenizeLine (' window' )
@@ -351,6 +378,19 @@ describe "Javascript grammar", ->
351378 expect (tokens[4 ]).toEqual value : ' systemLanguage' , scopes : [' source.js' , ' support.constant.js' ]
352379 expect (tokens[5 ]).toEqual value : ' ;' , scopes : [' source.js' , ' punctuation.terminator.statement.js' ]
353380
381+ it " does not tokenize constants when they are object keys" , ->
382+ {tokens } = grammar .tokenizeLine (' FOO: 1' )
383+ expect (tokens[0 ]).toEqual value : ' FOO' , scopes : [' source.js' ]
384+ expect (tokens[1 ]).toEqual value : ' :' , scopes : [' source.js' , ' keyword.operator.js' ]
385+
386+ it " tokenizes constants in the middle of ternary expressions" , ->
387+ {tokens } = grammar .tokenizeLine (' a ? FOO : b' )
388+ expect (tokens[3 ]).toEqual value : ' FOO' , scopes : [' source.js' , ' constant.other.js' ]
389+
390+ it " tokenizes constants at the end of ternary expressions" , ->
391+ {tokens } = grammar .tokenizeLine (' a ? b : FOO' )
392+ expect (tokens[5 ]).toEqual value : ' FOO' , scopes : [' source.js' , ' constant.other.js' ]
393+
354394 describe " ES6 string templates" , ->
355395 it " tokenizes them as strings" , ->
356396 {tokens } = grammar .tokenizeLine (' `hey ${name}`' )
@@ -414,6 +454,19 @@ describe "Javascript grammar", ->
414454 expect (tokens[0 ]).toEqual value : ' yield' , scopes : [' source.js' , ' meta.control.yield.js' , ' keyword.control.js' ]
415455 expect (tokens[2 ]).toEqual value : ' *' , scopes : [' source.js' , ' meta.control.yield.js' , ' storage.modifier.js' ]
416456
457+ it " does not tokenize yield when it is an object key" , ->
458+ {tokens } = grammar .tokenizeLine (' yield: 1' )
459+ expect (tokens[0 ]).toEqual value : ' yield' , scopes : [' source.js' ]
460+ expect (tokens[1 ]).toEqual value : ' :' , scopes : [' source.js' , ' keyword.operator.js' ]
461+
462+ it " tokenizes yield in the middle of ternary expressions" , ->
463+ {tokens } = grammar .tokenizeLine (' a ? yield : b' )
464+ expect (tokens[3 ]).toEqual value : ' yield' , scopes : [' source.js' , ' meta.control.yield.js' , ' keyword.control.js' ]
465+
466+ it " tokenizes yield at the end of ternary expressions" , ->
467+ {tokens } = grammar .tokenizeLine (' a ? b : yield' )
468+ expect (tokens[5 ]).toEqual value : ' yield' , scopes : [' source.js' , ' meta.control.yield.js' , ' keyword.control.js' ]
469+
417470 describe " default: in a switch statement" , ->
418471 it " tokenizes it as a keyword" , ->
419472 {tokens } = grammar .tokenizeLine (' default: ' )
0 commit comments