Skip to content

Commit 4b614e2

Browse files
authored
Merge pull request #535 from uniqueiniquity/jsxFragment
Add highlighting for JSX fragment
2 parents 824f47e + 8fd66d1 commit 4b614e2

File tree

3 files changed

+168
-10
lines changed

3 files changed

+168
-10
lines changed

TypeScriptReact.YAML-tmLanguage

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,21 @@ repository:
2828
patterns:
2929
- include: '#jsx-tag-without-attributes-in-expression'
3030
- include: '#jsx-tag-in-expression'
31-
- include: '#jsx-tag-invalid'
3231

3332
#jsx tags
3433
jsx-tag-without-attributes-in-expression:
3534
begin: |-
3635
(?x)
3736
(?<=[({\[,?=>:*]|&&|\|\||\?|\Wreturn|^return|\Wdefault|^)\s*
38-
(?=(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>))
39-
end: (?!\s*(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\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*(>))
4039
patterns:
4140
- include: '#jsx-tag-without-attributes'
4241

4342
jsx-tag-without-attributes:
4443
name: meta.tag.without-attributes.tsx
45-
begin: (<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>)
46-
end: (</)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>)
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*(>)
4746
beginCaptures:
4847
'1': {name: punctuation.definition.tag.begin.tsx}
4948
'2': {name: entity.name.tag.tsx}
@@ -128,16 +127,11 @@ repository:
128127
patterns:
129128
- include: '#jsx-children'
130129

131-
jsx-tag-invalid:
132-
name: invalid.illegal.tag.incomplete.tsx
133-
match: <\s*>
134-
135130
#jsx children
136131
jsx-children:
137132
patterns:
138133
- include: '#jsx-tag-without-attributes'
139134
- include: '#jsx-child-tag'
140-
- include: '#jsx-tag-invalid'
141135
- include: '#jsx-evaluated-code'
142136
- include: '#jsx-entities'
143137

tests/baselines/issue534.baseline.txt

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
original file
2+
-----------------------------------
3+
// @onlyOwnGrammar - As this has jsx
4+
<></>;
5+
<><span></span><><span></span></><div></div></>;
6+
7+
<>
8+
<span>hi</span>
9+
<div>
10+
<span>inside</span>
11+
</div>
12+
</>;
13+
-----------------------------------
14+
15+
Grammar: TypeScriptReact.tmLanguage
16+
-----------------------------------
17+
>// @onlyOwnGrammar - As this has jsx
18+
^^
19+
source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx
20+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21+
source.tsx comment.line.double-slash.tsx
22+
><></>;
23+
^
24+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
25+
^
26+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
27+
^^
28+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
29+
^
30+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
31+
^
32+
source.tsx punctuation.terminator.statement.tsx
33+
><><span></span><><span></span></><div></div></>;
34+
^
35+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
36+
^
37+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
38+
^
39+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
40+
^^^^
41+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
42+
^
43+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
44+
^^
45+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
46+
^^^^
47+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
48+
^
49+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
50+
^
51+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
52+
^
53+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
54+
^
55+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
56+
^^^^
57+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
58+
^
59+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
60+
^^
61+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
62+
^^^^
63+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
64+
^
65+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
66+
^^
67+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
68+
^
69+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
70+
^
71+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
72+
^^^
73+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
74+
^
75+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
76+
^^
77+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
78+
^^^
79+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
80+
^
81+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
82+
^^
83+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
84+
^
85+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
86+
^
87+
source.tsx punctuation.terminator.statement.tsx
88+
>
89+
^
90+
source.tsx
91+
><>
92+
^
93+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
94+
^
95+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
96+
> <span>hi</span>
97+
^^^^
98+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx
99+
^
100+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
101+
^^^^
102+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
103+
^
104+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
105+
^^
106+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx
107+
^^
108+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
109+
^^^^
110+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
111+
^
112+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
113+
> <div>
114+
^^^^
115+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx
116+
^
117+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
118+
^^^
119+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
120+
^
121+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
122+
> <span>inside</span>
123+
^^^^^^^^
124+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx
125+
^
126+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
127+
^^^^
128+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
129+
^
130+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
131+
^^^^^^
132+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx
133+
^^
134+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
135+
^^^^
136+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
137+
^
138+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
139+
> </div>
140+
^^^^
141+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx
142+
^^
143+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
144+
^^^
145+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx entity.name.tag.tsx
146+
^
147+
source.tsx meta.tag.without-attributes.tsx meta.jsx.children.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
148+
></>;
149+
^^
150+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.begin.tsx
151+
^
152+
source.tsx meta.tag.without-attributes.tsx punctuation.definition.tag.end.tsx
153+
^
154+
source.tsx punctuation.terminator.statement.tsx

tests/cases/issue534.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// @onlyOwnGrammar - As this has jsx
2+
<></>;
3+
<><span></span><><span></span></><div></div></>;
4+
5+
<>
6+
<span>hi</span>
7+
<div>
8+
<span>inside</span>
9+
</div>
10+
</>;

0 commit comments

Comments
 (0)