Skip to content

Commit 30a2e6b

Browse files
committed
Update the build to use variables in react as well
1 parent b9f410d commit 30a2e6b

File tree

3 files changed

+46
-59
lines changed

3 files changed

+46
-59
lines changed

TypeScriptReact.YAML-tmLanguage

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@ scopeName: source.tsx
88
fileTypes: [tsx]
99
uuid: 805375ec-d614-41f5-8993-5843fe63ea82
1010

11+
variables:
12+
jsxTagOrAtrributeIdentifier: '[_$a-zA-Z][-$\w.]'
13+
jsxTagNamespace: (?:({{jsxTagOrAtrributeIdentifier}}*)(?<!\.|-)(:))?
14+
jsxTagName: \s*{{jsxTagNamespace}}((?:[a-z][a-z0-9]*|({{jsxTagOrAtrributeIdentifier}}*))(?<!\.|-))
15+
jsxOpeningTagWithoutAttributes: (<){{jsxTagName}}?\s*(>)
16+
jsxClosingTag: (</){{jsxTagName}}?\s*(>)
17+
jsxTagStart: (<){{jsxTagName}}(?=\s+(?!\?)|\/?>)
18+
jsxTagStartLookahead: (?={{jsxTagStart}})
19+
1120
repository:
1221
# Additions:
1322
# expression repository need to include jsx first followed by whaterver ts grammar says
@@ -34,15 +43,15 @@ repository:
3443
begin: |-
3544
(?x)
3645
(?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\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*(>))
46+
(?={{jsxOpeningTagWithoutAttributes}})
47+
end: (?!\s*{{jsxOpeningTagWithoutAttributes}})
3948
patterns:
4049
- include: '#jsx-tag-without-attributes'
4150

4251
jsx-tag-without-attributes:
4352
name: meta.tag.without-attributes.tsx
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*(>)
53+
begin: '{{jsxOpeningTagWithoutAttributes}}'
54+
end: '{{jsxClosingTag}}'
4655
beginCaptures:
4756
'1': {name: punctuation.definition.tag.begin.tsx}
4857
'2': {name: entity.name.tag.namespace.tsx}
@@ -67,11 +76,8 @@ repository:
6776
(?x)
6877
(?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\s*
6978
(?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow
70-
(?=(<)\s*
71-
([_$a-zA-Z][-$\w.]*(?<!\.|-):)?
72-
([_$a-zA-Z][-$\w.]*(?<!\.|-))
73-
(?=\s+(?!\?)|/?>))
74-
end: (/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>))
79+
{{jsxTagStartLookahead}}
80+
end: (/>)|(?:{{jsxClosingTag}})
7581
endCaptures:
7682
'0': { name: meta.tag.tsx }
7783
'1': { name: punctuation.definition.tag.end.tsx }
@@ -86,13 +92,8 @@ repository:
8692

8793
jsx-child-tag:
8894
# Because this would be included from the jsx-children, this doesnt need to inspect surrounding context
89-
begin: |-
90-
(?x)
91-
(?=(<)\s*
92-
([_$a-zA-Z][-$\w.]*(?<!\.|-):)?
93-
([_$a-zA-Z][-$\w.]*(?<!\.|-))
94-
(?=\s+(?!\?)|/?>))
95-
end: (/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>))
95+
begin: '{{jsxTagStartLookahead}}'
96+
end: (/>)|(?:{{jsxClosingTag}})
9697
endCaptures:
9798
'0': { name: meta.tag.tsx }
9899
'1': { name: punctuation.definition.tag.end.tsx }
@@ -107,20 +108,10 @@ repository:
107108

