Don't mark unknown type as implementing every notable trait

Because the new solver, will return "yes" for them (which is a good thing).
This commit is contained in:
Chayim Refael Friedman 2025-09-15 07:56:35 +03:00
parent 760d378e4c
commit 4dbb8b4c64
2 changed files with 29 additions and 0 deletions

View File

@ -483,6 +483,12 @@ fn notable_traits<'db>(
db: &'db RootDatabase,
ty: &hir::Type<'db>,
) -> Vec<(hir::Trait, Vec<(Option<hir::Type<'db>>, hir::Name)>)> {
if ty.is_unknown() {
// The trait solver returns "yes" to the question whether the error type
// impls any trait, and we don't want to show it as having any notable trait.
return Vec::new();
}
db.notable_traits_in_deps(ty.krate(db).into())
.iter()
.flat_map(|it| &**it)

View File

@ -11097,3 +11097,26 @@ impl Enum<'_, Borrowed> {
"#]],
);
}
#[test]
fn unknown_should_not_implement_notable_traits() {
check(
r#"
//- minicore: future, iterator
fn foo() {
let x$0;
}
"#,
expect![[r#"
*x*
```rust
let x: {unknown}
```
---
no Drop
"#]],
);
}