Skip to content

Commit 1a44168

Browse files
committed
Split pub fn cargo_load into pub fn load_workspace_at and pub fn load_workspace
1 parent cc49502 commit 1a44168

File tree

6 files changed

+50
-41
lines changed

6 files changed

+50
-41
lines changed

crates/rust-analyzer/src/cli.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub use self::{
1818
analysis_bench::{BenchCmd, BenchWhat, Position},
1919
analysis_stats::AnalysisStatsCmd,
2020
diagnostics::diagnostics,
21-
load_cargo::load_cargo,
21+
load_cargo::{load_workspace, load_workspace_at, LoadCargoConfig},
2222
ssr::{apply_ssr_rules, search_for_patterns},
2323
};
2424

crates/rust-analyzer/src/cli/analysis_bench.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use ide_db::{
1717
use vfs::AbsPathBuf;
1818

1919
use crate::cli::{
20-
load_cargo::{load_cargo, LoadCargoConfig},
20+
load_cargo::{load_workspace_at, LoadCargoConfig},
2121
print_memory_usage, Verbosity,
2222
};
2323

@@ -63,13 +63,13 @@ impl BenchCmd {
6363
let start = Instant::now();
6464
eprint!("loading: ");
6565

66+
let cargo_config = Default::default();
6667
let load_cargo_config = LoadCargoConfig {
67-
cargo_config: Default::default(),
6868
load_out_dirs_from_check: self.load_output_dirs,
6969
with_proc_macro: self.with_proc_macro,
7070
};
71-
72-
let (mut host, vfs) = load_cargo(&self.path, &load_cargo_config)?;
71+
let (mut host, vfs) =
72+
load_workspace_at(&self.path, &cargo_config, &load_cargo_config, &|_| {})?;
7373
eprintln!("{:?}\n", start.elapsed());
7474

7575
let file_id = {

crates/rust-analyzer/src/cli/analysis_stats.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use stdx::format_to;
2525
use syntax::AstNode;
2626

2727
use crate::cli::{
28-
load_cargo::{load_cargo, LoadCargoConfig},
28+
load_cargo::{load_workspace_at, LoadCargoConfig},
2929
print_memory_usage,
3030
progress_report::ProgressReport,
3131
report_metric, Result, Verbosity,
@@ -59,12 +59,13 @@ impl AnalysisStatsCmd {
5959
};
6060

6161
let mut db_load_sw = self.stop_watch();
62+
let cargo_config = Default::default();
6263
let load_cargo_config = LoadCargoConfig {
63-
cargo_config: Default::default(),
6464
load_out_dirs_from_check: self.load_output_dirs,
6565
with_proc_macro: self.with_proc_macro,
6666
};
67-
let (host, vfs) = load_cargo(&self.path, &load_cargo_config)?;
67+
let (host, vfs) =
68+
load_workspace_at(&self.path, &cargo_config, &load_cargo_config, &|_| {})?;
6869
let db = host.raw_database();
6970
eprintln!("{:<20} {}", "Database loaded:", db_load_sw.elapsed());
7071

crates/rust-analyzer/src/cli/diagnostics.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use ide::{DiagnosticsConfig, Severity};
1111
use ide_db::base_db::SourceDatabaseExt;
1212

1313
use crate::cli::{
14-
load_cargo::{load_cargo, LoadCargoConfig},
14+
load_cargo::{load_workspace_at, LoadCargoConfig},
1515
Result,
1616
};
1717

@@ -33,12 +33,9 @@ pub fn diagnostics(
3333
load_out_dirs_from_check: bool,
3434
with_proc_macro: bool,
3535
) -> Result<()> {
36-
let load_cargo_config = LoadCargoConfig {
37-
cargo_config: Default::default(),
38-
load_out_dirs_from_check,
39-
with_proc_macro,
40-
};
41-
let (host, _vfs) = load_cargo(path, &load_cargo_config)?;
36+
let cargo_config = Default::default();
37+
let load_cargo_config = LoadCargoConfig { load_out_dirs_from_check, with_proc_macro };
38+
let (host, _vfs) = load_workspace_at(path, &cargo_config, &load_cargo_config, &|_| {})?;
4239
let db = host.raw_database();
4340
let analysis = host.analysis();
4441

crates/rust-analyzer/src/cli/load_cargo.rs

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,28 @@ use vfs::{loader::Handle, AbsPath, AbsPathBuf};
1414
use crate::reload::{ProjectFolders, SourceRootConfig};
1515

1616
pub struct LoadCargoConfig {
17-
pub cargo_config: CargoConfig,
1817
pub load_out_dirs_from_check: bool,
1918
pub with_proc_macro: bool,
2019
}
2120

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)> {
2327
let root = AbsPathBuf::assert(std::env::current_dir()?.join(root));
2428
let root = ProjectManifest::discover_single(&root)?;
25-
let ws = ProjectWorkspace::load(root, &config.cargo_config, &|_| {})?;
29+
let workspace = ProjectWorkspace::load(root, cargo_config, progress)?;
2630

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)> {
2739
let (sender, receiver) = unbounded();
2840
let mut vfs = vfs::Vfs::default();
2941
let mut loader = {
@@ -42,7 +54,7 @@ pub fn load_cargo(root: &Path, config: &LoadCargoConfig) -> Result<(AnalysisHost
4254
let build_data = if config.load_out_dirs_from_check {
4355
let mut collector = BuildDataCollector::default();
4456
ws.collect_build_data_configs(&mut collector);
45-
Some(collector.collect(&|_| {})?)
57+
Some(collector.collect(progress)?)
4658
} else {
4759
None
4860
};
@@ -66,11 +78,12 @@ pub fn load_cargo(root: &Path, config: &LoadCargoConfig) -> Result<(AnalysisHost
6678
});
6779

6880
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);
7083
Ok((host, vfs))
7184
}
7285

73-
fn load(
86+
fn load_crate_graph(
7487
crate_graph: CrateGraph,
7588
source_root_config: SourceRootConfig,
7689
vfs: &mut vfs::Vfs,
@@ -120,17 +133,17 @@ mod tests {
120133
use hir::Crate;
121134

122135
#[test]
123-
fn test_loading_rust_analyzer() {
136+
fn test_loading_rust_analyzer() -> Result<()> {
124137
let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap().parent().unwrap();
125-
let load_cargo_config = LoadCargoConfig {
126-
cargo_config: Default::default(),
127-
load_out_dirs_from_check: false,
128-
with_proc_macro: false,
129-
};
138+
let cargo_config = Default::default();
139+
let load_cargo_config =
140+
LoadCargoConfig { load_out_dirs_from_check: false, with_proc_macro: false };
141+
let (host, _vfs) = load_workspace_at(path, &cargo_config, &load_cargo_config, &|_| {})?;
130142

131-
let (host, _vfs) = load_cargo(path, &load_cargo_config).unwrap();
132143
let n_crates = Crate::all(host.raw_database()).len();
133144
// RA has quite a few crates, but the exact count doesn't matter
134145
assert!(n_crates > 20);
146+
147+
Ok(())
135148
}
136149
}

crates/rust-analyzer/src/cli/ssr.rs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
//! Applies structured search replace rules from the command line.
22
33
use crate::cli::{
4-
load_cargo::{load_cargo, LoadCargoConfig},
4+
load_cargo::{load_workspace_at, LoadCargoConfig},
55
Result,
66
};
77
use ssr::{MatchFinder, SsrPattern, SsrRule};
88

99
pub fn apply_ssr_rules(rules: Vec<SsrRule>) -> Result<()> {
1010
use ide_db::base_db::SourceDatabaseExt;
11-
let load_cargo_config = LoadCargoConfig {
12-
cargo_config: Default::default(),
13-
load_out_dirs_from_check: true,
14-
with_proc_macro: true,
15-
};
16-
let (host, vfs) = load_cargo(&std::env::current_dir()?, &load_cargo_config)?;
11+
let cargo_config = Default::default();
12+
let load_cargo_config =
13+
LoadCargoConfig { load_out_dirs_from_check: true, with_proc_macro: true };
14+
let (host, vfs) =
15+
load_workspace_at(&std::env::current_dir()?, &cargo_config, &load_cargo_config, &|_| {})?;
1716
let db = host.raw_database();
1817
let mut match_finder = MatchFinder::at_first_file(db)?;
1918
for rule in rules {
@@ -36,12 +35,11 @@ pub fn apply_ssr_rules(rules: Vec<SsrRule>) -> Result<()> {
3635
pub fn search_for_patterns(patterns: Vec<SsrPattern>, debug_snippet: Option<String>) -> Result<()> {
3736
use ide_db::base_db::SourceDatabaseExt;
3837
use ide_db::symbol_index::SymbolsDatabase;
39-
let load_cargo_config = LoadCargoConfig {
40-
cargo_config: Default::default(),
41-
load_out_dirs_from_check: true,
42-
with_proc_macro: true,
43-
};
44-
let (host, _vfs) = load_cargo(&std::env::current_dir()?, &load_cargo_config)?;
38+
let cargo_config = Default::default();
39+
let load_cargo_config =
40+
LoadCargoConfig { load_out_dirs_from_check: true, with_proc_macro: true };
41+
let (host, _vfs) =
42+
load_workspace_at(&std::env::current_dir()?, &cargo_config, &load_cargo_config, &|_| {})?;
4543
let db = host.raw_database();
4644
let mut match_finder = MatchFinder::at_first_file(db)?;
4745
for pattern in patterns {

0 commit comments

Comments
 (0)