Skip to content

Commit e6ba96f

Browse files
committed
Match multiple modifiers in the parameter name
Fixes #365
1 parent 6fe1b65 commit e6ba96f

File tree

5 files changed

+154
-42
lines changed

5 files changed

+154
-42
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -728,10 +728,13 @@ repository:
728728

729729
parameter-name:
730730
patterns:
731+
- match: \s*\b(public|protected|private|readonly)(?=\s+(public|protected|private|readonly)\s+)
732+
captures:
733+
'1': { name: storage.modifier.ts }
731734
# function assignment |
732735
# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
733736
- match: |-
734-
(?x)(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
737+
(?x)(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
735738
(=\s*(
736739
(async\s+) |
737740
(function\s*[(<]) |
@@ -753,17 +756,15 @@ repository:
753756
)
754757
captures:
755758
'1': { name: storage.modifier.ts }
756-
'2': { name: storage.modifier.ts }
757-
'3': { name: keyword.operator.rest.ts }
758-
'4': { name: entity.name.function.ts }
759-
'5': { name: keyword.operator.optional.ts }
760-
- match: (?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)
759+
'2': { name: keyword.operator.rest.ts }
760+
'3': { name: entity.name.function.ts }
761+
'4': { name: keyword.operator.optional.ts }
762+
- match: (?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)
761763
captures:
762764
'1': { name: storage.modifier.ts }
763-
'2': { name: storage.modifier.ts }
764-
'3': { name: keyword.operator.rest.ts }
765-
'4': { name: variable.parameter.ts }
766-
'5': { name: keyword.operator.optional.ts }
765+
'2': { name: keyword.operator.rest.ts }
766+
'3': { name: variable.parameter.ts }
767+
'4': { name: keyword.operator.optional.ts }
767768

768769
destructuring-parameter:
769770
patterns:

TypeScript.tmLanguage

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2290,7 +2290,19 @@
22902290
<array>
22912291
<dict>
22922292
<key>match</key>
2293-
<string>(?x)(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
2293+
<string>\s*\b(public|protected|private|readonly)(?=\s+(public|protected|private|readonly)\s+)</string>
2294+
<key>captures</key>
2295+
<dict>
2296+
<key>1</key>
2297+
<dict>
2298+
<key>name</key>
2299+
<string>storage.modifier.ts</string>
2300+
</dict>
2301+
</dict>
2302+
</dict>
2303+
<dict>
2304+
<key>match</key>
2305+
<string>(?x)(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
22942306
(=\s*(
22952307
(async\s+) |
22962308
(function\s*[(&lt;]) |
@@ -2318,21 +2330,16 @@
23182330
<string>storage.modifier.ts</string>
23192331
</dict>
23202332
<key>2</key>
2321-
<dict>
2322-
<key>name</key>
2323-
<string>storage.modifier.ts</string>
2324-
</dict>
2325-
<key>3</key>
23262333
<dict>
23272334
<key>name</key>
23282335
<string>keyword.operator.rest.ts</string>
23292336
</dict>
2330-
<key>4</key>
2337+
<key>3</key>
23312338
<dict>
23322339
<key>name</key>
23332340
<string>entity.name.function.ts</string>
23342341
</dict>
2335-
<key>5</key>
2342+
<key>4</key>
23362343
<dict>
23372344
<key>name</key>
23382345
<string>keyword.operator.optional.ts</string>
@@ -2341,7 +2348,7 @@
23412348
</dict>
23422349
<dict>
23432350
<key>match</key>
2344-
<string>(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)</string>
2351+
<string>(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)</string>
23452352
<key>captures</key>
23462353
<dict>
23472354
<key>1</key>
@@ -2350,21 +2357,16 @@
23502357
<string>storage.modifier.ts</string>
23512358
</dict>
23522359
<key>2</key>
2353-
<dict>
2354-
<key>name</key>
2355-
<string>storage.modifier.ts</string>
2356-
</dict>
2357-
<key>3</key>
23582360
<dict>
23592361
<key>name</key>
23602362
<string>keyword.operator.rest.ts</string>
23612363
</dict>
2362-
<key>4</key>
2364+
<key>3</key>
23632365
<dict>
23642366
<key>name</key>
23652367
<string>variable.parameter.ts</string>
23662368
</dict>
2367-
<key>5</key>
2369+
<key>4</key>
23682370
<dict>
23692371
<key>name</key>
23702372
<string>keyword.operator.optional.ts</string>

TypeScriptReact.tmLanguage

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2294,7 +2294,19 @@
22942294
<array>
22952295
<dict>
22962296
<key>match</key>
2297-
<string>(?x)(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
2297+
<string>\s*\b(public|protected|private|readonly)(?=\s+(public|protected|private|readonly)\s+)</string>
2298+
<key>captures</key>
2299+
<dict>
2300+
<key>1</key>
2301+
<dict>
2302+
<key>name</key>
2303+
<string>storage.modifier.tsx</string>
2304+
</dict>
2305+
</dict>
2306+
</dict>
2307+
<dict>
2308+
<key>match</key>
2309+
<string>(?x)(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
22982310
(=\s*(
22992311
(async\s+) |
23002312
(function\s*[(&lt;]) |
@@ -2322,21 +2334,16 @@
23222334
<string>storage.modifier.tsx</string>
23232335
</dict>
23242336
<key>2</key>
2325-
<dict>
2326-
<key>name</key>
2327-
<string>storage.modifier.tsx</string>
2328-
</dict>
2329-
<key>3</key>
23302337
<dict>
23312338
<key>name</key>
23322339
<string>keyword.operator.rest.tsx</string>
23332340
</dict>
2334-
<key>4</key>
2341+
<key>3</key>
23352342
<dict>
23362343
<key>name</key>
23372344
<string>entity.name.function.tsx</string>
23382345
</dict>
2339-
<key>5</key>
2346+
<key>4</key>
23402347
<dict>
23412348
<key>name</key>
23422349
<string>keyword.operator.optional.tsx</string>
@@ -2345,7 +2352,7 @@
23452352
</dict>
23462353
<dict>
23472354
<key>match</key>
2348-
<string>(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)</string>
2355+
<string>(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)</string>
23492356
<key>captures</key>
23502357
<dict>
23512358
<key>1</key>
@@ -2354,21 +2361,16 @@
23542361
<string>storage.modifier.tsx</string>
23552362
</dict>
23562363
<key>2</key>
2357-
<dict>
2358-
<key>name</key>
2359-
<string>storage.modifier.tsx</string>
2360-
</dict>
2361-
<key>3</key>
23622364
<dict>
23632365
<key>name</key>
23642366
<string>keyword.operator.rest.tsx</string>
23652367
</dict>
2366-
<key>4</key>
2368+
<key>3</key>
23672369
<dict>
23682370
<key>name</key>
23692371
<string>variable.parameter.tsx</string>
23702372
</dict>
2371-
<key>5</key>
2373+
<key>4</key>
23722374
<dict>
23732375
<key>name</key>
23742376
<string>keyword.operator.optional.tsx</string>

tests/baselines/Issue365.baseline.txt

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
original file
2+
-----------------------------------
3+
class Renamer {
4+
constructor (private readonly srcName: string, private readonly target: string, readonly copy: boolean = false) {}
5+
}
6+
-----------------------------------
7+
8+
Grammar: TypeScript.tmLanguage
9+
-----------------------------------
10+
>class Renamer {
11+
^^^^^
12+
source.ts meta.class.ts storage.type.class.ts
13+
^
14+
source.ts meta.class.ts
15+
^^^^^^^
16+
source.ts meta.class.ts entity.name.type.class.ts
17+
^
18+
source.ts meta.class.ts
19+
^
20+
source.ts meta.class.ts punctuation.definition.block.ts
21+
^^
22+
source.ts meta.class.ts
23+
> constructor (private readonly srcName: string, private readonly target: string, readonly copy: boolean = false) {}
24+
^^
25+
source.ts meta.class.ts
26+
^^^^^^^^^^^
27+
source.ts meta.class.ts meta.method.declaration.ts storage.type.ts
28+
^
29+
source.ts meta.class.ts meta.method.declaration.ts
30+
^
31+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
32+
^^^^^^^
33+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts storage.modifier.ts
34+
^
35+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
36+
^^^^^^^^
37+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts storage.modifier.ts
38+
^
39+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
40+
^^^^^^^
41+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts variable.parameter.ts
42+
^
43+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
44+
^
45+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
46+
^^^^^^
47+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
48+
^
49+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.separator.parameter.ts
50+
^
51+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
52+
^^^^^^^
53+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts storage.modifier.ts
54+
^
55+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
56+
^^^^^^^^
57+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts storage.modifier.ts
58+
^
59+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
60+
^^^^^^
61+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts variable.parameter.ts
62+
^
63+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
64+
^
65+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
66+
^^^^^^
67+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
68+
^
69+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.separator.parameter.ts
70+
^
71+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
72+
^^^^^^^^
73+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts storage.modifier.ts
74+
^
75+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
76+
^^^^
77+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts variable.parameter.ts
78+
^
79+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
80+
^
81+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
82+
^^^^^^^
83+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
84+
^
85+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
86+
^
87+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts keyword.operator.assignment.ts
88+
^
89+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
90+
^^^^^
91+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts constant.language.boolean.false.ts
92+
^
93+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
94+
^
95+
source.ts meta.class.ts meta.method.declaration.ts
96+
^
97+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
98+
^
99+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
100+
^^
101+
source.ts meta.class.ts
102+
>}
103+
^
104+
source.ts meta.class.ts punctuation.definition.block.ts

tests/cases/Issue365.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Renamer {
2+
constructor (private readonly srcName: string, private readonly target: string, readonly copy: boolean = false) {}
3+
}

0 commit comments

Comments
 (0)