Skip to content

Commit cd961ac

Browse files
committed
Some restructuring in react grammar
1 parent aef7be5 commit cd961ac

File tree

2 files changed

+16
-98
lines changed

2 files changed

+16
-98
lines changed

TypeScriptReact.YAML-tmLanguage

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ variables:
1616
jsxClosingTag: (</){{jsxTagName}}?\s*(>)
1717
jsxTagStart: (<){{jsxTagName}}(?=(?:\s*{{typeArguments}})?\s+(?!\?)|\/?>)
1818
jsxTagStartLookahead: (?={{jsxTagStart}})
19+
jsxLookBehindInExpression: (?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\s*
1920

2021
repository:
2122
# Additions:
@@ -40,11 +41,8 @@ repository:
4041

4142
#jsx tags
4243
jsx-tag-without-attributes-in-expression:
43-
begin: |-
44-
(?x)
45-
(?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\s*
46-
(?={{jsxOpeningTagWithoutAttributes}})
47-
end: (?!\s*{{jsxOpeningTagWithoutAttributes}})
44+
begin: '{{jsxLookBehindInExpression}}(?={{jsxOpeningTagWithoutAttributes}})'
45+
end: (?!{{jsxOpeningTagWithoutAttributes}})
4846
patterns:
4947
- include: '#jsx-tag-without-attributes'
5048

@@ -74,28 +72,18 @@ repository:
7472
# We need to differentiate between the relational '<' operator and the beginning of a tag using the surrounding context.
7573
begin: |-
7674
(?x)
77-
(?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\s*
75+
{{jsxLookBehindInExpression}}
7876
(?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow
7977
{{jsxTagStartLookahead}}
80-
end: (/>)|(?:{{jsxClosingTag}})
81-
endCaptures:
82-
'0': { name: meta.tag.tsx }
83-
'1': { name: punctuation.definition.tag.end.tsx }
84-
'2': { name: punctuation.definition.tag.begin.tsx }
85-
'3': { name: entity.name.tag.namespace.tsx }
86-
'4': { name: punctuation.separator.namespace.tsx }
87-
'5': { name: entity.name.tag.tsx }
88-
'6': { name: support.class.component.tsx }
89-
'7': { name: punctuation.definition.tag.end.tsx }
78+
end: (?!{{jsxTagStart}})
9079
patterns:
9180
- include: '#jsx-tag'
9281

93-
jsx-child-tag:
94-
# Because this would be included from the jsx-children, this doesnt need to inspect surrounding context
82+
jsx-tag:
83+
name: meta.tag.tsx
9584
begin: '{{jsxTagStartLookahead}}'
9685
end: (/>)|(?:{{jsxClosingTag}})
9786
endCaptures:
98-
'0': { name: meta.tag.tsx }
9987
'1': { name: punctuation.definition.tag.end.tsx }
10088
'2': { name: punctuation.definition.tag.begin.tsx }
10189
'3': { name: entity.name.tag.namespace.tsx }
@@ -104,13 +92,6 @@ repository:
10492
'6': { name: support.class.component.tsx }
10593
'7': { name: punctuation.definition.tag.end.tsx }
10694
patterns:
107-
- include: '#jsx-tag'
108-
109-
jsx-tag:
110-
name: meta.tag.tsx
111-
begin: '{{jsxTagStartLookahead}}'
112-
end: (?=(/>)|(?:{{jsxClosingTag}}))
113-
patterns:
11495
- begin: '{{jsxTagStart}}'
11596
beginCaptures:
11697
'1': { name: punctuation.definition.tag.begin.tsx }
@@ -137,7 +118,8 @@ repository:
137118
jsx-children:
138119
patterns:
139120
- include: '#jsx-tag-without-attributes'
140-
- include: '#jsx-child-tag'
121+
# Because this would be included from the jsx-children, this doesnt need to inspect surrounding context
122+
- include: '#jsx-tag'
141123
- include: '#jsx-evaluated-code'
142124
- include: '#jsx-entities'
143125

TypeScriptReact.tmLanguage

Lines changed: 7 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -6926,11 +6926,9 @@
69266926
<key>jsx-tag-without-attributes-in-expression</key>
69276927
<dict>
69286928
<key>begin</key>
6929-
<string>(?x)
6930-
(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^)\s*
6931-
(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
6929+
<string>(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^)\s*(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
69326930
<key>end</key>
6933-
<string>(?!\s*(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
6931+
<string>(?!(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
69346932
<key>patterns</key>
69356933
<array>
69366934
<dict>
@@ -7031,50 +7029,7 @@
70317029
(?!&lt;\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=&gt;])|,)) # look ahead is not type parameter of arrow
70327030
(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))(?=(?:\s*&lt;\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;)?\s+(?!\?)|\/?&gt;))</string>
70337031
<key>end</key>
7034-
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
7035-
<key>endCaptures</key>
7036-
<dict>
7037-
<key>0</key>
7038-
<dict>
7039-
<key>name</key>
7040-
<string>meta.tag.tsx</string>
7041-
</dict>
7042-
<key>1</key>
7043-
<dict>
7044-
<key>name</key>
7045-
<string>punctuation.definition.tag.end.tsx</string>
7046-
</dict>
7047-
<key>2</key>
7048-
<dict>
7049-
<key>name</key>
7050-
<string>punctuation.definition.tag.begin.tsx</string>
7051-
</dict>
7052-
<key>3</key>
7053-
<dict>
7054-
<key>name</key>
7055-
<string>entity.name.tag.namespace.tsx</string>
7056-
</dict>
7057-
<key>4</key>
7058-
<dict>
7059-
<key>name</key>
7060-
<string>punctuation.separator.namespace.tsx</string>
7061-
</dict>
7062-
<key>5</key>
7063-
<dict>
7064-
<key>name</key>
7065-
<string>entity.name.tag.tsx</string>
7066-
</dict>
7067-
<key>6</key>
7068-
<dict>
7069-
<key>name</key>
7070-
<string>support.class.component.tsx</string>
7071-
</dict>
7072-
<key>7</key>
7073-
<dict>
7074-
<key>name</key>
7075-
<string>punctuation.definition.tag.end.tsx</string>
7076-
</dict>
7077-
</dict>
7032+
<string>(?!(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))(?=(?:\s*&lt;\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;)?\s+(?!\?)|\/?&gt;))</string>
70787033
<key>patterns</key>
70797034
<array>
70807035
<dict>
@@ -7083,19 +7038,16 @@
70837038
</dict>
70847039
</array>
70857040
</dict>
7086-
<key>jsx-child-tag</key>
7041+
<key>jsx-tag</key>
70877042
<dict>
7043+
<key>name</key>
7044+
<string>meta.tag.tsx</string>
70887045
<key>begin</key>
70897046
<string>(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))(?=(?:\s*&lt;\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;)?\s+(?!\?)|\/?&gt;))</string>
70907047
<key>end</key>
70917048
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
70927049
<key>endCaptures</key>
70937050
<dict>
7094-
<key>0</key>
7095-
<dict>
7096-
<key>name</key>
7097-
<string>meta.tag.tsx</string>
7098-
</dict>
70997051
<key>1</key>
71007052
<dict>
71017053
<key>name</key>
@@ -7133,22 +7085,6 @@
71337085
</dict>
71347086
</dict>
71357087
<key>patterns</key>
7136-
<array>
7137-
<dict>
7138-
<key>include</key>
7139-
<string>#jsx-tag</string>
7140-
</dict>
7141-
</array>
7142-
</dict>
7143-
<key>jsx-tag</key>
7144-
<dict>
7145-
<key>name</key>
7146-
<string>meta.tag.tsx</string>
7147-
<key>begin</key>
7148-
<string>(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))(?=(?:\s*&lt;\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;)?\s+(?!\?)|\/?&gt;))</string>
7149-
<key>end</key>
7150-
<string>(?=(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;)))</string>
7151-
<key>patterns</key>
71527088
<array>
71537089
<dict>
71547090
<key>begin</key>
@@ -7240,7 +7176,7 @@
72407176
</dict>
72417177
<dict>
72427178
<key>include</key>
7243-
<string>#jsx-child-tag</string>
7179+
<string>#jsx-tag</string>
72447180
</dict>
72457181
<dict>
72467182
<key>include</key>

0 commit comments

Comments
 (0)