Skip to content

Commit 072bd26

Browse files
committed
Fix the modifier detection for fields and parameters
Fixes #305 and #306
1 parent ca87436 commit 072bd26

File tree

5 files changed

+151
-45
lines changed

5 files changed

+151
-45
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,6 @@ repository:
442442
- include: '#type-annotation'
443443
- include: '#variable-initializer'
444444
- include: '#access-modifier'
445-
- include: '#static-modifier'
446445
- include: '#property-accessor'
447446
- include: '#expression'
448447
- include: '#punctuation-comma'
@@ -515,10 +514,10 @@ repository:
515514

516515
method-overload-declaration:
517516
name: meta.method.overload.declaration.ts
518-
begin: (?<!\.|\$)(?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!\$|:))|(?:(\*)\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[[^\]]*\]))\s*(\??))?\s*[\(\<]))
517+
begin: (?<!\.|\$)(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!\$|:))|(?:(\*)\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[[^\]]*\]))\s*(\??))?\s*[\(\<]))
519518
beginCaptures:
520-
'1': { name: storage.modifier.ts } # captures keyword (abstract)
521-
'2': { name: storage.modifier.ts } # captures keyword (public or private or protected)
519+
'1': { name: storage.modifier.ts } # captures keyword (public or private or protected)
520+
'2': { name: storage.modifier.ts } # captures keyword (abstract)
522521
'3': { name: storage.modifier.async.ts } # captures keyword (async)
523522
'4': { name: storage.type.property.ts } # captures keyword (get|set)
524523
'5': { name: keyword.operator.new.ts } # captures keyword (new)
@@ -621,12 +620,13 @@ repository:
621620
- include: '#object-member'
622621

623622
parameter-name:
624-
match: '(?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)'
623+
match: '(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)'
625624
captures:
626625
'1': { name: storage.modifier.ts }
627-
'2': { name: keyword.operator.rest.ts }
628-
'3': { name: variable.parameter.ts }
629-
'4': { name: keyword.operator.optional.ts }
626+
'2': { name: storage.modifier.ts }
627+
'3': { name: keyword.operator.rest.ts }
628+
'4': { name: variable.parameter.ts }
629+
'5': { name: keyword.operator.optional.ts }
630630

631631
destructuring-parameter:
632632
patterns:
@@ -1713,11 +1713,7 @@ repository:
17131713

17141714
access-modifier:
17151715
name: storage.modifier.ts
1716-
match: (?<!\.|\$)\b(public|protected|private|readonly)\b(?!\$)
1717-
1718-
static-modifier:
1719-
name: storage.modifier.ts
1720-
match: (?<!\.|\$)\b(static)\b(?!\$)
1716+
match: (?<!\.|\$)\b(abstract|public|protected|private|readonly|static)\b(?!\$)
17211717

17221718
property-accessor:
17231719
name: storage.type.property.ts

