fix: prevent infinite recurstion in indent #970
Draft
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.
The error here is tricky to track down the root cause of (especially for someone new to the codebase) but the trigger for it as I understand is as follows:
offsets
as a map of token beginnings to indent levels, each referencing its own parent. Among them are "root nodes" — entries in the map which have atype
of 2 and no parent.The ideal solution is probably to avoid inserting these tokens which overlap root nodes, or possibly disambiguate offsets by more than simply the start index. The fix here (simply ignoring attempts to overwrite root nodes) passes all the existing tests as far as I can see but I have not had time to extensively test it and simply discarding the information seems misguided — though I cannot currently imagine a scenario where the token which overlaps the root has a different indent level from the node that it overlaps.
The test here is far from ideal but serves to demonstrate a reproducible case of the bug. Having something to check for this sort of error is good, but someone with more knowledge of the root cause might be able to produce a better fix and related test. Of note, it seems to be the most minimal viable example I can find since the following changes prevented the error from occurring:
$
)<!-- prettier-ignore -->
to the top of the file