Skip to content

Commit 3c90f24

Browse files
committed
Handle field declaration without type or assignment
Fixes #643
1 parent 69d78f0 commit 3c90f24

8 files changed

+208
-167
lines changed

TypeScript.YAML-tmLanguage

+18-21
Original file line numberDiff line numberDiff line change
@@ -586,31 +586,28 @@ repository:
586586

587587
field-declaration:
588588
name: meta.field.declaration.ts
589-
begin: (?x)(?<!\()(?:{{startOfIdentifier}}(readonly)\s+)?(?=\s*{{propertyName}}\s*(\?\s*)?(=|:))
589+
begin: (?x)(?<!\()(?:{{startOfIdentifier}}(readonly)\s+)?(?=\s*{{propertyName}}\s*(\?\s*)?(=|:|;|$))
590590
beginCaptures:
591591
'1': { name: storage.modifier.ts }
592-
end: (?x)(?=\}|;|,|$|(^(?!\s*{{propertyName}}\s*(\?\s*)?(=|:))))|(?<=\})
592+
end: (?x)(?=\}|;|,|$|(^(?!\s*{{propertyName}}\s*(\?\s*)?(=|:|;|$))))|(?<=\})
593593
patterns:
594594
- include: '#variable-initializer'
595-
- begin: (?x)(?={{propertyName}}\s*(\?\s*)?(=|:))
596-
end: (?x)(?=[};,=]|$|(^(?!\s*{{propertyName}}\s*(\?\s*)?(=|:))))|(?<=\})
597-
patterns:
598-
- include: '#type-annotation'
599-
- include: '#string'
600-
- include: '#array-literal'
601-
- include: '#numeric-literal'
602-
- include: '#comment'
603-
# function assignment |
604-
# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
605-
- match: |-
606-
(?x)({{identifier}})(\?)?(?=(\?\s*)?{{functionLikeAssignmentOrType}})
607-
captures:
608-
'1': { name: meta.definition.property.ts entity.name.function.ts }
609-
'2': { name: keyword.operator.optional.ts }
610-
- name: meta.definition.property.ts variable.object.property.ts
611-
match: '{{identifier}}'
612-
- name: keyword.operator.optional.ts
613-
match: \?
595+
- include: '#type-annotation'
596+
- include: '#string'
597+
- include: '#array-literal'
598+
- include: '#numeric-literal'
599+
- include: '#comment'
600+
# function assignment |
601+
# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
602+
- match: |-
603+
(?x)({{identifier}})(\?)?(?=(\?\s*)?{{functionLikeAssignmentOrType}})
604+
captures:
605+
'1': { name: meta.definition.property.ts entity.name.function.ts }
606+
'2': { name: keyword.operator.optional.ts }
607+
- name: meta.definition.property.ts variable.object.property.ts
608+
match: '{{identifier}}'
609+
- name: keyword.operator.optional.ts
610+
match: \?
614611

615612
variable-initializer:
616613
patterns:

TypeScript.tmLanguage

