3

ユーザーがファイルを変更するたびにファイルを解析したいので、onDidChangeTextDocumentからメソッドを実装しconnectionます。

しかし、このイベントは URI とコンテンツの変更を提供するだけです。ドキュメント全体を入手するにはどうすればよいですか?

Obs .:onDidChangeContent fromも実装しようとしましたdocumentsが、呼び出されませんでした。

4

2 に答える 2

5

ドキュメントは onDidChangeTextDocument に渡されたイベントにあります。これが私がそれを処理する方法です:

var changeTimeout;
vscode.workspace.onDidChangeTextDocument(function (event) {
    if (changeTimeout != null)
        clearTimeout(changeTimeout);
    changeTimeout = setInterval(function () {
        clearTimeout(changeTimeout);
        changeTimeout = null;
        backend.reparse(event.document.fileName, event.document.getText());
        processDiagnostic(event.document);
    }, 500);
});

これは、MSがドキュメントに書いているものです:

// The content of a text document has changed. This event is emitted
// when the text document first opened or when its content has changed.
documents.onDidChangeContent((change) => {
    let diagnostics: Diagnostic[] = [];
    let lines = change.document.getText().split(/\r?\n/g);
    lines.forEach((line, i) => {
        let index = line.indexOf('typescript');
        if (index >= 0) {
            diagnostics.push({
                severity: DiagnosticSeverity.Warning,
                range: {
                    start: { line: i, character: index},
                    end: { line: i, character: index + 10 }
                },
                message: `${line.substr(index, 10)} should be spelled TypeScript`,
                source: 'ex'
            });
        }
    })
    // Send the computed diagnostics to VS Code.
    connection.sendDiagnostics({ uri: change.document.uri, diagnostics });
});

そのため、ドキュメント (およびテキスト) はイベントで利用可能である必要があります。

于 2016-09-17T08:22:07.883 に答える
1

Obs .: ドキュメントから onDidChangeContent を実装しようとしましたが、呼び出されませんでした。

私が疑問に思っているのはonDidChangeContent、これらのいずれかを使用すると呼び出されなくなるのはなぜですか: onDidChangeTextDocumentonDidOpenTextDocumentonDidCloseTextDocument. いずれかの方法しか使用できないようです。

だから、あなたが探しているのはこれです:

documents.onDidChangeContent(change => {
  connection.console.log(change.document.getText())
})

すべてchange.documentのメンバー:uri,languageId,version,getText,update,getLineOffsets,positionAt,offsetAt,lineCount

于 2016-11-14T12:39:31.957 に答える