@@ -13,7 +13,7 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet};
13
13
use rustc_data_structures:: intern:: Interned ;
14
14
use rustc_errors:: { Applicability , Diag , DiagMessage } ;
15
15
use rustc_hir:: def:: Namespace :: * ;
16
- use rustc_hir:: def:: { DefKind , Namespace , PerNS } ;
16
+ use rustc_hir:: def:: { DefKind , MacroKinds , Namespace , PerNS } ;
17
17
use rustc_hir:: def_id:: { CRATE_DEF_ID , DefId , LOCAL_CRATE } ;
18
18
use rustc_hir:: { Mutability , Safety } ;
19
19
use rustc_middle:: ty:: { Ty , TyCtxt } ;
@@ -25,7 +25,6 @@ use rustc_resolve::rustdoc::{
25
25
use rustc_session:: config:: CrateType ;
26
26
use rustc_session:: lint:: Lint ;
27
27
use rustc_span:: BytePos ;
28
- use rustc_span:: hygiene:: MacroKind ;
29
28
use rustc_span:: symbol:: { Ident , Symbol , sym} ;
30
29
use smallvec:: { SmallVec , smallvec} ;
31
30
use tracing:: { debug, info, instrument, trace} ;
@@ -115,9 +114,11 @@ impl Res {
115
114
116
115
let prefix = match kind {
117
116
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 ,
119
120
120
- DefKind :: Macro ( MacroKind :: Derive ) => "derive" ,
121
+ DefKind :: Macro ( MacroKinds :: DERIVE ) => "derive" ,
121
122
DefKind :: Struct => "struct" ,
122
123
DefKind :: Enum => "enum" ,
123
124
DefKind :: Trait => "trait" ,
@@ -881,9 +882,12 @@ fn trait_impls_for<'a>(
881
882
fn is_derive_trait_collision < T > ( ns : & PerNS < Result < Vec < ( Res , T ) > , ResolutionFailure < ' _ > > > ) -> bool {
882
883
if let ( Ok ( type_ns) , Ok ( macro_ns) ) = ( & ns. type_ns , & ns. macro_ns ) {
883
884
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
+ } )
887
891
} else {
888
892
false
889
893
}
@@ -1662,11 +1666,11 @@ impl Disambiguator {
1662
1666
1663
1667
let suffixes = [
1664
1668
// 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 ) ) ,
1668
1672
( "()" , DefKind :: Fn ) ,
1669
- ( "!" , DefKind :: Macro ( MacroKind :: Bang ) ) ,
1673
+ ( "!" , DefKind :: Macro ( MacroKinds :: BANG ) ) ,
1670
1674
] ;
1671
1675
1672
1676
if let Some ( idx) = link. find ( '@' ) {
@@ -1685,7 +1689,7 @@ impl Disambiguator {
1685
1689
safety : Safety :: Safe ,
1686
1690
} ) ,
1687
1691
"function" | "fn" | "method" => Kind ( DefKind :: Fn ) ,
1688
- "derive" => Kind ( DefKind :: Macro ( MacroKind :: Derive ) ) ,
1692
+ "derive" => Kind ( DefKind :: Macro ( MacroKinds :: DERIVE ) ) ,
1689
1693
"field" => Kind ( DefKind :: Field ) ,
1690
1694
"variant" => Kind ( DefKind :: Variant ) ,
1691
1695
"type" => NS ( Namespace :: TypeNS ) ,
0 commit comments