@eagleoutice/flowr-dev
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
57 lines • 2.36 kB
JavaScript
;
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