add basic sample completion

This commit is contained in:
2023-11-05 00:02:48 +01:00
parent 14f64836bf
commit bc19d375ea
2 changed files with 26 additions and 2 deletions

View File

@ -34,13 +34,17 @@ import { EditorView } from "codemirror";
import { toposTheme } from "./themes/toposTheme";
import { javascript } from "@codemirror/lang-javascript";
import { inlineHoveringTips } from "./documentation/inlineHelp";
import { toposCompletions } from "./documentation/inlineHelp";
import { toposCompletions, soundCompletions } from "./documentation/inlineHelp";
import { javascriptLanguage } from "@codemirror/lang-javascript"
export const jsCompletions = javascriptLanguage.data.of({
autocomplete: toposCompletions
})
export const toposSoundCompletions = javascriptLanguage.data.of({
autocomplete: soundCompletions
})
export const editorSetup: Extension = (() => [
highlightActiveLineGutter(),
highlightSpecialChars(),
@ -91,7 +95,7 @@ export const installEditor = (app: Editor) => {
app.withLineNumbers.of(lines),
app.fontSize.of(fontModif),
app.hoveringCompartment.of(app.settings.tips ? inlineHoveringTips : []),
app.completionsCompartment.of(app.settings.completions ? jsCompletions : []),
app.completionsCompartment.of(app.settings.completions ? [jsCompletions, toposSoundCompletions] : []),
editorSetup,
toposTheme,
app.chosenLanguage.of(javascript()),

View File

@ -1,6 +1,8 @@
import { hoverTooltip } from "@codemirror/view";
import { type EditorView } from "@codemirror/view";
import { CompletionContext } from "@codemirror/autocomplete"
// @ts-ignore
import { soundMap } from "superdough";
interface InlineCompletion {
@ -996,3 +998,21 @@ export const toposCompletions = (context: CompletionContext) => {
}
}
export const soundCompletions = (context: CompletionContext) => {
let map = soundMap.get();
delete map._base;
let match = context.matchBefore(/sound\(/);
if (match) {
let from = match.from + "sound(".length;
return {
from,
options: Object.keys(map).map(key => ({
label: key,
type: map[key].data.type,
apply: `"${key}"`
})),
};
}
return null;
};