That would be really useful, especially if combined with something like this feature 
I presume doing it at all levels would include doing it inside tuples (needed for the multi-argument version of this sugar), I also have a lot of methods implementing binary operators so they’re all like
fn foo(&mut self, other: &Self) {
match (self, other) {
(&mut Bar(ref mut bar1), &Bar(ref bar2)) => {
println!("bars {} {}", bar1, bar2);
}
(&mut Baz(ref mut baz1), &Baz(ref baz2)) => {
println!("bazs {} {}", baz1, baz2);
}
(_, _) => unimplemented!(),
}
}
fn match sugar + autoderef of all arguments would drastically simplify this
fn match foo(&mut self, other: &Self) {
(Bar(ref mut bar1), Bar(ref bar2)) => {
println!("bars {} {}", bar1, bar2);
}
(Baz(ref mut baz1), Baz(ref baz2)) => {
println!("bazs {} {}", baz1, baz2);
}
(_, _) => unimplemented!(),
}