Support raw-identifier fields in format strings #108
Merged
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 #96 by stripping the "r#" prefix from format variables.
Background
Previously, given a type like
thiserror
would output something likeThis would fail during
write!()
expansion because the character#
isn't allowed in namedformat!()
parameters.Proposed solution
This PR replaces the
r#
prefix withraw_field_
when generating named parameters, producing output likeCaveat: Possible name collision
The generated named parameters could collide with user-defined named parameters. For example, the following compiles but produces potentially-unexpected output:
This kind of collision is already possible in
thiserror
. Existing code maps tuple fields to named parameters of the formfield_0
. These collisions could be avoided by instead mapping field references to anonymous parameters ({}
), which is actually what the documentation claims is done already; however, I think that's outside the scope of this PR.Further work
A similar but disjoint issue:
thiserror
assumes all user-defined named parameters are valid identifiers, and panics if it encounters an exception.format!()
itself does not require this. I think fixing this is outside the scope of this PR.