From e0eb33605a917d2e7289debe0c915e75286b834f Mon Sep 17 00:00:00 2001 From: Aleksey Kladov <aleksey.kladov@gmail.com> Date: Thu, 25 Oct 2018 17:40:24 +0300 Subject: Encapsulate CrateGraph a bit --- crates/ra_analysis/src/lib.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'crates/ra_analysis/src') diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index 703938cf9..af7894cd0 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs @@ -15,9 +15,9 @@ mod completion; use std::{ fmt, sync::Arc, - collections::BTreeMap, }; +use rustc_hash::FxHashMap; use ra_syntax::{AtomEdit, File, TextRange, TextUnit}; use relative_path::{RelativePath, RelativePathBuf}; use rayon::prelude::*; @@ -55,9 +55,21 @@ pub struct FileId(pub u32); #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct CrateId(pub u32); -#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Default, PartialEq, Eq)] pub struct CrateGraph { - pub crate_roots: BTreeMap<CrateId, FileId>, + crate_roots: FxHashMap<CrateId, FileId>, +} + +impl CrateGraph { + pub fn new() -> CrateGraph { + CrateGraph::default() + } + pub fn add_crate_root(&mut self, file_id: FileId) -> CrateId{ + let crate_id = CrateId(self.crate_roots.len() as u32); + let prev = self.crate_roots.insert(crate_id, file_id); + assert!(prev.is_none()); + crate_id + } } pub trait FileResolver: fmt::Debug + Send + Sync + 'static { -- cgit v1.2.3