diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2019-08-25 11:13:37 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2019-08-25 11:13:37 +0100 |
commit | 1fbe5ffba8fdcdb47a53a06f2fd6a5fd8fc99bf3 (patch) | |
tree | fd0c5fbdd6fd1647737478b0d50c81591cd00a87 /crates | |
parent | cd433ed194f7d3570c2bee2e5ac01917513e8aa3 (diff) | |
parent | ee932d464b2c15b9c130e734a01fc50e5a18d106 (diff) |
Merge #1735
1735: :arrow_up: vfs r=matklad a=matklad
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_batch/Cargo.toml | 3 | ||||
-rw-r--r-- | crates/ra_batch/src/lib.rs | 10 | ||||
-rw-r--r-- | crates/ra_lsp_server/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop.rs | 2 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/world.rs | 10 | ||||
-rw-r--r-- | crates/ra_vfs_glob/Cargo.toml | 2 |
6 files changed, 19 insertions, 10 deletions
diff --git a/crates/ra_batch/Cargo.toml b/crates/ra_batch/Cargo.toml index 8e23826a4..5fc2703ee 100644 --- a/crates/ra_batch/Cargo.toml +++ b/crates/ra_batch/Cargo.toml | |||
@@ -7,8 +7,9 @@ authors = ["rust-analyzer developers"] | |||
7 | [dependencies] | 7 | [dependencies] |
8 | log = "0.4.5" | 8 | log = "0.4.5" |
9 | rustc-hash = "1.0" | 9 | rustc-hash = "1.0" |
10 | crossbeam-channel = "0.3.5" | ||
10 | 11 | ||
11 | ra_vfs = "0.2.0" | 12 | ra_vfs = "0.3.0" |
12 | ra_vfs_glob = { path = "../ra_vfs_glob" } | 13 | ra_vfs_glob = { path = "../ra_vfs_glob" } |
13 | ra_db = { path = "../ra_db" } | 14 | ra_db = { path = "../ra_db" } |
14 | ra_ide_api = { path = "../ra_ide_api" } | 15 | ra_ide_api = { path = "../ra_ide_api" } |
diff --git a/crates/ra_batch/src/lib.rs b/crates/ra_batch/src/lib.rs index f458ea300..4e5bad044 100644 --- a/crates/ra_batch/src/lib.rs +++ b/crates/ra_batch/src/lib.rs | |||
@@ -2,10 +2,11 @@ use std::{collections::HashSet, error::Error, path::Path}; | |||
2 | 2 | ||
3 | use rustc_hash::FxHashMap; | 3 | use rustc_hash::FxHashMap; |
4 | 4 | ||
5 | use crossbeam_channel::{unbounded, Receiver}; | ||
5 | use ra_db::{CrateGraph, FileId, SourceRootId}; | 6 | use ra_db::{CrateGraph, FileId, SourceRootId}; |
6 | use ra_ide_api::{AnalysisChange, AnalysisHost, FeatureFlags}; | 7 | use ra_ide_api::{AnalysisChange, AnalysisHost, FeatureFlags}; |
7 | use ra_project_model::{PackageRoot, ProjectWorkspace}; | 8 | use ra_project_model::{PackageRoot, ProjectWorkspace}; |
8 | use ra_vfs::{RootEntry, Vfs, VfsChange}; | 9 | use ra_vfs::{RootEntry, Vfs, VfsChange, VfsTask}; |
9 | use ra_vfs_glob::RustPackageFilterBuilder; | 10 | use ra_vfs_glob::RustPackageFilterBuilder; |
10 | 11 | ||
11 | type Result<T> = std::result::Result<T, Box<dyn Error + Send + Sync>>; | 12 | type Result<T> = std::result::Result<T, Box<dyn Error + Send + Sync>>; |
@@ -21,6 +22,8 @@ pub fn load_cargo(root: &Path) -> Result<(AnalysisHost, FxHashMap<SourceRootId, | |||
21 | let root = std::env::current_dir()?.join(root); | 22 | let root = std::env::current_dir()?.join(root); |
22 | let ws = ProjectWorkspace::discover(root.as_ref())?; | 23 | let ws = ProjectWorkspace::discover(root.as_ref())?; |
23 | let project_roots = ws.to_roots(); | 24 | let project_roots = ws.to_roots(); |
25 | let (sender, receiver) = unbounded(); | ||
26 | let sender = Box::new(move |t| sender.send(t).unwrap()); | ||
24 | let (mut vfs, roots) = Vfs::new( | 27 | let (mut vfs, roots) = Vfs::new( |
25 | project_roots | 28 | project_roots |
26 | .iter() | 29 | .iter() |
@@ -33,6 +36,7 @@ pub fn load_cargo(root: &Path) -> Result<(AnalysisHost, FxHashMap<SourceRootId, | |||
33 | ) | 36 | ) |
34 | }) | 37 | }) |
35 | .collect(), | 38 | .collect(), |
39 | sender, | ||
36 | ); | 40 | ); |
37 | let crate_graph = ws.to_crate_graph(&mut |path: &Path| { | 41 | let crate_graph = ws.to_crate_graph(&mut |path: &Path| { |
38 | let vfs_file = vfs.load(path); | 42 | let vfs_file = vfs.load(path); |
@@ -53,7 +57,7 @@ pub fn load_cargo(root: &Path) -> Result<(AnalysisHost, FxHashMap<SourceRootId, | |||
53 | (source_root_id, project_root) | 57 | (source_root_id, project_root) |
54 | }) | 58 | }) |
55 | .collect::<FxHashMap<_, _>>(); | 59 | .collect::<FxHashMap<_, _>>(); |
56 | let host = load(&source_roots, crate_graph, &mut vfs); | 60 | let host = load(&source_roots, crate_graph, &mut vfs, receiver); |
57 | Ok((host, source_roots)) | 61 | Ok((host, source_roots)) |
58 | } | 62 | } |
59 | 63 | ||
@@ -61,6 +65,7 @@ pub fn load( | |||
61 | source_roots: &FxHashMap<SourceRootId, PackageRoot>, | 65 | source_roots: &FxHashMap<SourceRootId, PackageRoot>, |
62 | crate_graph: CrateGraph, | 66 | crate_graph: CrateGraph, |
63 | vfs: &mut Vfs, | 67 | vfs: &mut Vfs, |
68 | receiver: Receiver<VfsTask>, | ||
64 | ) -> AnalysisHost { | 69 | ) -> AnalysisHost { |
65 | let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<usize>().ok()); | 70 | let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<usize>().ok()); |
66 | let mut host = AnalysisHost::new(lru_cap, FeatureFlags::default()); | 71 | let mut host = AnalysisHost::new(lru_cap, FeatureFlags::default()); |
@@ -68,7 +73,6 @@ pub fn load( | |||
68 | analysis_change.set_crate_graph(crate_graph); | 73 | analysis_change.set_crate_graph(crate_graph); |
69 | 74 | ||
70 | // wait until Vfs has loaded all roots | 75 | // wait until Vfs has loaded all roots |
71 | let receiver = vfs.task_receiver().clone(); | ||
72 | let mut roots_loaded = HashSet::new(); | 76 | let mut roots_loaded = HashSet::new(); |
73 | for task in receiver { | 77 | for task in receiver { |
74 | vfs.handle_task(task); | 78 | vfs.handle_task(task); |
diff --git a/crates/ra_lsp_server/Cargo.toml b/crates/ra_lsp_server/Cargo.toml index afeac0d8a..e271c257b 100644 --- a/crates/ra_lsp_server/Cargo.toml +++ b/crates/ra_lsp_server/Cargo.toml | |||
@@ -16,7 +16,7 @@ lsp-types = { version = "0.60.0", features = ["proposed"] } | |||
16 | rustc-hash = "1.0" | 16 | rustc-hash = "1.0" |
17 | parking_lot = "0.9.0" | 17 | parking_lot = "0.9.0" |
18 | 18 | ||
19 | ra_vfs = "0.2.7" | 19 | ra_vfs = "0.3.0" |
20 | thread_worker = { path = "../thread_worker" } | 20 | thread_worker = { path = "../thread_worker" } |
21 | ra_syntax = { path = "../ra_syntax" } | 21 | ra_syntax = { path = "../ra_syntax" } |
22 | ra_text_edit = { path = "../ra_text_edit" } | 22 | ra_text_edit = { path = "../ra_text_edit" } |
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index ce25ff162..45bd52769 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs | |||
@@ -217,7 +217,7 @@ fn main_loop_inner( | |||
217 | Err(RecvError) => Err("client exited without shutdown")?, | 217 | Err(RecvError) => Err("client exited without shutdown")?, |
218 | }, | 218 | }, |
219 | recv(task_receiver) -> task => Event::Task(task.unwrap()), | 219 | recv(task_receiver) -> task => Event::Task(task.unwrap()), |
220 | recv(state.vfs.read().task_receiver()) -> task => match task { | 220 | recv(state.task_receiver) -> task => match task { |
221 | Ok(task) => Event::Vfs(task), | 221 | Ok(task) => Event::Vfs(task), |
222 | Err(RecvError) => Err("vfs died")?, | 222 | Err(RecvError) => Err("vfs died")?, |
223 | }, | 223 | }, |
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 | } |
diff --git a/crates/ra_vfs_glob/Cargo.toml b/crates/ra_vfs_glob/Cargo.toml index 0390d7da1..09ba3d3bf 100644 --- a/crates/ra_vfs_glob/Cargo.toml +++ b/crates/ra_vfs_glob/Cargo.toml | |||
@@ -5,5 +5,5 @@ version = "0.1.0" | |||
5 | authors = ["rust-analyzer developers"] | 5 | authors = ["rust-analyzer developers"] |
6 | 6 | ||
7 | [dependencies] | 7 | [dependencies] |
8 | ra_vfs = "0.2.0" | 8 | ra_vfs = "0.3.0" |
9 | globset = "0.4.4" | 9 | globset = "0.4.4" |