fix: more informative error when effects run in an infinite loop#16405
Merged
fix: more informative error when effects run in an infinite loop#16405
Conversation
🦋 Changeset detectedLatest commit: 90ff2dc The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Contributor
|
6 tasks
Ocean-OS
approved these changes
Jul 16, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Supersedes #16247, closes #16092.
Today, if you have an effect that runs in an infinite loop, you get this somewhat unhelpful log:
Expanding the array usually reveals 10 copies of the same compiled function:
While you can click through to the
[[FunctionLocation]]......even that doesn't necessarily tell you where the offending state change occurred.
We can do better. In this PR, we track the site of updates to state that occur inside an effect, then if we do encounter an infinite loop we can pinpoint those sites:
This works for things like array mutations, and even works for effects that ping-pong (as opposed to the probably-more-common case in which an effect invalidates itself):
Better yet, this is actually simpler than what we currently have — the implementation of
infinite_loop_guardcan be much leaner, andlog_effect_stackanddev_effect_stackare no more.This PR also adds an explanation of the error. For things like this I prefer progressive disclosure (i.e. link to the docs when it becomes relevant) rather than adding stuff that you have to read upfront, so I view this as an alternative to #16247.
Before submitting the PR, please make sure you do the following
feat:,fix:,chore:, ordocs:.packages/svelte/src, add a changeset (npx changeset).Tests and linting
pnpm testand lint the project withpnpm lint