Skip to content

Commit 90f6ae1

Browse files
committed
Add support scope to new.target and import.meta
Fixes #609
1 parent 2b74d88 commit 90f6ae1

File tree

5 files changed

+310
-0
lines changed

5 files changed

+310
-0
lines changed

Diff for: TypeScript.YAML-tmLanguage

+14
Original file line numberDiff line numberDiff line change
@@ -1521,6 +1521,20 @@ repository:
15211521
'2': { name: punctuation.accessor.ts }
15221522
'3': { name: punctuation.accessor.optional.ts }
15231523
'4': { name: support.function.json.ts }
1524+
# import meta
1525+
- match: '{{startOfIdentifier}}(import)\s*{{propertyAccess}}\s*(meta)\b(?!\$)'
1526+
captures:
1527+
'1': { name: keyword.control.import.ts }
1528+
'2': { name: punctuation.accessor.ts }
1529+
'3': { name: punctuation.accessor.optional.ts }
1530+
'4': { name: support.variable.property.importmeta.ts }
1531+
# new target
1532+
- match: '{{startOfIdentifier}}(new)\s*{{propertyAccess}}\s*(target)\b(?!\$)'
1533+
captures:
1534+
'1': { name: keyword.operator.new.ts }
1535+
'2': { name: punctuation.accessor.ts }
1536+
'3': { name: punctuation.accessor.optional.ts }
1537+
'4': { name: support.variable.property.target.ts }
15241538
# DOM
15251539
- match: |-
15261540
(?x) {{propertyAccess}} \s* (?:

Diff for: TypeScript.tmLanguage

+54
Original file line numberDiff line numberDiff line change
@@ -4737,6 +4737,60 @@
47374737
</dict>
47384738
</dict>
47394739
</dict>
4740+
<dict>
4741+
<key>match</key>
4742+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$)</string>
4743+
<key>captures</key>
4744+
<dict>
4745+
<key>1</key>
4746+
<dict>
4747+
<key>name</key>
4748+
<string>keyword.control.import.ts</string>
4749+
</dict>
4750+
<key>2</key>
4751+
<dict>
4752+
<key>name</key>
4753+
<string>punctuation.accessor.ts</string>
4754+
</dict>
4755+
<key>3</key>
4756+
<dict>
4757+
<key>name</key>
4758+
<string>punctuation.accessor.optional.ts</string>
4759+
</dict>
4760+
<key>4</key>
4761+
<dict>
4762+
<key>name</key>
4763+
<string>support.variable.property.importmeta.ts</string>
4764+
</dict>
4765+
</dict>
4766+
</dict>
4767+
<dict>
4768+
<key>match</key>
4769+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$)</string>
4770+
<key>captures</key>
4771+
<dict>
4772+
<key>1</key>
4773+
<dict>
4774+
<key>name</key>
4775+
<string>keyword.operator.new.ts</string>
4776+
</dict>
4777+
<key>2</key>
4778+
<dict>
4779+
<key>name</key>
4780+
<string>punctuation.accessor.ts</string>
4781+
</dict>
4782+
<key>3</key>
4783+
<dict>
4784+
<key>name</key>
4785+
<string>punctuation.accessor.optional.ts</string>
4786+
</dict>
4787+
<key>4</key>
4788+
<dict>
4789+
<key>name</key>
4790+
<string>support.variable.property.target.ts</string>
4791+
</dict>
4792+
</dict>
4793+
</dict>
47404794
<dict>
47414795
<key>match</key>
47424796
<string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:

Diff for: TypeScriptReact.tmLanguage

