Support registering inert attributes and attribute tools using crate-level attributes by petrochenkov · Pull Request #66070 · rust-lang/rust (original) (raw)

And remove #[feature(custom_attribute)].
(rustc_plugin::Registry::register_attribute is not removed yet, I'll do it in a follow up PR.)

#![register_attr(my_attr)] #![register_tool(my_tool)]

#[my_attr] // OK #[my_tool::anything] // OK fn main() {}


Some tools (rustfmt and clippy) used in tool attributes are hardcoded in the compiler.
We need some way to introduce them without hardcoding as well.

This PR introduces a way to do it with a crate level attribute.
The previous attempt to introduce them through command line (#57921) met some resistance.

This probably needs to go through an RFC before stabilization.
However, I'd prefer to land this PR without an RFC to able to remove #[feature(custom_attribute)] and Registry::register_attribute while also providing a replacement.


register_attr is a direct replacement for #![feature(custom_attribute)] (#29642), except it doesn't rely on implicit fallback from unresolved attributes to custom attributes (which was always hacky and is the primary reason for the removal of custom_attribute) and requires registering the attribute explicitly.
It's not clear whether it should go through stabilization or not.
It's quite possible that all the uses should migrate to #![register_tool] (#66079) instead.


Details:


Previous attempt: #57921
cc #44690
Tracking issues: #66079 (register_tool), #66080 (register_attr)
Closes #29642