VSCode客户端-服务器文档同步

时间:2019-01-23 20:44:57

标签: visual-studio-code vscode-extensions language-server-protocol

主题:

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

我已经做到了:

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获取新的文档内容,如果 textDocumentSync中的connection.onInitialize设置为server.TextDocumentSyncKind.Full,但是event.contentChanges[0].range字段是未定义的。

我该如何处理?

感谢任何示例或有用的文档

0 个答案:

没有答案