@@ -2961,6 +2961,7 @@ impl Item {
29612961 | ItemKind :: GlobalAsm ( _)
29622962 | ItemKind :: MacCall ( _)
29632963 | ItemKind :: Delegation ( _)
2964+ | ItemKind :: DelegationMac ( _)
29642965 | ItemKind :: MacroDef ( _) => None ,
29652966 ItemKind :: Static ( _) => None ,
29662967 ItemKind :: Const ( i) => Some ( & i. generics ) ,
@@ -3123,8 +3124,16 @@ pub struct Delegation {
31233124 /// Path resolution id.
31243125 pub id : NodeId ,
31253126 pub qself : Option < P < QSelf > > ,
3126- pub rename : Option < Ident > ,
31273127 pub path : Path ,
3128+ pub rename : Option < Ident > ,
3129+ pub body : Option < P < Block > > ,
3130+ }
3131+
3132+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
3133+ pub struct DelegationMac {
3134+ pub qself : Option < P < QSelf > > ,
3135+ pub prefix : Path ,
3136+ pub suffixes : ThinVec < ( Ident , Option < Ident > ) > ,
31283137 pub body : Option < P < Block > > ,
31293138}
31303139
@@ -3243,10 +3252,13 @@ pub enum ItemKind {
32433252 /// A macro definition.
32443253 MacroDef ( MacroDef ) ,
32453254
3246- /// A delegation item (`reuse`).
3255+ /// A single delegation item (`reuse`).
32473256 ///
32483257 /// E.g. `reuse <Type as Trait>::name { target_expr_template }`.
32493258 Delegation ( Box < Delegation > ) ,
3259+ /// A list delegation item (`reuse prefix::{a, b, c}`).
3260+ /// Treated similarly to a macro call and expanded early.
3261+ DelegationMac ( Box < DelegationMac > ) ,
32503262}
32513263
32523264impl ItemKind {
@@ -3255,7 +3267,7 @@ impl ItemKind {
32553267 match self {
32563268 Use ( ..) | Static ( ..) | Const ( ..) | Fn ( ..) | Mod ( ..) | GlobalAsm ( ..) | TyAlias ( ..)
32573269 | Struct ( ..) | Union ( ..) | Trait ( ..) | TraitAlias ( ..) | MacroDef ( ..)
3258- | Delegation ( ..) => "a" ,
3270+ | Delegation ( ..) | DelegationMac ( .. ) => "a" ,
32593271 ExternCrate ( ..) | ForeignMod ( ..) | MacCall ( ..) | Enum ( ..) | Impl { .. } => "an" ,
32603272 }
32613273 }
@@ -3280,6 +3292,7 @@ impl ItemKind {
32803292 ItemKind :: MacroDef ( ..) => "macro definition" ,
32813293 ItemKind :: Impl { .. } => "implementation" ,
32823294 ItemKind :: Delegation ( ..) => "delegated function" ,
3295+ ItemKind :: DelegationMac ( ..) => "delegation" ,
32833296 }
32843297 }
32853298
@@ -3323,6 +3336,8 @@ pub enum AssocItemKind {
33233336 MacCall ( P < MacCall > ) ,
33243337 /// An associated delegation item.
33253338 Delegation ( Box < Delegation > ) ,
3339+ /// An associated delegation item list.
3340+ DelegationMac ( Box < DelegationMac > ) ,
33263341}
33273342
33283343impl AssocItemKind {
@@ -3331,7 +3346,9 @@ impl AssocItemKind {
33313346 Self :: Const ( box ConstItem { defaultness, .. } )
33323347 | Self :: Fn ( box Fn { defaultness, .. } )
33333348 | Self :: Type ( box TyAlias { defaultness, .. } ) => defaultness,
3334- Self :: MacCall ( ..) | Self :: Delegation ( ..) => Defaultness :: Final ,
3349+ Self :: MacCall ( ..) | Self :: Delegation ( ..) | Self :: DelegationMac ( ..) => {
3350+ Defaultness :: Final
3351+ }
33353352 }
33363353 }
33373354}
@@ -3344,6 +3361,7 @@ impl From<AssocItemKind> for ItemKind {
33443361 AssocItemKind :: Type ( ty_alias_kind) => ItemKind :: TyAlias ( ty_alias_kind) ,
33453362 AssocItemKind :: MacCall ( a) => ItemKind :: MacCall ( a) ,
33463363 AssocItemKind :: Delegation ( delegation) => ItemKind :: Delegation ( delegation) ,
3364+ AssocItemKind :: DelegationMac ( delegation) => ItemKind :: DelegationMac ( delegation) ,
33473365 }
33483366 }
33493367}
@@ -3358,6 +3376,7 @@ impl TryFrom<ItemKind> for AssocItemKind {
33583376 ItemKind :: TyAlias ( ty_kind) => AssocItemKind :: Type ( ty_kind) ,
33593377 ItemKind :: MacCall ( a) => AssocItemKind :: MacCall ( a) ,
33603378 ItemKind :: Delegation ( d) => AssocItemKind :: Delegation ( d) ,
3379+ ItemKind :: DelegationMac ( d) => AssocItemKind :: DelegationMac ( d) ,
33613380 _ => return Err ( item_kind) ,
33623381 } )
33633382 }
0 commit comments