Monaco Editor registerCompletionItemProvider删除默认的局部变量完成

Ald*_*y J 9 monaco-editor

在Monaco Editor中,使用标准初始化,例如:

monaco.editor.create(document.getElementById("container"), {
    value: "",
    language: "csharp"
});
Run Code Online (Sandbox Code Playgroud)

将有一个开箱即用的局部变量代码完成.例如,使用上面的标准初始化,并键入如下代码:

string testVariable = "This is a string";
int aValue = 123;
Run Code Online (Sandbox Code Playgroud)

代码完成将识别"testVariable"和"aValue"变量,并在代码完成列表中显示它们.

但是,如果我们将registerCompletionItemProvider添加到初始化中,如下所示:

//Custom Code Completion function
function createCompleters() {
    return [
        {
            label: 'customFunction1',
            kind: monaco.languages.CompletionItemKind.Function,
            documentation: "My first Custom Function",
            insertText: 'customFunction1()'
        },
        {
            label: 'customFunction2',
            kind: monaco.languages.CompletionItemKind.Function,
            documentation: "My second Custom Function",
            insertText: 'customFunction2()'
        }
    ];
}
//Register the custom completion function into Monaco Editor    
monaco.languages.registerCompletionItemProvider('csharp', {
    provideCompletionItems: function(model, position) {
        return createCompleters();
    }
});
//Continue with the Standard initialization here...
monaco.editor.create(document.getElementById("container"), {
    value: "",
    language: "csharp"
});
Run Code Online (Sandbox Code Playgroud)

然后,不再识别局部变量,仅识别已注册的函数.

如何注册自定义代码完成但仍保留局部变量完成?谢谢!

小智 1

您需要添加一些与您的功能相匹配的东西。如果您匹配所有内容,您将只能找到 createCompleters() 函数中的函数。我还没有找到如何根据返回的建议中找到的内容进行搜索以及如何研究局部变量。下面的代码有效,请在操场上尝试并开始输入“cu”。我知道这不是完整的答案,但希望它能让你继续下去。

//Custom Code Completion function
function createCompleters() {
    return [
        {
            label: 'customFunction1',
            kind: monaco.languages.CompletionItemKind.Function,
            documentation: "My first Custom Function",
            insertText: 'customFunction1()'
        },
        {
            label: 'customFunction2',
            kind: monaco.languages.CompletionItemKind.Function,
            documentation: "My second Custom Function",
            insertText: 'customFunction2()'
        }
    ];
}
//Register the custom completion function into Monaco Editor    
monaco.languages.registerCompletionItemProvider('csharp', {
    provideCompletionItems: function(model, position) {

        var textUntilPosition = model.getValueInRange({startLineNumber: position.lineNumber, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column});
        var match = textUntilPosition.match(/cu/gim);
        var suggestions = match ? createCompleters() : [];
        return {
            suggestions: suggestions
        };

        return createCompleters();
    }
});
//Continue with the Standard initialization here...
monaco.editor.create(document.getElementById("container"), {
    value: "",
    language: "csharp"
});
Run Code Online (Sandbox Code Playgroud)