diff options
Diffstat (limited to 'crates/ra_lsp_server/src/world.rs')
-rw-r--r-- | crates/ra_lsp_server/src/world.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/crates/ra_lsp_server/src/world.rs b/crates/ra_lsp_server/src/world.rs index 6696dff71..cc7964469 100644 --- a/crates/ra_lsp_server/src/world.rs +++ b/crates/ra_lsp_server/src/world.rs | |||
@@ -3,6 +3,7 @@ use std::{ | |||
3 | sync::Arc, | 3 | sync::Arc, |
4 | }; | 4 | }; |
5 | 5 | ||
6 | use crossbeam_channel::{unbounded, Receiver}; | ||
6 | use gen_lsp_server::ErrorCode; | 7 | use gen_lsp_server::ErrorCode; |
7 | use lsp_types::Url; | 8 | use lsp_types::Url; |
8 | use parking_lot::RwLock; | 9 | use parking_lot::RwLock; |
@@ -10,7 +11,7 @@ use ra_ide_api::{ | |||
10 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, FeatureFlags, FileId, LibraryData, | 11 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, FeatureFlags, FileId, LibraryData, |
11 | SourceRootId, | 12 | SourceRootId, |
12 | }; | 13 | }; |
13 | use ra_vfs::{LineEndings, RootEntry, Vfs, VfsChange, VfsFile, VfsRoot}; | 14 | use ra_vfs::{LineEndings, RootEntry, Vfs, VfsChange, VfsFile, VfsRoot, VfsTask}; |
14 | use ra_vfs_glob::{Glob, RustPackageFilterBuilder}; | 15 | use ra_vfs_glob::{Glob, RustPackageFilterBuilder}; |
15 | use relative_path::RelativePathBuf; | 16 | use relative_path::RelativePathBuf; |
16 | 17 | ||
@@ -39,6 +40,7 @@ pub struct WorldState { | |||
39 | pub workspaces: Arc<Vec<ProjectWorkspace>>, | 40 | pub workspaces: Arc<Vec<ProjectWorkspace>>, |
40 | pub analysis_host: AnalysisHost, | 41 | pub analysis_host: AnalysisHost, |
41 | pub vfs: Arc<RwLock<Vfs>>, | 42 | pub vfs: Arc<RwLock<Vfs>>, |
43 | pub task_receiver: Receiver<VfsTask>, | ||
42 | pub latest_requests: Arc<RwLock<LatestRequests>>, | 44 | pub latest_requests: Arc<RwLock<LatestRequests>>, |
43 | } | 45 | } |
44 | 46 | ||
@@ -80,8 +82,9 @@ impl WorldState { | |||
80 | RootEntry::new(pkg_root.path().clone(), filter.into_vfs_filter()) | 82 | RootEntry::new(pkg_root.path().clone(), filter.into_vfs_filter()) |
81 | })); | 83 | })); |
82 | } | 84 | } |
83 | 85 | let (task_sender, task_receiver) = unbounded(); | |
84 | let (mut vfs, vfs_roots) = Vfs::new(roots); | 86 | let task_sender = Box::new(move |t| task_sender.send(t).unwrap()); |
87 | let (mut vfs, vfs_roots) = Vfs::new(roots, task_sender); | ||
85 | let roots_to_scan = vfs_roots.len(); | 88 | let roots_to_scan = vfs_roots.len(); |
86 | for r in vfs_roots { | 89 | for r in vfs_roots { |
87 | let vfs_root_path = vfs.root2path(r); | 90 | let vfs_root_path = vfs.root2path(r); |
@@ -109,6 +112,7 @@ impl WorldState { | |||
109 | workspaces: Arc::new(workspaces), | 112 | workspaces: Arc::new(workspaces), |
110 | analysis_host, | 113 | analysis_host, |
111 | vfs: Arc::new(RwLock::new(vfs)), | 114 | vfs: Arc::new(RwLock::new(vfs)), |
115 | task_receiver, | ||
112 | latest_requests: Default::default(), | 116 | latest_requests: Default::default(), |
113 | } | 117 | } |
114 | } | 118 | } |