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:
- The naming is
register_attr
/register_tool
rather than someregister_attributes
(plural, no abbreviation) for consistency with already existing attributes likecfg_attr
, orfeature
, etc.
Previous attempt: #57921
cc #44690
Tracking issues: #66079 (register_tool
), #66080 (register_attr
)
Closes #29642