25 lines
756 B
TypeScript
25 lines
756 B
TypeScript
![]() |
import { type CompletionContext } from '@codemirror/autocomplete';
|
||
|
|
||
|
import { describePromptVariable } from '../../labels';
|
||
|
import { type PromptVariableType } from '../../models/prompting';
|
||
|
|
||
|
export function variableCompletions(variables: string[]) {
|
||
|
return (context: CompletionContext) => {
|
||
|
let word = context.matchBefore(/\{\{[a-zA-Z.-]*/);
|
||
|
if (!word && context.explicit) {
|
||
|
word = { from: context.pos, to: context.pos, text: '' };
|
||
|
}
|
||
|
if (!word || (word.from == word.to && !context.explicit)) {
|
||
|
return null;
|
||
|
}
|
||
|
return {
|
||
|
from: word.from,
|
||
|
to: word.to,
|
||
|
options: variables.map(name => ({
|
||
|
label: `{{${name}}}`,
|
||
|
info: describePromptVariable(name as PromptVariableType)
|
||
|
}))
|
||
|
};
|
||
|
};
|
||
|
}
|