From 530b3047ed19a6468fc75e5a5ec14763093a069d Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Tue, 7 May 2019 12:09:57 +0200 Subject: Deduplicate impls in impls_for_trait This was duplicating impls in dependencies a lot... --- crates/ra_hir/src/ty/traits.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/ty/traits.rs b/crates/ra_hir/src/ty/traits.rs index f70a32575..4bbc99f0e 100644 --- a/crates/ra_hir/src/ty/traits.rs +++ b/crates/ra_hir/src/ty/traits.rs @@ -1,6 +1,7 @@ //! Trait solving using Chalk. use std::sync::{Arc, Mutex}; +use rustc_hash::FxHashSet; use log::debug; use chalk_ir::cast::Cast; @@ -31,7 +32,7 @@ pub(crate) fn impls_for_trait( krate: Crate, trait_: Trait, ) -> Arc<[ImplBlock]> { - let mut impls = Vec::new(); + let mut impls = FxHashSet::default(); // We call the query recursively here. On the one hand, this means we can // reuse results from queries for different crates; on the other hand, this // will only ever get called for a few crates near the root of the tree (the @@ -42,7 +43,7 @@ pub(crate) fn impls_for_trait( } let crate_impl_blocks = db.impls_in_crate(krate); impls.extend(crate_impl_blocks.lookup_impl_blocks_for_trait(&trait_)); - impls.into() + impls.into_iter().collect::>().into() } fn solve( -- cgit v1.2.3