let checks = [];
let oldText = "";
onmessage = function(event) {
if (event.data.action == "setup") {
checks = event.data.checks;
oldText = event.data.oldText;
for(let check of checks)
check.regexp = new RegExp(check.pattern, check.ignoreCase ? "ig" : "g");
} else if (event.data.action == "getAnnotations")
postMessage({
id : event.data.id,
annotations : getAnnotations(event.data.text)
});
}
function getAnnotations(text, cb) {
let start = performance.now();
let lines = text.split("\n"), annotations = [];
for(let line = 0; line < lines.length; line++) {
for(let check of checks) {
let match;
check.regexp.lastIndex = 0;
while( (match = check.regexp.exec(lines[line])) !== null) {
annotations.push({
from: [line, match.index],
to: [line, match.index + match[0].length],
message: check.message || "",
messageParams: [ null, match[0] ],
severity: check.severity || "warning",
added: !oldText.includes(match[0]),
});
}
}
}
console.log(`wikilint: Generated ${annotations.length} annotations from ${text.length} bytes in ${performance.now() - start} milliseconds`);
return annotations;
}