mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-18 07:23:51 +01:00
Add .oxfmtignore to skip generated bindings and wasm-pack output. Add npm format script, update DEVELOPMENT.md for Vite+ toolchain, and format all non-generated files with oxfmt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import type { CompletionContext } from "@codemirror/autocomplete";
|
|
import type { GenericCompletionOption } from "@yaakapp-internal/plugins";
|
|
import { defaultBoost } from "./twig/completion";
|
|
|
|
export interface GenericCompletionConfig {
|
|
minMatch?: number;
|
|
options: GenericCompletionOption[];
|
|
}
|
|
|
|
/**
|
|
* Complete options, always matching until the start of the line
|
|
*/
|
|
export function genericCompletion(config?: GenericCompletionConfig) {
|
|
if (config == null) return [];
|
|
|
|
const { minMatch = 1, options } = config;
|
|
|
|
return function completions(context: CompletionContext) {
|
|
const toMatch = context.matchBefore(/.*/);
|
|
|
|
// Only match if we're at the start of the line
|
|
if (toMatch === null || toMatch.from > 0) return null;
|
|
|
|
const matchedMinimumLength = toMatch.to - toMatch.from >= minMatch;
|
|
if (!matchedMinimumLength && !context.explicit) return null;
|
|
|
|
const optionsWithoutExactMatches = options
|
|
.filter((o) => o.label !== toMatch.text)
|
|
.map((o) => ({
|
|
...o,
|
|
boost: defaultBoost(o),
|
|
}));
|
|
return {
|
|
validFor: () => true, // Not really sure why this is all it needs
|
|
from: toMatch.from,
|
|
options: optionsWithoutExactMatches,
|
|
};
|
|
};
|
|
}
|