diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/AttachTag.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/AttachTag.js index 40333e9bd1..17fe546d6d 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/AttachTag.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/AttachTag.js @@ -1,7 +1,6 @@ /** @import { AST } from '#compiler' */ /** @import { Context } from '../types' */ -import { walk } from 'zimmerframe'; import { mark_subtree_dynamic } from './shared/fragment.js'; import * as w from '../../../warnings.js'; @@ -11,16 +10,15 @@ import * as w from '../../../warnings.js'; */ export function AttachTag(node, context) { mark_subtree_dynamic(context.path); + + context.next({ ...context.state, expression: node.metadata.expression }); + if (!context.state.analysis.runes) { - walk( - node.expression, - {}, - { - MemberExpression(node) { - w.attachment_legacy_member_access(node); - } + for (const dep of node.metadata.expression.dependencies) { + if (dep.mutated) { + w.attachment_legacy_member_access(node.expression); + break; } - ); + } } - context.next({ ...context.state, expression: node.metadata.expression }); } diff --git a/packages/svelte/tests/validator/samples/attachment-legacy-member-access/input.svelte b/packages/svelte/tests/validator/samples/attachment-legacy-member-access/input.svelte index cc56759f13..2e0db9938a 100644 --- a/packages/svelte/tests/validator/samples/attachment-legacy-member-access/input.svelte +++ b/packages/svelte/tests/validator/samples/attachment-legacy-member-access/input.svelte @@ -1,9 +1,14 @@ @@ -11,4 +16,7 @@ state.count++; }}>{state.count} -
\ No newline at end of file + + + + diff --git a/packages/svelte/tests/validator/samples/attachment-legacy-member-access/warnings.json b/packages/svelte/tests/validator/samples/attachment-legacy-member-access/warnings.json index ff981c4fff..3b62b19587 100644 --- a/packages/svelte/tests/validator/samples/attachment-legacy-member-access/warnings.json +++ b/packages/svelte/tests/validator/samples/attachment-legacy-member-access/warnings.json @@ -3,11 +3,11 @@ "code": "attachment_legacy_member_access", "message": "Using `@attach` with a function from an object in legacy mode can cause unnecessary reruns of the attachment function if you mutate that object.", "start": { - "line": 14, + "line": 19, "column": 14 }, "end": { - "line": 14, + "line": 19, "column": 30 } }