From c3b1725a2dacbf021324dcd59d08a206d293d640 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 20 May 2020 15:31:16 -0700 Subject: [PATCH] Make sure implement interface is prioritized over remove unused Fixes #94212 --- .../src/features/quickFix.ts | 4 +++- .../src/test/quickFix.test.ts | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) 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'`); + }); });