Skip to content

Commit 0293b47

Browse files
committed
Match type arguments before the template string
Fixes #822
1 parent 1b41be4 commit 0293b47

File tree

5 files changed

+89
-3
lines changed

5 files changed

+89
-3
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2634,7 +2634,7 @@ repository:
26342634
match: ({{identifier}})
26352635
- include: '#type-arguments'
26362636
- name: string.template.ts
2637-
begin: ({{identifier}})\s*(?=({{typeArguments}}\s*)`)
2637+
begin: ({{identifier}})?\s*(?=({{typeArguments}}\s*)`)
26382638
beginCaptures:
26392639
'1': { name: entity.name.function.tagged-template.ts }
26402640
end: (?=`)

TypeScript.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7952,7 +7952,7 @@
79527952
<key>name</key>
79537953
<string>string.template.ts</string>
79547954
<key>begin</key>
7955-
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)`)</string>
7955+
<string>([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)`)</string>
79567956
<key>beginCaptures</key>
79577957
<dict>
79587958
<key>1</key>

TypeScriptReact.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7900,7 +7900,7 @@
79007900
<key>name</key>
79017901
<string>string.template.tsx</string>
79027902
<key>begin</key>
7903-
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)`)</string>
7903+
<string>([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)`)</string>
79047904
<key>beginCaptures</key>
79057905
<dict>
79067906
<key>1</key>

tests/baselines/Issue822.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+
const ComponentContainer = f({})<Pick<null, "a">>`
4+
`;
5+
6+
const bla = 1;
7+
-----------------------------------
8+
9+
Grammar: TypeScript.tmLanguage
10+
-----------------------------------
11+
>const ComponentContainer = f({})<Pick<null, "a">>`
12+
^^^^^
13+
source.ts meta.var.expr.ts storage.type.ts
14+
^
15+
source.ts meta.var.expr.ts
16+
^^^^^^^^^^^^^^^^^^
17+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
18+
^
19+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
20+
^
21+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
22+
^
23+
source.ts meta.var.expr.ts
24+
^
25+
source.ts meta.var.expr.ts meta.function-call.ts entity.name.function.ts
26+
^
27+
source.ts meta.var.expr.ts meta.brace.round.ts
28+
^
29+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
30+
^
31+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
32+
^
33+
source.ts meta.var.expr.ts meta.brace.round.ts
34+
^
35+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
36+
^^^^
37+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts entity.name.type.ts
38+
^
39+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
40+
^^^^
41+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts meta.type.parameters.ts support.type.builtin.ts
42+
^
43+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.separator.comma.ts
44+
^
45+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts meta.type.parameters.ts
46+
^
47+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.begin.ts
48+
^
49+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.double.ts
50+
^
51+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.end.ts
52+
^
53+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
54+
^
55+
source.ts meta.var.expr.ts string.template.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
56+
^
57+
source.ts meta.var.expr.ts string.template.ts punctuation.definition.string.template.begin.ts
58+
>`;
59+
^
60+
source.ts meta.var.expr.ts string.template.ts punctuation.definition.string.template.end.ts
61+
^
62+
source.ts punctuation.terminator.statement.ts
63+
>
64+
^
65+
source.ts
66+
>const bla = 1;
67+
^^^^^
68+
source.ts meta.var.expr.ts storage.type.ts
69+
^
70+
source.ts meta.var.expr.ts
71+
^^^
72+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
73+
^
74+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
75+
^
76+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
77+
^
78+
source.ts meta.var.expr.ts
79+
^
80+
source.ts meta.var.expr.ts constant.numeric.decimal.ts
81+
^
82+
source.ts punctuation.terminator.statement.ts

tests/cases/Issue822.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const ComponentContainer = f({})<Pick<null, "a">>`
2+
`;
3+
4+
const bla = 1;

0 commit comments

Comments
 (0)