3 ms·
Pretty deep in the nitpicky weeds here but I don't like putting mut bindings in parameters. They only affect the body of the function but they show up in the in
by mastax 4y ago
Pretty deep in the nitpicky weeds here but I don't like putting mut bindings in parameters. They only affect the body of the function but they show up in the interface, including rustdoc, which can be confusing. It's easy to think that
fn foo(x: u32) {}
fn foo(mut x: u32) {}
has a semantic difference to the consumer similar to
fn foo(x: &u32) {}
fn foo(x: &mut u32) {}
but it does not. To avoid this confusion I'd rather do
fn foo(x: u32) { let mut x = x; }
- eddyb 4y agoThis is effectively a rustdoc bug, the pattern is very much part of the body of the function, not the signature (and this split is explicitly represented in the compiler IRs, which rustdoc effectively undoes). While it's not really how it works, the closest valid Rust that comes to mind is: const foo: fn(u32) = |mut x| {}; What rustdoc should be doing is stripping binding modes (`ref` and/or `mut`), or even whole patterns - with more complex patterns, like `(a, mut b): (T, U)`, it can be beneficial to keep `(a, b)` as a way to label the two components, but the `mut` is superfluous for documentation.