0

主题:

我的扩展提供了基于一些数据的自动完成、悬停、定义等,这取决于文档内容和当前光标位置。在大型文档中,为所有提供者计算这些数据需要花费大量时间。所以我决定在客户端和服务器中拆分扩展。

我已经这样做了:

import * as server from 'vscode-languageserver';
var connection = server.createConnection();
var documents = new server.TextDocuments();

connection.onInitialize((params: server.InitializeParams) =>
{
    return {
        capabilities: {
            textDocumentSync: documents.syncKind,
            completionProvider: {
                resolveProvider: false
            }
        }
    };
});

documents.listen(connection);
connection.listen();

问题:

如何在服务器端同时获取实际文档内容和当前光标位置?

当我尝试根据完成请求获取当前文档时

connection.onCompletion(context =>
{
    let document = documents.get(context.textDocument.uri);
    console.log(document.getText().length);
    return [];
})

我发现它没有改变

同样的情况也发生在connection.onDidChangeTextDocument事件上。event.contentChanges[0].text如果 textDocumentSyncinconnection.onInitialize设置为,我可以通过获取新的文档内容server.TextDocumentSyncKind.Full,但是这样该event.contentChanges[0].range字段是未定义的。

我该如何处理?

任何示例或有用的文档表示赞赏

4

0 回答 0