+54
Original file line numberDiff line numberDiff line change
@@ -4683,6 +4683,60 @@
46834683
</dict>
46844684
</dict>
46854685
</dict>
4686+
<dict>
4687+
<key>match</key>
4688+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$)</string>
4689+
<key>captures</key>
4690+
<dict>
4691+
<key>1</key>
4692+
<dict>
4693+
<key>name</key>
4694+
<string>keyword.control.import.tsx</string>
4695+
</dict>
4696+
<key>2</key>
4697+
<dict>
4698+
<key>name</key>
4699+
<string>punctuation.accessor.tsx</string>
4700+
</dict>
4701+
<key>3</key>
4702+
<dict>
4703+
<key>name</key>
4704+
<string>punctuation.accessor.optional.tsx</string>
4705+
</dict>
4706+
<key>4</key>
4707+
<dict>
4708+
<key>name</key>
4709+
<string>support.variable.property.importmeta.tsx</string>
4710+
</dict>
4711+
</dict>
4712+
</dict>
4713+
<dict>
4714+
<key>match</key>
4715+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$)</string>
4716+
<key>captures</key>
4717+
<dict>
4718+
<key>1</key>
4719+
<dict>
4720+
<key>name</key>
4721+
<string>keyword.operator.new.tsx</string>
4722+
</dict>
4723+
<key>2</key>
4724+
<dict>
4725+
<key>name</key>
4726+
<string>punctuation.accessor.tsx</string>
4727+
</dict>
4728+
<key>3</key>
4729+
<dict>
4730+
<key>name</key>
4731+
<string>punctuation.accessor.optional.tsx</string>
4732+
</dict>
4733+
<key>4</key>
4734+
<dict>
4735+
<key>name</key>
4736+
<string>support.variable.property.target.tsx</string>
4737+
</dict>
4738+
</dict>
4739+
</dict>
46864740
<dict>
46874741
<key>match</key>
46884742
<string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:

Diff for: tests/baselines/Issue609.baseline.txt

