diff options
author | Jade <[email protected]> | 2021-05-25 14:27:41 +0100 |
---|---|---|
committer | Jade <[email protected]> | 2021-05-25 14:27:41 +0100 |
commit | 0292efd363584fc4be50b1b1240fbbe990e2ebf1 (patch) | |
tree | 9b952f814b4733f287ea9f5fb3f9bc412514a923 | |
parent | f3cfd8afb6db1ee0a8449655703172a0c8cf5411 (diff) |
Also do goto implementation on assoc consts
I forgot to put this into #8988, sorry.
Goto implementation on a const on the trait will go to the
implementations with their respective definitions of the const, if
present.
-rw-r--r-- | crates/ide/src/goto_implementation.rs | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/crates/ide/src/goto_implementation.rs b/crates/ide/src/goto_implementation.rs index 5a8d3c3f9..43356a94e 100644 --- a/crates/ide/src/goto_implementation.rs +++ b/crates/ide/src/goto_implementation.rs | |||
@@ -53,7 +53,13 @@ pub(crate) fn goto_implementation( | |||
53 | let assoc = f.as_assoc_item(sema.db)?; | 53 | let assoc = f.as_assoc_item(sema.db)?; |
54 | let name = assoc.name(sema.db)?; | 54 | let name = assoc.name(sema.db)?; |
55 | let trait_ = assoc.containing_trait(sema.db)?; | 55 | let trait_ = assoc.containing_trait(sema.db)?; |
56 | impls_for_trait_fn(&sema, trait_, name) | 56 | impls_for_trait_item(&sema, trait_, name) |
57 | } | ||
58 | hir::ModuleDef::Const(c) => { | ||
59 | let assoc = c.as_assoc_item(sema.db)?; | ||
60 | let name = assoc.name(sema.db)?; | ||
61 | let trait_ = assoc.containing_trait(sema.db)?; | ||
62 | impls_for_trait_item(&sema, trait_, name) | ||
57 | } | 63 | } |
58 | _ => return None, | 64 | _ => return None, |
59 | }; | 65 | }; |
@@ -71,7 +77,7 @@ fn impls_for_trait(sema: &Semantics<RootDatabase>, trait_: hir::Trait) -> Vec<Na | |||
71 | .collect() | 77 | .collect() |
72 | } | 78 | } |
73 | 79 | ||
74 | fn impls_for_trait_fn( | 80 | fn impls_for_trait_item( |
75 | sema: &Semantics<RootDatabase>, | 81 | sema: &Semantics<RootDatabase>, |
76 | trait_: hir::Trait, | 82 | trait_: hir::Trait, |
77 | fun_name: hir::Name, | 83 | fun_name: hir::Name, |
@@ -306,4 +312,22 @@ impl Tr for S { | |||
306 | "#, | 312 | "#, |
307 | ); | 313 | ); |
308 | } | 314 | } |
315 | |||
316 | #[test] | ||
317 | fn goto_implementation_trait_assoc_const() { | ||
318 | check( | ||
319 | r#" | ||
320 | trait Tr { | ||
321 | const C$0: usize; | ||
322 | } | ||
323 | |||
324 | struct S; | ||
325 | |||
326 | impl Tr for S { | ||
327 | const C: usize = 4; | ||
328 | //^ | ||
329 | } | ||
330 | "#, | ||
331 | ); | ||
332 | } | ||
309 | } | 333 | } |