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}