Skip to content

Commit 858d33f

Browse files
committed
Scope const declarations as const
Fixes #641, #542
1 parent 84de89d commit 858d33f

File tree

79 files changed

+1220
-246
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+1220
-246
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 125 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -241,27 +241,51 @@ repository:
241241

242242
#variable, parameters, fields
243243
var-expr:
244-
name: meta.var.expr.ts
245-
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(var|let|const(?!\s+enum\b)){{endOfIdentifier}}'
246-
beginCaptures:
247-
'1': { name: keyword.control.export.ts }
248-
'2': { name: storage.type.ts }
249-
end: ((?=;|}|(\s+(of|in)\s+)|^\s*$|{{endOfStatement}})|((?<=\S)(?<!{{lookBehindConst}}|{{lookBehindLet}}|{{lookBehindVar}})(?=\s*$)))
250244
patterns:
251-
- include: '#destructuring-variable'
252-
- include: '#var-single-variable'
253-
- include: '#variable-initializer'
254-
- include: '#comment'
255-
- begin: (,)\s*(?!\S)
245+
# let/var
246+
- name: meta.var.expr.ts
247+
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(var|let){{endOfIdentifier}}'
256248
beginCaptures:
257-
'1': { name: punctuation.separator.comma.ts }
258-
end: (?<!,)(((?==|;|}|(\s+(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))
249+
'1': { name: keyword.control.export.ts }
250+
'2': { name: storage.type.ts }
251+
end: ((?=;|}|(\s+(of|in)\s+)|^\s*$|{{endOfStatement}})|((?<=\S)(?<!{{lookBehindLet}}|{{lookBehindVar}})(?=\s*$)))
259252
patterns:
260-
- include: '#comment'
261253
- include: '#destructuring-variable'
262254
- include: '#var-single-variable'
255+
- include: '#variable-initializer'
256+
- include: '#comment'
257+
- begin: (,)\s*(?!\S)
258+
beginCaptures:
259+
'1': { name: punctuation.separator.comma.ts }
260+
end: (?<!,)(((?==|;|}|(\s+(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))
261+
patterns:
262+
- include: '#comment'
263+
- include: '#destructuring-variable'
264+
- include: '#var-single-variable'
265+
- include: '#punctuation-comma'
266+
- include: '#punctuation-comma'
267+
# const
268+
- name: meta.var.expr.ts
269+
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(const(?!\s+enum\b)){{endOfIdentifier}}'
270+
beginCaptures:
271+
'1': { name: keyword.control.export.ts }
272+
'2': { name: storage.type.ts }
273+
end: ((?=;|}|(\s+(of|in)\s+)|^\s*$|{{endOfStatement}})|((?<=\S)(?<!{{lookBehindConst}})(?=\s*$)))
274+
patterns:
275+
- include: '#destructuring-const'
276+
- include: '#var-single-const'
277+
- include: '#variable-initializer'
278+
- include: '#comment'
279+
- begin: (,)\s*(?!\S)
280+
beginCaptures:
281+
'1': { name: punctuation.separator.comma.ts }
282+
end: (?<!,)(((?==|;|}|(\s+(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))
283+
patterns:
284+
- include: '#comment'
285+
- include: '#destructuring-const'
286+
- include: '#var-single-const'
287+
- include: '#punctuation-comma'
263288
- include: '#punctuation-comma'
264-
- include: '#punctuation-comma'
265289

266290
var-single-variable:
267291
patterns:
@@ -288,6 +312,24 @@ repository:
288312
patterns:
289313
- include: '#var-single-variable-type-annotation'
290314

315+
var-single-const:
316+
patterns:
317+
- name: meta.var-single-variable.expr.ts
318+
begin: |-
319+
(?x)({{identifier}})(?={{functionLikeAssignmentOrType}})
320+
beginCaptures:
321+
'1': { name: meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts }
322+
end: (?=$|^|[;,=}]|(\s+(of|in)\s+))
323+
patterns:
324+
- include: '#var-single-variable-type-annotation'
325+
- name: meta.var-single-variable.expr.ts
326+
begin: ({{identifier}})
327+
beginCaptures:
328+
'1': { name: meta.definition.variable.ts variable.other.constant.ts }
329+
end: (?=$|^|[;,=}]|(\s+(of|in)\s+))
330+
patterns:
331+
- include: '#var-single-variable-type-annotation'
332+
291333
var-single-variable-type-annotation:
292334
patterns:
293335
- include: '#type-annotation'
@@ -311,6 +353,23 @@ repository:
311353
- include: '#type-annotation'
312354
- include: '#comment'
313355

356+
destructuring-const:
357+
patterns:
358+
- name: meta.object-binding-pattern-variable.ts
359+
begin: (?<!=|:|{{lookBehindOf}}|{{lookBehindIn}})\s*(?=\{)
360+
end: (?=$|^|[;,=}]|(\s+(of|in)\s+))
361+
patterns:
362+
- include: '#object-binding-pattern-const'
363+
- include: '#type-annotation'
364+
- include: '#comment'
365+
- name: meta.array-binding-pattern-variable.ts
366+
begin: (?<!=|:|{{lookBehindOf}}|{{lookBehindIn}})\s*(?=\[)
367+
end: (?=$|^|[;,=}]|(\s+(of|in)\s+))
368+
patterns:
369+
- include: '#array-binding-pattern-const'
370+
- include: '#type-annotation'
371+
- include: '#comment'
372+
314373
object-binding-element:
315374
patterns:
316375
- include: '#comment'
@@ -324,6 +383,19 @@ repository:
324383
- include: '#variable-initializer'
325384
- include: '#punctuation-comma'
326385

386+
object-binding-element-const:
387+
patterns:
388+
- include: '#comment'
389+
- begin: (?x)(?={{propertyName}}\s*(:))
390+
end: (?=,|\})
391+
patterns:
392+
- include: '#object-binding-element-propertyName'
393+
- include: '#binding-element-const'
394+
- include: '#object-binding-pattern-const'
395+
- include: '#destructuring-variable-rest-const'
396+
- include: '#variable-initializer'
397+
- include: '#punctuation-comma'
398+
327399
object-binding-element-propertyName:
328400
begin: (?x)(?={{propertyName}}\s*(:))
329401
end: (:)
@@ -345,12 +417,27 @@ repository:
345417
- include: '#destructuring-variable-rest'
346418
- include: '#variable-initializer'
347419

420+
binding-element-const:
421+
patterns:
422+
- include: '#comment'
423+
- include: '#string'
424+
- include: '#object-binding-pattern-const'
425+
- include: '#array-binding-pattern-const'
426+
- include: '#destructuring-variable-rest-const'
427+
- include: '#variable-initializer'
428+
348429
destructuring-variable-rest:
349430
match: (?:(\.\.\.)\s*)?({{identifier}})
350431
captures:
351432
'1': { name: keyword.operator.rest.ts }
352433
'2': { name: meta.definition.variable.ts variable.other.readwrite.ts }
353434

435+
destructuring-variable-rest-const:
436+
match: (?:(\.\.\.)\s*)?({{identifier}})
437+
captures:
438+
'1': { name: keyword.operator.rest.ts }
439+
'2': { name: meta.definition.variable.ts variable.other.constant.ts }
440+
354441
object-binding-pattern:
355442
begin: (?:(\.\.\.)\s*)?(\{)
356443
beginCaptures:
@@ -362,6 +449,17 @@ repository:
362449
patterns:
363450
- include: '#object-binding-element'
364451

452+
object-binding-pattern-const:
453+
begin: (?:(\.\.\.)\s*)?(\{)
454+
beginCaptures:
455+
'1': { name: keyword.operator.rest.ts }
456+
'2': { name: punctuation.definition.binding-pattern.object.ts }
457+
end: \}
458+
endCaptures:
459+
'0': { name: punctuation.definition.binding-pattern.object.ts }
460+
patterns:
461+
- include: '#object-binding-element-const'
462+
365463
array-binding-pattern:
366464
begin: (?:(\.\.\.)\s*)?(\[)
367465
beginCaptures:
@@ -374,6 +472,18 @@ repository:
374472
- include: '#binding-element'
375473
- include: '#punctuation-comma'
376474

475+
array-binding-pattern-const:
476+
begin: (?:(\.\.\.)\s*)?(\[)
477+
beginCaptures:
478+
'1': { name: keyword.operator.rest.ts }
479+
'2': { name: punctuation.definition.binding-pattern.array.ts }
480+
end: \]
481+
endCaptures:
482+
'0': { name: punctuation.definition.binding-pattern.array.ts }
483+
patterns:
484+
- include: '#binding-element-const'
485+
- include: '#punctuation-comma'
486+
377487
parameter-name:
378488
patterns:
379489
- match: '{{startOfIdentifier}}(public|protected|private|readonly)\s+(?=(public|protected|private|readonly)\s+)'

0 commit comments

Comments
 (0)