Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #20665 from ChayimFriedman2/error-notable
fix: Don't mark unknown type as implementing every notable trait
Shoyu Vanilla (Flint) 7 months ago
parent c09b440 · parent 4dbb8b4 · commit 3a67544
-rw-r--r--crates/ide/src/hover.rs6
-rw-r--r--crates/ide/src/hover/tests.rs23
2 files changed, 29 insertions, 0 deletions
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs
index 3f52303d74..03b9b36775 100644
--- a/crates/ide/src/hover.rs
+++ b/crates/ide/src/hover.rs
@@ -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)
diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs
index 58d8a7edbe..a88c0c9866 100644
--- a/crates/ide/src/hover/tests.rs
+++ b/crates/ide/src/hover/tests.rs
@@ -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
+ "#]],
+ );
+}