From f93a6cee6063cbe9871c4d51d29bba995837e7a2 Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sat, 4 Oct 2025 12:18:08 +0100
Subject: [PATCH 1/3] fix: check effect.pre in assign-in-effect
It seems like the intention here was to check `$effect` _and_
`$effect.pre`, but the condition (`in_effect`) was filtering those out.
The `is_rune` helper already does the same checks, so we can just remove
the ones here and delegate to that.
---
.../autofixers/add-autofixers-issues.test.ts | 24 +++++++++++++++----
.../autofixers/visitors/assign-in-effect.ts | 14 +++--------
2 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/packages/mcp-server/src/mcp/autofixers/add-autofixers-issues.test.ts b/packages/mcp-server/src/mcp/autofixers/add-autofixers-issues.test.ts
index c606592..cd5d518 100644
--- a/packages/mcp-server/src/mcp/autofixers/add-autofixers-issues.test.ts
+++ b/packages/mcp-server/src/mcp/autofixers/add-autofixers-issues.test.ts
@@ -61,7 +61,7 @@ describe('add_autofixers_issues', () => {
-
+
`);
@@ -74,7 +74,7 @@ describe('add_autofixers_issues', () => {
const content = run_autofixers_on_code(`
+ `);
+
+ expect(content.suggestions).toContain(
+ 'The stateful variable "count" is assigned inside an $effect which is generally consider a malpractice. Consider using $derived if possible.',
+ );
+ });
});
});
diff --git a/packages/mcp-server/src/mcp/autofixers/visitors/assign-in-effect.ts b/packages/mcp-server/src/mcp/autofixers/visitors/assign-in-effect.ts
index e2e4894..c018ec5 100644
--- a/packages/mcp-server/src/mcp/autofixers/visitors/assign-in-effect.ts
+++ b/packages/mcp-server/src/mcp/autofixers/visitors/assign-in-effect.ts
@@ -11,19 +11,11 @@ function run_if_in_effect(
) {
const in_effect = path.findLast(
(node) =>
- node.type === 'CallExpression' &&
- node.callee.type === 'Identifier' &&
- node.callee.name === '$effect',
+ node.type === 'CallExpression' && state.parsed.is_rune(node, ['$effect', '$effect.pre']),
);
- if (
- in_effect &&
- in_effect.type === 'CallExpression' &&
- (in_effect.callee.type === 'Identifier' || in_effect.callee.type === 'MemberExpression')
- ) {
- if (state.parsed.is_rune(in_effect, ['$effect', '$effect.pre'])) {
- to_run();
- }
+ if (in_effect) {
+ to_run();
}
}
From 99537cfa25138c5d61c8d02e5a13e649ff1de21e Mon Sep 17 00:00:00 2001
From: Paolo Ricciuti
Date: Sat, 4 Oct 2025 16:34:43 +0200
Subject: [PATCH 2/3] chore: add changesets
---
.changeset/cool-tips-explain.md | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 .changeset/cool-tips-explain.md
diff --git a/.changeset/cool-tips-explain.md b/.changeset/cool-tips-explain.md
new file mode 100644
index 0000000..32c5840
--- /dev/null
+++ b/.changeset/cool-tips-explain.md
@@ -0,0 +1,5 @@
+---
+"@sveltejs/mcp": patch
+---
+
+fix: check effect.pre in assign-in-effect
From f3ee4ed59c076f4fd9257a1aa5875d99237e4d29 Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sat, 4 Oct 2025 20:12:47 +0100
Subject: [PATCH 3/3] chore: run format
---
.changeset/cool-tips-explain.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.changeset/cool-tips-explain.md b/.changeset/cool-tips-explain.md
index 32c5840..ea8d8fa 100644
--- a/.changeset/cool-tips-explain.md
+++ b/.changeset/cool-tips-explain.md
@@ -1,5 +1,5 @@
---
-"@sveltejs/mcp": patch
+'@sveltejs/mcp': patch
---
fix: check effect.pre in assign-in-effect