From 5f8e6d0b196b90e7d9b1590284db54c05b4f29b1 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 29 May 2020 00:53:01 -0700 Subject: [PATCH] Make sure add all missing imports quick fix comes after individual add missing import quick fixes Fixes #98613 --- .../src/features/quickFix.ts | 10 +++++++ .../src/test/quickFix.test.ts | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/extensions/typescript-language-features/src/features/quickFix.ts b/extensions/typescript-language-features/src/features/quickFix.ts index cc8202e2f15..41d384027fc 100644 --- a/extensions/typescript-language-features/src/features/quickFix.ts +++ b/extensions/typescript-language-features/src/features/quickFix.ts @@ -153,7 +153,17 @@ class CodeActionSet { this._actions.delete(existing); } } + this._actions.add(action); + + if (action.tsAction.fixId) { + // If we have an existing fix all action, then make sure it follows this action + const existingFixAll = this._fixAllActions.get(action.tsAction.fixId); + if (existingFixAll) { + this._actions.delete(existingFixAll); + this._actions.add(existingFixAll); + } + } } public addFixAllAction(fixId: {}, action: VsCodeCodeAction) { diff --git a/extensions/typescript-language-features/src/test/quickFix.test.ts b/extensions/typescript-language-features/src/test/quickFix.test.ts index 45ad4f7c2c1..68498e1701c 100644 --- a/extensions/typescript-language-features/src/test/quickFix.test.ts +++ b/extensions/typescript-language-features/src/test/quickFix.test.ts @@ -122,6 +122,32 @@ suite('TypeScript Quick Fix', () => { assert.strictEqual(fixes![0].title, `Implement interface 'IFoo'`); assert.strictEqual(fixes![1].title, `Remove unused declaration for: 'Foo'`); }); + + test('Add all missing imports should come after other add import fixes #98613', async () => { + await createTestEditor(workspaceFile('foo.ts'), + `export const foo = 1;`); + + await createTestEditor(workspaceFile('bar.ts'), + `export const foo = 1;`); + + const editor = await createTestEditor(workspaceFile('index.ts'), + `export const _ = 1;`, + `foo$0;`, + `foo$0;` + ); + + await wait(3000); + + const fixes = await vscode.commands.executeCommand('vscode.executeCodeActionProvider', + workspaceFile('index.ts'), + editor.document.lineAt(1).range + ); + + assert.strictEqual(fixes?.length, 3); + assert.strictEqual(fixes![0].title, `Import 'foo' from module "./bar"`); + assert.strictEqual(fixes![1].title, `Import 'foo' from module "./foo"`); + assert.strictEqual(fixes![2].title, `Add all missing imports`); + }); });