首页 > 解决方案 > 如何根据之前的文本动态过滤 monaco-editor 建议?

问题描述

我有一个建议列表,我希望编辑器根据之前输入的单词过滤显示的建议,例如,如果我的建议列表是 ['car', 'dog', 'pet'],如果我输入“洗。” 我只希望“汽车”显示为建议,并且如果我输入“获取”。我想要“宠物”和“狗”作为建议。

如果有帮助,这是我的代码示例:

monaco.languages.registerCompletionItemProvider('typescript', {
            triggerCharacters: ["."],
            provideCompletionItems: () => ({ suggestions: createSuggestions(items) })
});

const createSuggestions = (list) => list.map(suggestion => ({
            label: suggestion,
            kind: monaco.languages.CompletionItemKind.Keyword,
            insertText: suggestion
        })
);

标签: monaco-editorngx-monaco-editor

解决方案


当您在完成项中提供范围时,这会自动发生:

                            const offset = model.getOffsetAt(localPosition);
                            const promise = service.getCompletionsAtPosition(model.uri.toString(), offset);

                            void promise.then((completions: CompletionInfo | undefined) => {
                                if (completions) {
                                    const info = model.getWordUntilPosition(localPosition);
                                    const replaceRange: IRange = {
                                        startLineNumber: position.lineNumber,
                                        startColumn: info.startColumn,
                                        endLineNumber: position.lineNumber,
                                        endColumn: info.endColumn,
                                    };

                                    resolve({
                                        incomplete: false,
                                        suggestions: completions.entries.map((entry) => ({
                                            label: entry.name,
                                            kind: this.convertKind(entry.kind),
                                            range: replaceRange,
                                            insertText: entry.insertText || entry.name,
                                        } as CompletionItem)),
                                    });
                                } else {
                                    resolve({ incomplete: false, suggestions: [] });
                                }
                            });

推荐阅读