@@ -323,6 +323,11 @@ describe "JavaScript grammar", ->
323
323
{ tokens } = grammar . tokenizeLine ( '0X1D306n' )
324
324
expect ( tokens [ 0 ] ) . toEqual value: '0X1D306n' , scopes : [ 'source.js' , 'constant.numeric.hex.js' ]
325
325
326
+ { tokens } = grammar . tokenizeLine ( '0X1D30_69A3' )
327
+ expect ( tokens [ 0 ] ) . toEqual value: '0X1D30' , scopes : [ 'source.js' , 'constant.numeric.hex.js' ]
328
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.hex.js' , 'meta.delimiter.numeric.separator.js' ]
329
+ expect ( tokens [ 2 ] ) . toEqual value: '69A3' , scopes : [ 'source.js' , 'constant.numeric.hex.js' ]
330
+
326
331
it "tokenizes binary literals" , - >
327
332
{ tokens} = grammar . tokenizeLine ( '0b011101110111010001100110' )
328
333
expect ( tokens [ 0 ] ) . toEqual value: '0b011101110111010001100110' , scopes : [ 'source.js' , 'constant.numeric.binary.js' ]
@@ -336,6 +341,19 @@ describe "JavaScript grammar", ->
336
341
{ tokens } = grammar . tokenizeLine ( '0B011101110111010001100110n' )
337
342
expect ( tokens [ 0 ] ) . toEqual value: '0B011101110111010001100110n' , scopes : [ 'source.js' , 'constant.numeric.binary.js' ]
338
343
344
+ { tokens } = grammar . tokenizeLine ( '0B0111_0111_0111_0100_0110_0110' )
345
+ expect ( tokens [ 0 ] ) . toEqual value: '0B0111' , scopes : [ 'source.js' , 'constant.numeric.binary.js' ]
346
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.binary.js' , 'meta.delimiter.numeric.separator.js' ]
347
+ expect ( tokens [ 2 ] ) . toEqual value: '0111' , scopes : [ 'source.js' , 'constant.numeric.binary.js' ]
348
+ expect ( tokens [ 3 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.binary.js' , 'meta.delimiter.numeric.separator.js' ]
349
+ expect ( tokens [ 4 ] ) . toEqual value: '0111' , scopes : [ 'source.js' , 'constant.numeric.binary.js' ]
350
+ expect ( tokens [ 5 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.binary.js' , 'meta.delimiter.numeric.separator.js' ]
351
+ expect ( tokens [ 6 ] ) . toEqual value: '0100' , scopes : [ 'source.js' , 'constant.numeric.binary.js' ]
352
+ expect ( tokens [ 7 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.binary.js' , 'meta.delimiter.numeric.separator.js' ]
353
+ expect ( tokens [ 8 ] ) . toEqual value: '0110' , scopes : [ 'source.js' , 'constant.numeric.binary.js' ]
354
+ expect ( tokens [ 9 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.binary.js' , 'meta.delimiter.numeric.separator.js' ]
355
+ expect ( tokens [ 10 ] ) . toEqual value: '0110' , scopes : [ 'source.js' , 'constant.numeric.binary.js' ]
356
+
339
357
it "tokenizes octal literals" , - >
340
358
{ tokens} = grammar . tokenizeLine ( '0o1411' )
341
359
expect ( tokens [ 0 ] ) . toEqual value: '0o1411' , scopes : [ 'source.js' , 'constant.numeric.octal.js' ]
@@ -352,13 +370,32 @@ describe "JavaScript grammar", ->
352
370
{ tokens } = grammar . tokenizeLine ( '0010' )
353
371
expect ( tokens [ 0 ] ) . toEqual value: '0010' , scopes : [ 'source.js' , 'constant.numeric.octal.js' ]
354
372
373
+ { tokens } = grammar . tokenizeLine ( '0010_7201_5112' )
374
+ expect ( tokens [ 0 ] ) . toEqual value: '0010' , scopes : [ 'source.js' , 'constant.numeric.octal.js' ]
375
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.octal.js' , 'meta.delimiter.numeric.separator.js' ]
376
+ expect ( tokens [ 2 ] ) . toEqual value: '7201' , scopes : [ 'source.js' , 'constant.numeric.octal.js' ]
377
+ expect ( tokens [ 3 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.octal.js' , 'meta.delimiter.numeric.separator.js' ]
378
+ expect ( tokens [ 4 ] ) . toEqual value: '5112' , scopes : [ 'source.js' , 'constant.numeric.octal.js' ]
379
+
380
+ { tokens } = grammar . tokenizeLine ( '0O1411_1236' )
381
+ expect ( tokens [ 0 ] ) . toEqual value: '0O1411' , scopes : [ 'source.js' , 'constant.numeric.octal.js' ]
382
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.octal.js' , 'meta.delimiter.numeric.separator.js' ]
383
+ expect ( tokens [ 2 ] ) . toEqual value: '1236' , scopes : [ 'source.js' , 'constant.numeric.octal.js' ]
384
+
355
385
it "tokenizes decimals" , - >
356
386
{ tokens} = grammar . tokenizeLine ( '1234' )
357
387
expect ( tokens [ 0 ] ) . toEqual value: '1234' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
358
388
359
389
{ tokens } = grammar . tokenizeLine ( '123456789n' )
360
390
expect ( tokens [ 0 ] ) . toEqual value: '123456789n' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
361
391
392
+ { tokens } = grammar . tokenizeLine ( '123_456_789n' )
393
+ expect ( tokens [ 0 ] ) . toEqual value: '123' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
394
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
395
+ expect ( tokens [ 2 ] ) . toEqual value: '456' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
396
+ expect ( tokens [ 3 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
397
+ expect ( tokens [ 4 ] ) . toEqual value: '789n' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
398
+
362
399
{ tokens } = grammar . tokenizeLine ( '5e-10' )
363
400
expect ( tokens [ 0 ] ) . toEqual value: '5e-10' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
364
401
@@ -369,31 +406,113 @@ describe "JavaScript grammar", ->
369
406
expect ( tokens [ 0 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
370
407
expect ( tokens [ 1 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
371
408
409
+ { tokens } = grammar . tokenizeLine ( '9_9.' )
410
+ expect ( tokens [ 0 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
411
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
412
+ expect ( tokens [ 2 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
413
+ expect ( tokens [ 3 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
414
+
372
415
{ tokens } = grammar . tokenizeLine ( '.9' )
373
416
expect ( tokens [ 0 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
374
417
expect ( tokens [ 1 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
375
418
419
+ { tokens } = grammar . tokenizeLine ( '.9_9' )
420
+ expect ( tokens [ 0 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
421
+ expect ( tokens [ 1 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
422
+ expect ( tokens [ 2 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
423
+ expect ( tokens [ 3 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
424
+
376
425
{ tokens } = grammar . tokenizeLine ( '9.9' )
377
426
expect ( tokens [ 0 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
378
427
expect ( tokens [ 1 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
379
428
expect ( tokens [ 2 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
380
429
430
+ { tokens } = grammar . tokenizeLine ( '9_9.9_9' )
431
+ expect ( tokens [ 0 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
432
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
433
+ expect ( tokens [ 2 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
434
+ expect ( tokens [ 3 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
435
+ expect ( tokens [ 4 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
436
+ expect ( tokens [ 5 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
437
+ expect ( tokens [ 6 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
438
+
381
439
{ tokens } = grammar . tokenizeLine ( '.1e-23' )
382
440
expect ( tokens [ 0 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
383
441
expect ( tokens [ 1 ] ) . toEqual value: '1e-23' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
384
442
443
+ { tokens } = grammar . tokenizeLine ( '.1_1E+1_1' )
444
+ expect ( tokens [ 0 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
445
+ expect ( tokens [ 1 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
446
+ expect ( tokens [ 2 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
447
+ expect ( tokens [ 3 ] ) . toEqual value: '1E+1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
448
+ expect ( tokens [ 4 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
449
+ expect ( tokens [ 5 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
450
+
385
451
{ tokens } = grammar . tokenizeLine ( '1.E3' )
386
452
expect ( tokens [ 0 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
387
453
expect ( tokens [ 1 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
388
454
expect ( tokens [ 2 ] ) . toEqual value: 'E3' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
389
455
456
+ { tokens } = grammar . tokenizeLine ( '1_1.E-1_1' )
457
+ expect ( tokens [ 0 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
458
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
459
+ expect ( tokens [ 2 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
460
+ expect ( tokens [ 3 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
461
+ expect ( tokens [ 4 ] ) . toEqual value: 'E-1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
462
+ expect ( tokens [ 5 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
463
+ expect ( tokens [ 6 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
464
+
465
+ { tokens } = grammar . tokenizeLine ( '1_1.1_1E1_1' )
466
+ expect ( tokens [ 0 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
467
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
468
+ expect ( tokens [ 2 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
469
+ expect ( tokens [ 3 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.decimal.period.js' ]
470
+ expect ( tokens [ 4 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
471
+ expect ( tokens [ 5 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
472
+ expect ( tokens [ 6 ] ) . toEqual value: '1E1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
473
+ expect ( tokens [ 7 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
474
+ expect ( tokens [ 8 ] ) . toEqual value: '1' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
475
+
476
+ { tokens } = grammar . tokenizeLine ( '9_9' )
477
+ expect ( tokens [ 0 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
478
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
479
+ expect ( tokens [ 2 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
480
+
481
+ { tokens } = grammar . tokenizeLine ( '9_9_9' )
482
+ expect ( tokens [ 0 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
483
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
484
+ expect ( tokens [ 2 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
485
+ expect ( tokens [ 3 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
486
+ expect ( tokens [ 4 ] ) . toEqual value: '9' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
487
+
488
+ { tokens } = grammar . tokenizeLine ( '999_999_999' )
489
+ expect ( tokens [ 0 ] ) . toEqual value: '999' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
490
+ expect ( tokens [ 1 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
491
+ expect ( tokens [ 2 ] ) . toEqual value: '999' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
492
+ expect ( tokens [ 3 ] ) . toEqual value: '_' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' , 'meta.delimiter.numeric.separator.js' ]
493
+ expect ( tokens [ 4 ] ) . toEqual value: '999' , scopes : [ 'source.js' , 'constant.numeric.decimal.js' ]
494
+
390
495
it "does not tokenize numbers that are part of a variable" , - >
391
496
{ tokens} = grammar . tokenizeLine ( 'hi$1' )
392
497
expect ( tokens [ 0 ] ) . toEqual value: 'hi$1' , scopes : [ 'source.js' ]
393
498
394
499
{ tokens } = grammar . tokenizeLine ( 'hi_1' )
395
500
expect ( tokens [ 0 ] ) . toEqual value: 'hi_1' , scopes : [ 'source.js' ]
396
501
502
+ { tokens } = grammar . tokenizeLine ( '_1' )
503
+ expect ( tokens [ 0 ] ) . toEqual value: '_1' , scopes : [ 'source.js' , 'constant.other.js' ]
504
+
505
+ { tokens } = grammar . tokenizeLine ( '1_' )
506
+ expect ( tokens [ 0 ] ) . toEqual value: '1_' , scopes : [ 'source.js' , 'invalid.illegal.identifier.js' ]
507
+
508
+ { tokens } = grammar . tokenizeLine ( '1_._1' )
509
+ expect ( tokens [ 0 ] ) . toEqual value: '1_' , scopes : [ 'source.js' , 'invalid.illegal.identifier.js' ]
510
+ expect ( tokens [ 1 ] ) . toEqual value: '.' , scopes : [ 'source.js' , 'meta.delimiter.property.period.js' ]
511
+ expect ( tokens [ 2 ] ) . toEqual value: '_1' , scopes : [ 'source.js' , 'variable.other.property.js' ]
512
+
513
+ { tokens } = grammar . tokenizeLine ( '1__1' )
514
+ expect ( tokens [ 0 ] ) . toEqual value: '1__1' , scopes : [ 'source.js' , 'invalid.illegal.identifier.js' ]
515
+
397
516
describe "operators" , - >
398
517
it "tokenizes them" , - >
399
518
operators = [ "delete" , "in" , "of" , "instanceof" , "new" , "typeof" , "void" ]
0 commit comments