ユーザーがファイルを変更するたびにファイルを解析したいので、onDidChangeTextDocument
からメソッドを実装しconnection
ます。
しかし、このイベントは URI とコンテンツの変更を提供するだけです。ドキュメント全体を入手するにはどうすればよいですか?
Obs .:onDidChangeContent
fromも実装しようとしましたdocuments
が、呼び出されませんでした。
ユーザーがファイルを変更するたびにファイルを解析したいので、onDidChangeTextDocument
からメソッドを実装しconnection
ます。
しかし、このイベントは URI とコンテンツの変更を提供するだけです。ドキュメント全体を入手するにはどうすればよいですか?
Obs .:onDidChangeContent
fromも実装しようとしましたdocuments
が、呼び出されませんでした。
ドキュメントは 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 });
});
そのため、ドキュメント (およびテキスト) はイベントで利用可能である必要があります。
Obs .: ドキュメントから onDidChangeContent を実装しようとしましたが、呼び出されませんでした。
私が疑問に思っているのはonDidChangeContent
、これらのいずれかを使用すると呼び出されなくなるのはなぜですか: onDidChangeTextDocument
、onDidOpenTextDocument
、onDidCloseTextDocument
. いずれかの方法しか使用できないようです。
だから、あなたが探しているのはこれです:
documents.onDidChangeContent(change => {
connection.console.log(change.document.getText())
})
すべてchange.document
のメンバー:uri,languageId,version,getText,update,getLineOffsets,positionAt,offsetAt,lineCount