1
Fork 0

Special case 'generic param from outer item' message for Self

This commit is contained in:
clubby789 2024-01-13 19:24:52 +00:00
parent 511bf6e1c7
commit 2cfc81766c
8 changed files with 20 additions and 11 deletions

View file

@ -114,8 +114,14 @@ resolve_forward_declared_generic_param =
.label = defaulted generic parameters cannot be forward declared
resolve_generic_params_from_outer_item =
can't use generic parameters from outer item
.label = use of generic parameter from outer item
can't use {$is_self ->
[true] `Self`
*[false] generic parameters
} from outer item
.label = use of {$is_self ->
[true] `Self`
*[false] generic parameter
} from outer item
.refer_to_type_directly = refer to the type directly here instead
.suggestion = try introducing a local generic parameter here

View file

@ -568,12 +568,14 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
DefKind::Const => Some(errs::GenericParamsFromOuterItemStaticOrConst::Const),
_ => None,
};
let is_self = matches!(outer_res, Res::SelfTyParam { .. } | Res::SelfTyAlias { .. });
let mut err = errs::GenericParamsFromOuterItem {
span,
label: None,
refer_to_type_directly: None,
sugg: None,
static_or_const,
is_self,
};
let sm = self.tcx.sess.source_map();

View file

@ -46,6 +46,7 @@ pub(crate) struct GenericParamsFromOuterItem {
pub(crate) sugg: Option<GenericParamsFromOuterItemSugg>,
#[subdiagnostic]
pub(crate) static_or_const: Option<GenericParamsFromOuterItemStaticOrConst>,
pub(crate) is_self: bool,
}
#[derive(Subdiagnostic)]