Skip to content

Commit 0e7a5b2

Browse files
committed
support namespaced tsx
1 parent e8d2994 commit 0e7a5b2

File tree

4 files changed

+393
-41
lines changed

4 files changed

+393
-41
lines changed

TypeScriptReact.YAML-tmLanguage

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,29 @@ repository:
3434
begin: |-
3535
(?x)
3636
(?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\s*
37-
(?=(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>))
38-
end: (?!\s*(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>))
37+
(?=(<)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>))
38+
end: (?!\s*(<)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>))
3939
patterns:
4040
- include: '#jsx-tag-without-attributes'
4141

4242
jsx-tag-without-attributes:
4343
name: meta.tag.without-attributes.tsx
44-
begin: (<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>)
45-
end: (</)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>)
44+
begin: (<)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>)
45+
end: (</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>)
4646
beginCaptures:
4747
'1': {name: punctuation.definition.tag.begin.tsx}
48-
'2': {name: entity.name.tag.tsx}
49-
'3': {name: support.class.component.tsx}
50-
'4': {name: punctuation.definition.tag.end.tsx}
48+
'2': {name: entity.name.tag.namespace.tsx}
49+
'3': {name: punctuation.separator.namespace.tsx}
50+
'4': {name: entity.name.tag.tsx}
51+
'5': {name: support.class.component.tsx}
52+
'6': {name: punctuation.definition.tag.end.tsx}
5153
endCaptures:
5254
'1': {name: punctuation.definition.tag.begin.tsx}
53-
'2': {name: entity.name.tag.tsx}
54-
'3': {name: support.class.component.tsx}
55-
'4': {name: punctuation.definition.tag.end.tsx}
55+
'2': {name: entity.name.tag.namespace.tsx}
56+
'3': {name: punctuation.separator.namespace.tsx}
57+
'4': {name: entity.name.tag.tsx}
58+
'5': {name: support.class.component.tsx}
59+
'6': {name: punctuation.definition.tag.end.tsx}
5660
contentName: meta.jsx.children.tsx
5761
patterns:
5862
- include: '#jsx-children'
@@ -64,16 +68,19 @@ repository:
6468
(?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\s*
6569
(?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow
6670
(?=(<)\s*
71+
([_$a-zA-Z][-$\w.]*(?<!\.|-):)?
6772
([_$a-zA-Z][-$\w.]*(?<!\.|-))
6873
(?=\s+(?!\?)|/?>))
69-
end: (/>)|(?:(</)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>))
74+
end: (/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>))
7075
endCaptures:
7176
'0': { name: meta.tag.tsx }
7277
'1': { name: punctuation.definition.tag.end.tsx }
7378
'2': { name: punctuation.definition.tag.begin.tsx }
74-
'3': { name: entity.name.tag.tsx }
75-
'4': { name: support.class.component.tsx }
76-
'5': { name: punctuation.definition.tag.end.tsx }
79+
'3': { name: entity.name.tag.namespace.tsx }
80+
'4': { name: punctuation.separator.namespace.tsx }
81+
'5': { name: entity.name.tag.tsx }
82+
'6': { name: support.class.component.tsx }
83+
'7': { name: punctuation.definition.tag.end.tsx }
7784
patterns:
7885
- include: '#jsx-tag'
7986

@@ -82,16 +89,19 @@ repository:
8289
begin: |-
8390
(?x)
8491
(?=(<)\s*
92+
([_$a-zA-Z][-$\w.]*(?<!\.|-):)?
8593
([_$a-zA-Z][-$\w.]*(?<!\.|-))
8694
(?=\s+(?!\?)|/?>))
87-
end: (/>)|(?:(</)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>))
95+
end: (/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>))
8896
endCaptures:
89-
'0': { name: meta.tag.tsx }
90-
'1': { name: punctuation.definition.tag.end.tsx }
91-
'2': { name: punctuation.definition.tag.begin.tsx }
92-
'3': { name: entity.name.tag.tsx }
93-
'4': { name: support.class.component.tsx }
94-
'5': { name: punctuation.definition.tag.end.tsx }
97+
'0': { name: meta.tag.tsx }
98+
'1': { name: punctuation.definition.tag.end.tsx }
99+
'2': { name: punctuation.definition.tag.begin.tsx }
100+
'3': { name: entity.name.tag.namespace.tsx }
101+
'4': { name: punctuation.separator.namespace.tsx }
102+
'5': { name: entity.name.tag.tsx }
103+
'6': { name: support.class.component.tsx }
104+
'7': { name: punctuation.definition.tag.end.tsx }
95105
patterns:
96106
- include: '#jsx-tag'
97107

