$crate in a macro matcher is the reserved identifier $crate that doesn't have a way to write it outside of a macro (I think?). That is:
macro_rules! m {(x) => {
m!($crate:tt)};($crate:tt) => ()}fnmain(){m!(x);// OKm!(y);// ERRORm!($crate:tt);// ERRORm!(crate:tt);// ERROR}
$cratein a macro matcher is the reserved identifier$cratethat doesn't have a way to write it outside of a macro (I think?). That is: