Тема:
Мое расширение обеспечивает автозаполнение, наведение, определение и т. Д. На основе некоторых данных, которые зависят от содержимого документа и текущей позиции курсора.В больших документах требуется много времени для вычисления этих данных для всех поставщиков.Поэтому я решил разделить расширение на клиент и сервер.
Я сделал это:
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
не определено.
Как мне поступитьс этим?
Любые примеры или полезная документация приветствуется