From a63011d524d11733423ac9a5faf3a15c620c6f86 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 28 May 2022 16:58:12 +0200 Subject: [PATCH 1/2] (fix) don't organize imports in error state If there's a parser error, we fall back to only the script contents, so organize imports likely throws out a lot of seemingly unused imports because they are only used in the template. Therefore do nothing in this case. #1476 --- .../typescript/features/CodeActionsProvider.ts | 5 ++++- .../features/CodeActionsProvider.test.ts | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts b/packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts index 73ce49f3b..2d0fda569 100644 --- a/packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts +++ b/packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts @@ -103,7 +103,10 @@ export class CodeActionsProviderImpl implements CodeActionsProvider { const { lang, tsDoc, userPreferences } = await this.getLSAndTSDoc(document); const fragment = tsDoc.getFragment(); - if (cancellationToken?.isCancellationRequested) { + if (cancellationToken?.isCancellationRequested || tsDoc.parserError) { + // If there's a parser error, we fall back to only the script contents, + // so organize imports likely throws out a lot of seemingly unused imports + // because they are only used in the template. Therefore do nothing in this case. return []; } diff --git a/packages/language-server/test/plugins/typescript/features/CodeActionsProvider.test.ts b/packages/language-server/test/plugins/typescript/features/CodeActionsProvider.test.ts index d4d49fd81..4ef58d7d3 100644 --- a/packages/language-server/test/plugins/typescript/features/CodeActionsProvider.test.ts +++ b/packages/language-server/test/plugins/typescript/features/CodeActionsProvider.test.ts @@ -905,6 +905,21 @@ function test(useNewTransformation: boolean) { ]); }); + it('organize imports should do nothing if there is a parser error', async () => { + const { provider, document } = setup('organize-imports-error.svelte'); + + const codeActions = await provider.getCodeActions( + document, + Range.create(Position.create(1, 4), Position.create(1, 5)), + { + diagnostics: [], + only: [CodeActionKind.SourceOrganizeImports] + } + ); + + assert.deepStrictEqual(codeActions, []); + }); + it('should do extract into const refactor', async () => { const { provider, document } = setup('codeactions.svelte'); From ec407bef43bef725897393a85ffc77203df0a7bb Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 28 May 2022 21:57:08 +0200 Subject: [PATCH 2/2] missing test file --- .../testfiles/code-actions/organize-imports-error.svelte | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 packages/language-server/test/plugins/typescript/testfiles/code-actions/organize-imports-error.svelte diff --git a/packages/language-server/test/plugins/typescript/testfiles/code-actions/organize-imports-error.svelte b/packages/language-server/test/plugins/typescript/testfiles/code-actions/organize-imports-error.svelte new file mode 100644 index 000000000..cc9b18cf3 --- /dev/null +++ b/packages/language-server/test/plugins/typescript/testfiles/code-actions/organize-imports-error.svelte @@ -0,0 +1,7 @@ + + +{c} +<