Skip to content

Commit f43f3ad

Browse files
authored
(fix) no quick fix to covert const tag to let (#1901)
1 parent ffd4303 commit f43f3ad

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,24 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
388388
);
389389
}
390390

391+
if (fix.fixName === 'fixConvertConstToLet') {
392+
const offset = document.offsetAt(originalRange.start);
393+
const constOffset = document.getText().indexOf('const', offset);
394+
if (constOffset < 0) {
395+
return undefined;
396+
}
397+
const beforeConst = document.getText().slice(0, constOffset);
398+
if (
399+
beforeConst[beforeConst.length - 1] === '@' &&
400+
beforeConst
401+
.slice(0, beforeConst.length - 1)
402+
.trimEnd()
403+
.endsWith('{')
404+
) {
405+
return undefined;
406+
}
407+
}
408+
391409
if (originalRange.start.line < 0 || originalRange.end.line < 0) {
392410
return undefined;
393411
}

packages/language-server/test/plugins/typescript/features/CodeActionsProvider.test.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,80 @@ describe('CodeActionsProvider', () => {
655655
]);
656656
});
657657

658+
it('provides quickfix for convert const to let', async () => {
659+
const { provider, document } = setup('codeaction-const-reassign.svelte');
660+
661+
const codeActions = await provider.getCodeActions(
662+
document,
663+
Range.create(Position.create(3, 4), Position.create(3, 6)),
664+
{
665+
diagnostics: [
666+
{
667+
code: 2588,
668+
message: "CCannot assign to 'hi' because it is a constant.",
669+
range: Range.create(Position.create(3, 4), Position.create(3, 6)),
670+
source: 'ts'
671+
}
672+
],
673+
only: [CodeActionKind.QuickFix]
674+
}
675+
);
676+
677+
assert.deepStrictEqual(codeActions, [
678+
{
679+
edit: {
680+
documentChanges: [
681+
{
682+
edits: [
683+
{
684+
newText: 'let',
685+
range: {
686+
start: {
687+
character: 4,
688+
line: 1
689+
},
690+
end: {
691+
character: 9,
692+
line: 1
693+
}
694+
}
695+
}
696+
],
697+
textDocument: {
698+
uri: getUri('codeaction-const-reassign.svelte'),
699+
version: null
700+
}
701+
}
702+
]
703+
},
704+
kind: 'quickfix',
705+
title: "Convert 'const' to 'let'"
706+
}
707+
]);
708+
});
709+
710+
it("don't provides quickfix for convert const tag to let", async () => {
711+
const { provider, document } = setup('codeaction-const-reassign.svelte');
712+
713+
const codeActions = await provider.getCodeActions(
714+
document,
715+
Range.create(Position.create(9, 28), Position.create(9, 35)),
716+
{
717+
diagnostics: [
718+
{
719+
code: 2588,
720+
message: "Cannot assign to 'hi2' because it is a constant.",
721+
range: Range.create(Position.create(9, 28), Position.create(9, 35)),
722+
source: 'ts'
723+
}
724+
],
725+
only: [CodeActionKind.QuickFix]
726+
}
727+
);
728+
729+
assert.deepStrictEqual(codeActions, []);
730+
});
731+
658732
it('organizes imports', async () => {
659733
const { provider, document } = setup('codeactions.svelte');
660734

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script lang="ts">
2+
const hi = 1;
3+
4+
hi = 1;
5+
</script>
6+
7+
{#if hi == 1}
8+
{@const hi2 = hi}
9+
10+
<button on:click={() => hi2 = 2}></button>
11+
{/if}

0 commit comments

Comments
 (0)