@@ -100,19 +110,23 @@ repository:
100110
begin: |-
101111
(?x)
102112
(?=(<)\s*
113+
(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?
103114
([_$a-zA-Z][-$\w.]*(?<!\.|-))
104115
(?=\s+(?!\?)|/?>))
105-
end: (?=(/>)|(?:(</)\s*([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>)))
116+
end: (?=(/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>)))
106117
patterns:
107118
- begin: |-
108119
(?x)
109120
(<)\s*
121+
(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?
110122
((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))
111123
(?=\s+(?!\?)|/?>)
112124
beginCaptures:
113125
'1': { name: punctuation.definition.tag.begin.tsx }
114-
'2': { name: entity.name.tag.tsx }
115-
'3': { name: support.class.component.tsx }
126+
'2': { name: entity.name.tag.namespace.tsx }
127+
'3': { name: punctuation.separator.namespace.tsx }
128+
'4': { name: entity.name.tag.tsx }
129+
'5': { name: support.class.component.tsx }
116130
end: (?=[/]?>)
117131
contentName: meta.tag.attributes.tsx
118132
patterns:
@@ -170,10 +184,13 @@ repository:
170184
match: |-
171185
(?x)
172186
\s*
187+
(?:([_$a-zA-Z][-$\w.]*)(:))?
173188
([_$a-zA-Z][-$\w]*)
174189
(?=\s|=|/?>|/\*|//)
175190
captures:
176-
'1': {name: entity.other.attribute-name.tsx}
191+
'1': {name: entity.other.attribute-name.namespace.tsx}
192+
'2': {name: punctuation.separator.namespace.tsx}
193+
'3': {name: entity.other.attribute-name.tsx}
177194

178195
jsx-tag-attribute-assignment:
179196
name: keyword.operator.assignment.tsx

TypeScriptReact.tmLanguage

Lines changed: 81 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6804,9 +6804,9 @@
68046804
<key>begin</key>
68056805
<string>(?x)
68066806
(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^)\s*
6807-
(?=(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
6807+
(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
68086808
<key>end</key>
6809-
<string>(?!\s*(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
6809+
<string>(?!\s*(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
68106810
<key>patterns</key>
68116811
<array>
68126812
<dict>
@@ -6820,9 +6820,9 @@
68206820
<key>name</key>
68216821
<string>meta.tag.without-attributes.tsx</string>
68226822
<key>begin</key>
6823-
<string>(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;)</string>
6823+
<string>(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;)</string>
68246824
<key>end</key>
6825-
<string>(&lt;/)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;)</string>
6825+
<string>(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;)</string>
68266826
<key>beginCaptures</key>
68276827
<dict>
68286828
<key>1</key>
@@ -6833,14 +6833,24 @@
68336833
<key>2</key>
68346834
<dict>
68356835
<key>name</key>
6836-
<string>entity.name.tag.tsx</string>
6836+
<string>entity.name.tag.namespace.tsx</string>
68376837
</dict>
68386838
<key>3</key>
68396839
<dict>
68406840
<key>name</key>
6841-
<string>support.class.component.tsx</string>
6841+
<string>punctuation.separator.namespace.tsx</string>
68426842
</dict>
68436843
<key>4</key>
6844+
<dict>
6845+
<key>name</key>
6846+
<string>entity.name.tag.tsx</string>
6847+
</dict>
6848+
<key>5</key>
6849+
<dict>
6850+
<key>name</key>
6851+
<string>support.class.component.tsx</string>
6852+
</dict>
6853+
<key>6</key>
68446854
<dict>
68456855
<key>name</key>
68466856
<string>punctuation.definition.tag.end.tsx</string>
@@ -6856,14 +6866,24 @@
68566866
<key>2</key>
68576867
<dict>
68586868
<key>name</key>
6859-
<string>entity.name.tag.tsx</string>
6869+
<string>entity.name.tag.namespace.tsx</string>
68606870
</dict>
68616871
<key>3</key>
68626872
<dict>
68636873
<key>name</key>
6864-
<string>support.class.component.tsx</string>
6874+
<string>punctuation.separator.namespace.tsx</string>
68656875
</dict>
68666876
<key>4</key>
6877+
<dict>
6878+
<key>name</key>
6879+
<string>entity.name.tag.tsx</string>
6880+
</dict>
6881+
<key>5</key>
6882+
<dict>
6883+
<key>name</key>
6884+
<string>support.class.component.tsx</string>
6885+
</dict>
6886+
<key>6</key>
68676887
<dict>
68686888
<key>name</key>
68696889
<string>punctuation.definition.tag.end.tsx</string>
@@ -6886,10 +6906,11 @@
68866906
(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^)\s*
68876907
(?!&lt;\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=&gt;])|,)) # look ahead is not type parameter of arrow
68886908
(?=(&lt;)\s*
6909+
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-):)?
68896910
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))
68906911
(?=\s+(?!\?)|/?&gt;))</string>
68916912
<key>end</key>
6892-
<string>(/&gt;)|(?:(&lt;/)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;))</string>
6913+
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;))</string>
68936914
<key>endCaptures</key>
68946915
<dict>
68956916
<key>0</key>
@@ -6910,14 +6931,24 @@
69106931
<key>3</key>
69116932
<dict>
69126933
<key>name</key>
6913-
<string>entity.name.tag.tsx</string>
6934+
<string>entity.name.tag.namespace.tsx</string>
69146935
</dict>
69156936
<key>4</key>
69166937
<dict>
69176938
<key>name</key>
6918-
<string>support.class.component.tsx</string>
6939+
<string>punctuation.separator.namespace.tsx</string>
69196940
</dict>
69206941
<key>5</key>
6942+
<dict>
6943+
<key>name</key>
6944+
<string>entity.name.tag.tsx</string>
6945+
</dict>
6946+
<key>6</key>
6947+
<dict>
6948+
<key>name</key>
6949+
<string>support.class.component.tsx</string>
6950+
</dict>
6951+
<key>7</key>
69216952
<dict>
69226953
<key>name</key>
69236954
<string>punctuation.definition.tag.end.tsx</string>
@@ -6936,10 +6967,11 @@
69366967
<key>begin</key>
69376968
<string>(?x)
69386969
(?=(&lt;)\s*
6970+
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-):)?
69396971
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))
69406972
(?=\s+(?!\?)|/?&gt;))</string>
69416973
<key>end</key>
6942-
<string>(/&gt;)|(?:(&lt;/)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;))</string>
6974+
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;))</string>
69436975
<key>endCaptures</key>
69446976
<dict>
69456977
<key>0</key>
@@ -6960,14 +6992,24 @@
69606992
<key>3</key>
69616993
<dict>
69626994
<key>name</key>
6963-
<string>entity.name.tag.tsx</string>
6995+
<string>entity.name.tag.namespace.tsx</string>
69646996
</dict>
69656997
<key>4</key>
69666998
<dict>
69676999
<key>name</key>
6968-
<string>support.class.component.tsx</string>
7000+
<string>punctuation.separator.namespace.tsx</string>
69697001
</dict>
69707002
<key>5</key>
7003+
<dict>
7004+
<key>name</key>
7005+
<string>entity.name.tag.tsx</string>
7006+
</dict>
7007+
<key>6</key>
7008+
<dict>
7009+
<key>name</key>
7010+
<string>support.class.component.tsx</string>
7011+
</dict>
7012+
<key>7</key>
69717013
<dict>
69727014
<key>name</key>
69737015
<string>punctuation.definition.tag.end.tsx</string>
@@ -6988,16 +7030,18 @@
69887030
<key>begin</key>
69897031
<string>(?x)
69907032
(?=(&lt;)\s*
7033+
(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?
69917034
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))
69927035
(?=\s+(?!\?)|/?&gt;))</string>
69937036
<key>end</key>
6994-
<string>(?=(/&gt;)|(?:(&lt;/)\s*([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))\s*(&gt;)))</string>
7037+
<string>(?=(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))\s*(&gt;)))</string>
69957038
<key>patterns</key>
69967039
<array>
69977040
<dict>
69987041
<key>begin</key>
69997042
<string>(?x)
70007043
(&lt;)\s*
7044+
(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?
70017045
((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))
70027046
(?=\s+(?!\?)|/?&gt;)</string>
70037047
<key>beginCaptures</key>
@@ -7010,9 +7054,19 @@
70107054
<key>2</key>
70117055
<dict>
70127056
<key>name</key>
7013-
<string>entity.name.tag.tsx</string>
7057+
<string>entity.name.tag.namespace.tsx</string>
70147058
</dict>
70157059
<key>3</key>
7060+
<dict>
7061+
<key>name</key>
7062+
<string>punctuation.separator.namespace.tsx</string>
7063+
</dict>
7064+
<key>4</key>
7065+
<dict>
7066+
<key>name</key>
7067+
<string>entity.name.tag.tsx</string>
7068+
</dict>
7069+
<key>5</key>
70167070
<dict>
70177071
<key>name</key>
70187072
<string>support.class.component.tsx</string>
@@ -7179,11 +7233,22 @@
71797233
<key>match</key>
71807234
<string>(?x)
71817235
\s*
7236+
(?:([_$a-zA-Z][-$\w.]*)(:))?
71827237
([_$a-zA-Z][-$\w]*)
71837238
(?=\s|=|/?&gt;|/\*|//)</string>
71847239
<key>captures</key>
71857240
<dict>
71867241
<key>1</key>
7242+
<dict>
7243+
<key>name</key>
7244+
<string>entity.other.attribute-name.namespace.tsx</string>
7245+
</dict>
7246+
<key>2</key>
7247+
<dict>
7248+
<key>name</key>
7249+
<string>punctuation.separator.namespace.tsx</string>
7250+
</dict>
7251+
<key>3</key>
71877252
<dict>
71887253
<key>name</key>
71897254
<string>entity.other.attribute-name.tsx</string>

0 commit comments

Comments
 (0)