Skip to content

Commit d9576ea

Browse files
nyurikpvdrz
authored andcommitted
Improve debug str generator
Generates more optimized code per https://rust-lang.github.io/rust-clippy/master/index.html#format_collect
1 parent 0c3ae5c commit d9576ea

File tree

4 files changed

+48
-25
lines changed

4 files changed

+48
-25
lines changed

bindgen-tests/tests/expectations/tests/derive-bitfield-method-same-name.rs

Lines changed: 12 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindgen-tests/tests/expectations/tests/derive-debug-bitfield.rs

Lines changed: 12 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindgen-tests/tests/expectations/tests/derive-debug-function-pointer.rs

Lines changed: 12 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindgen/codegen/impl_debug.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,18 @@ impl<'a> ImplDebug<'a> for Item {
186186
// Let's implement our own print function
187187
Some((
188188
format!("{name}: [{{}}]"),
189-
vec![quote! {
190-
self.#name_ident
191-
.iter()
192-
.enumerate()
193-
.map(|(i, v)| format!("{}{:?}", if i > 0 { ", " } else { "" }, v))
194-
.collect::<String>()
195-
}],
189+
vec![quote! {{
190+
use std::fmt::Write as _;
191+
let mut output = String::new();
192+
let mut iter = self.#name_ident.iter();
193+
if let Some(value) = iter.next() {
194+
let _ = write!(output, "{value:?}");
195+
for value in iter {
196+
let _ = write!(output, ", {value:?}");
197+
}
198+
}
199+
output
200+
}}],
196201
))
197202
}
198203
}

0 commit comments

Comments
 (0)