Fix inconsistent identifier spans in route codegen #2919
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.
Previously, identifiers such as
__req
were output with inconsistent spans. For example, inquery_decls
, it was defined withSpan::call_site()
, but inrequest_guard_decl
asguard.ty.span()
. The problem is, when used with macros, these spans can be different and cause the identifiers to fail to resolve.A simple failure example is:
In this case, the inconsistency arises because:
codegen_route
, no span for__req
is specified, which I believe means it defaults toSpan::call_site()
, so insidemacro_rules!
, thenresponder_outcome_expr
, the span used is from the identifier of the function, which is outside ofmacro_rules!
.This causes the
__req
inresponder_outcome
not to resolve to the__req
defined in themonomorphized_function
arguments.The span is now always
Span::call_site()
, which resolves these issues.I believe
call_site
is acceptable, since it was already used as the span for these variables elsewhere. In addition, I didn't spot anywhere in the code where this could cause a problem.