rustc_hir_analysis::errors::wrong_number_of_generic_args

Struct WrongNumberOfGenericArgs

Source
pub(crate) struct WrongNumberOfGenericArgs<'a, 'tcx> {
    pub(crate) tcx: TyCtxt<'tcx>,
    pub(crate) angle_brackets: AngleBrackets,
    pub(crate) gen_args_info: GenericArgsInfo,
    pub(crate) path_segment: &'a PathSegment<'a>,
    pub(crate) gen_params: &'a Generics,
    pub(crate) params_offset: usize,
    pub(crate) gen_args: &'a GenericArgs<'a>,
    pub(crate) def_id: DefId,
}
Expand description

Handles the wrong number of type / lifetime / ... arguments family of error messages.

Fields§

§tcx: TyCtxt<'tcx>§angle_brackets: AngleBrackets§gen_args_info: GenericArgsInfo§path_segment: &'a PathSegment<'a>

Offending path segment

§gen_params: &'a Generics

Generic parameters as expected by type or trait

§params_offset: usize

Index offset into parameters. Depends on whether Self is included and on number of lifetime parameters in case we’re processing missing or redundant type or constant arguments.

§gen_args: &'a GenericArgs<'a>

Generic arguments as provided by user

§def_id: DefId

DefId of the generic type

Implementations§

Source§

impl<'a, 'tcx> WrongNumberOfGenericArgs<'a, 'tcx>

Source

pub(crate) fn new( tcx: TyCtxt<'tcx>, gen_args_info: GenericArgsInfo, path_segment: &'a PathSegment<'_>, gen_params: &'a Generics, params_offset: usize, gen_args: &'a GenericArgs<'a>, def_id: DefId, ) -> Self

Source

fn missing_lifetimes(&self) -> bool

Source

fn kind(&self) -> &str

Source

fn is_in_trait_impl(&self) -> bool

Returns true if the generic type is a trait and is being referred to from one of its trait impls

Source

fn num_provided_args(&self) -> usize

Source

fn num_provided_lifetime_args(&self) -> usize

Source

fn num_provided_type_or_const_args(&self) -> usize

Source

fn num_expected_lifetime_args(&self) -> usize

Source

fn num_expected_type_or_const_args(&self) -> usize

Source

fn num_expected_type_or_const_args_including_defaults(&self) -> usize

Source

fn num_missing_lifetime_args(&self) -> usize

Source

fn num_missing_type_or_const_args(&self) -> usize

Source

fn num_excess_lifetime_args(&self) -> usize

Source

fn num_excess_type_or_const_args(&self) -> usize

Source

fn too_many_args_provided(&self) -> bool

Source

fn not_enough_args_provided(&self) -> bool

Source

fn get_lifetime_args_offset(&self) -> usize

Source

fn get_num_default_params(&self) -> usize

Source

fn is_synth_provided(&self) -> bool

Source

fn get_quantifier_and_bound(&self) -> (&'static str, usize)

Source

fn get_lifetime_args_suggestions_from_param_names( &self, path_hir_id: HirId, num_params_to_take: usize, ) -> String

Source

fn get_type_or_const_args_suggestions_from_param_names( &self, num_params_to_take: usize, ) -> String

Source

fn get_unbound_associated_types(&self) -> Vec<String>

Source

fn create_error_message(&self) -> String

Source

fn notify(&self, err: &mut Diag<'_, impl EmissionGuarantee>)

Builds the expected 1 type argument / supplied 2 type arguments message.

Source

fn suggest(&self, err: &mut Diag<'_, impl EmissionGuarantee>)

Source

fn suggest_adding_args(&self, err: &mut Diag<'_, impl EmissionGuarantee>)

Suggests to add missing argument(s) when current invocation site already contains some generics:

type Map = HashMap<String>;
Source

fn suggest_adding_lifetime_args( &self, err: &mut Diag<'_, impl EmissionGuarantee>, )

Source

fn suggest_adding_type_and_const_args( &self, err: &mut Diag<'_, impl EmissionGuarantee>, )

Source

fn suggest_moving_args_from_assoc_fn_to_trait( &self, err: &mut Diag<'_, impl EmissionGuarantee>, )

Suggests moving redundant argument(s) of an associate function to the trait it belongs to.

Into::into::<Option<_>>(42) // suggests considering `Into::<Option<_>>::into(42)`
Source

fn suggest_moving_args_from_assoc_fn_to_trait_for_qualified_path( &self, err: &mut Diag<'_, impl EmissionGuarantee>, qpath: &'tcx QPath<'tcx>, msg: String, num_assoc_fn_excess_args: usize, num_trait_generics_except_self: usize, )

Source

fn suggest_moving_args_from_assoc_fn_to_trait_for_method_call( &self, err: &mut Diag<'_, impl EmissionGuarantee>, trait_def_id: DefId, expr: &'tcx Expr<'tcx>, msg: String, num_assoc_fn_excess_args: usize, num_trait_generics_except_self: usize, )

Source

fn suggest_removing_args_or_generics( &self, err: &mut Diag<'_, impl EmissionGuarantee>, )

Suggests to remove redundant argument(s):

type Map = HashMap<String, String, String, String>;
Source

fn show_definition(&self, err: &mut Diag<'_, impl EmissionGuarantee>)

Builds the type defined here message.

Source

fn note_synth_provided(&self, err: &mut Diag<'_, impl EmissionGuarantee>)

Add note if impl Trait is explicitly specified.

Trait Implementations§

Source§

impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for WrongNumberOfGenericArgs<'_, '_>

Source§

fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, G>

Write out as a diagnostic out of DiagCtxt.

Auto Trait Implementations§

§

impl<'a, 'tcx> DynSend for WrongNumberOfGenericArgs<'a, 'tcx>

§

impl<'a, 'tcx> DynSync for WrongNumberOfGenericArgs<'a, 'tcx>

§

impl<'a, 'tcx> Freeze for WrongNumberOfGenericArgs<'a, 'tcx>

§

impl<'a, 'tcx> !RefUnwindSafe for WrongNumberOfGenericArgs<'a, 'tcx>

§

impl<'a, 'tcx> !Send for WrongNumberOfGenericArgs<'a, 'tcx>

§

impl<'a, 'tcx> !Sync for WrongNumberOfGenericArgs<'a, 'tcx>

§

impl<'a, 'tcx> Unpin for WrongNumberOfGenericArgs<'a, 'tcx>

§

impl<'a, 'tcx> !UnwindSafe for WrongNumberOfGenericArgs<'a, 'tcx>

Blanket Implementations§

Source§

impl<T> Aligned for T

Source§

const ALIGN: Alignment = _

Alignment of Self.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, R> CollectAndApply<T, R> for T

Source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

Source§

type Output = R

Source§

impl<T> Filterable for T

Source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<P> IntoQueryParam<P> for P

Source§

impl<T> MaybeResult<T> for T

Source§

type Error = !

Source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

Source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize = _

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

Source§

fn upcast(self, interner: I) -> U

Source§

impl<I, T> UpcastFrom<I, T> for T

Source§

fn upcast_from(from: T, _tcx: I) -> T

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

Source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 88 bytes