mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-21 19:33:16 +00:00
point at a type parameter shadowing another type
This commit is contained in:
parent
0068b8bf4b
commit
1886aef035
@ -161,6 +161,7 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
|
||||
msg: String,
|
||||
fallback_label: String,
|
||||
span: Span,
|
||||
span_label: Option<(Span, &'a str)>,
|
||||
could_be_expr: bool,
|
||||
suggestion: Option<(Span, &'a str, String)>,
|
||||
}
|
||||
@ -172,6 +173,12 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
|
||||
msg: format!("expected {}, found {} `{}`", expected, res.descr(), path_str),
|
||||
fallback_label: format!("not a {expected}"),
|
||||
span,
|
||||
span_label: match res {
|
||||
Res::Def(kind, def_id) if kind == DefKind::TyParam => {
|
||||
self.def_span(def_id).map(|span| (span, "found this type pararmeter"))
|
||||
}
|
||||
_ => None,
|
||||
},
|
||||
could_be_expr: match res {
|
||||
Res::Def(DefKind::Fn, _) => {
|
||||
// Verify whether this is a fn call or an Fn used as a type.
|
||||
@ -251,6 +258,7 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
|
||||
format!("not found in {mod_str}")
|
||||
},
|
||||
span: item_span,
|
||||
span_label: None,
|
||||
could_be_expr: false,
|
||||
suggestion,
|
||||
}
|
||||
@ -262,6 +270,10 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
|
||||
|
||||
self.suggest_swapping_misplaced_self_ty_and_trait(&mut err, source, res, base_error.span);
|
||||
|
||||
if let Some((span, label)) = base_error.span_label {
|
||||
err.span_label(span, label);
|
||||
}
|
||||
|
||||
if let Some(sugg) = base_error.suggestion {
|
||||
err.span_suggestion_verbose(sugg.0, sugg.1, sugg.2, Applicability::MaybeIncorrect);
|
||||
}
|
||||
|
@ -2,7 +2,9 @@ error[E0423]: expected value, found type parameter `T`
|
||||
--> $DIR/issue-69654.rs:5:25
|
||||
|
|
||||
LL | impl<T> Bar<T> for [u8; T] {}
|
||||
| ^ not a value
|
||||
| - ^ not a value
|
||||
| |
|
||||
| found this type pararmeter
|
||||
|
||||
error[E0599]: the function or associated item `foo` exists for struct `Foo<_>`, but its trait bounds were not satisfied
|
||||
--> $DIR/issue-69654.rs:17:10
|
||||
|
@ -1,6 +1,8 @@
|
||||
error[E0574]: expected struct, variant or union type, found type parameter `T`
|
||||
--> $DIR/lexical-scopes.rs:3:13
|
||||
|
|
||||
LL | fn f<T>() {
|
||||
| - found this type pararmeter
|
||||
LL | let t = T { i: 0 };
|
||||
| ^ not a struct, variant or union type
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
trait Foo<T> {
|
||||
fn foo(&self, name: T) -> usize;
|
||||
}
|
||||
|
||||
struct Bar {
|
||||
baz: Baz,
|
||||
}
|
||||
|
||||
struct Baz {
|
||||
num: usize,
|
||||
}
|
||||
|
||||
impl<Baz> Foo<Baz> for Bar {
|
||||
fn foo(&self, _name: Baz) -> usize {
|
||||
match self.baz {
|
||||
Baz { num } => num, //~ ERROR expected struct, variant or union type, found type parameter `Baz`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -0,0 +1,12 @@
|
||||
error[E0574]: expected struct, variant or union type, found type parameter `Baz`
|
||||
--> $DIR/point-at-type-parameter-shadowing-another-type.rs:16:13
|
||||
|
|
||||
LL | impl<Baz> Foo<Baz> for Bar {
|
||||
| --- found this type pararmeter
|
||||
...
|
||||
LL | Baz { num } => num,
|
||||
| ^^^ not a struct, variant or union type
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0574`.
|
@ -2,7 +2,9 @@ error[E0404]: expected trait, found type parameter `Add`
|
||||
--> $DIR/issue-35987.rs:5:21
|
||||
|
|
||||
LL | impl<T: Clone, Add> Add for Foo<T> {
|
||||
| ^^^ not a trait
|
||||
| --- ^^^ not a trait
|
||||
| |
|
||||
| found this type pararmeter
|
||||
|
|
||||
help: consider importing this trait instead
|
||||
|
|
||||
|
Loading…
Reference in New Issue
Block a user