37 lines
811 B
JavaScript
37 lines
811 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")
|
|
);
|
|
}
|