From 7b6bafa631e6272946da568e9da7c3adc01ba625 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 19 Dec 2018 15:40:42 +0300 Subject: fix syc --- crates/ra_lsp_server/src/main_loop.rs | 4 ++++ crates/ra_lsp_server/src/server_world.rs | 33 +++++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) (limited to 'crates/ra_lsp_server/src') diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index 7904545d3..d2f16ea97 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs @@ -143,6 +143,7 @@ fn main_loop_inner( } recv(libdata_receiver, data) => Event::Lib(data.unwrap()) }; + log::info!("{:?}", event); let mut state_changed = false; match event { Event::Task(task) => on_task(task, msg_sender, pending_requests), @@ -192,6 +193,9 @@ fn main_loop_inner( sender.send(data); }); } + if state.roots_to_scan == 0 { + feedback(internal_mode, "workspace loaded", msg_sender); + } if state_changed { update_file_notifications_on_threadpool( diff --git a/crates/ra_lsp_server/src/server_world.rs b/crates/ra_lsp_server/src/server_world.rs index f2fd09e85..bdb4c513f 100644 --- a/crates/ra_lsp_server/src/server_world.rs +++ b/crates/ra_lsp_server/src/server_world.rs @@ -21,6 +21,8 @@ use crate::{ #[derive(Debug)] pub struct ServerWorldState { + pub roots_to_scan: usize, + pub root: PathBuf, pub workspaces: Arc>, pub analysis_host: AnalysisHost, pub vfs: Arc>, @@ -37,12 +39,13 @@ impl ServerWorldState { let mut change = AnalysisChange::new(); let mut roots = Vec::new(); - roots.push(root); + roots.push(root.clone()); for ws in workspaces.iter() { for pkg in ws.packages() { roots.push(pkg.root(&ws).to_path_buf()); } } + let roots_to_scan = roots.len(); let (mut vfs, roots) = Vfs::new(roots); for r in roots { change.add_root(SourceRootId(r.0)); @@ -83,6 +86,8 @@ impl ServerWorldState { let mut analysis_host = AnalysisHost::default(); analysis_host.apply_change(change); ServerWorldState { + roots_to_scan, + root, workspaces: Arc::new(workspaces), analysis_host, vfs: Arc::new(RwLock::new(vfs)), @@ -94,16 +99,29 @@ impl ServerWorldState { pub fn process_changes( &mut self, ) -> Vec<(SourceRootId, Vec<(FileId, RelativePathBuf, Arc)>)> { + let changes = self.vfs.write().commit_changes(); + if changes.is_empty() { + return Vec::new(); + } let mut libs = Vec::new(); let mut change = AnalysisChange::new(); - for c in self.vfs.write().commit_changes() { + for c in changes { + log::info!("vfs change {:?}", c); match c { VfsChange::AddRoot { root, files } => { - let files = files - .into_iter() - .map(|(vfsfile, path, text)| (FileId(vfsfile.0), path, text)) - .collect(); - libs.push((SourceRootId(root.0), files)); + let root_path = self.vfs.read().root2path(root); + if root_path.starts_with(&self.root) { + self.roots_to_scan -= 1; + for (file, path, text) in files { + change.add_file(SourceRootId(root.0), FileId(file.0), path, text); + } + } else { + let files = files + .into_iter() + .map(|(vfsfile, path, text)| (FileId(vfsfile.0), path, text)) + .collect(); + libs.push((SourceRootId(root.0), files)); + } } VfsChange::AddFile { root, @@ -126,6 +144,7 @@ impl ServerWorldState { } pub fn add_lib(&mut self, data: LibraryData) { + self.roots_to_scan -= 1; let mut change = AnalysisChange::new(); change.add_library(data); self.analysis_host.apply_change(change); -- cgit v1.2.3