@@ -146,7 +146,7 @@ describe "Javascript grammar", ->
146146
147147 {tokens } = grammar .tokenizeLine (' [1, /test/]' )
148148 expect (tokens[0 ]).toEqual value : ' [' , scopes : [' source.js' , ' meta.brace.square.js' ]
149- expect (tokens[1 ]).toEqual value : ' 1' , scopes : [' source.js' , ' constant.numeric.js' ]
149+ expect (tokens[1 ]).toEqual value : ' 1' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
150150 expect (tokens[2 ]).toEqual value : ' ,' , scopes : [' source.js' , ' meta.delimiter.object.comma.js' ]
151151 expect (tokens[3 ]).toEqual value : ' ' , scopes : [' source.js' , ' string.regexp.js' ]
152152 expect (tokens[4 ]).toEqual value : ' /' , scopes : [' source.js' , ' string.regexp.js' , ' punctuation.definition.string.begin.js' ]
@@ -179,34 +179,59 @@ describe "Javascript grammar", ->
179179 describe " numbers" , ->
180180 it " tokenizes hexadecimals" , ->
181181 {tokens } = grammar .tokenizeLine (' 0x1D306' )
182- expect (tokens[0 ]).toEqual value : ' 0x1D306' , scopes : [' source.js' , ' constant.numeric.js' ]
182+ expect (tokens[0 ]).toEqual value : ' 0x1D306' , scopes : [' source.js' , ' constant.numeric.hex. js' ]
183183
184184 {tokens } = grammar .tokenizeLine (' 0X1D306' )
185- expect (tokens[0 ]).toEqual value : ' 0X1D306' , scopes : [' source.js' , ' constant.numeric.js' ]
185+ expect (tokens[0 ]).toEqual value : ' 0X1D306' , scopes : [' source.js' , ' constant.numeric.hex. js' ]
186186
187187 it " tokenizes binary literals" , ->
188188 {tokens } = grammar .tokenizeLine (' 0b011101110111010001100110' )
189- expect (tokens[0 ]).toEqual value : ' 0b011101110111010001100110' , scopes : [' source.js' , ' constant.numeric.js' ]
189+ expect (tokens[0 ]).toEqual value : ' 0b011101110111010001100110' , scopes : [' source.js' , ' constant.numeric.binary. js' ]
190190
191191 {tokens } = grammar .tokenizeLine (' 0B011101110111010001100110' )
192- expect (tokens[0 ]).toEqual value : ' 0B011101110111010001100110' , scopes : [' source.js' , ' constant.numeric.js' ]
192+ expect (tokens[0 ]).toEqual value : ' 0B011101110111010001100110' , scopes : [' source.js' , ' constant.numeric.binary. js' ]
193193
194194 it " tokenizes octal literals" , ->
195195 {tokens } = grammar .tokenizeLine (' 0o1411' )
196- expect (tokens[0 ]).toEqual value : ' 0o1411' , scopes : [' source.js' , ' constant.numeric.js' ]
196+ expect (tokens[0 ]).toEqual value : ' 0o1411' , scopes : [' source.js' , ' constant.numeric.octal. js' ]
197197
198198 {tokens } = grammar .tokenizeLine (' 0O1411' )
199- expect (tokens[0 ]).toEqual value : ' 0O1411' , scopes : [' source.js' , ' constant.numeric.js' ]
199+ expect (tokens[0 ]).toEqual value : ' 0O1411' , scopes : [' source.js' , ' constant.numeric.octal.js' ]
200+
201+ {tokens } = grammar .tokenizeLine (' 0010' )
202+ expect (tokens[0 ]).toEqual value : ' 0010' , scopes : [' source.js' , ' constant.numeric.octal.js' ]
200203
201204 it " tokenizes decimals" , ->
202205 {tokens } = grammar .tokenizeLine (' 1234' )
203- expect (tokens[0 ]).toEqual value : ' 1234' , scopes : [' source.js' , ' constant.numeric.js' ]
206+ expect (tokens[0 ]).toEqual value : ' 1234' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
204207
205208 {tokens } = grammar .tokenizeLine (' 5e-10' )
206- expect (tokens[0 ]).toEqual value : ' 5e-10' , scopes : [' source.js' , ' constant.numeric.js' ]
209+ expect (tokens[0 ]).toEqual value : ' 5e-10' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
207210
208211 {tokens } = grammar .tokenizeLine (' 5E+5' )
209- expect (tokens[0 ]).toEqual value : ' 5E+5' , scopes : [' source.js' , ' constant.numeric.js' ]
212+ expect (tokens[0 ]).toEqual value : ' 5E+5' , scopes : [' source.js' , ' constant.numeric.decimal.js' ]
213+
214+ {tokens } = grammar .tokenizeLine (' 9.' )
215+ expect (tokens[0 ]).toEqual value : ' 9' , scopes : [' source.js' , ' constant.numeric.decimal.js' ]
216+ expect (tokens[1 ]).toEqual value : ' .' , scopes : [' source.js' , ' constant.numeric.decimal.js' , ' meta.delimiter.decimal.period.js' ]
217+
218+ {tokens } = grammar .tokenizeLine (' .9' )
219+ expect (tokens[0 ]).toEqual value : ' .' , scopes : [' source.js' , ' constant.numeric.decimal.js' , ' meta.delimiter.decimal.period.js' ]
220+ expect (tokens[1 ]).toEqual value : ' 9' , scopes : [' source.js' , ' constant.numeric.decimal.js' ]
221+
222+ {tokens } = grammar .tokenizeLine (' 9.9' )
223+ expect (tokens[0 ]).toEqual value : ' 9' , scopes : [' source.js' , ' constant.numeric.decimal.js' ]
224+ expect (tokens[1 ]).toEqual value : ' .' , scopes : [' source.js' , ' constant.numeric.decimal.js' , ' meta.delimiter.decimal.period.js' ]
225+ expect (tokens[2 ]).toEqual value : ' 9' , scopes : [' source.js' , ' constant.numeric.decimal.js' ]
226+
227+ {tokens } = grammar .tokenizeLine (' .1e-23' )
228+ expect (tokens[0 ]).toEqual value : ' .' , scopes : [' source.js' , ' constant.numeric.decimal.js' , ' meta.delimiter.decimal.period.js' ]
229+ expect (tokens[1 ]).toEqual value : ' 1e-23' , scopes : [' source.js' , ' constant.numeric.decimal.js' ]
230+
231+ {tokens } = grammar .tokenizeLine (' 1.E3' )
232+ expect (tokens[0 ]).toEqual value : ' 1' , scopes : [' source.js' , ' constant.numeric.decimal.js' ]
233+ expect (tokens[1 ]).toEqual value : ' .' , scopes : [' source.js' , ' constant.numeric.decimal.js' , ' meta.delimiter.decimal.period.js' ]
234+ expect (tokens[2 ]).toEqual value : ' E3' , scopes : [' source.js' , ' constant.numeric.decimal.js' ]
210235
211236 it " does not tokenize numbers that are part of a variable" , ->
212237 {tokens } = grammar .tokenizeLine (' hi$1' )
@@ -300,9 +325,9 @@ describe "Javascript grammar", ->
300325 it " tokenizes the arithmetic operators when separated by newlines" , ->
301326 for operator in operators
302327 lines = grammar .tokenizeLines ' 1\n ' + operator + ' 2'
303- expect (lines[0 ][0 ]).toEqual value : ' 1' , scopes : [' source.js' , ' constant.numeric.js' ]
328+ expect (lines[0 ][0 ]).toEqual value : ' 1' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
304329 expect (lines[1 ][0 ]).toEqual value : operator, scopes : [' source.js' , ' keyword.operator.js' ]
305- expect (lines[1 ][2 ]).toEqual value : ' 2' , scopes : [' source.js' , ' constant.numeric.js' ]
330+ expect (lines[1 ][2 ]).toEqual value : ' 2' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
306331
307332 describe " assignment" , ->
308333 it " tokenizes '=' operator" , ->
@@ -338,7 +363,7 @@ describe "Javascript grammar", ->
338363 expect (tokens[3 ]).toEqual value : ' ' , scopes : [' source.js' ]
339364 expect (tokens[4 ]).toEqual value : ' =' , scopes : [' source.js' , ' keyword.operator.assignment.js' ]
340365 expect (tokens[5 ]).toEqual value : ' ' , scopes : [' source.js' ]
341- expect (tokens[6 ]).toEqual value : ' 42' , scopes : [' source.js' , ' constant.numeric.js' ]
366+ expect (tokens[6 ]).toEqual value : ' 42' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
342367 expect (tokens[7 ]).toEqual value : ' ;' , scopes : [' source.js' , ' punctuation.terminator.statement.js' ]
343368
344369 {tokens } = grammar .tokenizeLine (' something = MY_COOL_VAR * 1;' )
@@ -349,7 +374,7 @@ describe "Javascript grammar", ->
349374 expect (tokens[4 ]).toEqual value : ' ' , scopes : [' source.js' ]
350375 expect (tokens[5 ]).toEqual value : ' *' , scopes : [' source.js' , ' keyword.operator.js' ]
351376 expect (tokens[6 ]).toEqual value : ' ' , scopes : [' source.js' ]
352- expect (tokens[7 ]).toEqual value : ' 1' , scopes : [' source.js' , ' constant.numeric.js' ]
377+ expect (tokens[7 ]).toEqual value : ' 1' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
353378 expect (tokens[8 ]).toEqual value : ' ;' , scopes : [' source.js' , ' punctuation.terminator.statement.js' ]
354379
355380 it " tokenizes variables declared using `const` as constants" , ->
@@ -360,7 +385,7 @@ describe "Javascript grammar", ->
360385 expect (tokens[3 ]).toEqual value : ' ' , scopes : [' source.js' ]
361386 expect (tokens[4 ]).toEqual value : ' =' , scopes : [' source.js' , ' keyword.operator.assignment.js' ]
362387 expect (tokens[5 ]).toEqual value : ' ' , scopes : [' source.js' ]
363- expect (tokens[6 ]).toEqual value : ' 42' , scopes : [' source.js' , ' constant.numeric.js' ]
388+ expect (tokens[6 ]).toEqual value : ' 42' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
364389 expect (tokens[7 ]).toEqual value : ' ;' , scopes : [' source.js' , ' punctuation.terminator.statement.js' ]
365390
366391 lines = grammar .tokenizeLines """
@@ -763,7 +788,7 @@ describe "Javascript grammar", ->
763788 {tokens } = grammar .tokenizeLine (' export default 123;' )
764789 expect (tokens[0 ]).toEqual value : ' export' , scopes : [' source.js' , ' meta.export.js' , ' keyword.control.js' ]
765790 expect (tokens[2 ]).toEqual value : ' default' , scopes : [' source.js' , ' meta.export.js' , ' variable.language.default.js' ]
766- expect (tokens[4 ]).toEqual value : ' 123' , scopes : [' source.js' , ' constant.numeric.js' ]
791+ expect (tokens[4 ]).toEqual value : ' 123' , scopes : [' source.js' , ' constant.numeric.decimal. js' ]
767792
768793 {tokens } = grammar .tokenizeLine (' export default name;' )
769794 expect (tokens[0 ]).toEqual value : ' export' , scopes : [' source.js' , ' meta.export.js' , ' keyword.control.js' ]
@@ -1030,6 +1055,16 @@ describe "Javascript grammar", ->
10301055 {tokens } = grammar .tokenizeLine (' super' )
10311056 expect (tokens[0 ]).toEqual value : ' super' , scopes : [' source.js' , ' variable.language.js' ]
10321057
1058+ it " tokenizes illegal identifiers" , ->
1059+ {tokens } = grammar .tokenizeLine (' 0illegal' )
1060+ expect (tokens[0 ]).toEqual value : ' 0illegal' , scopes : [' source.js' , ' invalid.illegal.identifier.js' ]
1061+
1062+ {tokens } = grammar .tokenizeLine (' 123illegal' )
1063+ expect (tokens[0 ]).toEqual value : ' 123illegal' , scopes : [' source.js' , ' invalid.illegal.identifier.js' ]
1064+
1065+ {tokens } = grammar .tokenizeLine (' 123$illegal' )
1066+ expect (tokens[0 ]).toEqual value : ' 123$illegal' , scopes : [' source.js' , ' invalid.illegal.identifier.js' ]
1067+
10331068 describe " objects" , ->
10341069 it " tokenizes them" , ->
10351070 {tokens } = grammar .tokenizeLine (' obj.prop' )
@@ -1043,17 +1078,13 @@ describe "Javascript grammar", ->
10431078
10441079 it " tokenizes illegal objects" , ->
10451080 {tokens } = grammar .tokenizeLine (' 1.prop' )
1046- expect (tokens[0 ]).toEqual value : ' 1' , scopes : [' source.js' , ' invalid.illegal.js' ]
1081+ expect (tokens[0 ]).toEqual value : ' 1' , scopes : [' source.js' , ' invalid.illegal.identifier. js' ]
10471082
10481083 {tokens } = grammar .tokenizeLine (' 123.prop' )
1049- expect (tokens[0 ]).toEqual value : ' 123' , scopes : [' source.js' , ' invalid.illegal.js' ]
1084+ expect (tokens[0 ]).toEqual value : ' 123' , scopes : [' source.js' , ' invalid.illegal.identifier. js' ]
10501085
10511086 {tokens } = grammar .tokenizeLine (' 123a.prop' )
1052- expect (tokens[0 ]).toEqual value : ' 123a' , scopes : [' source.js' , ' invalid.illegal.js' ]
1053-
1054- it " doesn't confuse illegal objects with numbers" , ->
1055- {tokens } = grammar .tokenizeLine (' 123.' )
1056- expect (tokens[0 ]).toEqual value : ' 123' , scopes : [' source.js' , ' constant.numeric.js' ]
1087+ expect (tokens[0 ]).toEqual value : ' 123a' , scopes : [' source.js' , ' invalid.illegal.identifier.js' ]
10571088
10581089 describe " function calls" , ->
10591090 it " tokenizes function calls" , ->
@@ -1074,14 +1105,14 @@ describe "Javascript grammar", ->
10741105 expect (tokens[10 ]).toEqual value : ' {' , scopes : [' source.js' , ' meta.function-call.js' , ' meta.brace.curly.js' ]
10751106 expect (tokens[11 ]).toEqual value : ' a' , scopes : [' source.js' , ' meta.function-call.js' ]
10761107 expect (tokens[12 ]).toEqual value : ' :' , scopes : [' source.js' , ' meta.function-call.js' , ' keyword.operator.js' ]
1077- expect (tokens[14 ]).toEqual value : ' 123' , scopes : [' source.js' , ' meta.function-call.js' , ' constant.numeric.js' ]
1108+ expect (tokens[14 ]).toEqual value : ' 123' , scopes : [' source.js' , ' meta.function-call.js' , ' constant.numeric.decimal. js' ]
10781109 expect (tokens[15 ]).toEqual value : ' }' , scopes : [' source.js' , ' meta.function-call.js' , ' meta.brace.curly.js' ]
10791110 expect (tokens[16 ]).toEqual value : ' )' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.end.js' ]
10801111
10811112 {tokens } = grammar .tokenizeLine (' functionCall((123).toString())' )
10821113 expect (tokens[1 ]).toEqual value : ' (' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.begin.js' ]
10831114 expect (tokens[2 ]).toEqual value : ' (' , scopes : [' source.js' , ' meta.function-call.js' , ' meta.brace.round.js' ]
1084- expect (tokens[3 ]).toEqual value : ' 123' , scopes : [' source.js' , ' meta.function-call.js' , ' constant.numeric.js' ]
1115+ expect (tokens[3 ]).toEqual value : ' 123' , scopes : [' source.js' , ' meta.function-call.js' , ' constant.numeric.decimal. js' ]
10851116 expect (tokens[4 ]).toEqual value : ' )' , scopes : [' source.js' , ' meta.function-call.js' , ' meta.brace.round.js' ]
10861117 expect (tokens[9 ]).toEqual value : ' )' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.end.js' ]
10871118
@@ -1103,27 +1134,27 @@ describe "Javascript grammar", ->
11031134
11041135 it " tokenizes illegal function calls" , ->
11051136 {tokens } = grammar .tokenizeLine (' 0illegal()' )
1106- expect (tokens[0 ]).toEqual value : ' 0illegal' , scopes : [' source.js' , ' meta.function-call.js' , ' invalid.illegal.js' ]
1137+ expect (tokens[0 ]).toEqual value : ' 0illegal' , scopes : [' source.js' , ' meta.function-call.js' , ' invalid.illegal.identifier. js' ]
11071138 expect (tokens[1 ]).toEqual value : ' (' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.begin.js' ]
11081139 expect (tokens[2 ]).toEqual value : ' )' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.end.js' ]
11091140
11101141 it " tokenizes illegal arguments" , ->
11111142 {tokens } = grammar .tokenizeLine (' a(1a)' )
11121143 expect (tokens[0 ]).toEqual value : ' a' , scopes : [' source.js' , ' meta.function-call.js' , ' entity.name.function.js' ]
11131144 expect (tokens[1 ]).toEqual value : ' (' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.begin.js' ]
1114- expect (tokens[2 ]).toEqual value : ' 1a' , scopes : [' source.js' , ' meta.function-call.js' ]
1145+ expect (tokens[2 ]).toEqual value : ' 1a' , scopes : [' source.js' , ' meta.function-call.js' , ' invalid.illegal.identifier.js ' ]
11151146 expect (tokens[3 ]).toEqual value : ' )' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.end.js' ]
11161147
11171148 {tokens } = grammar .tokenizeLine (' a(123a)' )
11181149 expect (tokens[0 ]).toEqual value : ' a' , scopes : [' source.js' , ' meta.function-call.js' , ' entity.name.function.js' ]
11191150 expect (tokens[1 ]).toEqual value : ' (' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.begin.js' ]
1120- expect (tokens[2 ]).toEqual value : ' 123a' , scopes : [' source.js' , ' meta.function-call.js' ]
1151+ expect (tokens[2 ]).toEqual value : ' 123a' , scopes : [' source.js' , ' meta.function-call.js' , ' invalid.illegal.identifier.js ' ]
11211152 expect (tokens[3 ]).toEqual value : ' )' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.end.js' ]
11221153
11231154 {tokens } = grammar .tokenizeLine (' a(1.prop)' )
11241155 expect (tokens[0 ]).toEqual value : ' a' , scopes : [' source.js' , ' meta.function-call.js' , ' entity.name.function.js' ]
11251156 expect (tokens[1 ]).toEqual value : ' (' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.begin.js' ]
1126- expect (tokens[2 ]).toEqual value : ' 1' , scopes : [' source.js' , ' meta.function-call.js' , ' invalid.illegal.js' ]
1157+ expect (tokens[2 ]).toEqual value : ' 1' , scopes : [' source.js' , ' meta.function-call.js' , ' invalid.illegal.identifier. js' ]
11271158 expect (tokens[3 ]).toEqual value : ' .' , scopes : [' source.js' , ' meta.function-call.js' , ' meta.delimiter.property.period.js' ]
11281159 expect (tokens[4 ]).toEqual value : ' prop' , scopes : [' source.js' , ' meta.function-call.js' , ' variable.other.property.js' ]
11291160 expect (tokens[5 ]).toEqual value : ' )' , scopes : [' source.js' , ' meta.function-call.js' , ' punctuation.definition.arguments.end.js' ]
@@ -1151,9 +1182,9 @@ describe "Javascript grammar", ->
11511182 expect (tokens[1 ]).toEqual value : ' .' , scopes : [' source.js' , ' meta.method-call.js' , ' meta.delimiter.method.period.js' ]
11521183 expect (tokens[2 ]).toEqual value : ' b' , scopes : [' source.js' , ' meta.method-call.js' , ' entity.name.function.js' ]
11531184 expect (tokens[3 ]).toEqual value : ' (' , scopes : [' source.js' , ' meta.method-call.js' , ' punctuation.definition.arguments.begin.js' ]
1154- expect (tokens[4 ]).toEqual value : ' 1' , scopes : [' source.js' , ' meta.method-call.js' , ' constant.numeric.js' ]
1185+ expect (tokens[4 ]).toEqual value : ' 1' , scopes : [' source.js' , ' meta.method-call.js' , ' constant.numeric.decimal. js' ]
11551186 expect (tokens[5 ]).toEqual value : ' +' , scopes : [' source.js' , ' meta.method-call.js' , ' keyword.operator.js' ]
1156- expect (tokens[6 ]).toEqual value : ' 1' , scopes : [' source.js' , ' meta.method-call.js' , ' constant.numeric.js' ]
1187+ expect (tokens[6 ]).toEqual value : ' 1' , scopes : [' source.js' , ' meta.method-call.js' , ' constant.numeric.decimal. js' ]
11571188 expect (tokens[7 ]).toEqual value : ' )' , scopes : [' source.js' , ' meta.method-call.js' , ' punctuation.definition.arguments.end.js' ]
11581189
11591190 {tokens } = grammar .tokenizeLine (' a.$abc$()' )
@@ -1223,7 +1254,7 @@ describe "Javascript grammar", ->
12231254 {tokens } = grammar .tokenizeLine (' a.123illegal' )
12241255 expect (tokens[0 ]).toEqual value : ' a' , scopes : [' source.js' ]
12251256 expect (tokens[1 ]).toEqual value : ' .' , scopes : [' source.js' , ' meta.delimiter.property.period.js' ]
1226- expect (tokens[2 ]).toEqual value : ' 123illegal' , scopes : [' source.js' , ' invalid.illegal.js' ]
1257+ expect (tokens[2 ]).toEqual value : ' 123illegal' , scopes : [' source.js' , ' invalid.illegal.identifier. js' ]
12271258
12281259 it " tokenizes constant properties" , ->
12291260 {tokens } = grammar .tokenizeLine (' obj.MY_CONSTANT' )
0 commit comments