diff --git a/extensions/html/server/src/htmlServerMain.ts b/extensions/html/server/src/htmlServerMain.ts index c7ecbf18257..e22ad15c346 100644 --- a/extensions/html/server/src/htmlServerMain.ts +++ b/extensions/html/server/src/htmlServerMain.ts @@ -230,17 +230,21 @@ function isValidationEnabled(languageId: string, settings: Settings = globalSett async function validateTextDocument(textDocument: TextDocument) { try { + let version = textDocument.version; let diagnostics: Diagnostic[] = []; if (textDocument.languageId === 'html') { let modes = languageModes.getAllModesInDocument(textDocument); let settings = await getDocumentSettings(textDocument, () => modes.some(m => !!m.doValidation)); - modes.forEach(mode => { - if (mode.doValidation && isValidationEnabled(mode.getId(), settings)) { - pushAll(diagnostics, mode.doValidation(textDocument, settings)); - } - }); + textDocument = documents.get(textDocument.uri); + if (textDocument && textDocument.version === version) { // check no new version has come in after in after the async op + modes.forEach(mode => { + if (mode.doValidation && isValidationEnabled(mode.getId(), settings)) { + pushAll(diagnostics, mode.doValidation(textDocument, settings)); + } + }); + connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); + } } - connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); } catch (e) { connection.console.error(formatError(`Error while validating ${textDocument.uri}`, e)); }