import { autocompletion } from "@codemirror/autocomplete"; import { rankVocab } from "./vocab-rank.js"; const WORD_RE = /[A-Za-z0-9_]{2,}/; export function vocabCompletions(vocab) { // vocab: { cvars: [{name, desc?}, …], commands: [{name, desc?}, …] } return (context) => { const word = context.matchBefore(WORD_RE); if (!word || (word.from === word.to && !context.explicit)) return null; const ranked = rankVocab(word.text, vocab); const options = ranked.map(e => ({ label: e.name, info: e.desc || e.kind, type: e.kind === "command" ? "function" : "variable", })); return { from: word.from, options, validFor: WORD_RE }; }; } export function autocompleteExtension(vocab) { return autocompletion({ override: [vocabCompletions(vocab)], activateOnTyping: true, maxRenderedOptions: 8, }); }