Skip to content

Commit 6985226

Browse files
committed
Fix matching of method template tags
Fixes #727
1 parent cce0e00 commit 6985226

File tree

5 files changed

+166
-44
lines changed

5 files changed

+166
-44
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,12 +1429,7 @@ repository:
14291429
begin: (?=(({{identifier}}\s*{{propertyAccessPreIdentifier}})*|({{propertyAccessPreIdentifier}})?)({{identifier}}))
14301430
end: (?={{functionCallLookup}})
14311431
patterns:
1432-
- include: '#literal'
1433-
- include: '#support-objects'
1434-
- include: '#object-identifiers'
1435-
- include: '#punctuation-accessor'
1436-
- name: keyword.operator.expression.import.ts
1437-
match: (?:{{startOfIdentifier}}import(?=\s*[\(]\s*[\"\'\`]))
1432+
- include: '#support-function-call-identifiers'
14381433
- name: entity.name.function.ts
14391434
match: ({{identifier}})
14401435
- include: '#comment'
@@ -1443,6 +1438,15 @@ repository:
14431438
- include: '#type-arguments'
14441439
- include: '#paren-expression'
14451440

1441+
support-function-call-identifiers:
1442+
patterns:
1443+
- include: '#literal'
1444+
- include: '#support-objects'
1445+
- include: '#object-identifiers'
1446+
- include: '#punctuation-accessor'
1447+
- name: keyword.operator.expression.import.ts
1448+
match: (?:{{startOfIdentifier}}import(?=\s*[\(]\s*[\"\'\`]))
1449+
14461450
new-expr:
14471451
name: new.expr.ts
14481452
begin: '{{startOfIdentifier}}(new){{endOfIdentifier}}'
@@ -2514,6 +2518,17 @@ repository:
25142518

25152519
template:
25162520
patterns:
2521+
- name: string.template.ts
2522+
begin: (?=(({{identifier}}\s*{{propertyAccessPreIdentifier}})*|({{propertyAccessPreIdentifier}})?)({{identifier}})({{typeArguments}}\s*)?`)
2523+
end: (?=`)
2524+
patterns:
2525+
- begin: (?=(({{identifier}}\s*{{propertyAccessPreIdentifier}})*|({{propertyAccessPreIdentifier}})?)({{identifier}}))
2526+
end: (?=({{typeArguments}}\s*)?`)
2527+
patterns:
2528+
- include: '#support-function-call-identifiers'
2529+
- name: entity.name.function.tagged-template.ts
2530+
match: ({{identifier}})
2531+
- include: '#type-arguments'
25172532
- name: string.template.ts
25182533
begin: ({{identifier}})\s*(?=({{typeArguments}}\s*)`)
25192534
beginCaptures:

TypeScript.tmLanguage

Lines changed: 63 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4639,25 +4639,7 @@
46394639
<array>
46404640
<dict>
46414641
<key>include</key>
4642-
<string>#literal</string>
4643-
</dict>
4644-
<dict>
4645-
<key>include</key>
4646-
<string>#support-objects</string>
4647-
</dict>
4648-
<dict>
4649-
<key>include</key>
4650-
<string>#object-identifiers</string>
4651-
</dict>
4652-
<dict>
4653-
<key>include</key>
4654-
<string>#punctuation-accessor</string>
4655-
</dict>
4656-
<dict>
4657-
<key>name</key>
4658-
<string>keyword.operator.expression.import.ts</string>
4659-
<key>match</key>
4660-
<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*[\(]\s*[\"\'\`]))</string>
4642+
<string>#support-function-call-identifiers</string>
46614643
</dict>
46624644
<dict>
46634645
<key>name</key>
@@ -4687,6 +4669,34 @@
46874669
</dict>
46884670
</array>
46894671
</dict>
4672+
<key>support-function-call-identifiers</key>
4673+
<dict>
4674+
<key>patterns</key>
4675+
<array>
4676+
<dict>
4677+
<key>include</key>
4678+
<string>#literal</string>
4679+
</dict>
4680+
<dict>
4681+
<key>include</key>
4682+
<string>#support-objects</string>
4683+
</dict>
4684+
<dict>
4685+
<key>include</key>
4686+
<string>#object-identifiers</string>
4687+
</dict>
4688+
<dict>
4689+
<key>include</key>
4690+
<string>#punctuation-accessor</string>
4691+
</dict>
4692+
<dict>
4693+
<key>name</key>
4694+
<string>keyword.operator.expression.import.ts</string>
4695+
<key>match</key>
4696+
<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*[\(]\s*[\"\'\`]))</string>
4697+
</dict>
4698+
</array>
4699+
</dict>
46904700
<key>new-expr</key>
46914701
<dict>
46924702
<key>name</key>
@@ -7595,6 +7605,40 @@
75957605
<dict>
75967606
<key>patterns</key>
75977607
<array>
7608+
<dict>
7609+
<key>name</key>
7610+
<string>string.template.ts</string>
7611+
<key>begin</key>
7612+
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
7613+
<key>end</key>
7614+
<string>(?=`)</string>
7615+
<key>patterns</key>
7616+
<array>
7617+
<dict>
7618+
<key>begin</key>
7619+
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
7620+
<key>end</key>
7621+
<string>(?=(&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
7622+
<key>patterns</key>
7623+
<array>
7624+
<dict>
7625+
<key>include</key>
7626+
<string>#support-function-call-identifiers</string>
7627+
</dict>
7628+
<dict>
7629+
<key>name</key>
7630+
<string>entity.name.function.tagged-template.ts</string>
7631+
<key>match</key>
7632+
<string>([_$[:alpha:]][_$[:alnum:]]*)</string>
7633+
</dict>
7634+
</array>
7635+
</dict>
7636+
<dict>
7637+
<key>include</key>
7638+
<string>#type-arguments</string>
7639+
</dict>
7640+
</array>
7641+
</dict>
75987642
<dict>
75997643
<key>name</key>
76007644
<string>string.template.ts</string>

TypeScriptReact.tmLanguage

Lines changed: 63 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4643,25 +4643,7 @@
46434643
<array>
46444644
<dict>
46454645
<key>include</key>
4646-
<string>#literal</string>
4647-
</dict>
4648-
<dict>
4649-
<key>include</key>
4650-
<string>#support-objects</string>
4651-
</dict>
4652-
<dict>
4653-
<key>include</key>
4654-
<string>#object-identifiers</string>
4655-
</dict>
4656-
<dict>
4657-
<key>include</key>
4658-
<string>#punctuation-accessor</string>
4659-
</dict>
4660-
<dict>
4661-
<key>name</key>
4662-
<string>keyword.operator.expression.import.tsx</string>
4663-
<key>match</key>
4664-
<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*[\(]\s*[\"\'\`]))</string>
4646+
<string>#support-function-call-identifiers</string>
46654647
</dict>
46664648
<dict>
46674649
<key>name</key>
@@ -4691,6 +4673,34 @@
46914673
</dict>
46924674
</array>
46934675
</dict>
4676+
<key>support-function-call-identifiers</key>
4677+
<dict>
4678+
<key>patterns</key>
4679+
<array>
4680+
<dict>
4681+
<key>include</key>
4682+
<string>#literal</string>
4683+
</dict>
4684+
<dict>
4685+
<key>include</key>
4686+
<string>#support-objects</string>
4687+
</dict>
4688+
<dict>
4689+
<key>include</key>
4690+
<string>#object-identifiers</string>
4691+
</dict>
4692+
<dict>
4693+
<key>include</key>
4694+
<string>#punctuation-accessor</string>
4695+
</dict>
4696+
<dict>
4697+
<key>name</key>
4698+
<string>keyword.operator.expression.import.tsx</string>
4699+
<key>match</key>
4700+
<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*[\(]\s*[\"\'\`]))</string>
4701+
</dict>
4702+
</array>
4703+
</dict>
46944704
<key>new-expr</key>
46954705
<dict>
46964706
<key>name</key>
@@ -7517,6 +7527,40 @@
75177527
<dict>
75187528
<key>patterns</key>
75197529
<array>
7530+
<dict>
7531+
<key>name</key>
7532+
<string>string.template.tsx</string>
7533+
<key>begin</key>
7534+
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
7535+
<key>end</key>
7536+
<string>(?=`)</string>
7537+
<key>patterns</key>
7538+
<array>
7539+
<dict>
7540+
<key>begin</key>
7541+
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
7542+
<key>end</key>
7543+
<string>(?=(&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
7544+
<key>patterns</key>
7545+
<array>
7546+
<dict>
7547+
<key>include</key>
7548+
<string>#support-function-call-identifiers</string>
7549+
</dict>
7550+
<dict>
7551+
<key>name</key>
7552+
<string>entity.name.function.tagged-template.tsx</string>
7553+
<key>match</key>
7554+
<string>([_$[:alpha:]][_$[:alnum:]]*)</string>
7555+
</dict>
7556+
</array>
7557+
</dict>
7558+
<dict>
7559+
<key>include</key>
7560+
<string>#type-arguments</string>
7561+
</dict>
7562+
</array>
7563+
</dict>
75207564
<dict>
75217565
<key>name</key>
75227566
<string>string.template.tsx</string>

tests/baselines/Issue727.baseline.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
original file
2+
-----------------------------------
3+
styled.div``
4+
-----------------------------------
5+
6+
Grammar: TypeScript.tmLanguage
7+
-----------------------------------
8+
>styled.div``
9+
^^^^^^
10+
source.ts string.template.ts variable.other.object.ts
11+
^
12+
source.ts string.template.ts punctuation.accessor.ts
13+
^^^
14+
source.ts string.template.ts entity.name.function.tagged-template.ts
15+
^
16+
source.ts string.template.ts punctuation.definition.string.template.begin.ts
17+
^
18+
source.ts string.template.ts punctuation.definition.string.template.end.ts

tests/cases/Issue727.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
styled.div``

0 commit comments

Comments
 (0)