diff --git a/extensions/typescript-language-features/src/features/quickFix.ts b/extensions/typescript-language-features/src/features/quickFix.ts index 204c2896d50..cc8202e2f15 100644 --- a/extensions/typescript-language-features/src/features/quickFix.ts +++ b/extensions/typescript-language-features/src/features/quickFix.ts @@ -344,7 +344,7 @@ const preferredFixes = new Map fixPriority.value) { + return false; } if (fixPriority.thereCanOnlyBeOne && action.tsAction.fixName === otherAction.tsAction.fixName) { diff --git a/extensions/typescript-language-features/src/test/quickFix.test.ts b/extensions/typescript-language-features/src/test/quickFix.test.ts index 70be9b5ebef..45ad4f7c2c1 100644 --- a/extensions/typescript-language-features/src/test/quickFix.test.ts +++ b/extensions/typescript-language-features/src/test/quickFix.test.ts @@ -104,6 +104,24 @@ suite('TypeScript Quick Fix', () => { const ignoreFixes = fixes?.filter(x => x.title === 'Ignore this error message'); assert.strictEqual(ignoreFixes?.length, 1); }); + + test('Should prioritize implement interface over remove unused #94212', async () => { + const testDocumentUri = workspaceFile('foo.ts'); + const editor = await createTestEditor(testDocumentUri, + `export interface IFoo { value: string; }`, + `class Foo implements IFoo { }`); + + await wait(3000); + + const fixes = await vscode.commands.executeCommand('vscode.executeCodeActionProvider', + testDocumentUri, + editor.document.lineAt(1).range + ); + + assert.strictEqual(fixes?.length, 2); + assert.strictEqual(fixes![0].title, `Implement interface 'IFoo'`); + assert.strictEqual(fixes![1].title, `Remove unused declaration for: 'Foo'`); + }); });