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
&'inputto the specified input type. The'inputlifetime violates macro hygiene and is confusing to use along with other explicitly-declared lifetimes used in the input type.This change also allows
Copyinput wrapper types likeSliceByRefto 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'inputlifetime, must explicitly declare it.Before:
After:
or
Additionally, the signatures of the
Parse,ParseElem,ParseLiteral, andParseSlicetraits have changed. If you implement these traits for custom input types, you'll need to make changes to implement these traits for&Trather thanT, and takeselfrather than&self.To Do
strand[T]input types and either automatically do the right thing or give an error message that is more actionable than the one Rust gives.