vscode/extensions/html/build/update-grammar.mjs
2022-12-07 14:44:00 +01:00

44 lines
1.5 KiB
JavaScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
// @ts-check
import * as vscodeGrammarUpdater from 'vscode-grammar-updater';
function patchGrammar(grammar) {
let patchCount = 0;
let visit = function (rule, parent) {
if (rule.name === 'source.js' || rule.name === 'source.css') {
if (parent.node[0].name !== 'punctuation.definition.string.end.html' && parent.parent && parent.parent.property === 'endCaptures') {
rule.name = rule.name + '-ignored-vscode';
patchCount++;
}
}
for (let property in rule) {
let value = rule[property];
if (typeof value === 'object') {
visit(value, { node: rule, property: property, parent: parent });
}
}
};
let repository = grammar.repository;
for (let key in repository) {
visit(repository[key], { node: repository, property: key, parent: undefined });
}
if (patchCount !== 2) {
console.warn(`Expected to patch 2 occurrences of source.js & source.css: Was ${patchCount}`);
}
return grammar;
}
const tsGrammarRepo = 'textmate/html.tmbundle';
const grammarPath = 'Syntaxes/HTML.plist';
vscodeGrammarUpdater.update(tsGrammarRepo, grammarPath, './syntaxes/html.tmLanguage.json', grammar => patchGrammar(grammar));