UNPKG

@eagleoutice/flowr-dev

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

57 lines 2.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TreeSitterExecutor = exports.DEFAULT_TREE_SITTER_WASM_PATH = exports.DEFAULT_TREE_SITTER_R_WASM_PATH = void 0; const web_tree_sitter_1 = __importDefault(require("web-tree-sitter")); const fs_1 = __importDefault(require("fs")); const config_1 = require("../../../config"); exports.DEFAULT_TREE_SITTER_R_WASM_PATH = `${__dirname}/tree-sitter-r.wasm`; exports.DEFAULT_TREE_SITTER_WASM_PATH = `${__dirname}/tree-sitter.wasm`; /** * Synchronous and (way) faster alternative to the {@link RShell} using tree-sitter. */ class TreeSitterExecutor { name = 'tree-sitter'; parser; static language; static async initTreeSitter() { const config = (0, config_1.getEngineConfig)('tree-sitter'); const treeSitterWasmPath = config?.treeSitterWasmPath ?? exports.DEFAULT_TREE_SITTER_WASM_PATH; // noinspection JSUnusedGlobalSymbols - this is used by emscripten, see https://emscripten.org/docs/api_reference/module.html await web_tree_sitter_1.default.init({ locateFile: (path, prefix) => { // allow setting a custom path for the tree sitter wasm file if (path.endsWith('tree-sitter.wasm')) { return treeSitterWasmPath; } return prefix + path; } }); const wasmPath = config?.wasmPath ?? exports.DEFAULT_TREE_SITTER_R_WASM_PATH; TreeSitterExecutor.language = await web_tree_sitter_1.default.Language.load(wasmPath); } constructor() { this.parser = new web_tree_sitter_1.default(); this.parser.setLanguage(TreeSitterExecutor.language); } rVersion() { return Promise.resolve('none'); } parse(request) { let sourceCode; if (request.request === 'file') { sourceCode = fs_1.default.readFileSync(request.content, 'utf8'); } else { sourceCode = request.content; } return this.parser.parse(sourceCode); } close() { this.parser.delete(); } } exports.TreeSitterExecutor = TreeSitterExecutor; //# sourceMappingURL=tree-sitter-executor.js.map