diff --git a/extensions/typescript-language-features/src/features/quickFix.ts b/extensions/typescript-language-features/src/features/quickFix.ts index d739d53349f0bc86e4633f29dd412ec6a4f51ca8..204c2896d508ae64019266859e573e89d9893bd3 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 6895ad65cf87131c6cac681cc5a8afd622e0ade4..70be9b5ebef25d4562d9bb629e5d66fba3061d63 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391