Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/html/build/update-grammar.mjs
3314 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
// @ts-check
6
7
import * as vscodeGrammarUpdater from 'vscode-grammar-updater';
8
9
function patchGrammar(grammar) {
10
let patchCount = 0;
11
12
let visit = function (rule, parent) {
13
if (rule.name === 'source.js' || rule.name === 'source.css') {
14
if (parent.node[0].name !== 'punctuation.definition.string.end.html' && parent.parent && parent.parent.property === 'endCaptures') {
15
rule.name = rule.name + '-ignored-vscode';
16
patchCount++;
17
}
18
}
19
for (let property in rule) {
20
let value = rule[property];
21
if (typeof value === 'object') {
22
visit(value, { node: rule, property: property, parent: parent });
23
}
24
}
25
};
26
27
let repository = grammar.repository;
28
for (let key in repository) {
29
visit(repository[key], { node: repository, property: key, parent: undefined });
30
}
31
if (patchCount !== 2) {
32
console.warn(`Expected to patch 2 occurrences of source.js & source.css: Was ${patchCount}`);
33
}
34
35
return grammar;
36
}
37
38
function patchGrammarDerivative(grammar) {
39
let patchCount = 0;
40
41
let patterns = grammar.patterns;
42
for (let key in patterns) {
43
if (patterns[key]?.name === 'meta.tag.other.unrecognized.html.derivative' && patterns[key]?.begin === '(</?)(\\w[^\\s>]*)(?<!/)') {
44
patterns[key].begin = '(</?)(\\w[^\\s<>]*)(?<!/)';
45
patchCount++;
46
}
47
}
48
if (patchCount !== 1) {
49
console.warn(`Expected to do 1 patch: Was ${patchCount}`);
50
}
51
52
return grammar;
53
}
54
55
const tsGrammarRepo = 'textmate/html.tmbundle';
56
const grammarPath = 'Syntaxes/HTML.plist';
57
vscodeGrammarUpdater.update(tsGrammarRepo, grammarPath, './syntaxes/html.tmLanguage.json', grammar => patchGrammar(grammar));
58
59
const grammarDerivativePath = 'Syntaxes/HTML%20%28Derivative%29.tmLanguage';
60
vscodeGrammarUpdater.update(tsGrammarRepo, grammarDerivativePath, './syntaxes/html-derivative.tmLanguage.json', grammar => patchGrammarDerivative(grammar));
61
62
63