From fed52706def9a9f5d33edc7dd9848a02ae475ba5 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 7 Jun 2019 20:49:29 +0300 Subject: make LRU cache configurable --- crates/ra_ide_api/src/db.rs | 12 +++++++++--- crates/ra_ide_api/src/lib.rs | 11 ++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'crates/ra_ide_api/src') diff --git a/crates/ra_ide_api/src/db.rs b/crates/ra_ide_api/src/db.rs index cccf0ada4..b3f395502 100644 --- a/crates/ra_ide_api/src/db.rs +++ b/crates/ra_ide_api/src/db.rs @@ -41,6 +41,12 @@ impl salsa::Database for RootDatabase { impl Default for RootDatabase { fn default() -> RootDatabase { + RootDatabase::new(None) + } +} + +impl RootDatabase { + pub fn new(lru_capacity: Option) -> RootDatabase { let mut db = RootDatabase { runtime: salsa::Runtime::default(), last_gc: time::Instant::now(), @@ -49,9 +55,9 @@ impl Default for RootDatabase { db.set_crate_graph(Default::default()); db.set_local_roots(Default::default()); db.set_library_roots(Default::default()); - let lru_cap = ra_db::DEFAULT_LRU_CAP; - db.query_mut(ra_db::ParseQuery).set_lru_capacity(lru_cap); - db.query_mut(hir::db::ParseMacroQuery).set_lru_capacity(lru_cap); + let lru_capacity = lru_capacity.unwrap_or(ra_db::DEFAULT_LRU_CAP); + db.query_mut(ra_db::ParseQuery).set_lru_capacity(lru_capacity); + db.query_mut(hir::db::ParseMacroQuery).set_lru_capacity(lru_capacity); db } } diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index dbebf50a6..8741e736f 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs @@ -242,12 +242,21 @@ pub struct CallInfo { } /// `AnalysisHost` stores the current state of the world. -#[derive(Debug, Default)] +#[derive(Debug)] pub struct AnalysisHost { db: db::RootDatabase, } +impl Default for AnalysisHost { + fn default() -> AnalysisHost { + AnalysisHost::new(None) + } +} + impl AnalysisHost { + pub fn new(lru_capcity: Option) -> AnalysisHost { + AnalysisHost { db: db::RootDatabase::new(lru_capcity) } + } /// Returns a snapshot of the current state, which you can query for /// semantic information. pub fn analysis(&self) -> Analysis { -- cgit v1.2.3