如何使用摩纳哥将自动完成添加到基于浏览器的编辑器

LYa*_*ass 3 antlr autocomplete editor typescript monaco-editor

所以最近我想使用自定义语言创建一个基于浏览器的编辑monacoantlr。我遵循了这个很棒的教程https://tomassetti.me/writing-a-browser-based-editor-using-monaco-and-antlr/

Monaco 已经在按 ctrl + space 时给出了建议,但我想在monaco. 我怎样才能做到这一点?

Mik*_*hke 6

摩纳哥支持注册自己的完成提供商。这是针对每种语言的注册,但适用于所有编辑器实例。使用您的提供程序的实例调用languages.registerCompletionItemProvider 。

提供者类本身非常简单。就像是:

export class CodeCompletionProvider implements languages.CompletionItemProvider {

    public readonly triggerCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.\\@(".split("");

    public provideCompletionItems(model: ITextModel, position: Position, context: CompletionContext,
        token: CancellationToken): ProviderResult<CompletionList> {

            return {
                incomplete: false,
                suggestions: this.createInternalCompletionItems(replaceRange, model.editorMode),
            };
        }

        return services.getCodeCompletionItems(sourceContext, position);
    }

    public resolveCompletionItem(item: CompletionItem, token: CancellationToken): ProviderResult<CompletionItem> {

        return item;
    }

}
Run Code Online (Sandbox Code Playgroud)

真正的工作是生成完成项。一种方法是使用我的antlr4-c3 代码完成核心,并使用逻辑对其进行修改,以创建和使用符号表来提供符号信息。