delegation: Implement list delegation · rust-lang/rust@c30b410 (original) (raw)
`@@ -2961,6 +2961,7 @@ impl Item {
`
2961
2961
` | ItemKind::GlobalAsm(_)
`
2962
2962
` | ItemKind::MacCall(_)
`
2963
2963
` | ItemKind::Delegation(_)
`
``
2964
`+
| ItemKind::DelegationMac(_)
`
2964
2965
` | ItemKind::MacroDef(_) => None,
`
2965
2966
`ItemKind::Static(_) => None,
`
2966
2967
`ItemKind::Const(i) => Some(&i.generics),
`
`@@ -3123,8 +3124,16 @@ pub struct Delegation {
`
3123
3124
`/// Path resolution id.
`
3124
3125
`pub id: NodeId,
`
3125
3126
`pub qself: Option<P>,
`
3126
``
`-
pub rename: Option,
`
3127
3127
`pub path: Path,
`
``
3128
`+
pub rename: Option,
`
``
3129
`+
pub body: Option<P>,
`
``
3130
`+
}
`
``
3131
+
``
3132
`+
#[derive(Clone, Encodable, Decodable, Debug)]
`
``
3133
`+
pub struct DelegationMac {
`
``
3134
`+
pub qself: Option<P>,
`
``
3135
`+
pub prefix: Path,
`
``
3136
`+
pub suffixes: ThinVec<(Ident, Option)>,
`
3128
3137
`pub body: Option<P>,
`
3129
3138
`}
`
3130
3139
``
`@@ -3243,10 +3252,13 @@ pub enum ItemKind {
`
3243
3252
`/// A macro definition.
`
3244
3253
`MacroDef(MacroDef),
`
3245
3254
``
3246
``
`` -
/// A delegation item (reuse
).
``
``
3255
`` +
/// A single delegation item (reuse
).
``
3247
3256
`///
`
3248
3257
`` /// E.g. reuse <Type as Trait>::name { target_expr_template }
.
``
3249
3258
`Delegation(Box),
`
``
3259
`` +
/// A list delegation item (reuse prefix::{a, b, c}
).
``
``
3260
`+
/// Treated similarly to a macro call and expanded early.
`
``
3261
`+
DelegationMac(Box),
`
3250
3262
`}
`
3251
3263
``
3252
3264
`impl ItemKind {
`
`@@ -3255,7 +3267,7 @@ impl ItemKind {
`
3255
3267
`match self {
`
3256
3268
`Use(..) | Static(..) | Const(..) | Fn(..) | Mod(..) | GlobalAsm(..) | TyAlias(..)
`
3257
3269
` | Struct(..) | Union(..) | Trait(..) | TraitAlias(..) | MacroDef(..)
`
3258
``
`-
| Delegation(..) => "a",
`
``
3270
`+
| Delegation(..) | DelegationMac(..) => "a",
`
3259
3271
`ExternCrate(..) | ForeignMod(..) | MacCall(..) | Enum(..) | Impl { .. } => "an",
`
3260
3272
`}
`
3261
3273
`}
`
`@@ -3280,6 +3292,7 @@ impl ItemKind {
`
3280
3292
`ItemKind::MacroDef(..) => "macro definition",
`
3281
3293
`ItemKind::Impl { .. } => "implementation",
`
3282
3294
`ItemKind::Delegation(..) => "delegated function",
`
``
3295
`+
ItemKind::DelegationMac(..) => "delegation",
`
3283
3296
`}
`
3284
3297
`}
`
3285
3298
``
`@@ -3323,6 +3336,8 @@ pub enum AssocItemKind {
`
3323
3336
`MacCall(P),
`
3324
3337
`/// An associated delegation item.
`
3325
3338
`Delegation(Box),
`
``
3339
`+
/// An associated delegation item list.
`
``
3340
`+
DelegationMac(Box),
`
3326
3341
`}
`
3327
3342
``
3328
3343
`impl AssocItemKind {
`
`@@ -3331,7 +3346,9 @@ impl AssocItemKind {
`
3331
3346
`Self::Const(box ConstItem { defaultness, .. })
`
3332
3347
` | Self::Fn(box Fn { defaultness, .. })
`
3333
3348
` | Self::Type(box TyAlias { defaultness, .. }) => defaultness,
`
3334
``
`-
Self::MacCall(..) | Self::Delegation(..) => Defaultness::Final,
`
``
3349
`+
Self::MacCall(..) | Self::Delegation(..) | Self::DelegationMac(..) => {
`
``
3350
`+
Defaultness::Final
`
``
3351
`+
}
`
3335
3352
`}
`
3336
3353
`}
`
3337
3354
`}
`
`@@ -3344,6 +3361,7 @@ impl From for ItemKind {
`
3344
3361
`AssocItemKind::Type(ty_alias_kind) => ItemKind::TyAlias(ty_alias_kind),
`
3345
3362
`AssocItemKind::MacCall(a) => ItemKind::MacCall(a),
`
3346
3363
`AssocItemKind::Delegation(delegation) => ItemKind::Delegation(delegation),
`
``
3364
`+
AssocItemKind::DelegationMac(delegation) => ItemKind::DelegationMac(delegation),
`
3347
3365
`}
`
3348
3366
`}
`
3349
3367
`}
`
`@@ -3358,6 +3376,7 @@ impl TryFrom for AssocItemKind {
`
3358
3376
`ItemKind::TyAlias(ty_kind) => AssocItemKind::Type(ty_kind),
`
3359
3377
`ItemKind::MacCall(a) => AssocItemKind::MacCall(a),
`
3360
3378
`ItemKind::Delegation(d) => AssocItemKind::Delegation(d),
`
``
3379
`+
ItemKind::DelegationMac(d) => AssocItemKind::DelegationMac(d),
`
3361
3380
` _ => return Err(item_kind),
`
3362
3381
`})
`
3363
3382
`}
`