From bc19d375ea4600daf651b5228cbb519410546afa Mon Sep 17 00:00:00 2001 From: Raphael Forment Date: Sun, 5 Nov 2023 00:02:48 +0100 Subject: [PATCH] add basic sample completion --- src/EditorSetup.ts | 8 ++++++-- src/documentation/inlineHelp.ts | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/EditorSetup.ts b/src/EditorSetup.ts index 5e3be76..da6696e 100644 --- a/src/EditorSetup.ts +++ b/src/EditorSetup.ts @@ -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()), diff --git a/src/documentation/inlineHelp.ts b/src/documentation/inlineHelp.ts index eddb2c3..5290296 100644 --- a/src/documentation/inlineHelp.ts +++ b/src/documentation/inlineHelp.ts @@ -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; +};