diff --git a/crates/ra_analysis/src/db.rs b/crates/ra_analysis/src/db.rs index 9548ec602d..6275125530 100644 --- a/crates/ra_analysis/src/db.rs +++ b/crates/ra_analysis/src/db.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use ra_editor::LineIndex; use ra_syntax::{File, SyntaxNode}; -use salsa; +use salsa::{self, Database}; use crate::{ db, @@ -15,7 +15,7 @@ use crate::{ Cancelable, Canceled, FileId, }; -#[derive(Default, Debug)] +#[derive(Debug)] pub(crate) struct RootDatabase { runtime: salsa::Runtime, } @@ -26,6 +26,21 @@ impl salsa::Database for RootDatabase { } } +impl Default for RootDatabase { + fn default() -> RootDatabase { + let mut db = RootDatabase { + runtime: Default::default(), + }; + db.query_mut(crate::input::SourceRootQuery) + .set(crate::input::WORKSPACE, Default::default()); + db.query_mut(crate::input::CrateGraphQuery) + .set((), Default::default()); + db.query_mut(crate::input::LibrariesQuery) + .set((), Default::default()); + db + } +} + pub(crate) fn check_canceled(db: &impl salsa::Database) -> Cancelable<()> { if db.salsa_runtime().is_current_revision_canceled() { Err(Canceled) diff --git a/crates/ra_analysis/src/imp.rs b/crates/ra_analysis/src/imp.rs index 77dd71dcf1..4f337d1631 100644 --- a/crates/ra_analysis/src/imp.rs +++ b/crates/ra_analysis/src/imp.rs @@ -86,22 +86,12 @@ impl Default for FileResolverImp { } } -#[derive(Debug)] +#[derive(Debug, Default)] pub(crate) struct AnalysisHostImpl { db: db::RootDatabase, } impl AnalysisHostImpl { - pub fn new() -> AnalysisHostImpl { - let mut db = db::RootDatabase::default(); - db.query_mut(crate::input::SourceRootQuery) - .set(WORKSPACE, Default::default()); - db.query_mut(crate::input::CrateGraphQuery) - .set((), Default::default()); - db.query_mut(crate::input::LibrariesQuery) - .set((), Default::default()); - AnalysisHostImpl { db } - } pub fn analysis(&self) -> AnalysisImpl { AnalysisImpl { db: self.db.snapshot(), diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index 6565f69fbb..4e4c65f084 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs @@ -99,17 +99,12 @@ impl AnalysisChange { } /// `AnalysisHost` stores the current state of the world. -#[derive(Debug)] +#[derive(Debug, Default)] pub struct AnalysisHost { imp: AnalysisHostImpl, } impl AnalysisHost { - pub fn new() -> AnalysisHost { - AnalysisHost { - imp: AnalysisHostImpl::new(), - } - } /// Returns a snapshot of the current state, which you can query for /// semantic information. pub fn analysis(&self) -> Analysis { diff --git a/crates/ra_analysis/src/mock_analysis.rs b/crates/ra_analysis/src/mock_analysis.rs index 76100f5484..a7134a0e66 100644 --- a/crates/ra_analysis/src/mock_analysis.rs +++ b/crates/ra_analysis/src/mock_analysis.rs @@ -82,7 +82,7 @@ impl MockAnalysis { FileId(idx as u32 + 1) } pub fn analysis_host(self) -> AnalysisHost { - let mut host = AnalysisHost::new(); + let mut host = AnalysisHost::default(); let mut file_map = Vec::new(); let mut change = AnalysisChange::new(); for (id, (path, contents)) in self.files.into_iter().enumerate() { diff --git a/crates/ra_lsp_server/src/main_loop/mod.rs b/crates/ra_lsp_server/src/main_loop/mod.rs index c568706bdc..1eb1475396 100644 --- a/crates/ra_lsp_server/src/main_loop/mod.rs +++ b/crates/ra_lsp_server/src/main_loop/mod.rs @@ -61,7 +61,7 @@ pub fn main_loop( let (ws_worker, ws_watcher) = workspace_loader(); info!("server initialized, serving requests"); - let mut state = ServerWorldState::new(); + let mut state = ServerWorldState::default(); let mut pending_requests = FxHashSet::default(); let mut subs = Subscriptions::new(); diff --git a/crates/ra_lsp_server/src/path_map.rs b/crates/ra_lsp_server/src/path_map.rs index dd09fa10ac..87eabf9bee 100644 --- a/crates/ra_lsp_server/src/path_map.rs +++ b/crates/ra_lsp_server/src/path_map.rs @@ -28,9 +28,6 @@ impl fmt::Debug for PathMap { } impl PathMap { - pub fn new() -> PathMap { - Default::default() - } pub fn get_or_insert(&mut self, path: PathBuf, root: Root) -> (bool, FileId) { let mut inserted = false; let file_id = self @@ -117,7 +114,7 @@ mod test { #[test] fn test_resolve() { - let mut m = PathMap::new(); + let mut m = PathMap::default(); let (_, id1) = m.get_or_insert(PathBuf::from("/foo"), Root::Workspace); let (_, id2) = m.get_or_insert(PathBuf::from("/foo/bar.rs"), Root::Workspace); assert_eq!(m.resolve(id1, &RelativePath::new("bar.rs")), Some(id2),) diff --git a/crates/ra_lsp_server/src/server_world.rs b/crates/ra_lsp_server/src/server_world.rs index 3e76d2527b..3e7670fcce 100644 --- a/crates/ra_lsp_server/src/server_world.rs +++ b/crates/ra_lsp_server/src/server_world.rs @@ -17,7 +17,7 @@ use crate::{ Result, }; -#[derive(Debug)] +#[derive(Debug, Default)] pub struct ServerWorldState { pub workspaces: Arc>, pub analysis_host: AnalysisHost, @@ -32,14 +32,6 @@ pub struct ServerWorld { } impl ServerWorldState { - pub fn new() -> ServerWorldState { - ServerWorldState { - workspaces: Arc::new(Vec::new()), - analysis_host: AnalysisHost::new(), - path_map: PathMap::new(), - mem_map: FxHashMap::default(), - } - } pub fn apply_fs_changes(&mut self, events: Vec) { let mut change = AnalysisChange::new(); let mut inserted = false;