diff --git a/crates/hir_def/src/builtin_attr.rs b/crates/hir_def/src/builtin_attr.rs index 6cd185ceeb2c..15fb904e6f39 100644 --- a/crates/hir_def/src/builtin_attr.rs +++ b/crates/hir_def/src/builtin_attr.rs @@ -34,6 +34,11 @@ macro_rules! rustc_attr { }; } +// FIXME: We shouldn't special case these at all, but as of now expanding attributes severely degrades +// user experience due to lacking support. +/// Built-in macro-like attributes. +pub const EXTRA_ATTRIBUTES: &[BuiltinAttribute] = &["test", "bench"]; + /// "Inert" built-in attributes that have a special meaning to rustc or rustdoc. #[rustfmt::skip] pub const INERT_ATTRIBUTES: &[BuiltinAttribute] = &[ diff --git a/crates/hir_def/src/nameres/collector.rs b/crates/hir_def/src/nameres/collector.rs index e9c33392f3c0..f89018435288 100644 --- a/crates/hir_def/src/nameres/collector.rs +++ b/crates/hir_def/src/nameres/collector.rs @@ -1732,6 +1732,7 @@ impl ModCollector<'_, '_> { let name = name.to_string(); let is_inert = builtin_attr::INERT_ATTRIBUTES .iter() + .chain(builtin_attr::EXTRA_ATTRIBUTES) .copied() .chain(self.def_collector.registered_attrs.iter().map(AsRef::as_ref)) .any(|attr| name == *attr);