From f800e4669635b131850b23b89e37881fb12ad724 Mon Sep 17 00:00:00 2001 From: "Lyu, Wei Da" Date: Sat, 25 Feb 2023 12:30:29 +0800 Subject: [PATCH] (fix) no quick fix to covert const tag to let --- .../features/CodeActionsProvider.ts | 18 +++++ .../features/CodeActionsProvider.test.ts | 74 +++++++++++++++++++ .../codeaction-const-reassign.svelte | 11 +++ 3 files changed, 103 insertions(+) create mode 100644 packages/language-server/test/plugins/typescript/testfiles/code-actions/codeaction-const-reassign.svelte diff --git a/packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts b/packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts index 14378b856..c2c34600a 100644 --- a/packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts +++ b/packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts @@ -388,6 +388,24 @@ export class CodeActionsProviderImpl implements CodeActionsProvider { ); } + if (fix.fixName === 'fixConvertConstToLet') { + const offset = document.offsetAt(originalRange.start); + const constOffset = document.getText().indexOf('const', offset); + if (constOffset < 0) { + return undefined; + } + const beforeConst = document.getText().slice(0, constOffset); + if ( + beforeConst[beforeConst.length - 1] === '@' && + beforeConst + .slice(0, beforeConst.length - 1) + .trimEnd() + .endsWith('{') + ) { + return undefined; + } + } + if (originalRange.start.line < 0 || originalRange.end.line < 0) { return undefined; } 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 01d3741d2..566f29194 100644 --- a/packages/language-server/test/plugins/typescript/features/CodeActionsProvider.test.ts +++ b/packages/language-server/test/plugins/typescript/features/CodeActionsProvider.test.ts @@ -655,6 +655,80 @@ describe('CodeActionsProvider', () => { ]); }); + it('provides quickfix for convert const to let', async () => { + const { provider, document } = setup('codeaction-const-reassign.svelte'); + + const codeActions = await provider.getCodeActions( + document, + Range.create(Position.create(3, 4), Position.create(3, 6)), + { + diagnostics: [ + { + code: 2588, + message: "CCannot assign to 'hi' because it is a constant.", + range: Range.create(Position.create(3, 4), Position.create(3, 6)), + source: 'ts' + } + ], + only: [CodeActionKind.QuickFix] + } + ); + + assert.deepStrictEqual(codeActions, [ + { + edit: { + documentChanges: [ + { + edits: [ + { + newText: 'let', + range: { + start: { + character: 4, + line: 1 + }, + end: { + character: 9, + line: 1 + } + } + } + ], + textDocument: { + uri: getUri('codeaction-const-reassign.svelte'), + version: null + } + } + ] + }, + kind: 'quickfix', + title: "Convert 'const' to 'let'" + } + ]); + }); + + it("don't provides quickfix for convert const tag to let", async () => { + const { provider, document } = setup('codeaction-const-reassign.svelte'); + + const codeActions = await provider.getCodeActions( + document, + Range.create(Position.create(9, 28), Position.create(9, 35)), + { + diagnostics: [ + { + code: 2588, + message: "Cannot assign to 'hi2' because it is a constant.", + range: Range.create(Position.create(9, 28), Position.create(9, 35)), + source: 'ts' + } + ], + only: [CodeActionKind.QuickFix] + } + ); + + assert.deepStrictEqual(codeActions, []); + }); + it('organizes imports', async () => { const { provider, document } = setup('codeactions.svelte'); diff --git a/packages/language-server/test/plugins/typescript/testfiles/code-actions/codeaction-const-reassign.svelte b/packages/language-server/test/plugins/typescript/testfiles/code-actions/codeaction-const-reassign.svelte new file mode 100644 index 000000000..798263b03 --- /dev/null +++ b/packages/language-server/test/plugins/typescript/testfiles/code-actions/codeaction-const-reassign.svelte @@ -0,0 +1,11 @@ + + +{#if hi == 1} + {@const hi2 = hi} + + +{/if}