mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 13:00:58 +00:00
96 lines
3.3 KiB
JavaScript
96 lines
3.3 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 { update } from 'vscode-grammar-updater';
|
|
|
|
function removeDom(grammar) {
|
|
grammar.repository['support-objects'].patterns = grammar.repository['support-objects'].patterns.filter(pattern => {
|
|
if (pattern.match && (
|
|
/\b(HTMLElement|ATTRIBUTE_NODE|stopImmediatePropagation)\b/g.test(pattern.match)
|
|
|| /\bJSON\b/g.test(pattern.match)
|
|
|| /\bMath\b/g.test(pattern.match)
|
|
)) {
|
|
return false;
|
|
}
|
|
|
|
if (pattern.name?.startsWith('support.class.error.')
|
|
|| pattern.name?.startsWith('support.class.builtin.')
|
|
|| pattern.name?.startsWith('support.function.')
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
});
|
|
return grammar;
|
|
}
|
|
|
|
function removeNodeTypes(grammar) {
|
|
grammar.repository['support-objects'].patterns = grammar.repository['support-objects'].patterns.filter(pattern => {
|
|
if (pattern.name) {
|
|
if (pattern.name.startsWith('support.variable.object.node') || pattern.name.startsWith('support.class.node.')) {
|
|
return false;
|
|
}
|
|
}
|
|
if (pattern.captures) {
|
|
if (Object.values(pattern.captures).some(capture =>
|
|
capture.name && (capture.name.startsWith('support.variable.object.process')
|
|
|| capture.name.startsWith('support.class.console'))
|
|
)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
return grammar;
|
|
}
|
|
|
|
function patchJsdoctype(grammar) {
|
|
grammar.repository['jsdoctype'].patterns = grammar.repository['jsdoctype'].patterns.filter(pattern => {
|
|
if (pattern.name && pattern.name.includes('illegal')) {
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
return grammar;
|
|
}
|
|
|
|
function patchGrammar(grammar) {
|
|
return removeNodeTypes(removeDom(patchJsdoctype(grammar)));
|
|
}
|
|
|
|
function adaptToJavaScript(grammar, replacementScope) {
|
|
grammar.name = 'JavaScript (with React support)';
|
|
grammar.fileTypes = ['.js', '.jsx', '.es6', '.mjs', '.cjs'];
|
|
grammar.scopeName = `source${replacementScope}`;
|
|
|
|
var fixScopeNames = function (rule) {
|
|
if (typeof rule.name === 'string') {
|
|
rule.name = rule.name.replace(/\.tsx/g, replacementScope);
|
|
}
|
|
if (typeof rule.contentName === 'string') {
|
|
rule.contentName = rule.contentName.replace(/\.tsx/g, replacementScope);
|
|
}
|
|
for (var property in rule) {
|
|
var value = rule[property];
|
|
if (typeof value === 'object') {
|
|
fixScopeNames(value);
|
|
}
|
|
}
|
|
};
|
|
|
|
var repository = grammar.repository;
|
|
for (var key in repository) {
|
|
fixScopeNames(repository[key]);
|
|
}
|
|
}
|
|
|
|
var tsGrammarRepo = 'microsoft/TypeScript-TmLanguage';
|
|
update(tsGrammarRepo, 'TypeScript.tmLanguage', './syntaxes/TypeScript.tmLanguage.json', grammar => patchGrammar(grammar));
|
|
update(tsGrammarRepo, 'TypeScriptReact.tmLanguage', './syntaxes/TypeScriptReact.tmLanguage.json', grammar => patchGrammar(grammar));
|
|
update(tsGrammarRepo, 'TypeScriptReact.tmLanguage', '../javascript/syntaxes/JavaScript.tmLanguage.json', grammar => adaptToJavaScript(patchGrammar(grammar), '.js'));
|
|
update(tsGrammarRepo, 'TypeScriptReact.tmLanguage', '../javascript/syntaxes/JavaScriptReact.tmLanguage.json', grammar => adaptToJavaScript(patchGrammar(grammar), '.js.jsx'));
|