+178
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
original file
2+
-----------------------------------
3+
const size = import.meta.scriptElement.dataset.size || 300;
4+
export function Date(...args) {
5+
if (new.target) {
6+
// [[Construct]] branch
7+
initializeDate(this, ...args);
8+
} else {
9+
// [[Call]] branch
10+
return ToDateString(clockGetTime());
11+
}
12+
}
13+
-----------------------------------
14+
15+
Grammar: TypeScript.tmLanguage
16+
-----------------------------------
17+
>const size = import.meta.scriptElement.dataset.size || 300;
18+
^^^^^
19+
source.ts meta.var.expr.ts storage.type.ts
20+
^
21+
source.ts meta.var.expr.ts
22+
^^^^
23+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
24+
^
25+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
26+
^
27+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
28+
^
29+
source.ts meta.var.expr.ts
30+
^^^^^^
31+
source.ts meta.var.expr.ts keyword.control.import.ts
32+
^
33+
source.ts meta.var.expr.ts punctuation.accessor.ts
34+
^^^^
35+
source.ts meta.var.expr.ts support.variable.property.importmeta.ts
36+
^
37+
source.ts meta.var.expr.ts punctuation.accessor.ts
38+
^^^^^^^^^^^^^
39+
source.ts meta.var.expr.ts variable.other.object.property.ts
40+
^
41+
source.ts meta.var.expr.ts punctuation.accessor.ts
42+
^^^^^^^
43+
source.ts meta.var.expr.ts variable.other.object.property.ts
44+
^
45+
source.ts meta.var.expr.ts punctuation.accessor.ts
46+
^^^^
47+
source.ts meta.var.expr.ts support.variable.property.dom.ts
48+
^
49+
source.ts meta.var.expr.ts
50+
^^
51+
source.ts meta.var.expr.ts keyword.operator.logical.ts
52+
^
53+
source.ts meta.var.expr.ts
54+
^^^
55+
source.ts meta.var.expr.ts constant.numeric.decimal.ts
56+
^
57+
source.ts punctuation.terminator.statement.ts
58+
>export function Date(...args) {
59+
^^^^^^
60+
source.ts meta.function.ts keyword.control.export.ts
61+
^
62+
source.ts meta.function.ts
63+
^^^^^^^^
64+
source.ts meta.function.ts storage.type.function.ts
65+
^
66+
source.ts meta.function.ts
67+
^^^^
68+
source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
69+
^
70+
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
71+
^^^
72+
source.ts meta.function.ts meta.parameters.ts keyword.operator.rest.ts
73+
^^^^
74+
source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
75+
^
76+
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
77+
^
78+
source.ts meta.function.ts
79+
^
80+
source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
81+
> if (new.target) {
82+
^^
83+
source.ts meta.function.ts meta.block.ts
84+
^^
85+
source.ts meta.function.ts meta.block.ts keyword.control.conditional.ts
86+
^
87+
source.ts meta.function.ts meta.block.ts
88+
^
89+
source.ts meta.function.ts meta.block.ts meta.brace.round.ts
90+
^^^
91+
source.ts meta.function.ts meta.block.ts keyword.operator.new.ts
92+
^
93+
source.ts meta.function.ts meta.block.ts punctuation.accessor.ts
94+
^^^^^^
95+
source.ts meta.function.ts meta.block.ts support.variable.property.target.ts
96+
^
97+
source.ts meta.function.ts meta.block.ts meta.brace.round.ts
98+
^
99+
source.ts meta.function.ts meta.block.ts
100+
^
101+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
102+
> // [[Construct]] branch
103+
^^^^
104+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.whitespace.comment.leading.ts
105+
^^
106+
source.ts meta.function.ts meta.block.ts meta.block.ts comment.line.double-slash.ts punctuation.definition.comment.ts
107+
^^^^^^^^^^^^^^^^^^^^^^
108+
source.ts meta.function.ts meta.block.ts meta.block.ts comment.line.double-slash.ts
109+
> initializeDate(this, ...args);
110+
^^^^
111+
source.ts meta.function.ts meta.block.ts meta.block.ts
112+
^^^^^^^^^^^^^^
113+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.function-call.ts entity.name.function.ts
114+
^
115+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.brace.round.ts
116+
^^^^
117+
source.ts meta.function.ts meta.block.ts meta.block.ts variable.language.this.ts
118+
^
119+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.separator.comma.ts
120+
^
121+
source.ts meta.function.ts meta.block.ts meta.block.ts
122+
^^^
123+
source.ts meta.function.ts meta.block.ts meta.block.ts keyword.operator.spread.ts
124+
^^^^
125+
source.ts meta.function.ts meta.block.ts meta.block.ts variable.other.readwrite.ts
126+
^
127+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.brace.round.ts
128+
^
129+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.terminator.statement.ts
130+
> } else {
131+
^^
132+
source.ts meta.function.ts meta.block.ts meta.block.ts
133+
^
134+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
135+
^
136+
source.ts meta.function.ts meta.block.ts
137+
^^^^
138+
source.ts meta.function.ts meta.block.ts keyword.control.conditional.ts
139+
^
140+
source.ts meta.function.ts meta.block.ts
141+
^
142+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
143+
> // [[Call]] branch
144+
^^^^
145+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.whitespace.comment.leading.ts
146+
^^
147+
source.ts meta.function.ts meta.block.ts meta.block.ts comment.line.double-slash.ts punctuation.definition.comment.ts
148+
^^^^^^^^^^^^^^^^^
149+
source.ts meta.function.ts meta.block.ts meta.block.ts comment.line.double-slash.ts
150+
> return ToDateString(clockGetTime());
151+
^^^^
152+
source.ts meta.function.ts meta.block.ts meta.block.ts
153+
^^^^^^
154+
source.ts meta.function.ts meta.block.ts meta.block.ts keyword.control.flow.ts
155+
^
156+
source.ts meta.function.ts meta.block.ts meta.block.ts
157+
^^^^^^^^^^^^
158+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.function-call.ts entity.name.function.ts
159+
^
160+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.brace.round.ts
161+
^^^^^^^^^^^^
162+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.function-call.ts entity.name.function.ts
163+
^
164+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.brace.round.ts
165+
^
166+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.brace.round.ts
167+
^
168+
source.ts meta.function.ts meta.block.ts meta.block.ts meta.brace.round.ts
169+
^
170+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.terminator.statement.ts
171+
> }
172+
^^
173+
source.ts meta.function.ts meta.block.ts meta.block.ts
174+
^
175+
source.ts meta.function.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
176+
>}
177+
^
178+
source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts

Diff for: tests/cases/Issue609.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const size = import.meta.scriptElement.dataset.size || 300;
2+
export function Date(...args) {
3+
if (new.target) {
4+
// [[Construct]] branch
5+
initializeDate(this, ...args);
6+
} else {
7+
// [[Call]] branch
8+
return ToDateString(clockGetTime());
9+
}
10+
}

0 commit comments

Comments
 (0)