50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
import { toRegExp } from 'oniguruma-to-es';
|
|
import { J as JavaScriptScanner } from './shared/engine-javascript.hzpS1_41.mjs';
|
|
|
|
function defaultJavaScriptRegexConstructor(pattern, options) {
|
|
return toRegExp(
|
|
pattern,
|
|
{
|
|
global: true,
|
|
hasIndices: true,
|
|
rules: {
|
|
// Needed since TextMate grammars merge backrefs across patterns
|
|
allowOrphanBackrefs: true,
|
|
// Improves search performance for generated regexes
|
|
asciiWordBoundaries: true,
|
|
// Follow `vscode-oniguruma` which enables this Oniguruma option by default
|
|
captureGroup: true,
|
|
// Oniguruma uses depth limit `20`; lowered here to keep regexes shorter and maybe
|
|
// sometimes faster, but can be increased if issues reported due to low limit
|
|
recursionLimit: 5,
|
|
// Oniguruma option for `^`->`\A`, `$`->`\Z`; improves search performance without any
|
|
// change in meaning since TM grammars search line by line
|
|
singleline: true
|
|
},
|
|
...options
|
|
}
|
|
);
|
|
}
|
|
function createJavaScriptRegexEngine(options = {}) {
|
|
const _options = Object.assign(
|
|
{
|
|
target: "auto",
|
|
cache: /* @__PURE__ */ new Map()
|
|
},
|
|
options
|
|
);
|
|
_options.regexConstructor ||= (pattern) => defaultJavaScriptRegexConstructor(pattern, { target: _options.target });
|
|
return {
|
|
createScanner(patterns) {
|
|
return new JavaScriptScanner(patterns, _options);
|
|
},
|
|
createString(s) {
|
|
return {
|
|
content: s
|
|
};
|
|
}
|
|
};
|
|
}
|
|
|
|
export { createJavaScriptRegexEngine, defaultJavaScriptRegexConstructor };
|