aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_vfs/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_vfs/src/lib.rs')
-rw-r--r--crates/ra_vfs/src/lib.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/crates/ra_vfs/src/lib.rs b/crates/ra_vfs/src/lib.rs
index d589a254b..f07657db6 100644
--- a/crates/ra_vfs/src/lib.rs
+++ b/crates/ra_vfs/src/lib.rs
@@ -7,8 +7,10 @@
7//! 7//!
8//! It is also responsible for watching the disk for changes, and for merging 8//! It is also responsible for watching the disk for changes, and for merging
9//! editor state (modified, unsaved files) with disk state. 9//! editor state (modified, unsaved files) with disk state.
10//! TODO: Some LSP clients support watching the disk, so this crate should 10//!
11//! to support custom watcher events (related to https://github.com/rust-analyzer/rust-analyzer/issues/131) 11//! TODO: Some LSP clients support watching the disk, so this crate should to
12//! support custom watcher events (related to
13//! <https://github.com/rust-analyzer/rust-analyzer/issues/131>)
12//! 14//!
13//! VFS is based on a concept of roots: a set of directories on the file system 15//! VFS is based on a concept of roots: a set of directories on the file system
14//! which are watched for changes. Typically, there will be a root for each 16//! which are watched for changes. Typically, there will be a root for each
@@ -225,12 +227,12 @@ impl Vfs {
225 let mut cur_files = Vec::new(); 227 let mut cur_files = Vec::new();
226 // While we were scanning the root in the background, a file might have 228 // While we were scanning the root in the background, a file might have
227 // been open in the editor, so we need to account for that. 229 // been open in the editor, so we need to account for that.
228 let exising = self.root2files[root] 230 let existing = self.root2files[root]
229 .iter() 231 .iter()
230 .map(|&file| (self.files[file].path.clone(), file)) 232 .map(|&file| (self.files[file].path.clone(), file))
231 .collect::<FxHashMap<_, _>>(); 233 .collect::<FxHashMap<_, _>>();
232 for (path, text) in files { 234 for (path, text) in files {
233 if let Some(&file) = exising.get(&path) { 235 if let Some(&file) = existing.get(&path) {
234 let text = Arc::clone(&self.files[file].text); 236 let text = Arc::clone(&self.files[file].text);
235 cur_files.push((file, path, text)); 237 cur_files.push((file, path, text));
236 continue; 238 continue;
@@ -335,7 +337,7 @@ impl Vfs {
335 mem::replace(&mut self.pending_changes, Vec::new()) 337 mem::replace(&mut self.pending_changes, Vec::new())
336 } 338 }
337 339
338 /// Sutdown the VFS and terminate the background watching thread. 340 /// Shutdown the VFS and terminate the background watching thread.
339 pub fn shutdown(self) -> thread::Result<()> { 341 pub fn shutdown(self) -> thread::Result<()> {
340 self.worker.shutdown() 342 self.worker.shutdown()
341 } 343 }
@@ -360,7 +362,7 @@ impl Vfs {
360 } 362 }
361 363
362 fn remove_file(&mut self, file: VfsFile) { 364 fn remove_file(&mut self, file: VfsFile) {
363 //FIXME: use arena with removal 365 // FIXME: use arena with removal
364 self.files[file].text = Default::default(); 366 self.files[file].text = Default::default();
365 self.files[file].path = Default::default(); 367 self.files[file].path = Default::default();
366 let root = self.files[file].root; 368 let root = self.files[file].root;