about summary refs log tree commit diff
diff options
context:
space:
mode:
authordfireBird <me@dfirebird.dev>2024-02-12 22:56:03 +0530
committerdfireBird <me@dfirebird.dev>2024-02-12 22:56:03 +0530
commit0209c28136bd9d2684fd39d6f0e13b3e32ae0526 (patch)
tree37af078e9c22a1727b97657142031dbdc8975257
parentcf8733353de5a2b3e7ba3d07dfed19918645ebb0 (diff)
downloadrust-0209c28136bd9d2684fd39d6f0e13b3e32ae0526.tar.gz
rust-0209c28136bd9d2684fd39d6f0e13b3e32ae0526.zip
add completions to show only traits in trait `impl` statement
-rw-r--r--crates/ide-completion/src/completions/type.rs10
-rw-r--r--crates/ide-completion/src/tests/type_pos.rs18
2 files changed, 28 insertions, 0 deletions
diff --git a/crates/ide-completion/src/completions/type.rs b/crates/ide-completion/src/completions/type.rs
index e6a4335c3fe..eca17bb7c7f 100644
--- a/crates/ide-completion/src/completions/type.rs
+++ b/crates/ide-completion/src/completions/type.rs
@@ -184,6 +184,16 @@ pub(crate) fn complete_type_path(
                         }
                     }
                 }
+                TypeLocation::ImplTrait => {
+                    acc.add_nameref_keywords_with_colon(ctx);
+                    ctx.process_all_names(&mut |name, def, doc_aliases| {
+                        let is_trait = matches!(def, ScopeDef::ModuleDef(hir::ModuleDef::Trait(_)));
+                        if is_trait {
+                            acc.add_path_resolution(ctx, path_ctx, name, def, doc_aliases);
+                        }
+                    });
+                    return;
+                }
                 _ => {}
             };
 
diff --git a/crates/ide-completion/src/tests/type_pos.rs b/crates/ide-completion/src/tests/type_pos.rs
index c7161f82ce7..656592ebfd6 100644
--- a/crates/ide-completion/src/tests/type_pos.rs
+++ b/crates/ide-completion/src/tests/type_pos.rs
@@ -989,3 +989,21 @@ fn foo<'a>() { S::<'static, F$0, _, _>; }
         "#]],
     );
 }
+
+#[test]
+fn complete_traits_on_impl_trait_block() {
+    check(
+        r#"
+trait Foo {}
+
+struct Bar;
+
+impl $0 for Bar { }"#,
+        expect![[r#"
+            tt Foo
+            tt Trait
+            kw crate::
+            kw self::
+        "#]],
+    );
+}