diff --git a/crates/ra_hir/src/test_db.rs b/crates/ra_hir/src/test_db.rs index 047a27aaf69..84a2bf02b94 100644 --- a/crates/ra_hir/src/test_db.rs +++ b/crates/ra_hir/src/test_db.rs @@ -5,10 +5,7 @@ use std::{panic, sync::Arc}; use hir_def::{db::DefDatabase2, ModuleId}; use hir_expand::diagnostics::DiagnosticSink; use parking_lot::Mutex; -use ra_db::{ - salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath, SourceDatabase, - SourceRootId, -}; +use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath, SourceDatabase}; use crate::{db, debug::HirDebugHelper}; @@ -21,12 +18,34 @@ use crate::{db, debug::HirDebugHelper}; db::DefDatabase2Storage, db::HirDatabaseStorage )] -#[derive(Debug)] +#[derive(Debug, Default)] pub struct TestDB { events: Mutex<Option<Vec<salsa::Event<TestDB>>>>, runtime: salsa::Runtime<TestDB>, } +impl salsa::Database for TestDB { + fn salsa_runtime(&self) -> &salsa::Runtime<TestDB> { + &self.runtime + } + + fn salsa_event(&self, event: impl Fn() -> salsa::Event<TestDB>) { + let mut events = self.events.lock(); + if let Some(events) = &mut *events { + events.push(event()); + } + } +} + +impl salsa::ParallelDatabase for TestDB { + fn snapshot(&self) -> salsa::Snapshot<TestDB> { + salsa::Snapshot::new(TestDB { + events: Default::default(), + runtime: self.runtime.snapshot(self), + }) + } +} + impl panic::RefUnwindSafe for TestDB {} impl FileLoader for TestDB { @@ -77,36 +96,6 @@ impl TestDB { } } -impl salsa::Database for TestDB { - fn salsa_runtime(&self) -> &salsa::Runtime<TestDB> { - &self.runtime - } - - fn salsa_event(&self, event: impl Fn() -> salsa::Event<TestDB>) { - let mut events = self.events.lock(); - if let Some(events) = &mut *events { - events.push(event()); - } - } -} - -impl Default for TestDB { - fn default() -> TestDB { - let mut db = TestDB { events: Default::default(), runtime: salsa::Runtime::default() }; - db.set_crate_graph(Default::default()); - db - } -} - -impl salsa::ParallelDatabase for TestDB { - fn snapshot(&self) -> salsa::Snapshot<TestDB> { - salsa::Snapshot::new(TestDB { - events: Default::default(), - runtime: self.runtime.snapshot(self), - }) - } -} - impl TestDB { pub fn log(&self, f: impl FnOnce()) -> Vec<salsa::Event<TestDB>> { *self.events.lock() = Some(Vec::new());