UNPKG

vscode-tmgrammar-test

Version:
116 lines 4.78 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadConfiguration = exports.createRegistryFromGrammars = exports.createRegistry = void 0; const fs = __importStar(require("fs")); const path = __importStar(require("path")); const tm = __importStar(require("vscode-textmate")); const oniguruma = __importStar(require("vscode-oniguruma")); function createRegistry(gs) { return createRegistryFromGrammars(gs.map((grammar) => { return { grammar, content: fs.readFileSync(grammar.path).toString() }; })); } exports.createRegistry = createRegistry; function createRegistryFromGrammars(grammars) { let grammarIndex = {}; let _injections = {}; for (const g of grammars) { const { grammar, content } = g; let rawGrammar = tm.parseRawGrammar(content, grammar.path); grammarIndex[grammar.scopeName || rawGrammar.scopeName] = rawGrammar; if (grammar.injectTo) { for (let injectScope of grammar.injectTo) { let injections = _injections[injectScope]; if (!injections) { _injections[injectScope] = injections = []; } injections.push(grammar.scopeName); } } } const wasmPath = require.resolve('vscode-oniguruma').replace(/main\.js$/, 'onig.wasm'); const wasmBin = fs.readFileSync(wasmPath).buffer; const vscodeOnigurumaLib = oniguruma.loadWASM(wasmBin).then(() => { return { createOnigScanner(patterns) { return new oniguruma.OnigScanner(patterns); }, createOnigString(s) { return new oniguruma.OnigString(s); } }; }); return new tm.Registry({ onigLib: vscodeOnigurumaLib, loadGrammar: (scopeName) => { if (grammarIndex[scopeName] !== undefined) { return new Promise((fulfill, _) => { fulfill(grammarIndex[scopeName]); }); } console.warn(`grammar not found for "${scopeName}"`); return null; }, getInjections: (scopeName) => { const xs = scopeName.split('.'); let injections = []; for (let i = 1; i <= xs.length; i++) { const subScopeName = xs.slice(0, i).join('.'); injections = [...injections, ...(_injections[subScopeName] || [])]; } return injections; } }); } exports.createRegistryFromGrammars = createRegistryFromGrammars; function loadConfiguration(config, scope, grammar) { const configPath = config || 'package.json'; let grammars = []; let extensionToScope = (_) => scope || undefined; if (grammar) { const xs = grammar.map((path) => ({ path, scopeName: '' })); grammars.push(...xs); } if (fs.existsSync(configPath)) { const json = JSON.parse(fs.readFileSync(configPath).toString()); let xs = json?.contributes?.grammars || []; const dirPath = path.dirname(configPath); xs.forEach((x) => { x.path = path.join(dirPath, x.path); }); grammars.push(...xs); let ys = json?.contributes?.languages || []; let langToScope = Object.assign({}, ...grammars.filter((x) => x.language).map((x) => ({ [x.language || '']: x.scopeName }))); let extToLang = Object.assign({}, ...ys.map((x) => (x.extensions || []).map((e) => ({ [e]: x.id }))).flat()); extensionToScope = (ext) => scope || langToScope[extToLang[ext]]; } return { grammars, extensionToScope }; } exports.loadConfiguration = loadConfiguration; //# sourceMappingURL=index.js.map