strudel/packages/haskell/parser.mjs
2024-05-16 14:30:00 +02:00

23 lines
652 B
JavaScript

import Parser from 'web-tree-sitter';
const base = import.meta.env.BASE_URL;
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 = loadParser();
export async function parse(code) {
const parser = await parserLoaded;
// for some reason, the parser doesn't like new lines..
return parser.parse(code.replaceAll('\n\n', '~~~~').replaceAll('\n', '').replaceAll('~~~~', '\n'));
}