+42-69
Original file line numberDiff line numberDiff line change
@@ -1783,7 +1783,7 @@
17831783
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
17841784
(?:\B(\.)[0-9][0-9_]*\b)| # .1
17851785
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1786-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))</string>
1786+
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:|;|$))</string>
17871787
<key>beginCaptures</key>
17881788
<dict>
17891789
<key>1</key>
@@ -1802,61 +1802,36 @@
18021802
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
18031803
(?:\B(\.)[0-9][0-9_]*\b)| # .1
18041804
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1805-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))))|(?&lt;=\})</string>
1805+
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:|;|$))))|(?&lt;=\})</string>
18061806
<key>patterns</key>
18071807
<array>
18081808
<dict>
18091809
<key>include</key>
18101810
<string>#variable-initializer</string>
18111811
</dict>
18121812
<dict>
1813-
<key>begin</key>
1814-
<string>(?x)(?=((\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;!\$)(?:
1815-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1816-
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1817-
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1818-
(?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1819-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1820-
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
1821-
(?:\B(\.)[0-9][0-9_]*\b)| # .1
1822-
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1823-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))</string>
1824-
<key>end</key>
1825-
<string>(?x)(?=[};,=]|$|(^(?!\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;!\$)(?:
1826-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1827-
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1828-
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1829-
(?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1830-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1831-
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
1832-
(?:\B(\.)[0-9][0-9_]*\b)| # .1
1833-
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1834-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))))|(?&lt;=\})</string>
1835-
<key>patterns</key>
1836-
<array>
1837-
<dict>
1838-
<key>include</key>
1839-
<string>#type-annotation</string>
1840-
</dict>
1841-
<dict>
1842-
<key>include</key>
1843-
<string>#string</string>
1844-
</dict>
1845-
<dict>
1846-
<key>include</key>
1847-
<string>#array-literal</string>
1848-
</dict>
1849-
<dict>
1850-
<key>include</key>
1851-
<string>#numeric-literal</string>
1852-
</dict>
1853-
<dict>
1854-
<key>include</key>
1855-
<string>#comment</string>
1856-
</dict>
1857-
<dict>
1858-
<key>match</key>
1859-
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\?)?(?=(\?\s*)?\s*
1813+
<key>include</key>
1814+
<string>#type-annotation</string>
1815+
</dict>
1816+
<dict>
1817+
<key>include</key>
1818+
<string>#string</string>
1819+
</dict>
1820+
<dict>
1821+
<key>include</key>
1822+
<string>#array-literal</string>
1823+
</dict>
1824+
<dict>
1825+
<key>include</key>
1826+
<string>#numeric-literal</string>
1827+
</dict>
1828+
<dict>
1829+
<key>include</key>
1830+
<string>#comment</string>
1831+
</dict>
1832+
<dict>
1833+
<key>match</key>
1834+
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\?)?(?=(\?\s*)?\s*
18601835
# function assignment |
18611836
(=\s*(
18621837
((async\s+)?(
@@ -1929,33 +1904,31 @@
19291904
)
19301905
))
19311906
)))</string>
1932-
<key>captures</key>
1933-
<dict>
1934-
<key>1</key>
1935-
<dict>
1936-
<key>name</key>
1937-
<string>meta.definition.property.ts entity.name.function.ts</string>
1938-
</dict>
1939-
<key>2</key>
1940-
<dict>
1941-
<key>name</key>
1942-
<string>keyword.operator.optional.ts</string>
1943-
</dict>
1944-
</dict>
1945-
</dict>
1907+
<key>captures</key>
1908+
<dict>
1909+
<key>1</key>
19461910
<dict>
19471911
<key>name</key>
1948-
<string>meta.definition.property.ts variable.object.property.ts</string>
1949-
<key>match</key>
1950-
<string>[_$[:alpha:]][_$[:alnum:]]*</string>
1912+
<string>meta.definition.property.ts entity.name.function.ts</string>
19511913
</dict>
1914+
<key>2</key>
19521915
<dict>
19531916
<key>name</key>
19541917
<string>keyword.operator.optional.ts</string>
1955-
<key>match</key>
1956-
<string>\?</string>
19571918
</dict>
1958-
</array>
1919+
</dict>
1920+
</dict>
1921+
<dict>
1922+
<key>name</key>
1923+
<string>meta.definition.property.ts variable.object.property.ts</string>
1924+
<key>match</key>
1925+
<string>[_$[:alpha:]][_$[:alnum:]]*</string>
1926+
</dict>
1927+
<dict>
1928+
<key>name</key>
1929+
<string>keyword.operator.optional.ts</string>
1930+
<key>match</key>
1931+
<string>\?</string>
19591932
</dict>
19601933
</array>
19611934
</dict>

TypeScriptReact.tmLanguage

