Generate TypeScriptReact grammar
This commit is contained in:
Родитель
2d455cafe0
Коммит
dfdd2cb6f6
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -8,13 +8,66 @@ function writePlistFile(grammar: any, fileName: string) {
|
|||
fs.writeFileSync(fileName, text, "utf8");
|
||||
}
|
||||
|
||||
function changeToTsxGrammar() {
|
||||
function readYamlGrammar(fileName: string) {
|
||||
const text = fs.readFileSync(fileName, "utf8");
|
||||
return yaml.safeLoad(text);
|
||||
}
|
||||
|
||||
function convertTsGrammar() {
|
||||
const text = fs.readFileSync("../TypeScript.YAML-tmLanguage", "utf8");
|
||||
const tsGrammar = yaml.safeLoad(text);
|
||||
function fixScopeNames(rule: any) {
|
||||
if (typeof rule.name === 'string') {
|
||||
rule.name = rule.name.replace(/\.ts/g, '.tsx');
|
||||
}
|
||||
for (var property in rule) {
|
||||
var value = rule[property];
|
||||
if (typeof value === 'object') {
|
||||
fixScopeNames(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changeToTsxGrammar(grammar: any) {
|
||||
const tsxUpdates = readYamlGrammar("../TypeScriptReact.YAML-tmLanguage");
|
||||
|
||||
// Update name, file types, scope name and uuid
|
||||
for (let key in tsxUpdates) {
|
||||
if (key !== "repository") {
|
||||
grammar[key] = tsxUpdates[key];
|
||||
}
|
||||
}
|
||||
|
||||
// Update scope names to .tsx
|
||||
const repository = grammar.repository;
|
||||
const updatesRepository = tsxUpdates.repository;
|
||||
for (let key in repository) {
|
||||
fixScopeNames(repository[key]);
|
||||
}
|
||||
|
||||
// Add repository items
|
||||
for (let key in updatesRepository) {
|
||||
switch(key) {
|
||||
case "statements":
|
||||
case "expression":
|
||||
// Update statements/expression
|
||||
repository[key].patterns.unshift(updatesRepository[key].patterns[0]);
|
||||
break;
|
||||
default:
|
||||
// Add jsx
|
||||
repository[key] = updatesRepository[key];
|
||||
}
|
||||
}
|
||||
|
||||
return grammar;
|
||||
}
|
||||
|
||||
function build() {
|
||||
const tsGrammar = readYamlGrammar("../TypeScript.YAML-tmLanguage");
|
||||
|
||||
// Write TypeScript.tmLanguage
|
||||
writePlistFile(tsGrammar, "../TypeScript.tmLanguage");
|
||||
|
||||
// Write TypeScriptReact.tmLangauge
|
||||
const tsxGrammar = changeToTsxGrammar(tsGrammar);
|
||||
writePlistFile(tsxGrammar, "../TypeScriptReact.tmLanguage");
|
||||
}
|
||||
|
||||
convertTsGrammar();
|
||||
build();
|
|
@ -18,7 +18,7 @@ function foo() {
|
|||
^
|
||||
source.tsx meta.function.tsx
|
||||
^^^
|
||||
source.tsx meta.function.tsx entity.name.function.ts
|
||||
source.tsx meta.function.tsx entity.name.function.tsx
|
||||
^
|
||||
source.tsx meta.function.tsx meta.parameters.tsx punctuation.definition.parameters.begin.tsx
|
||||
^
|
||||
|
|
Загрузка…
Ссылка в новой задаче