On generic and lifetime removal suggestion, do not leave behind stray ,

This commit is contained in:
Esteban Küber 2024-07-05 17:24:23 +00:00
parent 5c2b36a21c
commit b30fdec5fb
26 changed files with 71 additions and 62 deletions

View File

@ -939,17 +939,20 @@ fn suggest_removing_args_or_generics(&self, err: &mut Diag<'_, impl EmissionGuar
}
}
let span_lo_redundant_lt_args = lt_arg_spans[self.num_expected_lifetime_args()];
let span_lo_redundant_lt_args = if self.num_expected_lifetime_args() == 0 {
lt_arg_spans[0]
} else {
lt_arg_spans[self.num_expected_lifetime_args() - 1]
};
let span_hi_redundant_lt_args = lt_arg_spans[lt_arg_spans.len() - 1];
let span_redundant_lt_args = span_lo_redundant_lt_args.to(span_hi_redundant_lt_args);
let span_redundant_lt_args =
span_lo_redundant_lt_args.shrink_to_hi().to(span_hi_redundant_lt_args);
debug!("span_redundant_lt_args: {:?}", span_redundant_lt_args);
let num_redundant_lt_args = lt_arg_spans.len() - self.num_expected_lifetime_args();
let msg_lifetimes = format!(
"remove the lifetime argument{s}",
s = pluralize!(num_redundant_lt_args),
);
let msg_lifetimes =
format!("remove the lifetime argument{s}", s = pluralize!(num_redundant_lt_args));
err.span_suggestion_verbose(
span_redundant_lt_args,
@ -978,11 +981,16 @@ fn suggest_removing_args_or_generics(&self, err: &mut Diag<'_, impl EmissionGuar
}
let span_lo_redundant_type_or_const_args =
gen_arg_spans[self.num_expected_type_or_const_args()];
if self.num_expected_type_or_const_args() == 0 {
gen_arg_spans[0]
} else {
gen_arg_spans[self.num_expected_type_or_const_args() - 1]
};
let span_hi_redundant_type_or_const_args = gen_arg_spans[gen_arg_spans.len() - 1];
let span_redundant_type_or_const_args = span_lo_redundant_type_or_const_args
.shrink_to_hi()
.to(span_hi_redundant_type_or_const_args);
let span_redundant_type_or_const_args =
span_lo_redundant_type_or_const_args.to(span_hi_redundant_type_or_const_args);
debug!("span_redundant_type_or_const_args: {:?}", span_redundant_type_or_const_args);
let num_redundant_gen_args =

View File

@ -12,7 +12,7 @@ LL | type Alias<'a, T> = <T as Trait<'a>>::Assoc;
help: remove the lifetime argument
|
LL - fn bar<'a, T: Trait<'a>>(_: Alias<'a, 'a, T>) {}
LL + fn bar<'a, T: Trait<'a>>(_: Alias<'a, , T>) {}
LL + fn bar<'a, T: Trait<'a>>(_: Alias<'a, T>) {}
|
error: aborting due to 1 previous error

View File

@ -7,7 +7,7 @@ LL | Dst: BikeshedIntrinsicFrom<Src, Context, ASSUME>,
help: remove the unnecessary generic argument
|
LL - Dst: BikeshedIntrinsicFrom<Src, Context, ASSUME>,
LL + Dst: BikeshedIntrinsicFrom<Src, Context, >,
LL + Dst: BikeshedIntrinsicFrom<Src, Context>,
|
error[E0308]: mismatched types

View File

@ -33,7 +33,7 @@ LL | struct All<'a, T, const N: usize> {
help: remove the unnecessary generic argument
|
LL - let a: All<_, _, _>;
LL + let a: All<_, _, >;
LL + let a: All<_, _>;
|
error: aborting due to 4 previous errors

View File

@ -12,7 +12,7 @@ LL | fn foo<const N: usize>(
help: remove the unnecessary generic argument
|
LL - foo::<_, L>([(); L + 1 + L]);
LL + foo::<_, >([(); L + 1 + L]);
LL + foo::<_>([(); L + 1 + L]);
|
error[E0308]: mismatched types

View File

@ -30,7 +30,7 @@ LL | fn foo<const X: usize, const Y: usize>() -> usize {
help: remove the unnecessary generic argument
|
LL - foo::<0, 0, 0>();
LL + foo::<0, 0, >();
LL + foo::<0, 0>();
|
error: aborting due to 2 previous errors

View File

@ -7,7 +7,7 @@ LL | let _: Cell<&str, "a"> = Cell::new("");
help: remove the unnecessary generic argument
|
LL - let _: Cell<&str, "a"> = Cell::new("");
LL + let _: Cell<&str, > = Cell::new("");
LL + let _: Cell<&str> = Cell::new("");
|
error: aborting due to 1 previous error

View File

@ -30,7 +30,7 @@ LL | struct S<'a, 'b>(&'a u8, &'b u8);
help: remove the lifetime argument
|
LL - S::<'static, 'static, 'static>(&0, &0);
LL + S::<'static, 'static, >(&0, &0);
LL + S::<'static, 'static>(&0, &0);
|
error[E0107]: enum takes 2 lifetime arguments but 1 lifetime argument was supplied
@ -65,7 +65,7 @@ LL | enum E<'a, 'b> {
help: remove the lifetime argument
|
LL - E::V::<'static, 'static, 'static>(&0);
LL + E::V::<'static, 'static, >(&0);
LL + E::V::<'static, 'static>(&0);
|
error: aborting due to 4 previous errors

View File

@ -47,7 +47,7 @@ LL | struct Foo<'a>(&'a str);
help: remove the lifetime arguments
|
LL - foo2: Foo<'a, 'b, 'c>,
LL + foo2: Foo<'a, >,
LL + foo2: Foo<'a>,
|
error[E0107]: struct takes 1 lifetime argument but 2 lifetime arguments were supplied
@ -64,7 +64,7 @@ LL | struct Qux<'a, T>(&'a T);
help: remove the lifetime argument
|
LL - qux1: Qux<'a, 'b, i32>,
LL + qux1: Qux<'a, , i32>,
LL + qux1: Qux<'a, i32>,
|
error[E0107]: struct takes 1 lifetime argument but 2 lifetime arguments were supplied
@ -81,7 +81,7 @@ LL | struct Qux<'a, T>(&'a T);
help: remove the lifetime argument
|
LL - qux2: Qux<'a, i32, 'b>,
LL + qux2: Qux<'a, i32, >,
LL + qux2: Qux<'a>,
|
error[E0107]: struct takes 1 lifetime argument but 3 lifetime arguments were supplied
@ -98,7 +98,7 @@ LL | struct Qux<'a, T>(&'a T);
help: remove the lifetime arguments
|
LL - qux3: Qux<'a, 'b, 'c, i32>,
LL + qux3: Qux<'a, , i32>,
LL + qux3: Qux<'a, i32>,
|
error[E0107]: struct takes 1 lifetime argument but 3 lifetime arguments were supplied
@ -115,7 +115,7 @@ LL | struct Qux<'a, T>(&'a T);
help: remove the lifetime arguments
|
LL - qux4: Qux<'a, i32, 'b, 'c>,
LL + qux4: Qux<'a, i32, >,
LL + qux4: Qux<'a>,
|
error[E0107]: struct takes 1 lifetime argument but 3 lifetime arguments were supplied
@ -132,7 +132,7 @@ LL | struct Qux<'a, T>(&'a T);
help: remove the lifetime argument
|
LL - qux5: Qux<'a, 'b, i32, 'c>,
LL + qux5: Qux<'a, , i32, 'c>,
LL + qux5: Qux<'a, i32, 'c>,
|
error[E0107]: struct takes 0 lifetime arguments but 2 lifetime arguments were supplied

