diff options
author | Lukas Wirth <[email protected]> | 2021-02-09 18:47:21 +0000 |
---|---|---|
committer | Lukas Wirth <[email protected]> | 2021-02-09 18:47:21 +0000 |
commit | e92180a1d8c964d386fc5ffb80bfb05abdb6c153 (patch) | |
tree | be07005b873aaf0931099bccef0bf4ceb3dab9d2 /crates/completion/src/completions | |
parent | 2f171ca78d306d105a9e36f8e509039d6a034c8e (diff) |
Show Self pattern completions for Adts if inside impls
Diffstat (limited to 'crates/completion/src/completions')
-rw-r--r-- | crates/completion/src/completions/pattern.rs | 28 | ||||
-rw-r--r-- | crates/completion/src/completions/unqualified_path.rs | 2 |
2 files changed, 29 insertions, 1 deletions
diff --git a/crates/completion/src/completions/pattern.rs b/crates/completion/src/completions/pattern.rs index 595160ff5..43a5160cb 100644 --- a/crates/completion/src/completions/pattern.rs +++ b/crates/completion/src/completions/pattern.rs | |||
@@ -31,6 +31,14 @@ pub(crate) fn complete_pattern(acc: &mut Completions, ctx: &CompletionContext) { | |||
31 | _ => false, | 31 | _ => false, |
32 | }, | 32 | }, |
33 | hir::ScopeDef::MacroDef(_) => true, | 33 | hir::ScopeDef::MacroDef(_) => true, |
34 | hir::ScopeDef::ImplSelfType(impl_) => match impl_.target_ty(ctx.db).as_adt() { | ||
35 | Some(hir::Adt::Struct(strukt)) => { | ||
36 | acc.add_struct_pat(ctx, strukt, Some(name.clone())); | ||
37 | true | ||
38 | } | ||
39 | Some(hir::Adt::Enum(_)) => !ctx.is_irrefutable_pat_binding, | ||
40 | _ => true, | ||
41 | }, | ||
34 | _ => false, | 42 | _ => false, |
35 | }; | 43 | }; |
36 | if add_resolution { | 44 | if add_resolution { |
@@ -258,4 +266,24 @@ fn main() { | |||
258 | "#, | 266 | "#, |
259 | ); | 267 | ); |
260 | } | 268 | } |
269 | |||
270 | #[test] | ||
271 | fn completes_self_pats() { | ||
272 | check_snippet( | ||
273 | r#" | ||
274 | struct Foo(i32); | ||
275 | impl Foo { | ||
276 | fn foo() { | ||
277 | match () { | ||
278 | $0 | ||
279 | } | ||
280 | } | ||
281 | } | ||
282 | "#, | ||
283 | expect![[r#" | ||
284 | bn Self Self($1)$0 | ||
285 | bn Foo Foo($1)$0 | ||
286 | "#]], | ||
287 | ) | ||
288 | } | ||
261 | } | 289 | } |
diff --git a/crates/completion/src/completions/unqualified_path.rs b/crates/completion/src/completions/unqualified_path.rs index fb67756bb..5112ecc2d 100644 --- a/crates/completion/src/completions/unqualified_path.rs +++ b/crates/completion/src/completions/unqualified_path.rs | |||
@@ -746,7 +746,7 @@ fn f() -> m::E { V$0 } | |||
746 | r#" | 746 | r#" |
747 | enum Foo { Bar, Baz, Quux } | 747 | enum Foo { Bar, Baz, Quux } |
748 | impl Foo { | 748 | impl Foo { |
749 | fn foo() { let foo: Foo = Q$0 } | 749 | fn foo() { match Foo::Bar { Q$0 } } |
750 | } | 750 | } |
751 | "#, | 751 | "#, |
752 | expect![[r#" | 752 | expect![[r#" |