@@ -13,7 +13,7 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet};
1313use rustc_data_structures:: intern:: Interned ;
1414use rustc_errors:: { Applicability , Diag , DiagMessage } ;
1515use rustc_hir:: def:: Namespace :: * ;
16- use rustc_hir:: def:: { DefKind , Namespace , PerNS } ;
16+ use rustc_hir:: def:: { DefKind , MacroKinds , Namespace , PerNS } ;
1717use rustc_hir:: def_id:: { CRATE_DEF_ID , DefId , LOCAL_CRATE } ;
1818use rustc_hir:: { Mutability , Safety } ;
1919use rustc_middle:: ty:: { Ty , TyCtxt } ;
@@ -25,7 +25,6 @@ use rustc_resolve::rustdoc::{
2525use rustc_session:: config:: CrateType ;
2626use rustc_session:: lint:: Lint ;
2727use rustc_span:: BytePos ;
28- use rustc_span:: hygiene:: MacroKind ;
2928use rustc_span:: symbol:: { Ident , Symbol , sym} ;
3029use smallvec:: { SmallVec , smallvec} ;
3130use tracing:: { debug, info, instrument, trace} ;
@@ -115,9 +114,11 @@ impl Res {
115114
116115 let prefix = match kind {
117116 DefKind :: Fn | DefKind :: AssocFn => return Suggestion :: Function ,
118- DefKind :: Macro ( MacroKind :: Bang ) => return Suggestion :: Macro ,
117+ // FIXME: handle macros with multiple kinds, and attribute/derive macros that aren't
118+ // proc macros
119+ DefKind :: Macro ( MacroKinds :: BANG ) => return Suggestion :: Macro ,
119120
120- DefKind :: Macro ( MacroKind :: Derive ) => "derive" ,
121+ DefKind :: Macro ( MacroKinds :: DERIVE ) => "derive" ,
121122 DefKind :: Struct => "struct" ,
122123 DefKind :: Enum => "enum" ,
123124 DefKind :: Trait => "trait" ,
@@ -881,9 +882,12 @@ fn trait_impls_for<'a>(
881882fn is_derive_trait_collision < T > ( ns : & PerNS < Result < Vec < ( Res , T ) > , ResolutionFailure < ' _ > > > ) -> bool {
882883 if let ( Ok ( type_ns) , Ok ( macro_ns) ) = ( & ns. type_ns , & ns. macro_ns ) {
883884 type_ns. iter ( ) . any ( |( res, _) | matches ! ( res, Res :: Def ( DefKind :: Trait , _) ) )
884- && macro_ns
885- . iter ( )
886- . any ( |( res, _) | matches ! ( res, Res :: Def ( DefKind :: Macro ( MacroKind :: Derive ) , _) ) )
885+ && macro_ns. iter ( ) . any ( |( res, _) | {
886+ matches ! (
887+ res,
888+ Res :: Def ( DefKind :: Macro ( kinds) , _) if kinds. contains( MacroKinds :: DERIVE )
889+ )
890+ } )
887891 } else {
888892 false
889893 }
@@ -1662,11 +1666,11 @@ impl Disambiguator {
16621666
16631667 let suffixes = [
16641668 // If you update this list, please also update the relevant rustdoc book section!
1665- ( "!()" , DefKind :: Macro ( MacroKind :: Bang ) ) ,
1666- ( "!{}" , DefKind :: Macro ( MacroKind :: Bang ) ) ,
1667- ( "![]" , DefKind :: Macro ( MacroKind :: Bang ) ) ,
1669+ ( "!()" , DefKind :: Macro ( MacroKinds :: BANG ) ) ,
1670+ ( "!{}" , DefKind :: Macro ( MacroKinds :: BANG ) ) ,
1671+ ( "![]" , DefKind :: Macro ( MacroKinds :: BANG ) ) ,
16681672 ( "()" , DefKind :: Fn ) ,
1669- ( "!" , DefKind :: Macro ( MacroKind :: Bang ) ) ,
1673+ ( "!" , DefKind :: Macro ( MacroKinds :: BANG ) ) ,
16701674 ] ;
16711675
16721676 if let Some ( idx) = link. find ( '@' ) {
@@ -1685,7 +1689,7 @@ impl Disambiguator {
16851689 safety : Safety :: Safe ,
16861690 } ) ,
16871691 "function" | "fn" | "method" => Kind ( DefKind :: Fn ) ,
1688- "derive" => Kind ( DefKind :: Macro ( MacroKind :: Derive ) ) ,
1692+ "derive" => Kind ( DefKind :: Macro ( MacroKinds :: DERIVE ) ) ,
16891693 "field" => Kind ( DefKind :: Field ) ,
16901694 "variant" => Kind ( DefKind :: Variant ) ,
16911695 "type" => NS ( Namespace :: TypeNS ) ,
0 commit comments