From 957cee1cd4c31ebd8b7ea951efa116af337f3d68 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 11 Jun 2025 19:48:12 -0400 Subject: [PATCH] fix: correctly tag private class state fields --- .changeset/three-steaks-wash.md | 5 +++ .../3-transform/client/visitors/ClassBody.js | 2 +- .../samples/inspect-trace-class/_config.js | 31 +++++++++++++++++++ .../samples/inspect-trace-class/main.svelte | 28 +++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 .changeset/three-steaks-wash.md create mode 100644 packages/svelte/tests/runtime-runes/samples/inspect-trace-class/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/inspect-trace-class/main.svelte diff --git a/.changeset/three-steaks-wash.md b/.changeset/three-steaks-wash.md new file mode 100644 index 000000000000..caf0ea2bfe35 --- /dev/null +++ b/.changeset/three-steaks-wash.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: correctly tag private class state fields diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js index e78a8824ddbf..5bd9add2a59e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js @@ -78,7 +78,7 @@ export function ClassBody(node, context) { ? /** @type {CallExpression} */ (context.visit(definition.value, child_state)) : undefined; - if (dev) { + if (dev && field.node === definition) { value = b.call('$.tag', value, b.literal(`${declaration.id?.name ?? '[class]'}.${name}`)); } diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-trace-class/_config.js b/packages/svelte/tests/runtime-runes/samples/inspect-trace-class/_config.js new file mode 100644 index 000000000000..98b3fb6cbce3 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace-class/_config.js @@ -0,0 +1,31 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; +import { normalise_trace_logs } from '../../../helpers.js'; + +export default test({ + compileOptions: { + dev: true + }, + + test({ assert, target, logs }) { + assert.deepEqual(normalise_trace_logs(logs), [ + { log: 'effect' }, + { log: '$state', highlighted: true }, + { log: 'Counter.#count', highlighted: false }, + { log: 0 } + ]); + + logs.length = 0; + + const button = target.querySelector('button'); + button?.click(); + flushSync(); + + assert.deepEqual(normalise_trace_logs(logs), [ + { log: 'effect' }, + { log: '$state', highlighted: true }, + { log: 'Counter.#count', highlighted: false }, + { log: 1 } + ]); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-trace-class/main.svelte b/packages/svelte/tests/runtime-runes/samples/inspect-trace-class/main.svelte new file mode 100644 index 000000000000..56bd497e0955 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace-class/main.svelte @@ -0,0 +1,28 @@ + + +