diff options
Diffstat (limited to 'crates/ra_hir/src/ty/method_resolution.rs')
-rw-r--r-- | crates/ra_hir/src/ty/method_resolution.rs | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/crates/ra_hir/src/ty/method_resolution.rs b/crates/ra_hir/src/ty/method_resolution.rs index a7d4517ee..da7587f01 100644 --- a/crates/ra_hir/src/ty/method_resolution.rs +++ b/crates/ra_hir/src/ty/method_resolution.rs | |||
@@ -46,18 +46,13 @@ impl CrateImplBlocks { | |||
46 | ty: &Ty, | 46 | ty: &Ty, |
47 | ) -> impl Iterator<Item = (Module, ImplBlock)> + 'a { | 47 | ) -> impl Iterator<Item = (Module, ImplBlock)> + 'a { |
48 | let fingerprint = TyFingerprint::for_impl(ty); | 48 | let fingerprint = TyFingerprint::for_impl(ty); |
49 | fingerprint | 49 | fingerprint.and_then(|f| self.impls.get(&f)).into_iter().flat_map(|i| i.iter()).map( |
50 | .and_then(|f| self.impls.get(&f)) | 50 | move |(module_id, impl_id)| { |
51 | .into_iter() | 51 | let module = Module { krate: self.krate, module_id: *module_id }; |
52 | .flat_map(|i| i.iter()) | ||
53 | .map(move |(module_id, impl_id)| { | ||
54 | let module = Module { | ||
55 | krate: self.krate, | ||
56 | module_id: *module_id, | ||
57 | }; | ||
58 | let module_impl_blocks = db.impls_in_module(module); | 52 | let module_impl_blocks = db.impls_in_module(module); |
59 | (module, ImplBlock::from_id(module_impl_blocks, *impl_id)) | 53 | (module, ImplBlock::from_id(module_impl_blocks, *impl_id)) |
60 | }) | 54 | }, |
55 | ) | ||
61 | } | 56 | } |
62 | 57 | ||
63 | pub fn lookup_impl_blocks_for_trait<'a>( | 58 | pub fn lookup_impl_blocks_for_trait<'a>( |
@@ -66,18 +61,13 @@ impl CrateImplBlocks { | |||
66 | tr: &Trait, | 61 | tr: &Trait, |
67 | ) -> impl Iterator<Item = (Module, ImplBlock)> + 'a { | 62 | ) -> impl Iterator<Item = (Module, ImplBlock)> + 'a { |
68 | let id = tr.id; | 63 | let id = tr.id; |
69 | self.impls_by_trait | 64 | self.impls_by_trait.get(&id).into_iter().flat_map(|i| i.iter()).map( |
70 | .get(&id) | 65 | move |(module_id, impl_id)| { |
71 | .into_iter() | 66 | let module = Module { krate: self.krate, module_id: *module_id }; |
72 | .flat_map(|i| i.iter()) | ||
73 | .map(move |(module_id, impl_id)| { | ||
74 | let module = Module { | ||
75 | krate: self.krate, | ||
76 | module_id: *module_id, | ||
77 | }; | ||
78 | let module_impl_blocks = db.impls_in_module(module); | 67 | let module_impl_blocks = db.impls_in_module(module); |
79 | (module, ImplBlock::from_id(module_impl_blocks, *impl_id)) | 68 | (module, ImplBlock::from_id(module_impl_blocks, *impl_id)) |
80 | }) | 69 | }, |
70 | ) | ||
81 | } | 71 | } |
82 | 72 | ||
83 | fn collect_recursive(&mut self, db: &impl HirDatabase, module: &Module) { | 73 | fn collect_recursive(&mut self, db: &impl HirDatabase, module: &Module) { |