-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Current "intellisense" is very primitive, which doesn't work in a lot of cases:
evolve_script_manager/src/lib/editor/monaco/codeCompletion.ts
Lines 76 to 130 in 35f32f7
| function getCandidates(model: Monaco.editor.ITextModel, position: Monaco.Position, state: State): string[] | Record<string, string> { | |
| const tokenStack = tokenizeBackwards(model, position); | |
| const prefix = tryGetPrefix(tokenStack); | |
| if (prefix !== undefined) { | |
| const settingInfo = prefixes[prefix]; | |
| const expressionInfo = expressions[prefix]; | |
| if (settingInfo !== undefined && !(expressionInfo !== undefined && insideCondition(tokenStack))) { | |
| return settingInfo.allowedSuffixes; | |
| } | |
| if (expressionInfo !== undefined) { | |
| let candidates = expressionInfo.allowedValues; | |
| if (prefix === "SettingCurrent" || prefix === "SettingDefault") { | |
| return [...Object.keys(prefixes), ...Object.keys(candidates)]; | |
| } | |
| else { | |
| return candidates; | |
| } | |
| } | |
| } | |
| else if (isAssignee(tokenStack)) { | |
| const enumValues = settingEnums[tokenStack[0]] ?? settingEnums[tokenStack[1]]; | |
| if (enumValues !== undefined) { | |
| return Object.fromEntries(Object.entries(enumValues).map(([text, label]) => [`"${text}"`, label])); | |
| } | |
| } | |
| else if (insideCondition(tokenStack)) { | |
| return [...Object.keys(expressions), ...Object.keys(otherExpressions)]; | |
| } | |
| else if (insideImport(tokenStack)) { | |
| return Object.fromEntries(state.configs.map(cfg => [cfg.name, cfg.name])); | |
| } | |
| else if (tokenStack.length > 1 && tokenStack[1] in triggerActions) { | |
| return triggerActions[tokenStack[1] as keyof typeof triggerActions].allowedValues; | |
| } | |
| else if (tokenStack.length > 1 && tokenStack[1] in triggerConditions) { | |
| return triggerConditions[tokenStack[1] as keyof typeof triggerConditions].allowedValues; | |
| } | |
| else if (tokenStack.length > 0 && tokenStack[0] in triggerActions) { | |
| return triggerActions[tokenStack[0] as keyof typeof triggerActions].allowedValues; | |
| } | |
| else if (tokenStack.length > 0 && tokenStack[0] in triggerConditions) { | |
| return triggerConditions[tokenStack[0] as keyof typeof triggerConditions].allowedValues; | |
| } | |
| else if (tokenStack.length > 0 && (tokenStack[0] === "when" || tokenStack[1] === "when")) { | |
| return Object.keys(triggerConditions); | |
| } | |
| else if (tokenStack.length < 2) { | |
| return [...Object.keys(prefixes), ...settings, ...Object.keys(triggerActions)]; | |
| } | |
| return []; | |
| } |
Implement the LSP instead, it should show variables that are available in the current scope and differentiate between Challenge the setting prefix and Challenge the condition expression to name a few things.
Reactions are currently unavailable