// run-rustfix
+// aux-build:macro_rules.rs
#![warn(clippy::toplevel_ref_arg)]
-#![allow(unused)]
+
+#[macro_use]
+extern crate macro_rules;
+
+macro_rules! gen_binding {
+ () => {
+ let _y = &42;
+ };
+}
fn main() {
// Closures should not warn
let y = |ref x| println!("{:?}", x);
y(1u8);
- let x = &1;
+ let _x = &1;
- let y: &(&_, u8) = &(&1, 2);
+ let _y: &(&_, u8) = &(&1, 2);
- let z = &(1 + 2);
+ let _z = &(1 + 2);
- let z = &mut (1 + 2);
+ let _z = &mut (1 + 2);
let (ref x, _) = (1, 2); // ok, not top level
println!("The answer is {}.", x);
- let x = &vec![1, 2, 3];
+ let _x = &vec![1, 2, 3];
// Make sure that allowing the lint works
#[allow(clippy::toplevel_ref_arg)]
- let ref mut x = 1_234_543;
+ let ref mut _x = 1_234_543;
+
+ // ok
+ for ref _x in 0..10 {}
+
+ // lint in macro
+ #[allow(unused)]
+ {
+ gen_binding!();
+ }
+
+ // do not lint in external macro
+ {
+ ref_arg_binding!();
+ }
}