TypeScript.tmLanguage

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,10 +1455,6 @@
14551455
<key>include</key>
14561456
<string>#access-modifier</string>
14571457
</dict>
1458-
<dict>
1459-
<key>include</key>
1460-
<string>#static-modifier</string>
1461-
</dict>
14621458
<dict>
14631459
<key>include</key>
14641460
<string>#property-accessor</string>
@@ -1702,7 +1698,7 @@
17021698
<key>name</key>
17031699
<string>meta.method.overload.declaration.ts</string>
17041700
<key>begin</key>
1705-
<string>(?&lt;!\.|\$)(?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!\$|:))|(?:(\*)\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[[^\]]*\]))\s*(\??))?\s*[\(\&lt;]))</string>
1701+
<string>(?&lt;!\.|\$)(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!\$|:))|(?:(\*)\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[[^\]]*\]))\s*(\??))?\s*[\(\&lt;]))</string>
17061702
<key>beginCaptures</key>
17071703
<dict>
17081704
<key>1</key>
@@ -2040,7 +2036,7 @@
20402036
<key>parameter-name</key>
20412037
<dict>
20422038
<key>match</key>
2043-
<string>(?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)</string>
2039+
<string>(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)</string>
20442040
<key>captures</key>
20452041
<dict>
20462042
<key>1</key>
@@ -2051,14 +2047,19 @@
20512047
<key>2</key>
20522048
<dict>
20532049
<key>name</key>
2054-
<string>keyword.operator.rest.ts</string>
2050+
<string>storage.modifier.ts</string>
20552051
</dict>
20562052
<key>3</key>
20572053
<dict>
20582054
<key>name</key>
2059-
<string>variable.parameter.ts</string>
2055+
<string>keyword.operator.rest.ts</string>
20602056
</dict>
20612057
<key>4</key>
2058+
<dict>
2059+
<key>name</key>
2060+
<string>variable.parameter.ts</string>
2061+
</dict>
2062+
<key>5</key>
20622063
<dict>
20632064
<key>name</key>
20642065
<string>keyword.operator.optional.ts</string>
@@ -4852,14 +4853,7 @@
48524853
<key>name</key>
48534854
<string>storage.modifier.ts</string>
48544855
<key>match</key>
4855-
<string>(?&lt;!\.|\$)\b(public|protected|private|readonly)\b(?!\$)</string>
4856-
</dict>
4857-
<key>static-modifier</key>
4858-
<dict>
4859-
<key>name</key>
4860-
<string>storage.modifier.ts</string>
4861-
<key>match</key>
4862-
<string>(?&lt;!\.|\$)\b(static)\b(?!\$)</string>
4856+
<string>(?&lt;!\.|\$)\b(abstract|public|protected|private|readonly|static)\b(?!\$)</string>
48634857
</dict>
48644858
<key>property-accessor</key>
48654859
<dict>

TypeScriptReact.tmLanguage

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1459,10 +1459,6 @@
14591459
<key>include</key>
14601460
<string>#access-modifier</string>
14611461
</dict>
1462-
<dict>
1463-
<key>include</key>
1464-
<string>#static-modifier</string>
1465-
</dict>
14661462
<dict>
14671463
<key>include</key>
14681464
<string>#property-accessor</string>
@@ -1706,7 +1702,7 @@
17061702
<key>name</key>
17071703
<string>meta.method.overload.declaration.tsx</string>
17081704
<key>begin</key>
1709-
<string>(?&lt;!\.|\$)(?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!\$|:))|(?:(\*)\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[[^\]]*\]))\s*(\??))?\s*[\(\&lt;]))</string>
1705+
<string>(?&lt;!\.|\$)(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!\$|:))|(?:(\*)\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\'[^']*\')|(\"[^"]*\")|(\[[^\]]*\]))\s*(\??))?\s*[\(\&lt;]))</string>
17101706
<key>beginCaptures</key>
17111707
<dict>
17121708
<key>1</key>
@@ -2044,7 +2040,7 @@
20442040
<key>parameter-name</key>
20452041
<dict>
20462042
<key>match</key>
2047-
<string>(?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)</string>
2043+
<string>(?:\s*\b(readonly)\s+)?(?:\s*\b(public|private|protected)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)</string>
20482044
<key>captures</key>
20492045
<dict>
20502046
<key>1</key>
@@ -2055,14 +2051,19 @@
20552051
<key>2</key>
20562052
<dict>
20572053
<key>name</key>
2058-
<string>keyword.operator.rest.tsx</string>
2054+
<string>storage.modifier.tsx</string>
20592055
</dict>
20602056
<key>3</key>
20612057
<dict>
20622058
<key>name</key>
2063-
<string>variable.parameter.tsx</string>
2059+
<string>keyword.operator.rest.tsx</string>
20642060
</dict>
20652061
<key>4</key>
2062+
<dict>
2063+
<key>name</key>
2064+
<string>variable.parameter.tsx</string>
2065+
</dict>
2066+
<key>5</key>
20662067
<dict>
20672068
<key>name</key>
20682069
<string>keyword.operator.optional.tsx</string>
@@ -4834,14 +4835,7 @@
48344835
<key>name</key>
48354836
<string>storage.modifier.tsx</string>
48364837
<key>match</key>
4837-
<string>(?&lt;!\.|\$)\b(public|protected|private|readonly)\b(?!\$)</string>
4838-
</dict>
4839-
<key>static-modifier</key>
4840-
<dict>
4841-
<key>name</key>
4842-
<string>storage.modifier.tsx</string>
4843-
<key>match</key>
4844-
<string>(?&lt;!\.|\$)\b(static)\b(?!\$)</string>
4838+
<string>(?&lt;!\.|\$)\b(abstract|public|protected|private|readonly|static)\b(?!\$)</string>
48454839
</dict>
48464840
<key>property-accessor</key>
48474841
<dict>

