diff options
author | Vincent Esche <[email protected]> | 2021-02-15 23:26:47 +0000 |
---|---|---|
committer | Vincent Esche <[email protected]> | 2021-02-16 15:37:52 +0000 |
commit | 1a441682606dc6c5240e2516ac65717cc7f25ecf (patch) | |
tree | 7dfe22594a6ba776734fa0790c3c069cd44b3d58 /crates/rust-analyzer/src/cli/load_cargo.rs | |
parent | cc49502ab47bcd20c90589226282b8f3c3df5190 (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.rs | 39 |
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}; | |||
14 | use crate::reload::{ProjectFolders, SourceRootConfig}; | 14 | use crate::reload::{ProjectFolders, SourceRootConfig}; |
15 | 15 | ||
16 | pub struct LoadCargoConfig { | 16 | pub 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 | ||
22 | pub fn load_cargo(root: &Path, config: &LoadCargoConfig) -> Result<(AnalysisHost, vfs::Vfs)> { | 21 | pub 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 | |||
34 | pub 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 | ||
73 | fn load( | 86 | fn 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 | } |