108109
jsx-tag:
109110
name: meta.tag.tsx
110-
begin: |-
111-
(?x)
112-
(?=(<)\s*
113-
(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?
114-
([_$a-zA-Z][-$\w.]*(?<!\.|-))
115-
(?=\s+(?!\?)|/?>))
116-
end: (?=(/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>)))
111+
begin: '{{jsxTagStartLookahead}}'
112+
end: (?=(/>)|(?:{{jsxClosingTag}}))
117113
patterns:
118-
- begin: |-
119-
(?x)
120-
(<)\s*
121-
(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?
122-
((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))
123-
(?=\s+(?!\?)|/?>)
114+
- begin: '{{jsxTagStart}}'
124115
beginCaptures:
125116
'1': { name: punctuation.definition.tag.begin.tsx }
126117
'2': { name: entity.name.tag.namespace.tsx }
@@ -184,7 +175,7 @@ repository:
184175
match: |-
185176
(?x)
186177
\s*
187-
(?:([_$a-zA-Z][-$\w.]*)(:))?
178+
(?:({{jsxTagOrAtrributeIdentifier}}*)(:))?
188179
([_$a-zA-Z][-$\w]*)
189180
(?=\s|=|/?>|/\*|//)
190181
captures:

TypeScriptReact.tmLanguage

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7024,12 +7024,9 @@
70247024
<string>(?x)
70257025
(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^)\s*
70267026
(?!&lt;\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=&gt;])|,)) # look ahead is not type parameter of arrow
7027-
(?=(&lt;)\s*
7028-
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-):)?
7029-
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))
7030-
(?=\s+(?!\?)|/?&gt;))</string>
7027+
(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))(?=\s+(?!\?)|\/?&gt;))</string>
70317028
<key>end</key>
7032-
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;))</string>
7029+
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
70337030
<key>endCaptures</key>
70347031
<dict>
70357032
<key>0</key>
@@ -7084,13 +7081,9 @@
70847081
<key>jsx-child-tag</key>
70857082
<dict>
70867083
<key>begin</key>
7087-
<string>(?x)
7088-
(?=(&lt;)\s*
7089-
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-):)?
7090-
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))
7091-
(?=\s+(?!\?)|/?&gt;))</string>
7084+
<string>(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))(?=\s+(?!\?)|\/?&gt;))</string>
70927085
<key>end</key>
7093-
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;))</string>
7086+
<string>(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
70947087
<key>endCaptures</key>
70957088
<dict>
70967089
<key>0</key>
@@ -7147,22 +7140,14 @@
71477140
<key>name</key>
71487141
<string>meta.tag.tsx</string>
71497142
<key>begin</key>
7150-
<string>(?x)
7151-
(?=(&lt;)\s*
7152-
(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?
7153-
([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))
7154-
(?=\s+(?!\?)|/?&gt;))</string>
7143+
<string>(?=(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))(?=\s+(?!\?)|\/?&gt;))</string>
71557144
<key>end</key>
7156-
<string>(?=(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?([_$a-zA-Z][-$\w.]*(?&lt;!\.|-))\s*(&gt;)))</string>
7145+
<string>(?=(/&gt;)|(?:(&lt;/)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;)))</string>
71577146
<key>patterns</key>
71587147
<array>
71597148
<dict>
71607149
<key>begin</key>
7161-
<string>(?x)
7162-
(&lt;)\s*
7163-
(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?
7164-
((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))
7165-
(?=\s+(?!\?)|/?&gt;)</string>
7150+
<string>(&lt;)\s*(?:([_$a-zA-Z][-$\w.]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))(?=\s+(?!\?)|\/?&gt;)</string>
71667151
<key>beginCaptures</key>
71677152
<dict>
71687153
<key>1</key>

build/build.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,17 @@ function transformGrammarRepository(grammar: any, propertyNames: string[], trans
5555
}
5656
}
5757

58-
function changeTsToTsxGrammar(grammar: any, variables: any) {
59-
const tsxUpdates = updateGrammarVariables(readYaml(file(Language.TypeScriptReact, Extension.YamlTmLangauge)), variables);
58+
function getTsxGrammar() {
59+
let variables: any;
60+
const tsxUpdatesBeforeTransformation = readYaml(file(Language.TypeScriptReact, Extension.YamlTmLangauge));
61+
const grammar = getTsGrammar(tsGrammarVariables => {
62+
variables = tsGrammarVariables;
63+
for (const variableName in tsxUpdatesBeforeTransformation.variables) {
64+
variables[variableName] = tsxUpdatesBeforeTransformation.variables[variableName];
65+
}
66+
return variables;
67+
});
68+
const tsxUpdates = updateGrammarVariables(tsxUpdatesBeforeTransformation, variables);
6069

6170
// Update name, file types, scope name and uuid
6271
for (let key in tsxUpdates) {
@@ -86,6 +95,11 @@ function changeTsToTsxGrammar(grammar: any, variables: any) {
8695
return grammar;
8796
}
8897

98+
function getTsGrammar(getVariables: (tsGrammarVariables: any) => any) {
99+
const tsGrammarBeforeTransformation = readYaml(file(Language.TypeScript, Extension.YamlTmLangauge));
100+
return updateGrammarVariables(tsGrammarBeforeTransformation, getVariables(tsGrammarBeforeTransformation.variables));
101+
}
102+
89103
function replacePatternVariables(pattern: string, variableReplacers: VariableReplacer[]) {
90104
let result = pattern;
91105
for (const [variableName, value] of variableReplacers) {
@@ -112,16 +126,13 @@ function updateGrammarVariables(grammar: any, variables: any) {
112126
}
113127

114128
function buildGrammar() {
115-
const tsGrammarBeforeTransformation = readYaml(file(Language.TypeScript, Extension.YamlTmLangauge));
116-
const variables = tsGrammarBeforeTransformation.variables;
117-
118-
const tsGrammar = updateGrammarVariables(tsGrammarBeforeTransformation, variables);
129+
const tsGrammar = getTsGrammar(grammarVariables => grammarVariables);
119130

120131
// Write TypeScript.tmLanguage
121132
writePlistFile(tsGrammar, file(Language.TypeScript, Extension.TmLanguage));
122133

123134
// Write TypeScriptReact.tmLangauge
124-
const tsxGrammar = changeTsToTsxGrammar(tsGrammar, variables);
135+
const tsxGrammar = getTsxGrammar();
125136
writePlistFile(tsxGrammar, file(Language.TypeScriptReact, Extension.TmLanguage));
126137
}
127138

0 commit comments

Comments
 (0)