fn compare_number_of_generics<'tcx>(
    tcx: TyCtxt<'tcx>,
    impl_: &AssocItem,
    trait_: &AssocItem,
    trait_span: Option<Span>,
    delay: bool
) -> Result<(), ErrorGuaranteed>
Expand description

Checks that the number of generics on a given assoc item in a trait impl is the same as the number of generics on the respective assoc item in the trait definition.

For example this code emits the errors in the following code:

trait Trait {
    fn foo();
    type Assoc<T>;
}

impl Trait for () {
    fn foo<T>() {}
    //~^ error
    type Assoc = u32;
    //~^ error
}

Notably this does not error on foo<T> implemented as foo<const N: u8> or foo<const N: u8> implemented as foo<const N: u32>. This is handled in compare_generic_param_kinds. This function also does not handle lifetime parameters