mirror of
https://github.com/eliasstepanik/strudel.git
synced 2026-01-11 21:58:37 +00:00
33 lines
782 B
JavaScript
33 lines
782 B
JavaScript
import Parser from 'web-tree-sitter';
|
|
|
|
let base = '/';
|
|
export function setBase(path) {
|
|
base = path;
|
|
}
|
|
|
|
async function _loadParser() {
|
|
await Parser.init({
|
|
locateFile(scriptName, scriptDirectory) {
|
|
return `${base}${scriptName}`;
|
|
},
|
|
});
|
|
const parser = new Parser();
|
|
const Lang = await Parser.Language.load(`${base}tree-sitter-haskell.wasm`);
|
|
parser.setLanguage(Lang);
|
|
return parser;
|
|
}
|
|
|
|
let parserLoaded;
|
|
export function loadParser() {
|
|
if (!parserLoaded) {
|
|
parserLoaded = _loadParser();
|
|
}
|
|
return parserLoaded;
|
|
}
|
|
|
|
export async function parse(code) {
|
|
const parser = await loadParser();
|
|
// for some reason, the parser doesn't like new lines..
|
|
return parser.parse(code.replaceAll('\n\n', '~~~~').replaceAll('\n', '').replaceAll('~~~~', '\n'));
|
|
}
|