Suggest : Type
instead of : _
This commit is contained in:
parent
3e25bcb020
commit
7d1e47aeb0
@ -34,6 +34,7 @@ infer_source_kind_subdiag_let = {$kind ->
|
||||
[const] the value of the constant
|
||||
} `{$arg_name}` is specified
|
||||
[underscore] , where the placeholders `_` are specified
|
||||
[anon] , where the placeholder `Type` is specified
|
||||
*[empty] {""}
|
||||
}
|
||||
|
||||
|
@ -77,13 +77,15 @@ fn can_add_more_info(&self) -> bool {
|
||||
!(self.name == "_" && matches!(self.kind, UnderspecifiedArgKind::Type { .. }))
|
||||
}
|
||||
|
||||
fn where_x_is_kind(&self, in_type: Ty<'_>) -> &'static str {
|
||||
if self.name == "_" {
|
||||
fn where_x_is_kind(&self, in_type: Ty<'_>, is_collect: bool) -> &'static str {
|
||||
if is_collect {
|
||||
"empty"
|
||||
} else if in_type.is_ty_infer() {
|
||||
"anon"
|
||||
} else if self.name == "_" {
|
||||
// FIXME: Consider specializing this message if there is a single `_`
|
||||
// in the type.
|
||||
"underscore"
|
||||
} else if in_type.is_ty_infer() {
|
||||
"empty"
|
||||
} else {
|
||||
"has_name"
|
||||
}
|
||||
@ -190,6 +192,7 @@ fn ty_to_string<'tcx>(infcx: &InferCtxt<'tcx>, ty: Ty<'tcx>) -> String {
|
||||
// We don't want the regular output for `fn`s because it includes its path in
|
||||
// invalid pseudo-syntax, we want the `fn`-pointer output instead.
|
||||
ty::FnDef(..) => ty.fn_sig(infcx.tcx).print(printer).unwrap().into_buffer(),
|
||||
_ if ty.is_ty_infer() => "Type".to_string(),
|
||||
// FIXME: The same thing for closures, but this only works when the closure
|
||||
// does not capture anything.
|
||||
//
|
||||
@ -411,7 +414,7 @@ pub fn emit_inference_failure_err(
|
||||
infer_subdiags.push(SourceKindSubdiag::LetLike {
|
||||
span: insert_span,
|
||||
name: pattern_name.map(|name| name.to_string()).unwrap_or_else(String::new),
|
||||
x_kind: if is_collect { "empty" } else { arg_data.where_x_is_kind(ty) },
|
||||
x_kind: arg_data.where_x_is_kind(ty, is_collect),
|
||||
prefix_kind: arg_data.kind.clone(),
|
||||
prefix: arg_data.kind.try_get_prefix().unwrap_or_default(),
|
||||
arg_name: arg_data.name,
|
||||
@ -427,7 +430,7 @@ pub fn emit_inference_failure_err(
|
||||
infer_subdiags.push(SourceKindSubdiag::LetLike {
|
||||
span: insert_span,
|
||||
name: String::new(),
|
||||
x_kind: arg_data.where_x_is_kind(ty),
|
||||
x_kind: arg_data.where_x_is_kind(ty, false),
|
||||
prefix_kind: arg_data.kind.clone(),
|
||||
prefix: arg_data.kind.try_get_prefix().unwrap_or_default(),
|
||||
arg_name: arg_data.name,
|
||||
|
@ -4,10 +4,10 @@ error[E0282]: type annotations needed
|
||||
LL | let [_, _] = a.into();
|
||||
| ^^^^^^
|
||||
|
|
||||
help: consider giving this pattern a type, where the placeholders `_` are specified
|
||||
help: consider giving this pattern a type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let [_, _]: _ = a.into();
|
||||
| +++
|
||||
LL | let [_, _]: Type = a.into();
|
||||
| ++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,10 +4,10 @@ error[E0282]: type annotations needed
|
||||
LL | with_closure(|x: u32, y| {});
|
||||
| ^
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | with_closure(|x: u32, y: _| {});
|
||||
| +++
|
||||
LL | with_closure(|x: u32, y: Type| {});
|
||||
| ++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -10,10 +10,10 @@ error[E0282]: type annotations needed
|
||||
LL | [(); &(&'static: loop { |x| {}; }) as *const _ as usize]
|
||||
| ^
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | [(); &(&'static: loop { |x: _| {}; }) as *const _ as usize]
|
||||
| +++
|
||||
LL | [(); &(&'static: loop { |x: Type| {}; }) as *const _ as usize]
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -4,10 +4,10 @@ error[E0282]: type annotations needed
|
||||
LL | let _ = foo([0; 1]);
|
||||
| ^
|
||||
|
|
||||
help: consider giving this pattern a type
|
||||
help: consider giving this pattern a type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let _: _ = foo([0; 1]);
|
||||
| +++
|
||||
LL | let _: Type = foo([0; 1]);
|
||||
| ++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -18,10 +18,10 @@ error[E0282]: type annotations needed
|
||||
LL | |_| true
|
||||
| ^
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | |_: _| true
|
||||
| +++
|
||||
LL | |_: Type| true
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -30,10 +30,10 @@ error[E0282]: type annotations needed
|
||||
LL | |x| String::from("x".as_ref());
|
||||
| ^
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | |x: _| String::from("x".as_ref());
|
||||
| +++
|
||||
LL | |x: Type| String::from("x".as_ref());
|
||||
| ++++++
|
||||
|
||||
error[E0283]: type annotations needed
|
||||
--> $DIR/issue-72690.rs:12:26
|
||||
|
@ -4,10 +4,10 @@ error[E0282]: type annotations needed
|
||||
LL | let x;
|
||||
| ^
|
||||
|
|
||||
help: consider giving `x` an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving `x` an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let x: _;
|
||||
| +++
|
||||
LL | let x: Type;
|
||||
| ++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -6,10 +6,10 @@ LL | let x = panic!();
|
||||
LL | x.clone();
|
||||
| - type must be known at this point
|
||||
|
|
||||
help: consider giving `x` an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving `x` an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let x: _ = panic!();
|
||||
| +++
|
||||
LL | let x: Type = panic!();
|
||||
| ++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -17,10 +17,10 @@ error[E0282]: type annotations needed
|
||||
LL | 1 => |c| c + 1,
|
||||
| ^
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | 1 => |c: _| c + 1,
|
||||
| +++
|
||||
LL | 1 => |c: Type| c + 1,
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -4,10 +4,10 @@ error[E0282]: type annotations needed
|
||||
LL | |s| s.len()
|
||||
| ^ - type must be known at this point
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | |s: _| s.len()
|
||||
| +++
|
||||
LL | |s: Type| s.len()
|
||||
| ++++++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/branches3.rs:15:10
|
||||
@ -15,10 +15,10 @@ error[E0282]: type annotations needed
|
||||
LL | |s| s.len()
|
||||
| ^ - type must be known at this point
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | |s: _| s.len()
|
||||
| +++
|
||||
LL | |s: Type| s.len()
|
||||
| ++++++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/branches3.rs:23:10
|
||||
@ -26,10 +26,10 @@ error[E0282]: type annotations needed
|
||||
LL | |s| s.len()
|
||||
| ^ - type must be known at this point
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | |s: _| s.len()
|
||||
| +++
|
||||
LL | |s: Type| s.len()
|
||||
| ++++++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/branches3.rs:30:10
|
||||
@ -37,10 +37,10 @@ error[E0282]: type annotations needed
|
||||
LL | |s| s.len()
|
||||
| ^ - type must be known at this point
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | |s: _| s.len()
|
||||
| +++
|
||||
LL | |s: Type| s.len()
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
@ -4,10 +4,10 @@ error[E0282]: type annotations needed
|
||||
LL | let x = match () {
|
||||
| ^
|
||||
|
|
||||
help: consider giving `x` an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving `x` an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let x: _ = match () {
|
||||
| +++
|
||||
LL | let x: Type = match () {
|
||||
| ++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -7,10 +7,10 @@ LL | let x;
|
||||
LL | (..) => {}
|
||||
| ---- type must be known at this point
|
||||
|
|
||||
help: consider giving `x` an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving `x` an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let x: _;
|
||||
| +++
|
||||
LL | let x: Type;
|
||||
| ++++++
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/pat-tuple-bad-type.rs:10:9
|
||||
|
@ -191,10 +191,10 @@ error[E0282]: type annotations needed
|
||||
LL | let x @ ..;
|
||||
| ^^^^^^
|
||||
|
|
||||
help: consider giving this pattern a type, where the placeholders `_` are specified
|
||||
help: consider giving this pattern a type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let x @ ..: _;
|
||||
| +++
|
||||
LL | let x @ ..: Type;
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 23 previous errors
|
||||
|
||||
|
@ -19,10 +19,10 @@ error[E0282]: type annotations needed
|
||||
LL | let mut N;
|
||||
| ^^^^^
|
||||
|
|
||||
help: consider giving `N` an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving `N` an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let mut N: _;
|
||||
| +++
|
||||
LL | let mut N: Type;
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -7,10 +7,10 @@ LL |
|
||||
LL | x.0;
|
||||
| - type must be known at this point
|
||||
|
|
||||
help: consider giving `x` an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving `x` an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let mut x: _ = Default::default();
|
||||
| +++
|
||||
LL | let mut x: Type = Default::default();
|
||||
| ++++++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/method-and-field-eager-resolution.rs:11:9
|
||||
@ -21,10 +21,10 @@ LL |
|
||||
LL | x[0];
|
||||
| - type must be known at this point
|
||||
|
|
||||
help: consider giving `x` an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving `x` an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let mut x: _ = Default::default();
|
||||
| +++
|
||||
LL | let mut x: Type = Default::default();
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -4,10 +4,10 @@ error[E0282]: type annotations needed
|
||||
LL | |x| x.len()
|
||||
| ^ - type must be known at this point
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | |x: _| x.len()
|
||||
| +++
|
||||
LL | |x: Type| x.len()
|
||||
| ++++++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/closures_in_branches.rs:21:10
|
||||
@ -15,10 +15,10 @@ error[E0282]: type annotations needed
|
||||
LL | |x| x.len()
|
||||
| ^ - type must be known at this point
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | |x: _| x.len()
|
||||
| +++
|
||||
LL | |x: Type| x.len()
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -10,10 +10,10 @@ error[E0282]: type annotations needed
|
||||
LL | let x = |_| {};
|
||||
| ^
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let x = |_: _| {};
|
||||
| +++
|
||||
LL | let x = |_: Type| {};
|
||||
| ++++++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/unknown_type_for_closure.rs:10:14
|
||||
|
@ -28,10 +28,10 @@ error[E0282]: type annotations needed
|
||||
LL | let _ = |a, b: _| -> _ { 0 };
|
||||
| ^
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type, where the placeholders `_` are specified
|
||||
help: consider giving this closure parameter an explicit type, where the placeholder `Type` is specified
|
||||
|
|
||||
LL | let _ = |a: _, b: _| -> _ { 0 };
|
||||
| +++
|
||||
LL | let _ = |a: Type, b: _| -> _ { 0 };
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user