Skip to content

Commit ee1eb6f

Browse files
committed
Fix the optional new property
Fixes #605
1 parent 9cb5c7c commit ee1eb6f

File tree

5 files changed

+202
-46
lines changed

5 files changed

+202
-46
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -527,29 +527,40 @@ repository:
527527

528528
method-declaration:
529529
patterns:
530-
# method, accessor
530+
# constructor signature
531531
- name: meta.method.declaration.ts
532-
begin: '(?x){{startOfIdentifier}}(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)(?:(\*)\s*)?(?=({{propertyName}}\s*(\??))\s*[\(\<])'
532+
begin: '(?x){{startOfIdentifier}}(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\b(constructor)\b(?!:){{endOfIdentifier}}'
533533
beginCaptures:
534534
'1': { name: storage.modifier.ts } # captures keyword (public or private or protected)
535535
'2': { name: storage.modifier.ts } # captures keyword (abstract)
536536
'3': { name: storage.modifier.async.ts } # captures keyword (async)
537-
'4': { name: storage.type.property.ts } # captures keyword (get|set)
538-
'5': { name: keyword.generator.asterisk.ts } # captures keyword (*)
537+
'4': { name: storage.type.ts } # captures keyword (constructor)
539538
end: (?=\}|;|,|$)|(?<=\})
540539
patterns:
541540
- include: '#method-declaration-name'
542541
- include: '#function-body'
543-
# new, constructor or call signature
542+
# new or call signature
544543
- name: meta.method.declaration.ts
545-
begin: '(?x){{startOfIdentifier}}(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!:){{endOfIdentifier}})|(?:(\*)\s*)?(?=({{propertyName}}\s*(\??))?\s*[\(\<]))'
544+
begin: '(?x){{startOfIdentifier}}(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\b(new)\b(?!:){{endOfIdentifier}})|(?:(\*)\s*)?)(?=\s*[\(\<])'
546545
beginCaptures:
547546
'1': { name: storage.modifier.ts } # captures keyword (public or private or protected)
548547
'2': { name: storage.modifier.ts } # captures keyword (abstract)
549548
'3': { name: storage.modifier.async.ts } # captures keyword (async)
550549
'4': { name: keyword.operator.new.ts } # captures keyword (new)
551-
'5': { name: storage.type.ts } # captures keyword (constructor)
552-
'6': { name: keyword.generator.asterisk.ts } # captures keyword (*)
550+
'5': { name: keyword.generator.asterisk.ts } # captures keyword (*)
551+
end: (?=\}|;|,|$)|(?<=\})
552+
patterns:
553+
- include: '#method-declaration-name'
554+
- include: '#function-body'
555+
# method, accessor
556+
- name: meta.method.declaration.ts
557+
begin: '(?x){{startOfIdentifier}}(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=({{propertyName}}\s*(\??))\s*[\(\<])'
558+
beginCaptures:
559+
'1': { name: storage.modifier.ts } # captures keyword (public or private or protected)
560+
'2': { name: storage.modifier.ts } # captures keyword (abstract)
561+
'3': { name: storage.modifier.async.ts } # captures keyword (async)
562+
'4': { name: storage.type.property.ts } # captures keyword (get|set)
563+
'5': { name: keyword.generator.asterisk.ts } # captures keyword (*)
553564
end: (?=\}|;|,|$)|(?<=\})
554565
patterns:
555566
- include: '#method-declaration-name'

