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'); 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} +<