diff --git a/crates/ra_batch/src/lib.rs b/crates/ra_batch/src/lib.rs index 02ea893065..c59821f446 100644 --- a/crates/ra_batch/src/lib.rs +++ b/crates/ra_batch/src/lib.rs @@ -43,8 +43,12 @@ fn vfs_root_to_id(r: ra_vfs::VfsRoot) -> SourceRootId { impl BatchDatabase { pub fn load(crate_graph: CrateGraph, vfs: &mut Vfs) -> BatchDatabase { let mut db = BatchDatabase { runtime: salsa::Runtime::default() }; - db.query_mut(ra_db::ParseQuery).set_lru_capacity(128); - db.query_mut(ra_hir::db::ParseMacroQuery).set_lru_capacity(128); + let lru_cap = std::env::var("RA_LRU_CAP") + .ok() + .and_then(|it| it.parse::().ok()) + .unwrap_or(ra_db::DEFAULT_LRU_CAP); + db.query_mut(ra_db::ParseQuery).set_lru_capacity(lru_cap); + db.query_mut(ra_hir::db::ParseMacroQuery).set_lru_capacity(lru_cap); db.set_crate_graph(Arc::new(crate_graph)); // wait until Vfs has loaded all roots diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index 7c49c585bc..f08616100d 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -65,6 +65,8 @@ pub struct FileRange { pub range: TextRange, } +pub const DEFAULT_LRU_CAP: usize = 128; + /// Database which stores all significant input facts: source code and project /// model. Everything else in rust-analyzer is derived from these queries. #[salsa::query_group(SourceDatabaseStorage)] diff --git a/crates/ra_ide_api/src/db.rs b/crates/ra_ide_api/src/db.rs index 4f19b01c46..cccf0ada4a 100644 --- a/crates/ra_ide_api/src/db.rs +++ b/crates/ra_ide_api/src/db.rs @@ -49,8 +49,9 @@ impl Default for RootDatabase { db.set_crate_graph(Default::default()); db.set_local_roots(Default::default()); db.set_library_roots(Default::default()); - db.query_mut(ra_db::ParseQuery).set_lru_capacity(128); - db.query_mut(hir::db::ParseMacroQuery).set_lru_capacity(128); + 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); db } }