UNPKG

@valtown/codemirror-codeium

Version:

codemirror integration for codeium

61 lines 1.97 kB
import { EditorView } from "@codemirror/view"; import { Prec } from "@codemirror/state"; import { completionDecoration } from "./completionDecoration.js"; import { completionRequester } from "./completionRequester.js"; import { sameKeyCommand, rejectSuggestionCommand, acceptSuggestionCommand, } from "./commands.js"; import { codeiumConfig } from "./config.js"; import { Language } from "./api/proto/exa/codeium_common_pb/codeium_common_pb.js"; function isDecorationClicked(view) { let inRange = false; const head = view.state.selection.asSingle().ranges.at(0)?.head; if (head !== undefined) { view.state .field(completionDecoration) .decorations?.between(head, head, () => { inRange = true; }); return inRange; } return false; } function completionPlugin() { return EditorView.domEventHandlers({ keydown(event, view) { if (event.key !== "Shift" && event.key !== "Control" && event.key !== "Alt" && event.key !== "Meta") { return sameKeyCommand(view, event.key); } else { return false; } }, mouseup(_event, view) { if (isDecorationClicked(view)) { return acceptSuggestionCommand(view); } else { return rejectSuggestionCommand(view); } }, }); } function viewCompletionPlugin() { return EditorView.updateListener.of((update) => { if (update.focusChanged) { rejectSuggestionCommand(update.view); } }); } export { Language }; export function copilotPlugin(config) { return [ codeiumConfig.of(config), completionDecoration, Prec.highest(completionPlugin()), Prec.highest(viewCompletionPlugin()), completionRequester(), ]; } //# sourceMappingURL=plugin.js.map