Skip to content

Commit 28cde3c

Browse files
authored
Merge pull request #330 from Microsoft/varDecls
Declarations of Variables, fields and parameters are scoped as function if they are assigned function expression or of function type
2 parents 5659735 + 9dc74a5 commit 28cde3c

24 files changed

+689
-299
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 122 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,45 @@ repository:
4545
- include: '#punctuation-comma'
4646

4747
var-single-variable:
48-
name: meta.var-single-variable.expr.ts
49-
begin: ([_$[:alpha:]][_$[:alnum:]]*)
50-
beginCaptures:
51-
'1': { name: meta.definition.variable.ts variable.other.readwrite.ts }
52-
end: (?=$|[;,=}]|(\s+(of|in)\s+))
5348
patterns:
54-
- include: '#type-annotation'
55-
- include: '#string'
56-
- include: '#comment'
49+
- name: meta.var-single-variable.expr.ts
50+
# function assignment |
51+
# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
52+
begin: (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
53+
(=\s*(
54+
(async\s+) |
55+
(function\s*[(<]) |
56+
(function\s+) |
57+
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
58+
((<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
59+
) |
60+
(:\s*(
61+
(<) |
62+
([(]\s*(
63+
([)]) |
64+
(\.\.\.) |
65+
([_$[:alnum:]]+\s*(
66+
([:,?=])|
67+
([)]\s*=>)
68+
))
69+
)))
70+
))
71+
beginCaptures:
72+
'1': { name: meta.definition.variable.ts entity.name.function.ts }
73+
end: (?=$|[;,=}]|(\s+(of|in)\s+))
74+
patterns:
75+
- include: '#type-annotation'
76+
- include: '#string'
77+
- include: '#comment'
78+
- name: meta.var-single-variable.expr.ts
79+
begin: ([_$[:alpha:]][_$[:alnum:]]*)
80+
beginCaptures:
81+
'1': { name: meta.definition.variable.ts variable.other.readwrite.ts }
82+
end: (?=$|[;,=}]|(\s+(of|in)\s+))
83+
patterns:
84+
- include: '#type-annotation'
85+
- include: '#string'
86+
- include: '#comment'
5787

5888
destructuring-variable:
5989
patterns:
@@ -75,30 +105,34 @@ repository:
75105
object-binding-element:
76106
patterns:
77107
- include: '#comment'
78-
- begin: ([_$[:alpha:]][_$[:alnum:]]*)\s*(:)
79-
beginCaptures:
80-
'1': { name: variable.object.property.ts }
81-
'2': { name: punctuation.destructuring.ts }
108+
- begin: (?=(([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[([^\[\]]|\[[^\[\]]+\])+\]))\s*(:))
82109
end: (?=,|\})
83110
patterns:
84-
- include: '#object-binding-pattern'
85-
- include: '#array-binding-pattern'
86-
- name: meta.definition.variable.ts variable.other.readwrite.ts
87-
match: ([_$[:alpha:]][_$[:alnum:]]*)
88-
- include: '#variable-initializer'
111+
- include: '#object-binding-element-propertyName'
112+
- include: '#binding-element'
89113
- include: '#object-binding-pattern'
90114
- include: '#destructuring-variable-rest'
91115
- include: '#variable-initializer'
92116
- include: '#punctuation-comma'
93117

94-
array-binding-element:
118+
object-binding-element-propertyName:
119+
begin: (?=(([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[([^\[\]]|\[[^\[\]]+\])+\]))\s*(:))
120+
end: (:)
121+
endCaptures:
122+
'0': { name: punctuation.destructuring.ts }
123+
patterns:
124+
- include: '#string'
125+
- include: '#array-literal'
126+
- name: variable.object.property.ts
127+
match: ([_$[:alpha:]][_$[:alnum:]]*)
128+
129+
binding-element:
95130
patterns:
96131
- include: '#comment'
97132
- include: '#object-binding-pattern'
98133
- include: '#array-binding-pattern'
99134
- include: '#destructuring-variable-rest'
100135
- include: '#variable-initializer'
101-
- include: '#punctuation-comma'
102136

103137
destructuring-variable-rest:
104138
match: (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
@@ -126,7 +160,8 @@ repository:
126160
endCaptures:
127161
'0': { name: punctuation.definition.binding-pattern.array.ts }
128162
patterns:
129-
- include: '#array-binding-element'
163+
- include: '#binding-element'
164+
- include: '#punctuation-comma'
130165

131166
ternary-expression:
132167
begin: (?=\?)
@@ -257,10 +292,11 @@ repository:
257292
patterns:
258293
- include: '#comment'
259294
- include: '#variable-initializer'
260-
- begin: (?=(?:(?:\'[^']*\')|(?:\"[^"]*\")))
295+
- begin: (?=((\'[^']*\')|(\"[^"]*\")|(\[([^\[\]]|\[[^\[\]]+\])+\])))
261296
end: (?=,|\}|$)
262297
patterns:
263298
- include: '#string'
299+
- include: '#array-literal'
264300
- include: '#comment'
265301
- include: '#variable-initializer'
266302
- include: '#punctuation-comma'
@@ -494,6 +530,28 @@ repository:
494530
- include: '#string'
495531
- include: '#array-literal'
496532
- include: '#comment'
533+
- name: meta.definition.property.ts entity.name.function.ts
534+
# function assignment |
535+
# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
536+
match: (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\?\s*)?\s*
537+
(=\s*(
538+
(async\s+) |
539+
(function\s*[(<]) |
540+
(function\s+) |
541+
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
542+
((<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
543+
) |
544+
(:\s*(
545+
(<) |
546+
([(]\s*(
547+
([)]) |
548+
(\.\.\.) |
549+
([_$[:alnum:]]+\s*(
550+
([:,?=])|
551+
([)]\s*=>)
552+
))
553+
)))
554+
))
497555
- name: meta.definition.property.ts variable.object.property.ts
498556
match: '[_$[:alpha:]][_$[:alnum:]]*'
499557
- name: keyword.operator.optional.ts
@@ -621,13 +679,41 @@ repository:
621679
- include: '#object-member'
622680

623681
parameter-name:
624-
match: '(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)'
625-
captures:
626-
'1': { name: storage.modifier.ts }
627-
'2': { name: storage.modifier.ts }
628-
'3': { name: keyword.operator.rest.ts }
629-
'4': { name: variable.parameter.ts }
630-
'5': { name: keyword.operator.optional.ts }
682+
patterns:
683+
# function assignment |
684+
# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
685+
- match: (?x)(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
686+
(=\s*(
687+
(async\s+) |
688+
(function\s*[(<]) |
689+
(function\s+) |
690+
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
691+
((<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
692+
) |
693+
(:\s*(
694+
(<) |
695+
([(]\s*(
696+
([)]) |
697+
(\.\.\.) |
698+
([_$[:alnum:]]+\s*(
699+
([:,?=])|
700+
([)]\s*=>)
701+
))
702+
)))
703+
))
704+
captures:
705+
'1': { name: storage.modifier.ts }
706+
'2': { name: storage.modifier.ts }
707+
'3': { name: keyword.operator.rest.ts }
708+
'4': { name: entity.name.function.ts }
709+
'5': { name: keyword.operator.optional.ts }
710+
- match: (?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)
711+
captures:
712+
'1': { name: storage.modifier.ts }
713+
'2': { name: storage.modifier.ts }
714+
'3': { name: keyword.operator.rest.ts }
715+
'4': { name: variable.parameter.ts }
716+
'5': { name: keyword.operator.optional.ts }
631717

632718
destructuring-parameter:
633719
patterns:
@@ -648,35 +734,29 @@ repository:
648734
endCaptures:
649735
'0': { name: punctuation.definition.binding-pattern.array.ts }
650736
patterns:
651-
- include: '#parameter-array-binding-element'
737+
- include: '#parameter-binding-element'
738+
- include: '#punctuation-comma'
652739

653740
parameter-object-binding-element:
654741
patterns:
655742
- include: '#comment'
656-
- begin: ([_$[:alpha:]][_$[:alnum:]]*)\s*(:)
657-
beginCaptures:
658-
'1': { name: variable.object.property.ts }
659-
'2': { name: punctuation.destructuring.ts }
743+
- begin: (?=(([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[([^\[\]]|\[[^\[\]]+\])+\]))\s*(:))
660744
end: (?=,|\})
661745
patterns:
662-
- include: '#parameter-object-binding-pattern'
663-
- include: '#parameter-array-binding-pattern'
664-
- name: variable.parameter.ts
665-
match: ([_$[:alpha:]][_$[:alnum:]]*)
666-
- include: '#variable-initializer'
746+
- include: '#object-binding-element-propertyName'
747+
- include: '#parameter-binding-element'
667748
- include: '#parameter-object-binding-pattern'
668749
- include: '#destructuring-parameter-rest'
669750
- include: '#variable-initializer'
670751
- include: '#punctuation-comma'
671752

672-
parameter-array-binding-element:
753+
parameter-binding-element:
673754
patterns:
674755
- include: '#comment'
675756
- include: '#parameter-object-binding-pattern'
676757
- include: '#parameter-array-binding-pattern'
677758
- include: '#destructuring-parameter-rest'
678759
- include: '#variable-initializer'
679-
- include: '#punctuation-comma'
680760

681761
destructuring-parameter-rest:
682762
match: (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
@@ -704,7 +784,8 @@ repository:
704784
endCaptures:
705785
'0': { name: punctuation.definition.binding-pattern.array.ts }
706786
patterns:
707-
- include: '#parameter-array-binding-element'
787+
- include: '#parameter-binding-element'
788+
- include: '#punctuation-comma'
708789

709790
return-type:
710791
name: meta.return.type.ts

0 commit comments

Comments
 (0)