Fix StringEq!/StringEqCI! partial matches reporting the wrong failure position - #42
Merged
Merged
Conversation
… position Token::scan_at's Err now carries the position the mismatch actually occurred at (which may be past the entry pos, if a prefix of the chain matched), not just the expectation string. StringEq/StringEqCI's Grammar::scan_at use that position when recording the trace instead of their own entry pos, so a partial match into a multi-char literal (e.g. matching "-" of "->" then failing on ">") is attributed to where it actually failed. Fixes #41
Merged
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.
Fixes
Fixes #41
Changes
Token::scan_at'sErrfromStringto(usize, String): the position the mismatch actually occurred at, paired with what was expected there.StringEq/StringEqCI'sGrammar::scan_atnow record the trace at that position instead of their own entrypos, so a partial match into a multi-char literal (e.g. matching-of"->"then failing on>) is attributed to where it actually failed, not the literal's start.Test Plan
string_eq_partial_match_records_where_it_actually_failedtotests/error_behavior.rs, asserting both the recorded position and the fullErrorshape for a partial multi-char match.fmt --check,clippy(default /--no-default-features/--all-features),test(all three),doc --all-features.Notes
StringEq/StringEqCIbefore recording it dropped the position information that used to be recorded at the actual point of failure insideCharThen/CharCIThen.