2023-04-20 14:37:15 +00:00
|
|
|
//@run-rustfix
|
2022-03-24 01:08:52 +00:00
|
|
|
#![warn(clippy::crate_in_macro_def)]
|
|
|
|
|
|
|
|
mod hygienic {
|
2022-03-28 08:32:31 +00:00
|
|
|
#[macro_export]
|
2022-03-24 01:08:52 +00:00
|
|
|
macro_rules! print_message_hygienic {
|
|
|
|
() => {
|
|
|
|
println!("{}", $crate::hygienic::MESSAGE);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
pub const MESSAGE: &str = "Hello!";
|
|
|
|
}
|
|
|
|
|
|
|
|
mod unhygienic {
|
2022-03-28 08:32:31 +00:00
|
|
|
#[macro_export]
|
2022-03-24 01:08:52 +00:00
|
|
|
macro_rules! print_message_unhygienic {
|
|
|
|
() => {
|
|
|
|
println!("{}", crate::unhygienic::MESSAGE);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
pub const MESSAGE: &str = "Hello!";
|
|
|
|
}
|
|
|
|
|
2022-03-28 08:32:31 +00:00
|
|
|
mod unhygienic_intentionally {
|
|
|
|
// For cases where the use of `crate` is intentional, applying `allow` to the macro definition
|
|
|
|
// should suppress the lint.
|
|
|
|
#[allow(clippy::crate_in_macro_def)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! print_message_unhygienic_intentionally {
|
|
|
|
() => {
|
|
|
|
println!("{}", crate::CALLER_PROVIDED_MESSAGE);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[macro_use]
|
|
|
|
mod not_exported {
|
|
|
|
macro_rules! print_message_not_exported {
|
|
|
|
() => {
|
|
|
|
println!("{}", crate::not_exported::MESSAGE);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
pub const MESSAGE: &str = "Hello!";
|
|
|
|
}
|
|
|
|
|
2022-03-24 01:08:52 +00:00
|
|
|
fn main() {
|
|
|
|
print_message_hygienic!();
|
|
|
|
print_message_unhygienic!();
|
2022-03-28 08:32:31 +00:00
|
|
|
print_message_unhygienic_intentionally!();
|
|
|
|
print_message_not_exported!();
|
2022-03-24 01:08:52 +00:00
|
|
|
}
|
2022-03-28 08:32:31 +00:00
|
|
|
|
|
|
|
pub const CALLER_PROVIDED_MESSAGE: &str = "Hello!";
|