Skip to content

Commit f1243a0

Browse files
committed
Fix spans on macro-generated bindings and format variables
1 parent 6a07345 commit f1243a0

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

impl/src/fmt.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,14 @@ impl Display<'_> {
107107
}
108108
};
109109
infinite_recursive |= member == *"self" && bound == Trait::Display;
110-
if let Some(&field) = member_index.get(&member) {
111-
implied_bounds.insert((field, bound));
112-
} else {
113-
out += &member.to_string();
114-
continue;
115-
}
110+
let field = match member_index.get(&member) {
111+
Some(&field) => field,
112+
None => {
113+
out += &member.to_string();
114+
continue;
115+
}
116+
};
117+
implied_bounds.insert((field, bound));
116118
let formatvar_prefix = if bonus_display {
117119
"__display"
118120
} else if bound == Trait::Pointer {
@@ -129,15 +131,17 @@ impl Display<'_> {
129131
while user_named_args.contains(&formatvar) {
130132
formatvar = IdentUnraw::new(format_ident!("_{}", formatvar.to_string()));
131133
}
134+
formatvar.set_span(span);
132135
out += &formatvar.to_string();
133136
if !macro_named_args.insert(formatvar.clone()) {
134137
// Already added to bindings by a previous use.
135138
continue;
136139
}
137-
let binding_value = match &member {
140+
let mut binding_value = match &member {
138141
MemberUnraw::Unnamed(index) => format_ident!("_{}", index),
139142
MemberUnraw::Named(ident) => ident.to_local(),
140143
};
144+
binding_value.set_span(span.resolved_at(fields[field].member.span()));
141145
let wrapped_binding_value = if bonus_display {
142146
quote_spanned!(span=> #binding_value.as_display())
143147
} else if bound == Trait::Pointer {

impl/src/unraw.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ impl IdentUnraw {
2828
}
2929
unraw
3030
}
31+
32+
pub fn set_span(&mut self, span: Span) {
33+
self.0.set_span(span);
34+
}
3135
}
3236

3337
impl Display for IdentUnraw {

0 commit comments

Comments
 (0)