Stop implicitly adding &'input
to input type
#299
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.
Rust-peg currently adds
&'input
to the specified input type. The'input
lifetime violates macro hygiene and is confusing to use along with other explicitly-declared lifetimes used in the input type.This change also allows
Copy
input wrapper types likeSliceByRef
to be zero-cost, instead of adding another layer of pointer indirection.Breaking change
All grammars must add
&
to their input type, and if they use the'input
lifetime, must explicitly declare it.Before:
After:
or
Additionally, the signatures of the
Parse
,ParseElem
,ParseLiteral
, andParseSlice
traits have changed. If you implement these traits for custom input types, you'll need to make changes to implement these traits for&T
rather thanT
, and takeself
rather than&self
.To Do
str
and[T]
input types and either automatically do the right thing or give an error message that is more actionable than the one Rust gives.