diff options
| author | dfireBird <me@dfirebird.dev> | 2024-02-12 22:56:03 +0530 |
|---|---|---|
| committer | dfireBird <me@dfirebird.dev> | 2024-02-12 22:56:03 +0530 |
| commit | 0209c28136bd9d2684fd39d6f0e13b3e32ae0526 (patch) | |
| tree | 37af078e9c22a1727b97657142031dbdc8975257 | |
| parent | cf8733353de5a2b3e7ba3d07dfed19918645ebb0 (diff) | |
| download | rust-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.rs | 10 | ||||
| -rw-r--r-- | crates/ide-completion/src/tests/type_pos.rs | 18 |
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:: + "#]], + ); +} |
