Skip to content

Commit 6de67c7

Browse files
authored
Merge pull request #655 from mjbvz/fix-648
Allow underscore in jsx attribute names
2 parents e2db601 + 38aa945 commit 6de67c7

File tree

6 files changed

+145
-13
lines changed

6 files changed

+145
-13
lines changed

TypeScriptReact.YAML-tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ uuid: 805375ec-d614-41f5-8993-5843fe63ea82
1111
variables:
1212
#possiblyMultilineArrowExpressionBeforeEndOfLine: ({{typeParameters}})?\(
1313
possiblyMultilineArrow: ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) # during lookup treat ( followed by line end as arrow
14-
jsxTagOrAtrributeIdentifier: '[_$[:alpha:]][-$[:alnum:].]*'
14+
jsxTagOrAtrributeIdentifier: '[_$[:alpha:]][-_$[:alnum:].]*'
1515
jsxTagNamespace: (?:({{jsxTagOrAtrributeIdentifier}})(?<!\.|-)(:))?
1616
jsxTagName: \s*{{jsxTagNamespace}}((?:[a-z][a-z0-9]*|({{jsxTagOrAtrributeIdentifier}}))(?<!\.|-))
1717
jsxOpeningTagWithoutAttributes: (<){{jsxTagName}}?\s*(>)
@@ -164,7 +164,7 @@ repository:
164164
(?x)
165165
\s*
166166
(?:({{jsxTagOrAtrributeIdentifier}})(:))?
167-
([_$[:alpha:]][-$[:alnum:]]*)
167+
([_$[:alpha:]][-_$[:alnum:]]*)
168168
(?=\s|=|/?>|/\*|//)
169169
captures:
170170
'1': {name: entity.other.attribute-name.namespace.tsx}

TypeScriptReact.tmLanguage

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8317,9 +8317,9 @@
83178317
<key>jsx-tag-without-attributes-in-expression</key>
83188318
<dict>
83198319
<key>begin</key>
8320-
<string>(?&lt;!\+\+|--)(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(&lt;)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
8320+
<string>(?&lt;!\+\+|--)(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
83218321
<key>end</key>
8322-
<string>(?!(&lt;)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
8322+
<string>(?!(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
83238323
<key>patterns</key>
83248324
<array>
83258325
<dict>
@@ -8333,9 +8333,9 @@
83338333
<key>name</key>
83348334
<string>meta.tag.without-attributes.tsx</string>
83358335
<key>begin</key>
8336-
<string>(&lt;)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;)</string>
8336+
<string>(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;)</string>
83378337
<key>end</key>
8338-
<string>(&lt;/)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;)</string>
8338+
<string>(&lt;/)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;)</string>
83398339
<key>beginCaptures</key>
83408340
<dict>
83418341
<key>1</key>
@@ -8418,9 +8418,9 @@
84188418
<string>(?x)
84198419
(?&lt;!\+\+|--)(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*
84208420
(?!&lt;\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=&gt;])|,)) # look ahead is not type parameter of arrow
8421-
(?=(&lt;)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
8421+
(?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
84228422
<key>end</key>
8423-
<string>(?!(&lt;)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
8423+
<string>(?!(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
84248424
<key>patterns</key>
84258425
<array>
84268426
<dict>
@@ -8434,9 +8434,9 @@
84348434
<key>name</key>
84358435
<string>meta.tag.tsx</string>
84368436
<key>begin</key>
8437-
<string>(?=(&lt;)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
8437+
<string>(?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
84388438
<key>end</key>
8439-
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
8439+
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
84408440
<key>endCaptures</key>
84418441
<dict>
84428442
<key>1</key>
@@ -8479,7 +8479,7 @@
84798479
<array>
84808480
<dict>
84818481
<key>begin</key>
8482-
<string>(&lt;)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;)</string>
8482+
<string>(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;)</string>
84838483
<key>beginCaptures</key>
84848484
<dict>
84858485
<key>1</key>
@@ -8681,8 +8681,8 @@
86818681
<key>match</key>
86828682
<string>(?x)
86838683
\s*
8684-
(?:([_$[:alpha:]][-$[:alnum:].]*)(:))?
8685-
([_$[:alpha:]][-$[:alnum:]]*)
8684+
(?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?
8685+
([_$[:alpha:]][-_$[:alnum:]]*)
86868686
(?=\s|=|/?&gt;|/\*|//)</string>
86878687
<key>captures</key>
86888688
<dict>
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
original file
2+
-----------------------------------
3+
// @onlyOwnGrammar - As this has jsx
4+
<Test
5+
a=''
6+
b_c='111'
7+
d=''
8+
/>
9+
-----------------------------------
10+
11+
Grammar: TypeScriptReact.tmLanguage
12+
-----------------------------------
13+
>// @onlyOwnGrammar - As this has jsx
14+
^^
15+
source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx
16+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17+
source.tsx comment.line.double-slash.tsx
18+
><Test
19+
^
20+
source.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx
21+
^^^^
22+
source.tsx meta.tag.tsx entity.name.tag.tsx support.class.component.tsx
23+
> a=''
24+
^^^^
25+
source.tsx meta.tag.tsx meta.tag.attributes.tsx
26+
^
27+
source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx
28+
^
29+
source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx
30+
^
31+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx
32+
^
33+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx
34+
> b_c='111'
35+
^^^^
36+
source.tsx meta.tag.tsx meta.tag.attributes.tsx
37+
^^^
38+
source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx
39+
^
40+
source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx
41+
^
42+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx
43+
^^^
44+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx
45+
^
46+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx
47+
> d=''
48+
^^^^
49+
source.tsx meta.tag.tsx meta.tag.attributes.tsx
50+
^
51+
source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx
52+
^
53+
source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx
54+
^
55+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx
56+
^
57+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx
58+
>/>
59+
^^
60+
source.tsx meta.tag.tsx punctuation.definition.tag.end.tsx
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
original file
2+
-----------------------------------
3+
// @onlyOwnGrammar - As this has jsx
4+
<Test_Component
5+
a=''
6+
b_c='111'
7+
d=''
8+
/>
9+
-----------------------------------
10+
11+
Grammar: TypeScriptReact.tmLanguage
12+
-----------------------------------
13+
>// @onlyOwnGrammar - As this has jsx
14+
^^
15+
source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx
16+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17+
source.tsx comment.line.double-slash.tsx
18+
><Test_Component
19+
^
20+
source.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx
21+
^^^^^^^^^^^^^^
22+
source.tsx meta.tag.tsx entity.name.tag.tsx support.class.component.tsx
23+
> a=''
24+
^^^^
25+
source.tsx meta.tag.tsx meta.tag.attributes.tsx
26+
^
27+
source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx
28+
^
29+
source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx
30+
^
31+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx
32+
^
33+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx
34+
> b_c='111'
35+
^^^^
36+
source.tsx meta.tag.tsx meta.tag.attributes.tsx
37+
^^^
38+
source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx
39+
^
40+
source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx
41+
^
42+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx
43+
^^^
44+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx
45+
^
46+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx
47+
> d=''
48+
^^^^
49+
source.tsx meta.tag.tsx meta.tag.attributes.tsx
50+
^
51+
source.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx
52+
^
53+
source.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx
54+
^
55+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.begin.tsx
56+
^
57+
source.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.single.tsx punctuation.definition.string.end.tsx
58+
>/>
59+
^^
60+
source.tsx meta.tag.tsx punctuation.definition.tag.end.tsx

tests/cases/Issues648.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// @onlyOwnGrammar - As this has jsx
2+
<Test
3+
a=''
4+
b_c='111'
5+
d=''
6+
/>

tests/cases/Issues649.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// @onlyOwnGrammar - As this has jsx
2+
<Test_Component
3+
a=''
4+
b_c='111'
5+
d=''
6+
/>

0 commit comments

Comments
 (0)