@@ -85,15 +85,11 @@ impl Display<'_> {
85
85
}
86
86
_ => continue ,
87
87
} ;
88
- let binding_value = match & member {
89
- MemberUnraw :: Unnamed ( index) => format_ident ! ( "_{}" , index) ,
90
- MemberUnraw :: Named ( ident) => ident. to_local ( ) ,
91
- } ;
92
- let mut wrapped_binding_value = quote ! ( :: thiserror:: __private:: Var ( #binding_value) ) ;
93
88
let end_spec = match read. find ( '}' ) {
94
89
Some ( end_spec) => end_spec,
95
90
None => return Ok ( ( ) ) ,
96
91
} ;
92
+ let mut bonus_display = false ;
97
93
let bound = match read[ ..end_spec] . chars ( ) . next_back ( ) {
98
94
Some ( '?' ) => Trait :: Debug ,
99
95
Some ( 'o' ) => Trait :: Octal ,
@@ -105,10 +101,7 @@ impl Display<'_> {
105
101
Some ( 'E' ) => Trait :: UpperExp ,
106
102
Some ( _) => Trait :: Display ,
107
103
None => {
108
- has_bonus_display = true ;
109
- wrapped_binding_value = quote_spanned ! { span=>
110
- #binding_value. as_display( )
111
- } ;
104
+ bonus_display = true ;
112
105
Trait :: Display
113
106
}
114
107
} ;
@@ -127,11 +120,21 @@ impl Display<'_> {
127
120
formatvar = IdentUnraw :: new ( format_ident ! ( "_{}" , formatvar. to_string( ) ) ) ;
128
121
}
129
122
out += & formatvar. to_string ( ) ;
130
- if macro_named_args. insert ( member) {
131
- bindings. push ( ( formatvar. to_local ( ) , wrapped_binding_value) ) ;
132
- } else {
123
+ if !macro_named_args. insert ( member. clone ( ) ) {
133
124
// Already added to bindings by a previous use.
125
+ continue ;
134
126
}
127
+ let binding_value = match & member {
128
+ MemberUnraw :: Unnamed ( index) => format_ident ! ( "_{}" , index) ,
129
+ MemberUnraw :: Named ( ident) => ident. to_local ( ) ,
130
+ } ;
131
+ let wrapped_binding_value = if bonus_display {
132
+ quote_spanned ! ( span=> #binding_value. as_display( ) )
133
+ } else {
134
+ quote ! ( :: thiserror:: __private:: Var ( #binding_value) )
135
+ } ;
136
+ has_bonus_display |= bonus_display;
137
+ bindings. push ( ( formatvar. to_local ( ) , wrapped_binding_value) ) ;
135
138
}
136
139
137
140
out += read;
0 commit comments