aboutsummaryrefslogtreecommitdiff
path: root/crates/rust-analyzer/src/cli/load_cargo.rs
diff options
context:
space:
mode:
authorVincent Esche <[email protected]>2021-02-15 23:26:47 +0000
committerVincent Esche <[email protected]>2021-02-16 15:37:52 +0000
commit1a441682606dc6c5240e2516ac65717cc7f25ecf (patch)
tree7dfe22594a6ba776734fa0790c3c069cd44b3d58 /crates/rust-analyzer/src/cli/load_cargo.rs
parentcc49502ab47bcd20c90589226282b8f3c3df5190 (diff)
Split `pub fn cargo_load` into `pub fn load_workspace_at` and `pub fn load_workspace`
Diffstat (limited to 'crates/rust-analyzer/src/cli/load_cargo.rs')
-rw-r--r--crates/rust-analyzer/src/cli/load_cargo.rs39
1 files changed, 26 insertions, 13 deletions
diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs
index cf0cd81de..23442afac 100644
--- a/crates/rust-analyzer/src/cli/load_cargo.rs
+++ b/crates/rust-analyzer/src/cli/load_cargo.rs
@@ -14,16 +14,28 @@ use vfs::{loader::Handle, AbsPath, AbsPathBuf};
14use crate::reload::{ProjectFolders, SourceRootConfig}; 14use crate::reload::{ProjectFolders, SourceRootConfig};
15 15
16pub struct LoadCargoConfig { 16pub struct LoadCargoConfig {
17 pub cargo_config: CargoConfig,
18 pub load_out_dirs_from_check: bool, 17 pub load_out_dirs_from_check: bool,
19 pub with_proc_macro: bool, 18 pub with_proc_macro: bool,
20} 19}
21 20
22pub fn load_cargo(root: &Path, config: &LoadCargoConfig) -> Result<(AnalysisHost, vfs::Vfs)> { 21pub fn load_workspace_at(
22 root: &Path,
23 cargo_config: &CargoConfig,
24 load_config: &LoadCargoConfig,
25 progress: &dyn Fn(String),
26) -> Result<(AnalysisHost, vfs::Vfs)> {
23 let root = AbsPathBuf::assert(std::env::current_dir()?.join(root)); 27 let root = AbsPathBuf::assert(std::env::current_dir()?.join(root));
24 let root = ProjectManifest::discover_single(&root)?; 28 let root = ProjectManifest::discover_single(&root)?;
25 let ws = ProjectWorkspace::load(root, &config.cargo_config, &|_| {})?; 29 let workspace = ProjectWorkspace::load(root, cargo_config, progress)?;
26 30
31 load_workspace(workspace, load_config, progress)
32}
33
34pub fn load_workspace(
35 ws: ProjectWorkspace,
36 config: &LoadCargoConfig,
37 progress: &dyn Fn(String),
38) -> Result<(AnalysisHost, vfs::Vfs)> {
27 let (sender, receiver) = unbounded(); 39 let (sender, receiver) = unbounded();
28 let mut vfs = vfs::Vfs::default(); 40 let mut vfs = vfs::Vfs::default();
29 let mut loader = { 41 let mut loader = {
@@ -42,7 +54,7 @@ pub fn load_cargo(root: &Path, config: &LoadCargoConfig) -> Result<(AnalysisHost
42 let build_data = if config.load_out_dirs_from_check { 54 let build_data = if config.load_out_dirs_from_check {
43 let mut collector = BuildDataCollector::default(); 55 let mut collector = BuildDataCollector::default();
44 ws.collect_build_data_configs(&mut collector); 56 ws.collect_build_data_configs(&mut collector);
45 Some(collector.collect(&|_| {})?) 57 Some(collector.collect(progress)?)
46 } else { 58 } else {
47 None 59 None
48 }; 60 };
@@ -66,11 +78,12 @@ pub fn load_cargo(root: &Path, config: &LoadCargoConfig) -> Result<(AnalysisHost
66 }); 78 });
67 79
68 log::debug!("crate graph: {:?}", crate_graph); 80 log::debug!("crate graph: {:?}", crate_graph);
69 let host = load(crate_graph, project_folders.source_root_config, &mut vfs, &receiver); 81 let host =
82 load_crate_graph(crate_graph, project_folders.source_root_config, &mut vfs, &receiver);
70 Ok((host, vfs)) 83 Ok((host, vfs))
71} 84}
72 85
73fn load( 86fn load_crate_graph(
74 crate_graph: CrateGraph, 87 crate_graph: CrateGraph,
75 source_root_config: SourceRootConfig, 88 source_root_config: SourceRootConfig,
76 vfs: &mut vfs::Vfs, 89 vfs: &mut vfs::Vfs,
@@ -120,17 +133,17 @@ mod tests {
120 use hir::Crate; 133 use hir::Crate;
121 134
122 #[test] 135 #[test]
123 fn test_loading_rust_analyzer() { 136 fn test_loading_rust_analyzer() -> Result<()> {
124 let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap().parent().unwrap(); 137 let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap().parent().unwrap();
125 let load_cargo_config = LoadCargoConfig { 138 let cargo_config = Default::default();
126 cargo_config: Default::default(), 139 let load_cargo_config =
127 load_out_dirs_from_check: false, 140 LoadCargoConfig { load_out_dirs_from_check: false, with_proc_macro: false };
128 with_proc_macro: false, 141 let (host, _vfs) = load_workspace_at(path, &cargo_config, &load_cargo_config, &|_| {})?;
129 };
130 142
131 let (host, _vfs) = load_cargo(path, &load_cargo_config).unwrap();
132 let n_crates = Crate::all(host.raw_database()).len(); 143 let n_crates = Crate::all(host.raw_database()).len();
133 // RA has quite a few crates, but the exact count doesn't matter 144 // RA has quite a few crates, but the exact count doesn't matter
134 assert!(n_crates > 20); 145 assert!(n_crates > 20);
146
147 Ok(())
135 } 148 }
136} 149}