@@ -16,8 +16,8 @@ use rustc_feature::{AttributeDuplicates, AttributeType, BUILTIN_ATTRIBUTE_MAP, B
1616use rustc_hir:: def_id:: LocalModDefId ;
1717use rustc_hir:: intravisit:: { self , Visitor } ;
1818use rustc_hir:: {
19- self as hir, self , CRATE_HIR_ID , CRATE_OWNER_ID , FnSig , ForeignItem , HirId , Item , ItemKind ,
20- MethodKind , Safety , Target , TraitItem ,
19+ self as hir, self , AssocItemKind , CRATE_HIR_ID , CRATE_OWNER_ID , FnSig , ForeignItem , HirId ,
20+ Item , ItemKind , MethodKind , Safety , Target , TraitItem ,
2121} ;
2222use rustc_macros:: LintDiagnostic ;
2323use rustc_middle:: hir:: nested_filter;
@@ -940,6 +940,23 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
940940 }
941941 }
942942
943+ fn check_doc_search_unbox ( & self , meta : & MetaItemInner , hir_id : HirId ) {
944+ let hir:: Node :: Item ( item) = self . tcx . hir_node ( hir_id) else {
945+ self . dcx ( ) . emit_err ( errors:: DocSearchUnboxInvalid { span : meta. span ( ) } ) ;
946+ return ;
947+ } ;
948+ match item. kind {
949+ ItemKind :: Enum ( _, generics) | ItemKind :: Struct ( _, generics)
950+ if generics. params . len ( ) != 0 => { }
951+ ItemKind :: Trait ( _, _, generics, _, items)
952+ if generics. params . len ( ) != 0
953+ || items. iter ( ) . any ( |item| matches ! ( item. kind, AssocItemKind :: Type ) ) => { }
954+ _ => {
955+ self . dcx ( ) . emit_err ( errors:: DocSearchUnboxInvalid { span : meta. span ( ) } ) ;
956+ }
957+ }
958+ }
959+
943960 /// Checks `#[doc(inline)]`/`#[doc(no_inline)]` attributes.
944961 ///
945962 /// A doc inlining attribute is invalid if it is applied to a non-`use` item, or
@@ -1152,6 +1169,12 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
11521169 }
11531170 }
11541171
1172+ sym:: search_unbox => {
1173+ if self . check_attr_not_crate_level ( meta, hir_id, "fake_variadic" ) {
1174+ self . check_doc_search_unbox ( meta, hir_id) ;
1175+ }
1176+ }
1177+
11551178 sym:: test => {
11561179 if self . check_attr_crate_level ( attr, meta, hir_id) {
11571180 self . check_test_attr ( meta, hir_id) ;
0 commit comments