我尝试在vscode扩展中更新诊断集合。我写的代码如下:
if (vscode.window.activeTextEditor) {
updateDiagnostics(vscode.window.activeTextEditor.document, diagnosticCollection);
} 函数updateDiagnostics类似于:
function updateDiagnostics(document: vscode.TextDocument, collection: vscode.DiagnosticCollection): void {
let diagnostics: vscode.Diagnostic[] = [];
if (document) {
let message = `error message`;
let range = new vscode.Range(new vscode.Position(3,4), new vscode.Position(3,5))
let severity = vscode.DiagnosticSeverity.Error
let diagnostic = new vscode.Diagnostic(range, message, severity);
diagnostics.push(diagnostic);
collection.set(document.uri, diagnostics)
} else {
collection.clear();
}
}这段代码可以工作,但是当我像下面这样将if语句放在异步操作之后时,代码不能工作。
const respBody = await postRequest(uri,{name:"testcontraact1",contractcode:fileContent,limit:10});
if (vscode.window.activeTextEditor) {
updateDiagnostics(vscode.window.activeTextEditor.document, diagnosticCollection);
} 调试代码后,我发现函数updateDiagnostics已经执行了,但是在我的测试代码中没有显示诊断信息,这真的让我感到困惑。
发布于 2020-03-16 13:43:43
好了,我找到问题所在了。在执行postRequest之后,activeTextEditor.document就不同了。所以我试着这样做:
let dc = vscode.window.activeTextEditor?.document
const respBody = await postRequest(uri,{name:"testcontraact1",contractcode:fileContent,limit:10});
updateDiagnostics(dc, diagnosticCollection);它成功了!
https://stackoverflow.com/questions/60700797
复制相似问题