Синхронизация документов клиент-сервер VSCode - PullRequest
0 голосов
/ 23 января 2019

Тема:

Мое расширение обеспечивает автозаполнение, наведение, определение и т. Д. На основе некоторых данных, которые зависят от содержимого документа и текущей позиции курсора.В больших документах требуется много времени для вычисления этих данных для всех поставщиков.Поэтому я решил разделить расширение на клиент и сервер.

Я сделал это:

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 не определено.

Как мне поступитьс этим?

Любые примеры или полезная документация приветствуется

...