Expand description

The self_constructor_from_outer_item lint detects cases where the Self constructor was silently allowed due to a bug in the resolver, and which may produce surprising and unintended behavior.

Using a Self type alias from an outer item was never intended, but was silently allowed. This is deprecated – and is a hard error when the Self type alias references generics that are not in scope.



struct S0(usize);

impl S0 {
    fn foo() {
        const C: S0 = Self(0);
        fn bar() -> S0 {



The Self type alias should not be reachable because nested items are not associated with the scope of the parameters from the parent item.