//@aux-build:proc_macros.rs #![warn(clippy::useless_concat)] #![allow(clippy::print_literal)] extern crate proc_macros; use proc_macros::{external, with_span}; macro_rules! my_concat { ($fmt:literal $(, $e:expr)*) => { println!(concat!("ERROR: ", $fmt), $($e,)*); } } fn main() { let x = ""; //~ useless_concat let x = "c"; //~ useless_concat let x = "\""; //~ useless_concat let x = "true"; //~ useless_concat let x = "1"; //~ useless_concat let x = "1.0000"; //~ useless_concat let x = "1"; //~ useless_concat let x = "1"; //~ useless_concat let x = "1.0000"; //~ useless_concat let x = "1.0000"; //~ useless_concat let x = "a😀\n"; //~ useless_concat let x = "a"; //~ useless_concat let x = "1"; //~ useless_concat println!("b: {}", "a"); //~ useless_concat // Should not lint. let x = concat!("a", "b"); let local_i32 = 1; my_concat!("{}", local_i32); let x = concat!(file!(), "#L", line!()); external! { concat!(); } with_span! { span concat!(); } }