Я столкнулся с проблемой при попытке обновить диагностику в расширении vscode - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь обновить коллекцию диагностики в расширении 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 после асинхронного c операция, подобная следующей, код не работает.

const respBody = await postRequest(uri,{name:"testcontraact1",contractcode:fileContent,limit:10});
if (vscode.window.activeTextEditor) {
   updateDiagnostics(vscode.window.activeTextEditor.document, diagnosticCollection);
}           

После отладки кода я обнаружил, что функция updateDiagnostics была выполнена, но в моем тестовом коде не отображается информация о диагностике c, которая действительно смутила меня.

1 Ответ

0 голосов
/ 16 марта 2020

Хорошо, я нашел проблему. После выполнения postRequest, activeTextEditor.document изменился. Вот я и попробую:

let dc = vscode.window.activeTextEditor?.document
const respBody = await postRequest(uri,{name:"testcontraact1",contractcode:fileContent,limit:10});
updateDiagnostics(dc, diagnosticCollection);

И это сработало !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...