tests/baselines/Issue305.baseline.txt

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
original file
2+
-----------------------------------
3+
abstract class Base {
4+
protected abstract topic: string
5+
constructor(protected wire: Transport, protected token?: string, readonly bar?: boolean) { }
6+
}
7+
-----------------------------------
8+
9+
Grammar: TypeScript.tmLanguage
10+
-----------------------------------
11+
>abstract class Base {
12+
^^^^^^^^
13+
source.ts meta.class.ts storage.modifier.ts
14+
^
15+
source.ts meta.class.ts
16+
^^^^^
17+
source.ts meta.class.ts storage.type.class.ts
18+
^
19+
source.ts meta.class.ts
20+
^^^^
21+
source.ts meta.class.ts entity.name.class.ts
22+
^
23+
source.ts meta.class.ts
24+
^
25+
source.ts meta.class.ts punctuation.definition.block.ts
26+
^^
27+
source.ts meta.class.ts
28+
> protected abstract topic: string
29+
^^^^
30+
source.ts meta.class.ts
31+
^^^^^^^^^
32+
source.ts meta.class.ts storage.modifier.ts
33+
^
34+
source.ts meta.class.ts
35+
^^^^^^^^
36+
source.ts meta.class.ts storage.modifier.ts
37+
^
38+
source.ts meta.class.ts meta.field.declaration.ts
39+
^^^^^
40+
source.ts meta.class.ts meta.field.declaration.ts variable.object.property.ts
41+
^
42+
source.ts meta.class.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
43+
^
44+
source.ts meta.class.ts meta.field.declaration.ts meta.type.annotation.ts
45+
^^^^^^
46+
source.ts meta.class.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
47+
^
48+
source.ts meta.class.ts meta.field.declaration.ts meta.type.annotation.ts
49+
> constructor(protected wire: Transport, protected token?: string, readonly bar?: boolean) { }
50+
^^^^
51+
source.ts meta.class.ts
52+
^^^^^^^^^^^
53+
source.ts meta.class.ts meta.method.declaration.ts storage.type.ts
54+
^
55+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.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 entity.name.type.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 keyword.operator.optional.ts
80+
^
81+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
82+
^
83+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
84+
^^^^^^
85+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
86+
^
87+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.separator.parameter.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 storage.modifier.ts
92+
^
93+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts
94+
^^^
95+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts variable.parameter.ts
96+
^
97+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts keyword.operator.optional.ts
98+
^
99+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
100+
^
101+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
102+
^^^^^^^
103+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
104+
^
105+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
106+
^
107+
source.ts meta.class.ts meta.method.declaration.ts
108+
^
109+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
110+
^
111+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
112+
^
113+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
114+
^^
115+
source.ts meta.class.ts
116+
>}
117+
^
118+
source.ts meta.class.ts punctuation.definition.block.ts

tests/cases/Issue305.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
abstract class Base {
2+
protected abstract topic: string
3+
constructor(protected wire: Transport, protected token?: string, readonly bar?: boolean) { }
4+
}

0 commit comments

Comments
 (0)