fix: avoid creating unnnecessary deriveds for text nodes with call #13206
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Svelte 5 rewrite
As per #13171 (comment) we were creating unnecessary deriveds in the compiled code.
This was a bit tricky to fix because in the
RegularElement
visitor we callbuild_template
that if there's more than one call creates this deriveds and push them to theinit
. However inRegularElement
if we realise that there's state the template that we just built is unused and we proceed to process the children which callsbuild_template
again creating another set of deriveds (which this time will be actually pushed to the update).To fix this i've splitted the logic to check how many states/calls are there in it's own function (used by
build_template
) so that i can use that function instead inRegularElement
.I went with snapshot tests because that's just unused code.
Please note that the Svelte codebase is currently being rewritten for Svelte 5. Changes should target Svelte 5, which lives on the default branch (
main
).If your PR concerns Svelte 4 (including updates to svelte.dev.docs), please ensure the base branch is
svelte-4
and notmain
.Before submitting the PR, please make sure you do the following
feat:
,fix:
,chore:
, ordocs:
.Tests and linting
pnpm test
and lint the project withpnpm lint