From 5817ae954f1d6763f3a0c6982c9ac498a88f74b5 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 23 Mar 2018 14:23:22 -0700 Subject: [PATCH] Don't request ts/js quickfixes for possibly stale diagnostic locations Fixes #45785 --- .../src/features/bufferSyncSupport.ts | 5 +++++ .../src/features/quickFixProvider.ts | 9 ++++++++- .../typescript-language-features/src/languageProvider.ts | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/extensions/typescript-language-features/src/features/bufferSyncSupport.ts b/extensions/typescript-language-features/src/features/bufferSyncSupport.ts index a18d1cc2aea..105663f14e4 100644 --- a/extensions/typescript-language-features/src/features/bufferSyncSupport.ts +++ b/extensions/typescript-language-features/src/features/bufferSyncSupport.ts @@ -267,6 +267,11 @@ export default class BufferSyncSupport { }, delay); } + public hasPendingDiagnostics(resource: Uri): boolean { + const file = this.client.normalizePath(resource); + return !file || this.pendingDiagnostics.has(file); + } + private sendPendingDiagnostics(): void { if (!this._validate) { return; diff --git a/extensions/typescript-language-features/src/features/quickFixProvider.ts b/extensions/typescript-language-features/src/features/quickFixProvider.ts index 8714241d850..a85e78e7b6e 100644 --- a/extensions/typescript-language-features/src/features/quickFixProvider.ts +++ b/extensions/typescript-language-features/src/features/quickFixProvider.ts @@ -12,6 +12,7 @@ import FormattingConfigurationManager from './formattingConfigurationManager'; import { getEditForCodeAction, applyCodeActionCommands } from '../utils/codeAction'; import { Command, CommandManager } from '../utils/commandManager'; import { DiagnosticsManager } from './diagnostics'; +import BufferSyncSupport from './bufferSyncSupport'; import * as nls from 'vscode-nls'; const localize = nls.loadMessageBundle(); @@ -132,7 +133,9 @@ export default class TypeScriptQuickFixProvider implements vscode.CodeActionProv private readonly client: ITypeScriptServiceClient, private readonly formattingConfigurationManager: FormattingConfigurationManager, commandManager: CommandManager, - private readonly diagnosticsManager: DiagnosticsManager + private readonly diagnosticsManager: DiagnosticsManager, + private readonly bufferSyncSupport: BufferSyncSupport + ) { commandManager.register(new ApplyCodeActionCommand(client)); commandManager.register(new ApplyFixAllCodeAction(client)); @@ -160,6 +163,10 @@ export default class TypeScriptQuickFixProvider implements vscode.CodeActionProv return []; } + if (this.bufferSyncSupport.hasPendingDiagnostics(document.uri)) { + return []; + } + await this.formattingConfigurationManager.ensureFormatOptionsForDocument(document, token); const results: vscode.CodeAction[] = []; diff --git a/extensions/typescript-language-features/src/languageProvider.ts b/extensions/typescript-language-features/src/languageProvider.ts index cddd5e3fd30..193fb0ce9c0 100644 --- a/extensions/typescript-language-features/src/languageProvider.ts +++ b/extensions/typescript-language-features/src/languageProvider.ts @@ -116,7 +116,7 @@ export default class LanguageProvider { this.disposables.push(languages.registerDocumentSymbolProvider(selector, new (await import('./features/documentSymbolProvider')).default(client))); this.disposables.push(languages.registerSignatureHelpProvider(selector, new (await import('./features/signatureHelpProvider')).default(client), '(', ',')); this.disposables.push(languages.registerRenameProvider(selector, new (await import('./features/renameProvider')).default(client))); - this.disposables.push(languages.registerCodeActionsProvider(selector, new (await import('./features/quickFixProvider')).default(client, this.formattingOptionsManager, commandManager, this.diagnosticsManager))); + this.disposables.push(languages.registerCodeActionsProvider(selector, new (await import('./features/quickFixProvider')).default(client, this.formattingOptionsManager, commandManager, this.diagnosticsManager, this.bufferSyncSupport))); this.disposables.push(languages.registerCodeActionsProvider(selector, new (await import('./features/refactorProvider')).default(client, this.formattingOptionsManager, commandManager))); await this.initFoldingProvider(); -- GitLab