Skip to content

Commit 5f891a8

Browse files
committed
Support readonly modifier
Fixes #242
1 parent cfd2afb commit 5f891a8

File tree

6 files changed

+276
-22
lines changed

6 files changed

+276
-22
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -465,10 +465,11 @@ repository:
465465

466466
field-declaration:
467467
name: meta.field.declaration.ts
468-
begin: (?<!\()\s*((?:[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:))
468+
begin: (?<!\()(?:(?<!\.|\$)\b(readonly)\s+)?\s*((?:[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:))
469469
beginCaptures:
470-
'1': { name: variable.object.property.ts }
471-
'2': { name: keyword.operator.optional.ts }
470+
'1': { name: storage.modifier.ts }
471+
'2': { name: variable.object.property.ts }
472+
'3': { name: keyword.operator.optional.ts }
472473
end: '(?=\}|;|,|$)|(?<=\})'
473474
patterns:
474475
- include: '#variable-initializer'
@@ -529,9 +530,10 @@ repository:
529530

530531
indexer-declaration:
531532
name: meta.indexer.declaration.ts
532-
begin: \[
533+
begin: (?:(?<!\.|\$)\b(readonly)\s*)?(\[)
533534
beginCaptures:
534-
'0': { name: meta.brace.square.ts }
535+
'1': { name: storage.modifier.ts }
536+
'2': { name: meta.brace.square.ts }
535537
end: (\])\s*(\?\s*)?|$
536538
endCaptures:
537539
'1': { name: meta.brace.square.ts }
@@ -1284,7 +1286,7 @@ repository:
12841286

12851287
access-modifier:
12861288
name: storage.modifier.ts
1287-
match: (?<!\.|\$)\b(public|protected|private)\b(?!\$)
1289+
match: (?<!\.|\$)\b(public|protected|private|readonly)\b(?!\$)
12881290

12891291
static-modifier:
12901292
name: storage.modifier.ts

TypeScript.tmLanguage

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<key>access-modifier</key>
2121
<dict>
2222
<key>match</key>
23-
<string>(?&lt;!\.|\$)\b(public|protected|private)\b(?!\$)</string>
23+
<string>(?&lt;!\.|\$)\b(public|protected|private|readonly)\b(?!\$)</string>
2424
<key>name</key>
2525
<string>storage.modifier.ts</string>
2626
</dict>
@@ -1297,15 +1297,20 @@
12971297
<key>field-declaration</key>
12981298
<dict>
12991299
<key>begin</key>
1300-
<string>(?&lt;!\()\s*((?:[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:))</string>
1300+
<string>(?&lt;!\()(?:(?&lt;!\.|\$)\b(readonly)\s+)?\s*((?:[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:))</string>
13011301
<key>beginCaptures</key>
13021302
<dict>
13031303
<key>1</key>
13041304
<dict>
13051305
<key>name</key>
1306-
<string>variable.object.property.ts</string>
1306+
<string>storage.modifier.ts</string>
13071307
</dict>
13081308
<key>2</key>
1309+
<dict>
1310+
<key>name</key>
1311+
<string>variable.object.property.ts</string>
1312+
</dict>
1313+
<key>3</key>
13091314
<dict>
13101315
<key>name</key>
13111316
<string>keyword.operator.optional.ts</string>
@@ -1874,10 +1879,15 @@
18741879
<key>indexer-declaration</key>
18751880
<dict>
18761881
<key>begin</key>
1877-
<string>\[</string>
1882+
<string>(?:(?&lt;!\.|\$)\b(readonly)\s*)?(\[)</string>
18781883
<key>beginCaptures</key>
18791884
<dict>
1880-
<key>0</key>
1885+
<key>1</key>
1886+
<dict>
1887+
<key>name</key>
1888+
<string>storage.modifier.ts</string>
1889+
</dict>
1890+
<key>2</key>
18811891
<dict>
18821892
<key>name</key>
18831893
<string>meta.brace.square.ts</string>

TypeScriptReact.YAML-tmLanguage

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,11 @@ repository:
469469

470470
field-declaration:
471471
name: meta.field.declaration.tsx
472-
begin: (?<!\()\s*((?:[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:))
472+
begin: (?<!\()(?:(?<!\.|\$)\b(readonly)\s+)?\s*((?:[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:))
473473
beginCaptures:
474-
'1': { name: variable.object.property.tsx }
475-
'2': { name: keyword.operator.optional.tsx }
474+
'1': { name: storage.modifier.tsx }
475+
'2': { name: variable.object.property.tsx }
476+
'3': { name: keyword.operator.optional.tsx }
476477
end: '(?=\}|;|,|$)|(?<=\})'
477478
patterns:
478479
- include: '#variable-initializer'
@@ -533,9 +534,10 @@ repository:
533534

534535
indexer-declaration:
535536
name: meta.indexer.declaration.tsx
536-
begin: \[
537+
begin: (?:(?<!\.|\$)\b(readonly)\s*)?(\[)
537538
beginCaptures:
538-
'0': { name: meta.brace.square.tsx }
539+
'1': { name: storage.modifier.tsx }
540+
'2': { name: meta.brace.square.tsx }
539541
end: (\])\s*(\?\s*)?|$
540542
endCaptures:
541543
'1': { name: meta.brace.square.tsx }
@@ -1273,7 +1275,7 @@ repository:
12731275

12741276
access-modifier:
12751277
name: storage.modifier.tsx
1276-
match: (?<!\.|\$)\b(public|protected|private)\b(?!\$)
1278+
match: (?<!\.|\$)\b(public|protected|private|readonly)\b(?!\$)
12771279

12781280
static-modifier:
12791281
name: storage.modifier.tsx

TypeScriptReact.tmLanguage

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<key>access-modifier</key>
2121
<dict>
2222
<key>match</key>
23-
<string>(?&lt;!\.|\$)\b(public|protected|private)\b(?!\$)</string>
23+
<string>(?&lt;!\.|\$)\b(public|protected|private|readonly)\b(?!\$)</string>
2424
<key>name</key>
2525
<string>storage.modifier.tsx</string>
2626
</dict>
@@ -1265,15 +1265,20 @@
12651265
<key>field-declaration</key>
12661266
<dict>
12671267
<key>begin</key>
1268-
<string>(?&lt;!\()\s*((?:[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:))</string>
1268+
<string>(?&lt;!\()(?:(?&lt;!\.|\$)\b(readonly)\s+)?\s*((?:[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:))</string>
12691269
<key>beginCaptures</key>
12701270
<dict>
12711271
<key>1</key>
12721272
<dict>
12731273
<key>name</key>
1274-
<string>variable.object.property.tsx</string>
1274+
<string>storage.modifier.tsx</string>
12751275
</dict>
12761276
<key>2</key>
1277+
<dict>
1278+
<key>name</key>
1279+
<string>variable.object.property.tsx</string>
1280+
</dict>
1281+
<key>3</key>
12771282
<dict>
12781283
<key>name</key>
12791284
<string>keyword.operator.optional.tsx</string>
@@ -1842,10 +1847,15 @@
18421847
<key>indexer-declaration</key>
18431848
<dict>
18441849
<key>begin</key>
1845-
<string>\[</string>
1850+
<string>(?:(?&lt;!\.|\$)\b(readonly)\s*)?(\[)</string>
18461851
<key>beginCaptures</key>
18471852
<dict>
1848-
<key>0</key>
1853+
<key>1</key>
1854+
<dict>
1855+
<key>name</key>
1856+
<string>storage.modifier.tsx</string>
1857+
</dict>
1858+
<key>2</key>
18491859
<dict>
18501860
<key>name</key>
18511861
<string>meta.brace.square.tsx</string>

tests/baselines/readonly.baseline.txt

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
original file
2+
-----------------------------------
3+
interface X {
4+
readonly a: number;
5+
readonly b?: number;
6+
}
7+
8+
class C {
9+
readonly a: number;
10+
readonly b = 1;
11+
}
12+
13+
var p: { readonly a: number, b: number }
14+
let xx: { readonly [x: string]: string };
15+
-----------------------------------
16+
17+
>interface X {
18+
^^^^^^^^^
19+
source.ts meta.declaration.object.ts storage.type.interface.ts
20+
^
21+
source.ts meta.declaration.object.ts
22+
^
23+
source.ts meta.declaration.object.ts meta.object.name.ts entity.name.class.ts
24+
^
25+
source.ts meta.declaration.object.ts
26+
^
27+
source.ts meta.declaration.object.ts meta.object.body.ts punctuation.definition.block.ts
28+
^^
29+
source.ts meta.declaration.object.ts meta.object.body.ts
30+
> readonly a: number;
31+
^^^^
32+
source.ts meta.declaration.object.ts meta.object.body.ts
33+
^^^^^^^^
34+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts storage.modifier.ts
35+
^
36+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts
37+
^
38+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts variable.object.property.ts
39+
^
40+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts
41+
^
42+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts
43+
^^^^^^
44+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
45+
^^^
46+
source.ts meta.declaration.object.ts meta.object.body.ts
47+
> readonly b?: number;
48+
^^^^
49+
source.ts meta.declaration.object.ts meta.object.body.ts
50+
^^^^^^^^
51+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts storage.modifier.ts
52+
^
53+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts
54+
^
55+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts variable.object.property.ts
56+
^
57+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts keyword.operator.optional.ts
58+
^
59+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts
60+
^
61+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts
62+
^^^^^^
63+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
64+
^^^
65+
source.ts meta.declaration.object.ts meta.object.body.ts
66+
>}
67+
^
68+
source.ts meta.declaration.object.ts meta.object.body.ts punctuation.definition.block.ts
69+
^^
70+
source.ts
71+
>
72+
^^
73+
source.ts
74+
>class C {
75+
^^^^^
76+
source.ts meta.declaration.object.ts storage.type.class.ts
77+
^
78+
source.ts meta.declaration.object.ts
79+
^
80+
source.ts meta.declaration.object.ts meta.object.name.ts entity.name.class.ts
81+
^
82+
source.ts meta.declaration.object.ts
83+
^
84+
source.ts meta.declaration.object.ts meta.object.body.ts punctuation.definition.block.ts
85+
^^
86+
source.ts meta.declaration.object.ts meta.object.body.ts
87+
> readonly a: number;
88+
^^^^
89+
source.ts meta.declaration.object.ts meta.object.body.ts
90+
^^^^^^^^
91+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts storage.modifier.ts
92+
^
93+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts
94+
^
95+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts variable.object.property.ts
96+
^
97+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts
98+
^
99+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts
100+
^^^^^^
101+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
102+
^^^
103+
source.ts meta.declaration.object.ts meta.object.body.ts
104+
> readonly b = 1;
105+
^^^^
106+
source.ts meta.declaration.object.ts meta.object.body.ts
107+
^^^^^^^^
108+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts storage.modifier.ts
109+
^
110+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts
111+
^
112+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts variable.object.property.ts
113+
^
114+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts
115+
^
116+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts keyword.operator.assignment.ts
117+
^
118+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts
119+
^
120+
source.ts meta.declaration.object.ts meta.object.body.ts meta.field.declaration.ts constant.numeric.decimal.ts
121+
^^^
122+
source.ts meta.declaration.object.ts meta.object.body.ts
123+
>}
124+
^
125+
source.ts meta.declaration.object.ts meta.object.body.ts punctuation.definition.block.ts
126+
^^
127+
source.ts
128+
>
129+
^^
130+
source.ts
131+
>var p: { readonly a: number, b: number }
132+
^^^
133+
source.ts meta.var.expr.ts storage.type.ts
134+
^
135+
source.ts meta.var.expr.ts
136+
^
137+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
138+
^
139+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts
140+
^
141+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts
142+
^
143+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
144+
^
145+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts
146+
^^^^^^^^
147+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts storage.modifier.ts
148+
^
149+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts
150+
^
151+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts variable.object.property.ts
152+
^
153+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
154+
^
155+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
156+
^^^^^^
157+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
158+
^
159+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts
160+
^
161+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts
162+
^
163+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts variable.object.property.ts
164+
^
165+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
166+
^
167+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
168+
^^^^^^
169+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
170+
^
171+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
172+
^
173+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
174+
^
175+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts
176+
>let xx: { readonly [x: string]: string };
177+
^^^
178+
source.ts meta.var.expr.ts storage.type.ts
179+
^
180+
source.ts meta.var.expr.ts
181+
^^
182+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
183+
^
184+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts
185+
^
186+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts
187+
^
188+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
189+
^
190+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts
191+
^^^^^^^^
192+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.indexer.declaration.ts storage.modifier.ts
193+
^
194+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.indexer.declaration.ts
195+
^
196+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.indexer.declaration.ts meta.brace.square.ts
197+
^
198+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.indexer.declaration.ts meta.indexer.parameter.ts variable.parameter.ts
199+
^
200+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.indexer.declaration.ts meta.type.annotation.ts
201+
^
202+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.indexer.declaration.ts meta.type.annotation.ts
203+
^^^^^^
204+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.indexer.declaration.ts meta.type.annotation.ts support.type.primitive.ts
205+
^
206+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.indexer.declaration.ts meta.brace.square.ts
207+
^
208+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.type.annotation.ts
209+
^
210+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.type.annotation.ts
211+
^^^^^^
212+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.type.annotation.ts support.type.primitive.ts
213+
^
214+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts meta.type.annotation.ts
215+
^
216+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
217+
^^
218+
source.ts

0 commit comments

Comments
 (0)