Skip to content

Commit a4c4daf

Browse files
committed
Fix readonly modifier detection when its followed by object type
Fixes #743
1 parent fae6485 commit a4c4daf

File tree

5 files changed

+168
-8
lines changed

5 files changed

+168
-8
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2240,8 +2240,9 @@ repository:
22402240
- include: '#type-fn-type-parameters'
22412241
- include: '#type-paren-or-function-parameters'
22422242
- include: '#type-function-return-type'
2243-
- name: storage.modifier.ts
2244-
match: '{{startOfIdentifier}}(readonly){{endOfIdentifier}}'
2243+
- match: '{{startOfIdentifier}}(readonly){{endOfIdentifier}}\s*'
2244+
captures:
2245+
'1': { name: storage.modifier.ts }
22452246
- include: '#type-name'
22462247

22472248
type-primitive:

TypeScript.tmLanguage

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6809,10 +6809,16 @@
68096809
<string>#type-function-return-type</string>
68106810
</dict>
68116811
<dict>
6812-
<key>name</key>
6813-
<string>storage.modifier.ts</string>
68146812
<key>match</key>
6815-
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6813+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
6814+
<key>captures</key>
6815+
<dict>
6816+
<key>1</key>
6817+
<dict>
6818+
<key>name</key>
6819+
<string>storage.modifier.ts</string>
6820+
</dict>
6821+
</dict>
68166822
</dict>
68176823
<dict>
68186824
<key>include</key>

TypeScriptReact.tmLanguage

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6731,10 +6731,16 @@
67316731
<string>#type-function-return-type</string>
67326732
</dict>
67336733
<dict>
6734-
<key>name</key>
6735-
<string>storage.modifier.tsx</string>
67366734
<key>match</key>
6737-
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6735+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
6736+
<key>captures</key>
6737+
<dict>
6738+
<key>1</key>
6739+
<dict>
6740+
<key>name</key>
6741+
<string>storage.modifier.tsx</string>
6742+
</dict>
6743+
</dict>
67386744
</dict>
67396745
<dict>
67406746
<key>include</key>

tests/baselines/Issue743.baseline.txt

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
original file
2+
-----------------------------------
3+
type Test = {
4+
okay: string;
5+
broken1: readonly { a: string; b: number; }[];
6+
broken2: readonly { a: number; b: string; }[];
7+
};
8+
-----------------------------------
9+
10+
Grammar: TypeScript.tmLanguage
11+
-----------------------------------
12+
>type Test = {
13+
^^^^
14+
source.ts meta.type.declaration.ts storage.type.type.ts
15+
^
16+
source.ts meta.type.declaration.ts
17+
^^^^
18+
source.ts meta.type.declaration.ts entity.name.type.alias.ts
19+
^
20+
source.ts meta.type.declaration.ts
21+
^
22+
source.ts meta.type.declaration.ts keyword.operator.assignment.ts
23+
^
24+
source.ts meta.type.declaration.ts
25+
^
26+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
27+
> okay: string;
28+
^^^^
29+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts
30+
^^^^
31+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
32+
^
33+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
34+
^
35+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
36+
^^^^^^
37+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
38+
^
39+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.terminator.statement.ts
40+
> broken1: readonly { a: string; b: number; }[];
41+
^^^^
42+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts
43+
^^^^^^^
44+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
45+
^
46+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
47+
^
48+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
49+
^^^^^^^^
50+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts storage.modifier.ts
51+
^
52+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
53+
^
54+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
55+
^
56+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts
57+
^
58+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
59+
^
60+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
61+
^
62+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
63+
^^^^^^
64+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
65+
^
66+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts punctuation.terminator.statement.ts
67+
^
68+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts
69+
^
70+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
71+
^
72+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
73+
^
74+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
75+
^^^^^^
76+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
77+
^
78+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts punctuation.terminator.statement.ts
79+
^
80+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts
81+
^
82+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
83+
^
84+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
85+
^
86+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
87+
^
88+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.terminator.statement.ts
89+
> broken2: readonly { a: number; b: string; }[];
90+
^^^^
91+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts
92+
^^^^^^^
93+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
94+
^
95+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
96+
^
97+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
98+
^^^^^^^^
99+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts storage.modifier.ts
100+
^
101+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
102+
^
103+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
104+
^
105+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts
106+
^
107+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
108+
^
109+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
110+
^
111+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
112+
^^^^^^
113+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
114+
^
115+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts punctuation.terminator.statement.ts
116+
^
117+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts
118+
^
119+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
120+
^
121+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
122+
^
123+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
124+
^^^^^^
125+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
126+
^
127+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts punctuation.terminator.statement.ts
128+
^
129+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts
130+
^
131+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
132+
^
133+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
134+
^
135+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
136+
^
137+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.terminator.statement.ts
138+
>};
139+
^
140+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
141+
^
142+
source.ts punctuation.terminator.statement.ts

tests/cases/Issue743.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type Test = {
2+
okay: string;
3+
broken1: readonly { a: string; b: number; }[];
4+
broken2: readonly { a: number; b: string; }[];
5+
};

0 commit comments

Comments
 (0)