From 85a336c8851a0e81d2d2571b73aed09428082fbf Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 20 May 2020 15:15:32 -0700 Subject: [PATCH] Only return single ts-ignore action if there are multiple errors on one line Fixes #97867 --- .../src/features/quickFix.ts | 6 ++++++ .../src/test/quickFix.test.ts | 17 +++++++++++++++++ .../test-workspace/foojs.js | 0 3 files changed, 23 insertions(+) create mode 100644 extensions/typescript-language-features/test-workspace/foojs.js diff --git a/extensions/typescript-language-features/src/features/quickFix.ts b/extensions/typescript-language-features/src/features/quickFix.ts index d739d53349f..204c2896d50 100644 --- a/extensions/typescript-language-features/src/features/quickFix.ts +++ b/extensions/typescript-language-features/src/features/quickFix.ts @@ -17,6 +17,7 @@ import { TelemetryReporter } from '../utils/telemetry'; import * as typeConverters from '../utils/typeConverters'; import { DiagnosticsManager } from './diagnostics'; import FileConfigurationManager from './fileConfigurationManager'; +import { equals } from '../utils/objects'; const localize = nls.loadMessageBundle(); @@ -147,6 +148,11 @@ class CodeActionSet { } public addAction(action: VsCodeCodeAction) { + for (const existing of this._actions) { + if (action.tsAction.fixName === existing.tsAction.fixName && equals(action.edit, existing.edit)) { + this._actions.delete(existing); + } + } this._actions.add(action); } diff --git a/extensions/typescript-language-features/src/test/quickFix.test.ts b/extensions/typescript-language-features/src/test/quickFix.test.ts index 6895ad65cf8..70be9b5ebef 100644 --- a/extensions/typescript-language-features/src/test/quickFix.test.ts +++ b/extensions/typescript-language-features/src/test/quickFix.test.ts @@ -87,6 +87,23 @@ suite('TypeScript Quick Fix', () => { `foo;` )); }); + + test('Only a single ts-ignore should be returned if there are multiple errors on one line #98274', async () => { + const testDocumentUri = workspaceFile('foojs.js'); + const editor = await createTestEditor(testDocumentUri, + `//@ts-check`, + `const a = require('./bla');`); + + await wait(3000); + + const fixes = await vscode.commands.executeCommand('vscode.executeCodeActionProvider', + testDocumentUri, + editor.document.lineAt(1).range + ); + + const ignoreFixes = fixes?.filter(x => x.title === 'Ignore this error message'); + assert.strictEqual(ignoreFixes?.length, 1); + }); }); diff --git a/extensions/typescript-language-features/test-workspace/foojs.js b/extensions/typescript-language-features/test-workspace/foojs.js new file mode 100644 index 00000000000..e69de29bb2d -- GitLab