主题:
我的扩展程序根据某些数据提供了自动完成,悬停,定义等功能,这些数据取决于文档内容和当前光标位置。在大型文档中,为所有提供者计算此数据需要花费大量时间。因此,我决定将扩展名拆分为客户端和服务器。
我已经做到了:
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
字段是未定义的。
我该如何处理?
感谢任何示例或有用的文档