Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 5f406e1

Browse files
WliuWliu
authored andcommitted
Merge pull request #319 from MaximSokolov/numbers
Don't scope decimals as illegal; tokenize decimal marks, illegal identifiers
2 parents 7e11b5c + 9cf9a39 commit 5f406e1

File tree

2 files changed

+112
-40
lines changed

2 files changed

+112
-40
lines changed

grammars/javascript.cson

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -859,13 +859,17 @@
859859
'include': '#function_call'
860860
}
861861
{
862-
'include': '#properties'
862+
'include': '#numbers'
863863
}
864864
{
865865
'include': '#object_variable'
866866
}
867867
{
868-
'include': '#numbers'
868+
'include': '#properties'
869+
}
870+
{
871+
'match': '(?<!\\$)\\b[0-9]+[\\w$]*'
872+
'name': 'invalid.illegal.identifier.js'
869873
}
870874
{
871875
'match': '\\;'
@@ -918,8 +922,45 @@
918922
'numbers':
919923
'patterns': [
920924
{
921-
'match': '\\b(?<!\\$|_)((0(x|X)[0-9a-fA-F]+)|(0(b|B)[01]+)|(0(o|O)[0-7]+)|([0-9]+(\\.[0-9]+)?)((e|E)[+-]?[0-9]+)?)\\b'
922-
'name': 'constant.numeric.js'
925+
'match': '\\b(?<!\\$)0(x|X)[0-9a-fA-F]+\\b(?!\\$)'
926+
'name': 'constant.numeric.hex.js'
927+
}
928+
{
929+
'match': '\\b(?<!\\$)0(b|B)[01]+\\b(?!\\$)'
930+
'name': 'constant.numeric.binary.js'
931+
}
932+
{
933+
'match': '\\b(?<!\\$)0(o|O)?[0-7]+\\b(?!\\$)'
934+
'name': 'constant.numeric.octal.js'
935+
}
936+
{
937+
'match': '''(?x)
938+
(?<!\\$)(?:
939+
(?:\\b[0-9]+(\\.)[0-9]+[eE][+-]?[0-9]+\\b)| # 1.1E+3
940+
(?:\\b[0-9]+(\\.)[eE][+-]?[0-9]+\\b)| # 1.E+3
941+
(?:\\B(\\.)[0-9]+[eE][+-]?[0-9]+\\b)| # .1E+3
942+
(?:\\b[0-9]+[eE][+-]?[0-9]+\\b)| # 1E+3
943+
(?:\\b[0-9]+(\\.)[0-9]+\\b)| # 1.1
944+
(?:\\b[0-9]+(\\.)\\B)| # 1.
945+
(?:\\B(\\.)[0-9]+\\b)| # .1
946+
(?:\\b[0-9]+\\b(?!\\.)) # 1
947+
)(?!\\$)
948+
'''
949+
'captures':
950+
'0':
951+
'name': 'constant.numeric.decimal.js'
952+
'1':
953+
'name': 'meta.delimiter.decimal.period.js'
954+
'2':
955+
'name': 'meta.delimiter.decimal.period.js'
956+
'3':
957+
'name': 'meta.delimiter.decimal.period.js'
958+
'4':
959+
'name': 'meta.delimiter.decimal.period.js'
960+
'5':
961+
'name': 'meta.delimiter.decimal.period.js'
962+
'6':
963+
'name': 'meta.delimiter.decimal.period.js'
923964
}
924965
]
925966
'operators':
@@ -1178,7 +1219,7 @@
11781219
'begin': '(?:(\\d\\w*)|([a-zA-Z_$][\\w$]*))\\s*(\\()'
11791220
'beginCaptures':
11801221
'1':
1181-
'name': 'invalid.illegal.js'
1222+
'name': 'invalid.illegal.identifier.js'
11821223
'2':
11831224
'name': 'entity.name.function.js'
11841225
'3':
@@ -1204,19 +1245,19 @@
12041245
'1':
12051246
'name': 'variable.other.object.js'
12061247
'2':
1207-
'name': 'invalid.illegal.js'
1248+
'name': 'invalid.illegal.identifier.js'
12081249
}
12091250
]
12101251
'properties':
12111252
'patterns': [
12121253
{
12131254
'comment': '`prop` in `obj.prop`, `func().prop`'
1214-
'match': '(\\.)\\s*(?:(\\b\\d\\w*)|([A-Z][A-Z0-9_$]*\\b\\$*)|([\\w$]*))'
1255+
'match': '(\\.)\\s*(?:([0-9]+[\\w$]*)|([A-Z][A-Z0-9_$]*\\b\\$*)|(\\$*[a-zA-Z_$][\\w$]*))'
12151256
'captures':
12161257
'1':
12171258
'name': 'meta.delimiter.property.period.js'
12181259
'2':
1219-
'name': 'invalid.illegal.js'
1260+
'name': 'invalid.illegal.identifier.js'
12201261
'3':
12211262
'name': 'constant.other.property.js'
12221263
'4':

spec/javascript-spec.coffee

Lines changed: 63 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)