Introduce Invocation::span_mut.

Alongside the existing `Invocation::span`.
This commit is contained in:
Nicholas Nethercote 2024-05-01 10:57:08 +10:00
parent 1c15b6ae9c
commit ae7e32880a

View File

@ -372,6 +372,14 @@ pub fn span(&self) -> Span {
InvocationKind::Derive { path, .. } => path.span, InvocationKind::Derive { path, .. } => path.span,
} }
} }
fn span_mut(&mut self) -> &mut Span {
match &mut self.kind {
InvocationKind::Bang { span, .. } => span,
InvocationKind::Attr { attr, .. } => &mut attr.span,
InvocationKind::Derive { path, .. } => &mut path.span,
}
}
} }
pub struct MacroExpander<'a, 'b> { pub struct MacroExpander<'a, 'b> {
@ -590,11 +598,7 @@ fn collect_invocations(
for (invoc, _) in invocations.iter_mut() { for (invoc, _) in invocations.iter_mut() {
let expn_id = invoc.expansion_data.id; let expn_id = invoc.expansion_data.id;
let parent_def = self.cx.resolver.invocation_parent(expn_id); let parent_def = self.cx.resolver.invocation_parent(expn_id);
let span = match &mut invoc.kind { let span = invoc.span_mut();
InvocationKind::Bang { span, .. } => span,
InvocationKind::Attr { attr, .. } => &mut attr.span,
InvocationKind::Derive { path, .. } => &mut path.span,
};
*span = span.with_parent(Some(parent_def)); *span = span.with_parent(Some(parent_def));
} }
} }