View File

@ -12,7 +12,7 @@ LL | type E<'a, T>;
help: remove the lifetime argument
|
LL - type FErr1 = Self::E<'static, 'static>;
LL + type FErr1 = Self::E<'static, >;
LL + type FErr1 = Self::E<'static>;
|
error[E0107]: associated type takes 1 generic argument but 0 generic arguments were supplied
@ -45,7 +45,7 @@ LL | type E<'a, T>;
help: remove the unnecessary generic argument
|
LL - type FErr2<T> = Self::E<'static, T, u32>;
LL + type FErr2<T> = Self::E<'static, T, >;
LL + type FErr2<T> = Self::E<'static, T>;
|
error: aborting due to 3 previous errors

View File

@ -12,7 +12,7 @@ LL | fn new<U>(x: T, _: U) -> S<T> {
help: remove the unnecessary generic argument
|
LL - let _ = S::new::<isize,f64>(1, 1.0);
LL + let _ = S::new::<isize,>(1, 1.0);
LL + let _ = S::new::<isize>(1, 1.0);
|
error[E0107]: struct takes 0 lifetime arguments but 1 lifetime argument was supplied
@ -46,7 +46,7 @@ LL | fn new<U>(x: T, y: U) -> Self;
help: remove the unnecessary generic argument
|
LL - let _: S2 = Trait::new::<isize,f64>(1, 1.0);
LL + let _: S2 = Trait::new::<isize,>(1, 1.0);
LL + let _: S2 = Trait::new::<isize>(1, 1.0);
|
error[E0107]: trait takes 0 lifetime arguments but 1 lifetime argument was supplied
@ -80,7 +80,7 @@ LL | fn new<U>(x: T, y: U) -> Self;
help: remove the unnecessary generic argument
|
LL - let _: S2 = Trait::<'a,isize>::new::<f64,f64>(1, 1.0);
LL + let _: S2 = Trait::<'a,isize>::new::<f64,>(1, 1.0);
LL + let _: S2 = Trait::<'a,isize>::new::<f64>(1, 1.0);
|
error: aborting due to 5 previous errors

View File

@ -30,7 +30,7 @@ LL | pub fn lt_arg<'a: 'a>() {}
help: remove the lifetime argument
|
LL - foreign_generic_mismatch::lt_arg::<'static, 'static>();
LL + foreign_generic_mismatch::lt_arg::<'static, >();
LL + foreign_generic_mismatch::lt_arg::<'static>();
|
error: aborting due to 2 previous errors

View File

@ -12,7 +12,7 @@ LL | struct Foo<'a, T: 'a>(&'a T);
help: remove the lifetime argument
|
LL - Foo::<'static, 'static, ()>(&0);
LL + Foo::<'static, , ()>(&0);
LL + Foo::<'static, ()>(&0);
|
error[E0107]: struct takes 1 lifetime argument but 2 lifetime arguments were supplied
@ -29,7 +29,7 @@ LL | struct Bar<'a>(&'a ());
help: remove the lifetime argument
|
LL - Bar::<'static, 'static, ()>(&());
LL + Bar::<'static, , ()>(&());
LL + Bar::<'static, ()>(&());
|
error[E0107]: struct takes 0 generic arguments but 1 generic argument was supplied

View File

@ -12,7 +12,7 @@ LL | struct Vec<T, A = Heap>(
help: remove the unnecessary generic argument
|
LL - Vec::<isize, Heap, bool>::new();
LL + Vec::<isize, Heap, >::new();
LL + Vec::<isize, Heap>::new();
|
error: aborting due to 1 previous error

View File

@ -12,7 +12,7 @@ LL | struct Vec<T, A = Heap>(
help: remove the unnecessary generic argument
|
LL - let _: Vec<isize, Heap, bool>;
LL + let _: Vec<isize, Heap, >;
LL + let _: Vec<isize, Heap>;
|
error: aborting due to 1 previous error

View File

@ -249,7 +249,7 @@ LL | struct Ty;
help: remove the unnecessary generic arguments
|
LL - type D = Ty<'static, usize, { 0 }>;
LL + type D = Ty<'static, >;
LL + type D = Ty<'static, usize>;
|
error[E0107]: missing generics for struct `type_and_type::Ty`
@ -300,7 +300,7 @@ LL | struct Ty<A, B>(A, B);
help: remove the unnecessary generic argument
|
LL - type D = Ty<usize, String, char>;
LL + type D = Ty<usize, String, >;
LL + type D = Ty<usize, String>;
|
error[E0107]: struct takes 2 generic arguments but 0 generic arguments were supplied
@ -381,7 +381,7 @@ LL | struct Ty<'a, T>(&'a T);
help: remove the lifetime argument
|
LL - type F = Ty<'static, usize, 'static, usize>;
LL + type F = Ty<'static, usize, , usize>;
LL + type F = Ty<'static, usize>;
|
error[E0107]: struct takes 1 generic argument but 2 generic arguments were supplied
@ -398,7 +398,7 @@ LL | struct Ty<'a, T>(&'a T);
help: remove the unnecessary generic argument
|
LL - type F = Ty<'static, usize, 'static, usize>;
LL + type F = Ty<'static, usize, 'static, >;
LL + type F = Ty<'static, usize>;
|
error[E0107]: missing generics for struct `type_and_type_and_type::Ty`
@ -449,7 +449,7 @@ LL | struct Ty<A, B, C = &'static str>(A, B, C);
help: remove the unnecessary generic argument
|
LL - type E = Ty<usize, String, char, f64>;
LL + type E = Ty<usize, String, char, >;
LL + type E = Ty<usize, String, char>;
|
error[E0107]: struct takes at least 2 generic arguments but 0 generic arguments were supplied
@ -499,7 +499,7 @@ LL | trait GenericLifetime<'a> {
help: remove the lifetime argument
|
LL - type C = Box<dyn GenericLifetime<'static, 'static>>;
LL + type C = Box<dyn GenericLifetime<'static, >>;
LL + type C = Box<dyn GenericLifetime<'static>>;
|
error[E0107]: missing generics for trait `GenericType`
@ -532,7 +532,7 @@ LL | trait GenericType<A> {
help: remove the unnecessary generic argument
|
LL - type E = Box<dyn GenericType<String, usize>>;
LL + type E = Box<dyn GenericType<String, >>;
LL + type E = Box<dyn GenericType<String>>;
|
error[E0107]: trait takes 1 generic argument but 0 generic arguments were supplied
@ -582,7 +582,7 @@ LL | trait GenericLifetimeAT<'a> {
help: remove the lifetime argument
|
LL - type B = Box<dyn GenericLifetimeAT<'static, 'static, AssocTy=()>>;
LL + type B = Box<dyn GenericLifetimeAT<'static, , AssocTy=()>>;
LL + type B = Box<dyn GenericLifetimeAT<'static, AssocTy=()>>;
|
error[E0107]: trait takes 0 generic arguments but 1 generic argument was supplied
@ -632,7 +632,7 @@ LL | trait GenericTypeAT<A> {
help: remove the unnecessary generic argument
|
LL - type B = Box<dyn GenericTypeAT<(), (), AssocTy=()>>;
LL + type B = Box<dyn GenericTypeAT<(), , AssocTy=()>>;
LL + type B = Box<dyn GenericTypeAT<(), AssocTy=()>>;
|
error[E0107]: trait takes 0 lifetime arguments but 1 lifetime argument was supplied
@ -714,7 +714,7 @@ LL | trait GenericLifetimeTypeAT<'a, A> {
help: remove the lifetime argument
|
LL - type C = Box<dyn GenericLifetimeTypeAT<'static, 'static, AssocTy=()>>;
LL + type C = Box<dyn GenericLifetimeTypeAT<'static, , AssocTy=()>>;
LL + type C = Box<dyn GenericLifetimeTypeAT<'static, AssocTy=()>>;
|
error[E0107]: trait takes 1 generic argument but 0 generic arguments were supplied
@ -747,7 +747,7 @@ LL | trait GenericLifetimeTypeAT<'a, A> {
help: remove the unnecessary generic argument
|
LL - type E = Box<dyn GenericLifetimeTypeAT<(), (), AssocTy=()>>;
LL + type E = Box<dyn GenericLifetimeTypeAT<(), , AssocTy=()>>;
LL + type E = Box<dyn GenericLifetimeTypeAT<(), AssocTy=()>>;
|
error[E0107]: trait takes 1 lifetime argument but 2 lifetime arguments were supplied
@ -764,7 +764,7 @@ LL | trait GenericLifetimeTypeAT<'a, A> {
help: remove the lifetime argument
|
LL - type F = Box<dyn GenericLifetimeTypeAT<'static, 'static, (), AssocTy=()>>;
LL + type F = Box<dyn GenericLifetimeTypeAT<'static, , (), AssocTy=()>>;
LL + type F = Box<dyn GenericLifetimeTypeAT<'static, (), AssocTy=()>>;
|
error[E0107]: trait takes 1 generic argument but 2 generic arguments were supplied
@ -781,7 +781,7 @@ LL | trait GenericLifetimeTypeAT<'a, A> {
help: remove the unnecessary generic argument
|
LL - type G = Box<dyn GenericLifetimeTypeAT<'static, (), (), AssocTy=()>>;
LL + type G = Box<dyn GenericLifetimeTypeAT<'static, (), , AssocTy=()>>;
LL + type G = Box<dyn GenericLifetimeTypeAT<'static, (), AssocTy=()>>;
|
error[E0107]: trait takes 1 lifetime argument but 2 lifetime arguments were supplied
@ -798,7 +798,7 @@ LL | trait GenericLifetimeTypeAT<'a, A> {
help: remove the lifetime argument
|
LL - type H = Box<dyn GenericLifetimeTypeAT<'static, 'static, (), (), AssocTy=()>>;
LL + type H = Box<dyn GenericLifetimeTypeAT<'static, , (), (), AssocTy=()>>;
LL + type H = Box<dyn GenericLifetimeTypeAT<'static, (), (), AssocTy=()>>;
|
error[E0107]: trait takes 1 generic argument but 2 generic arguments were supplied
@ -815,7 +815,7 @@ LL | trait GenericLifetimeTypeAT<'a, A> {
help: remove the unnecessary generic argument
|
LL - type H = Box<dyn GenericLifetimeTypeAT<'static, 'static, (), (), AssocTy=()>>;
LL + type H = Box<dyn GenericLifetimeTypeAT<'static, 'static, (), , AssocTy=()>>;
LL + type H = Box<dyn GenericLifetimeTypeAT<'static, 'static, (), AssocTy=()>>;
|
error[E0107]: trait takes 2 generic arguments but 0 generic arguments were supplied
@ -866,7 +866,7 @@ LL | trait GenericTypeTypeAT<A, B> {
help: remove the unnecessary generic argument
|
LL - type C = Box<dyn GenericTypeTypeAT<(), (), (), AssocTy=()>>;
LL + type C = Box<dyn GenericTypeTypeAT<(), (), , AssocTy=()>>;
LL + type C = Box<dyn GenericTypeTypeAT<(), (), AssocTy=()>>;
|
error[E0107]: trait takes 2 lifetime arguments but 1 lifetime argument was supplied
@ -1011,7 +1011,7 @@ LL | type D = HashMap<usize, String, char, f64>;
help: remove the unnecessary generic argument
|
LL - type D = HashMap<usize, String, char, f64>;
LL + type D = HashMap<usize, String, char, >;
LL + type D = HashMap<usize, String, char>;
|
error[E0107]: struct takes at least 2 generic arguments but 0 generic arguments were supplied
@ -1081,7 +1081,7 @@ LL | type D = Result<usize, String, char>;
help: remove the unnecessary generic argument
|
LL - type D = Result<usize, String, char>;
LL + type D = Result<usize, String, >;
LL + type D = Result<usize, String>;
|
error[E0107]: enum takes 2 generic arguments but 0 generic arguments were supplied

View File

@ -13,7 +13,7 @@ LL | fn foo<T: ?Sized>(_f: impl AsRef<T>) {}
help: remove the unnecessary generic argument
|
LL - foo::<str, String>("".to_string());
LL + foo::<str, >("".to_string());
LL + foo::<str>("".to_string());
|
error: aborting due to 1 previous error

View File

@ -12,7 +12,7 @@ LL | type Alias<'a, T> = <T as Trait<'a>>::Assoc;
help: remove the lifetime argument
|
LL - fn bar<'a, T: Trait<'a>>(_: Alias<'a, 'a, T>) {}
LL + fn bar<'a, T: Trait<'a>>(_: Alias<'a, , T>) {}
LL + fn bar<'a, T: Trait<'a>>(_: Alias<'a, T>) {}
|
error: aborting due to 1 previous error

View File

@ -12,7 +12,7 @@ LL | struct Foo<'c, 'd>(&'c (), &'d ());
help: remove the lifetime argument
|
LL - fn boom(&self, foo: &mut Foo<'_, '_, 'a>) -> Result<(), &'a ()> {
LL + fn boom(&self, foo: &mut Foo<'_, '_, >) -> Result<(), &'a ()> {
LL + fn boom(&self, foo: &mut Foo<'_, '_>) -> Result<(), &'a ()> {
|
error[E0621]: explicit lifetime required in the type of `foo`

View File

@ -30,7 +30,7 @@ LL | fn early<'a, 'b>(self) -> (&'a u8, &'b u8) { loop {} }
help: remove the lifetime argument
|
LL - S.early::<'static, 'static, 'static>();
LL + S.early::<'static, 'static, >();
LL + S.early::<'static, 'static>();
|
error[E0794]: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
@ -233,7 +233,7 @@ LL | fn early<'a, 'b>(self) -> (&'a u8, &'b u8) { loop {} }
help: remove the lifetime argument
|
LL - S::early::<'static, 'static, 'static>(S);
LL + S::early::<'static, 'static, >(S);
LL + S::early::<'static, 'static>(S);
|
error: aborting due to 18 previous errors

View File

@ -127,7 +127,7 @@ LL | struct Struct<T: Trait<u32, String>> {
help: remove the unnecessary generic argument
|
LL - impl<T: Trait<u32, Assoc=String>, U> YetAnotherTrait for Struct<T, U> {}
LL + impl<T: Trait<u32, Assoc=String>, U> YetAnotherTrait for Struct<T, > {}
LL + impl<T: Trait<u32, Assoc=String>, U> YetAnotherTrait for Struct<T> {}
|
error: aborting due to 9 previous errors

View File

@ -18,7 +18,7 @@ LL | struct S<'a, T>(&'a u8, T);
help: remove the lifetime argument
|
LL - let _: S<'static, 'static>;
LL + let _: S<'static, >;
LL + let _: S<'static>;
|
error[E0107]: struct takes 1 generic argument but 0 generic arguments were supplied

View File

@ -29,7 +29,7 @@ LL | trait bar { fn dup(&self) -> Self; fn blah<X>(&self); }
help: remove the unnecessary generic argument
|
LL - 10.blah::<i32, i32>();
LL + 10.blah::<i32, >();
LL + 10.blah::<i32>();
|
error[E0038]: the trait `bar` cannot be made into an object

View File

@ -6,10 +6,11 @@ LL | Dst: BikeshedIntrinsicFrom<
|
help: remove the unnecessary generic arguments
|
LL - ASSUME_ALIGNMENT,
LL - ASSUME_LIFETIMES,
LL - ASSUME_VALIDITY,
LL - ASSUME_VISIBILITY,
LL + ,
LL + ASSUME_ALIGNMENT,
|
error: aborting due to 1 previous error

View File

@ -12,7 +12,7 @@ LL | struct Foo<'a, T:'a> {
help: remove the unnecessary generic argument
|
LL - let c: Foo<_, _> = Foo { r: &5 };
LL + let c: Foo<_, > = Foo { r: &5 };
LL + let c: Foo<_> = Foo { r: &5 };
|
error: aborting due to 1 previous error

View File

@ -12,7 +12,7 @@ LL | struct Foo<'a, T:'a> {
help: remove the unnecessary generic argument
|
LL - let c: Foo<_, usize> = Foo { r: &5 };
LL + let c: Foo<_, > = Foo { r: &5 };
LL + let c: Foo<_> = Foo { r: &5 };
|
error: aborting due to 1 previous error