TypeScript.tmLanguage

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1606,16 +1606,7 @@
16061606
<key>name</key>
16071607
<string>meta.method.declaration.ts</string>
16081608
<key>begin</key>
1609-
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)(?:(\*)\s*)?(?=(((\b(?&lt;!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?&lt;!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?&lt;!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?&lt;!\$)(?:
1610-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1611-
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1612-
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1613-
(?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1614-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1615-
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
1616-
(?:\B(\.)[0-9][0-9_]*\b)| # .1
1617-
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1618-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\&lt;])</string>
1609+
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
16191610
<key>beginCaptures</key>
16201611
<dict>
16211612
<key>1</key>
@@ -1636,7 +1627,49 @@
16361627
<key>4</key>
16371628
<dict>
16381629
<key>name</key>
1639-
<string>storage.type.property.ts</string>
1630+
<string>storage.type.ts</string>
1631+
</dict>
1632+
</dict>
1633+
<key>end</key>
1634+
<string>(?=\}|;|,|$)|(?&lt;=\})</string>
1635+
<key>patterns</key>
1636+
<array>
1637+
<dict>
1638+
<key>include</key>
1639+
<string>#method-declaration-name</string>
1640+
</dict>
1641+
<dict>
1642+
<key>include</key>
1643+
<string>#function-body</string>
1644+
</dict>
1645+
</array>
1646+
</dict>
1647+
<dict>
1648+
<key>name</key>
1649+
<string>meta.method.declaration.ts</string>
1650+
<key>begin</key>
1651+
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*[\(\&lt;])</string>
1652+
<key>beginCaptures</key>
1653+
<dict>
1654+
<key>1</key>
1655+
<dict>
1656+
<key>name</key>
1657+
<string>storage.modifier.ts</string>
1658+
</dict>
1659+
<key>2</key>
1660+
<dict>
1661+
<key>name</key>
1662+
<string>storage.modifier.ts</string>
1663+
</dict>
1664+
<key>3</key>
1665+
<dict>
1666+
<key>name</key>
1667+
<string>storage.modifier.async.ts</string>
1668+
</dict>
1669+
<key>4</key>
1670+
<dict>
1671+
<key>name</key>
1672+
<string>keyword.operator.new.ts</string>
16401673
</dict>
16411674
<key>5</key>
16421675
<dict>
@@ -1662,7 +1695,7 @@
16621695
<key>name</key>
16631696
<string>meta.method.declaration.ts</string>
16641697
<key>begin</key>
1665-
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?(?=(((\b(?&lt;!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?&lt;!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?&lt;!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?&lt;!\$)(?:
1698+
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=(((\b(?&lt;!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?&lt;!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?&lt;!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?&lt;!\$)(?:
16661699
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
16671700
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
16681701
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
@@ -1671,7 +1704,7 @@
16711704
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
16721705
(?:\B(\.)[0-9][0-9_]*\b)| # .1
16731706
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1674-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))?\s*[\(\&lt;]))</string>
1707+
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\&lt;])</string>
16751708
<key>beginCaptures</key>
16761709
<dict>
16771710
<key>1</key>
@@ -1692,14 +1725,9 @@
16921725
<key>4</key>
16931726
<dict>
16941727
<key>name</key>
1695-
<string>keyword.operator.new.ts</string>
1728+
<string>storage.type.property.ts</string>
16961729
</dict>
16971730
<key>5</key>
1698-
<dict>
1699-
<key>name</key>
1700-
<string>storage.type.ts</string>
1701-
</dict>
1702-
<key>6</key>
17031731
<dict>
17041732
<key>name</key>
17051733
<string>keyword.generator.asterisk.ts</string>

TypeScriptReact.tmLanguage

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,16 +1610,7 @@
16101610
<key>name</key>
16111611
<string>meta.method.declaration.tsx</string>
16121612
<key>begin</key>
1613-
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)(?:(\*)\s*)?(?=(((\b(?&lt;!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?&lt;!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?&lt;!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?&lt;!\$)(?:
1614-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1615-
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1616-
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1617-
(?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1618-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1619-
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
1620-
(?:\B(\.)[0-9][0-9_]*\b)| # .1
1621-
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1622-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\&lt;])</string>
1613+
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
16231614
<key>beginCaptures</key>
16241615
<dict>
16251616
<key>1</key>
@@ -1640,7 +1631,49 @@
16401631
<key>4</key>
16411632
<dict>
16421633
<key>name</key>
1643-
<string>storage.type.property.tsx</string>
1634+
<string>storage.type.tsx</string>
1635+
</dict>
1636+
</dict>
1637+
<key>end</key>
1638+
<string>(?=\}|;|,|$)|(?&lt;=\})</string>
1639+
<key>patterns</key>
1640+
<array>
1641+
<dict>
1642+
<key>include</key>
1643+
<string>#method-declaration-name</string>
1644+
</dict>
1645+
<dict>
1646+
<key>include</key>
1647+
<string>#function-body</string>
1648+
</dict>
1649+
</array>
1650+
</dict>
1651+
<dict>
1652+
<key>name</key>
1653+
<string>meta.method.declaration.tsx</string>
1654+
<key>begin</key>
1655+
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*[\(\&lt;])</string>
1656+
<key>beginCaptures</key>
1657+
<dict>
1658+
<key>1</key>
1659+
<dict>
1660+
<key>name</key>
1661+
<string>storage.modifier.tsx</string>
1662+
</dict>
1663+
<key>2</key>
1664+
<dict>
1665+
<key>name</key>
1666+
<string>storage.modifier.tsx</string>
1667+
</dict>
1668+
<key>3</key>
1669+
<dict>
1670+
<key>name</key>
1671+
<string>storage.modifier.async.tsx</string>
1672+
</dict>
1673+
<key>4</key>
1674+
<dict>
1675+
<key>name</key>
1676+
<string>keyword.operator.new.tsx</string>
16441677
</dict>
16451678
<key>5</key>
16461679
<dict>
@@ -1666,7 +1699,7 @@
16661699
<key>name</key>
16671700
<string>meta.method.declaration.tsx</string>
16681701
<key>begin</key>
1669-
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\b(?:(new)|(constructor))\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?(?=(((\b(?&lt;!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?&lt;!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?&lt;!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?&lt;!\$)(?:
1702+
<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=(((\b(?&lt;!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?&lt;!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?&lt;!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?&lt;!\$)(?:
16701703
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
16711704
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
16721705
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
@@ -1675,7 +1708,7 @@
16751708
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
16761709
(?:\B(\.)[0-9][0-9_]*\b)| # .1
16771710
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1678-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))?\s*[\(\&lt;]))</string>
1711+
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\&lt;])</string>
16791712
<key>beginCaptures</key>
16801713
<dict>
16811714
<key>1</key>
@@ -1696,14 +1729,9 @@
16961729
<key>4</key>
16971730
<dict>
16981731
<key>name</key>
1699-
<string>keyword.operator.new.tsx</string>
1732+
<string>storage.type.property.tsx</string>
17001733
</dict>
17011734
<key>5</key>
1702-
<dict>
1703-
<key>name</key>
1704-
<string>storage.type.tsx</string>
1705-
</dict>
1706-
<key>6</key>
17071735
<dict>
17081736
<key>name</key>
17091737
<string>keyword.generator.asterisk.tsx</string>

tests/baselines/Issue605.baseline.txt

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
original file
2+
-----------------------------------
3+
interface Foo {
4+
new: number;
5+
}
6+
7+
interface Foo2 {
8+
new?: number;
9+
}
10+
-----------------------------------
11+
12+
Grammar: TypeScript.tmLanguage
13+
-----------------------------------
14+
>interface Foo {
15+
^^^^^^^^^
16+
source.ts meta.interface.ts storage.type.interface.ts
17+
^
18+
source.ts meta.interface.ts
19+
^^^
20+
source.ts meta.interface.ts entity.name.type.interface.ts
21+
^
22+
source.ts meta.interface.ts
23+
^
24+
source.ts meta.interface.ts punctuation.definition.block.ts
25+
^^
26+
source.ts meta.interface.ts
27+
> new: number;
28+
^^^^
29+
source.ts meta.interface.ts
30+
^^^
31+
source.ts meta.interface.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
32+
^
33+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
34+
^
35+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts
36+
^^^^^^
37+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
38+
^
39+
source.ts meta.interface.ts punctuation.terminator.statement.ts
40+
^^
41+
source.ts meta.interface.ts
42+
>}
43+
^
44+
source.ts meta.interface.ts punctuation.definition.block.ts
45+
^^
46+
source.ts
47+
>
48+
^^
49+
source.ts
50+
>interface Foo2 {
51+
^^^^^^^^^
52+
source.ts meta.interface.ts storage.type.interface.ts
53+
^
54+
source.ts meta.interface.ts
55+
^^^^
56+
source.ts meta.interface.ts entity.name.type.interface.ts
57+
^
58+
source.ts meta.interface.ts
59+
^
60+
source.ts meta.interface.ts punctuation.definition.block.ts
61+
^^
62+
source.ts meta.interface.ts
63+
> new?: number;
64+
^^^^
65+
source.ts meta.interface.ts
66+
^^^
67+
source.ts meta.interface.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
68+
^
69+
source.ts meta.interface.ts meta.field.declaration.ts keyword.operator.optional.ts
70+
^
71+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
72+
^
73+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts
74+
^^^^^^
75+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
76+
^
77+
source.ts meta.interface.ts punctuation.terminator.statement.ts
78+
^^
79+
source.ts meta.interface.ts
80+
>}
81+
^
82+
source.ts meta.interface.ts punctuation.definition.block.ts

tests/cases/Issue605.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
interface Foo {
2+
new: number;
3+
}
4+
5+
interface Foo2 {
6+
new?: number;
7+
}

0 commit comments

Comments
 (0)