自定义 vscode 扩展中的 Intellisense 不起作用

问题描述 投票:0回答:1

我已经从 microsoft lsp-sample 复制了设置。完成的处理在服务器中。

connection.onCompletion(
    (_textDocumentPosition: TextDocumentPositionParams): CompletionItem[] | undefined => {
        const document = documents.get(_textDocumentPosition.textDocument.uri);
        const linePrefix = document?.getText({
            start: { line: _textDocumentPosition.position.line, character: 0 },
            end: _textDocumentPosition.position,
        });

        if(!linePrefix?.startsWith('Record.')){
            const yamlComplete: CompletionItem[] = getCompletionFromYaml();
            console.log(yamlComplete);
            return yamlComplete;
        }
        
        const output: CompletionItem[] = [];
        let i = 1;
        for(const currKey of tableData){
            const keys = Object.keys(currKey);
            output.push({
                label: keys[0],
                kind: CompletionItemKind.Field,
                data: i,
                documentation: 'test'
            });
            i++;
        }
        console.log(output);
        return output;
        }
); 

回报正确且格式正确:

This is from the yamlComplete
[
  { label: 'record_get', kind: 2, data: 1 },
  { label: 'record_find', kind: 2, data: 2 }
]

如果前缀不是

Record.
,它就可以工作。如果这是真的,我希望 vscode 给我以下项目作为自动完成:

This is the output
[
  { label: 'test_id', kind: 5, data: 1, documentation: 'test' },
  { label: 'event_id', kind: 5, data: 2, documentation: 'test' }
]

但是我根本没有得到任何建议。我相信这是因为 vscode 正在查找行中并搜索其中包含

Record.
的建议。

所以预期的行为是当我输入 Record 时。我应该获得 test_id 和 event_id 作为该对象的项目的建议。

如果我将 onCompletion() 的标签重写为:

label: 
Record.${keys[0]}`` 它有点工作,但对我来说这似乎是一个干净且正确的解决方案。

提前谢谢你:)

typescript vscode-extensions language-server-protocol
1个回答
0
投票

问题解决方案:

output.push({
            label: keys[0],
            kind: CompletionItemKind.Field,
            filterText: `Record.${keys[0]}`,
            insertText: `Record.${keys[0]}`
        });

这对我们有用!

© www.soinside.com 2019 - 2024. All rights reserved.