主题:
我的扩展提供了基于一些数据的自动完成、悬停、定义等,这取决于文档内容和当前光标位置。在大型文档中,为所有提供者计算这些数据需要花费大量时间。所以我决定在客户端和服务器中拆分扩展。
我已经这样做了:
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
inconnection.onInitialize
设置为,我可以通过获取新的文档内容server.TextDocumentSyncKind.Full
,但是这样该event.contentChanges[0].range
字段是未定义的。
我该如何处理?
任何示例或有用的文档表示赞赏