+42-69
Original file line numberDiff line numberDiff line change
@@ -1787,7 +1787,7 @@
17871787
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
17881788
(?:\B(\.)[0-9][0-9_]*\b)| # .1
17891789
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1790-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))</string>
1790+
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:|;|$))</string>
17911791
<key>beginCaptures</key>
17921792
<dict>
17931793
<key>1</key>
@@ -1806,61 +1806,36 @@
18061806
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
18071807
(?:\B(\.)[0-9][0-9_]*\b)| # .1
18081808
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1809-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))))|(?&lt;=\})</string>
1809+
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:|;|$))))|(?&lt;=\})</string>
18101810
<key>patterns</key>
18111811
<array>
18121812
<dict>
18131813
<key>include</key>
18141814
<string>#variable-initializer</string>
18151815
</dict>
18161816
<dict>
1817-
<key>begin</key>
1818-
<string>(?x)(?=((\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;!\$)(?:
1819-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1820-
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1821-
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1822-
(?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1823-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1824-
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
1825-
(?:\B(\.)[0-9][0-9_]*\b)| # .1
1826-
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1827-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))</string>
1828-
<key>end</key>
1829-
<string>(?x)(?=[};,=]|$|(^(?!\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;!\$)(?:
1830-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1831-
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1832-
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1833-
(?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1834-
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1835-
(?:\b[0-9][0-9_]*(\.)\B)| # 1.
1836-
(?:\B(\.)[0-9][0-9_]*\b)| # .1
1837-
(?:\b[0-9][0-9_]*\b(?!\.)) # 1
1838-
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))))|(?&lt;=\})</string>
1839-
<key>patterns</key>
1840-
<array>
1841-
<dict>
1842-
<key>include</key>
1843-
<string>#type-annotation</string>
1844-
</dict>
1845-
<dict>
1846-
<key>include</key>
1847-
<string>#string</string>
1848-
</dict>
1849-
<dict>
1850-
<key>include</key>
1851-
<string>#array-literal</string>
1852-
</dict>
1853-
<dict>
1854-
<key>include</key>
1855-
<string>#numeric-literal</string>
1856-
</dict>
1857-
<dict>
1858-
<key>include</key>
1859-
<string>#comment</string>
1860-
</dict>
1861-
<dict>
1862-
<key>match</key>
1863-
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\?)?(?=(\?\s*)?\s*
1817+
<key>include</key>
1818+
<string>#type-annotation</string>
1819+
</dict>
1820+
<dict>
1821+
<key>include</key>
1822+
<string>#string</string>
1823+
</dict>
1824+
<dict>
1825+
<key>include</key>
1826+
<string>#array-literal</string>
1827+
</dict>
1828+
<dict>
1829+
<key>include</key>
1830+
<string>#numeric-literal</string>
1831+
</dict>
1832+
<dict>
1833+
<key>include</key>
1834+
<string>#comment</string>
1835+
</dict>
1836+
<dict>
1837+
<key>match</key>
1838+
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\?)?(?=(\?\s*)?\s*
18641839
# function assignment |
18651840
(=\s*(
18661841
((async\s+)?(
@@ -1933,33 +1908,31 @@
19331908
)
19341909
))
19351910
)))</string>
1936-
<key>captures</key>
1937-
<dict>
1938-
<key>1</key>
1939-
<dict>
1940-
<key>name</key>
1941-
<string>meta.definition.property.tsx entity.name.function.tsx</string>
1942-
</dict>
1943-
<key>2</key>
1944-
<dict>
1945-
<key>name</key>
1946-
<string>keyword.operator.optional.tsx</string>
1947-
</dict>
1948-
</dict>
1949-
</dict>
1911+
<key>captures</key>
1912+
<dict>
1913+
<key>1</key>
19501914
<dict>
19511915
<key>name</key>
1952-
<string>meta.definition.property.tsx variable.object.property.tsx</string>
1953-
<key>match</key>
1954-
<string>[_$[:alpha:]][_$[:alnum:]]*</string>
1916+
<string>meta.definition.property.tsx entity.name.function.tsx</string>
19551917
</dict>
1918+
<key>2</key>
19561919
<dict>
19571920
<key>name</key>
19581921
<string>keyword.operator.optional.tsx</string>
1959-
<key>match</key>
1960-
<string>\?</string>
19611922
</dict>
1962-
</array>
1923+
</dict>
1924+
</dict>
1925+
<dict>
1926+
<key>name</key>
1927+
<string>meta.definition.property.tsx variable.object.property.tsx</string>
1928+
<key>match</key>
1929+
<string>[_$[:alpha:]][_$[:alnum:]]*</string>
1930+
</dict>
1931+
<dict>
1932+
<key>name</key>
1933+
<string>keyword.operator.optional.tsx</string>
1934+
<key>match</key>
1935+
<string>\?</string>
19631936
</dict>
19641937
</array>
19651938
</dict>

tests/baselines/Issue642.baseline.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ Grammar: TypeScript.tmLanguage
3434
^
3535
source.ts meta.class.ts
3636
^^^^^^^^
37-
source.ts meta.class.ts storage.modifier.ts
37+
source.ts meta.class.ts meta.field.declaration.ts storage.modifier.ts
3838
^
39-
source.ts meta.class.ts
39+
source.ts meta.class.ts meta.field.declaration.ts
4040
^^^^^
41-
source.ts meta.class.ts variable.other.readwrite.ts
41+
source.ts meta.class.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
4242
^
4343
source.ts meta.class.ts punctuation.terminator.statement.ts
4444
>}

0 commit comments

Comments
 (0)