Rename, fix autocomplete and singleline, etc...

This commit is contained in:
Gregory Schier
2023-03-02 10:42:43 -08:00
parent 70f534f1d8
commit 0ccceaac77
27 changed files with 128 additions and 114 deletions

View File

@@ -1,16 +1,15 @@
import { LRLanguage, LanguageSupport } from '@codemirror/language';
import { LanguageSupport, LRLanguage } from '@codemirror/language';
import { parseMixed } from '@lezer/common';
import { myCompletions } from '../completion/completion';
import { placeholders } from '../widgets';
import { parser as twigParser } from './twig';
export function twig(base?: LanguageSupport) {
const parser = mixedOrPlainParser(base);
const twigLanguage = LRLanguage.define({ name: 'twig', parser, languageData: {} });
const completion = twigLanguage.data.of({
const language = mixedOrPlainLanguage(base);
const completion = language.data.of({
autocomplete: myCompletions,
});
const languageSupport = new LanguageSupport(twigLanguage, [completion]);
const languageSupport = new LanguageSupport(language, [completion]);
if (base) {
const completion2 = base.language.data.of({ autocomplete: myCompletions });
@@ -21,31 +20,22 @@ export function twig(base?: LanguageSupport) {
}
}
function mixedOrPlainParser(base?: LanguageSupport) {
if (base === undefined) {
return twigParser;
function mixedOrPlainLanguage(base?: LanguageSupport): LRLanguage {
const name = 'twig';
if (base == null) {
return LRLanguage.define({ name, parser: twigParser });
}
const mixedParser = twigParser.configure({
props: [
// Add basic folding/indent metadata
// foldNodeProp.add({ Conditional: foldInside }),
// indentNodeProp.add({
// Conditional: (cx) => {
// const closed = /^\s*\{% endif/.test(cx.textAfter);
// return cx.lineIndent(cx.node.from) + (closed ? 0 : cx.unit);
// },
// }),
],
const parser = twigParser.configure({
wrap: parseMixed((node) => {
return node.type.isTop
? {
parser: base.language.parser,
overlay: (node) => node.type.name === 'Text',
}
: null;
if (!node.type.isTop) return null;
return {
parser: base.language.parser,
overlay: (node) => node.type.name === 'Text',
};
}),
});
return mixedParser;
return LRLanguage.define({ name, parser });
}