aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-08-25 11:13:37 +0100
committerGitHub <[email protected]>2019-08-25 11:13:37 +0100
commit1fbe5ffba8fdcdb47a53a06f2fd6a5fd8fc99bf3 (patch)
treefd0c5fbdd6fd1647737478b0d50c81591cd00a87 /crates
parentcd433ed194f7d3570c2bee2e5ac01917513e8aa3 (diff)
parentee932d464b2c15b9c130e734a01fc50e5a18d106 (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.toml3
-rw-r--r--crates/ra_batch/src/lib.rs10
-rw-r--r--crates/ra_lsp_server/Cargo.toml2
-rw-r--r--crates/ra_lsp_server/src/main_loop.rs2
-rw-r--r--crates/ra_lsp_server/src/world.rs10
-rw-r--r--crates/ra_vfs_glob/Cargo.toml2
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]
8log = "0.4.5" 8log = "0.4.5"
9rustc-hash = "1.0" 9rustc-hash = "1.0"
10crossbeam-channel = "0.3.5"
10 11
11ra_vfs = "0.2.0" 12ra_vfs = "0.3.0"
12ra_vfs_glob = { path = "../ra_vfs_glob" } 13ra_vfs_glob = { path = "../ra_vfs_glob" }
13ra_db = { path = "../ra_db" } 14ra_db = { path = "../ra_db" }
14ra_ide_api = { path = "../ra_ide_api" } 15ra_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
3use rustc_hash::FxHashMap; 3use rustc_hash::FxHashMap;
4 4
5use crossbeam_channel::{unbounded, Receiver};
5use ra_db::{CrateGraph, FileId, SourceRootId}; 6use ra_db::{CrateGraph, FileId, SourceRootId};
6use ra_ide_api::{AnalysisChange, AnalysisHost, FeatureFlags}; 7use ra_ide_api::{AnalysisChange, AnalysisHost, FeatureFlags};
7use ra_project_model::{PackageRoot, ProjectWorkspace}; 8use ra_project_model::{PackageRoot, ProjectWorkspace};
8use ra_vfs::{RootEntry, Vfs, VfsChange}; 9use ra_vfs::{RootEntry, Vfs, VfsChange, VfsTask};
9use ra_vfs_glob::RustPackageFilterBuilder; 10use ra_vfs_glob::RustPackageFilterBuilder;
10 11
11type Result<T> = std::result::Result<T, Box<dyn Error + Send + Sync>>; 12type 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"] }
16rustc-hash = "1.0" 16rustc-hash = "1.0"
17parking_lot = "0.9.0" 17parking_lot = "0.9.0"
18 18
19ra_vfs = "0.2.7" 19ra_vfs = "0.3.0"
20thread_worker = { path = "../thread_worker" } 20thread_worker = { path = "../thread_worker" }
21ra_syntax = { path = "../ra_syntax" } 21ra_syntax = { path = "../ra_syntax" }
22ra_text_edit = { path = "../ra_text_edit" } 22ra_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
6use crossbeam_channel::{unbounded, Receiver};
6use gen_lsp_server::ErrorCode; 7use gen_lsp_server::ErrorCode;
7use lsp_types::Url; 8use lsp_types::Url;
8use parking_lot::RwLock; 9use 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};
13use ra_vfs::{LineEndings, RootEntry, Vfs, VfsChange, VfsFile, VfsRoot}; 14use ra_vfs::{LineEndings, RootEntry, Vfs, VfsChange, VfsFile, VfsRoot, VfsTask};
14use ra_vfs_glob::{Glob, RustPackageFilterBuilder}; 15use ra_vfs_glob::{Glob, RustPackageFilterBuilder};
15use relative_path::RelativePathBuf; 16use 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"
5authors = ["rust-analyzer developers"] 5authors = ["rust-analyzer developers"]
6 6
7[dependencies] 7[dependencies]
8ra_vfs = "0.2.0" 8ra_vfs = "0.3.0"
9globset = "0.4.4" 9globset = "0.4.4"