fix span calculation for non-ascii in needless_return
#12493
Merged
+36
−2
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.
Fixes #12491
Probably fixes #12328 as well, but that one has no reproducer, so 🤷
The bug was that the lint used
rfind()
for finding the byte index of the start of the previous non-whitespace character:... then subtracting one to get the byte index of the actual whitespace (the
\n
here).(Subtracting instead of adding because it treats this as the length from the
return
token to the\n
)That's correct for ascii, like here, and will get us to the
\n
, however for non ascii, thec
could be multiple bytes wide, which would put us in the middle of a codepoint if we simply subtract 1 and is what caused the ICE.There's probably a lot of ways we could fix this.
This PR changes it to iterate backwards using bytes instead of characters, so that when
rposition()
finally finds a non-whitespace byte, we know that we've skipped exactly 1 byte. This was probably(?) what the code was intending to dochangelog: Fix ICE in [
needless_return
] when previous line end in a non-ascii character