about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Esche <regexident@gmail.com>2021-02-08 11:30:16 +0100
committerVincent Esche <regexident@gmail.com>2021-02-08 11:30:16 +0100
commit8f461ffe8f65d6338929b5d5dc40b3e0a42577f0 (patch)
treed2238e7bb4f0c1d86eeb790bed957f7d222c8332
parent6d9c13c7105f0d5287ccb76439214ec536cd1ea4 (diff)
Consolidate `fn load_cargo(…)` parameters into `struct LoadCargoConfig { … }`
-rw-r--r--crates/rust-analyzer/src/cli/analysis_bench.rs19
-rw-r--r--crates/rust-analyzer/src/cli/analysis_stats.rs18
-rw-r--r--crates/rust-analyzer/src/cli/diagnostics.rs18
-rw-r--r--crates/rust-analyzer/src/cli/load_cargo.rs27
-rw-r--r--crates/rust-analyzer/src/cli/ssr.rs19
5 files changed, 70 insertions, 31 deletions
diff --git a/crates/rust-analyzer/src/cli/analysis_bench.rs b/crates/rust-analyzer/src/cli/analysis_bench.rs
index f4068937e76..6735b6388cd 100644
--- a/crates/rust-analyzer/src/cli/analysis_bench.rs
+++ b/crates/rust-analyzer/src/cli/analysis_bench.rs
@@ -16,7 +16,10 @@ use ide_db::{
 };
 use vfs::AbsPathBuf;
 
-use crate::cli::{load_cargo::load_cargo, print_memory_usage, Verbosity};
+use crate::cli::{
+    load_cargo::{load_cargo, LoadCargoConfig},
+    print_memory_usage, Verbosity,
+};
 
 pub struct BenchCmd {
     pub path: PathBuf,
@@ -59,12 +62,14 @@ impl BenchCmd {
 
         let start = Instant::now();
         eprint!("loading: ");
-        let (mut host, vfs) = load_cargo(
-            &self.path,
-            &Default::default(),
-            self.load_output_dirs,
-            self.with_proc_macro,
-        )?;
+
+        let load_cargo_config = LoadCargoConfig {
+            cargo_config: Default::default(),
+            load_out_dirs_from_check: self.load_output_dirs,
+            with_proc_macro: self.with_proc_macro,
+        };
+
+        let (mut host, vfs) = load_cargo(&self.path, &load_cargo_config)?;
         eprintln!("{:?}\n", start.elapsed());
 
         let file_id = {
diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs
index f0852d12545..3417af687d5 100644
--- a/crates/rust-analyzer/src/cli/analysis_stats.rs
+++ b/crates/rust-analyzer/src/cli/analysis_stats.rs
@@ -25,8 +25,10 @@ use stdx::format_to;
 use syntax::AstNode;
 
 use crate::cli::{
-    load_cargo::load_cargo, print_memory_usage, progress_report::ProgressReport, report_metric,
-    Result, Verbosity,
+    load_cargo::{load_cargo, LoadCargoConfig},
+    print_memory_usage,
+    progress_report::ProgressReport,
+    report_metric, Result, Verbosity,
 };
 use profile::StopWatch;
 
@@ -57,12 +59,12 @@ impl AnalysisStatsCmd {
         };
 
         let mut db_load_sw = self.stop_watch();
-        let (host, vfs) = load_cargo(
-            &self.path,
-            &Default::default(),
-            self.load_output_dirs,
-            self.with_proc_macro,
-        )?;
+        let load_cargo_config = LoadCargoConfig {
+            cargo_config: Default::default(),
+            load_out_dirs_from_check: self.load_output_dirs,
+            with_proc_macro: self.with_proc_macro,
+        };
+        let (host, vfs) = load_cargo(&self.path, &load_cargo_config)?;
         let db = host.raw_database();
         eprintln!("{:<20} {}", "Database loaded:", db_load_sw.elapsed());
 
diff --git a/crates/rust-analyzer/src/cli/diagnostics.rs b/crates/rust-analyzer/src/cli/diagnostics.rs
index 6646e417cc0..c60374c24f1 100644
--- a/crates/rust-analyzer/src/cli/diagnostics.rs
+++ b/crates/rust-analyzer/src/cli/diagnostics.rs
@@ -10,7 +10,10 @@ use hir::{db::HirDatabase, Crate, Module};
 use ide::{DiagnosticsConfig, Severity};
 use ide_db::base_db::SourceDatabaseExt;
 
-use crate::cli::{load_cargo::load_cargo, Result};
+use crate::cli::{
+    load_cargo::{load_cargo, LoadCargoConfig},
+    Result,
+};
 
 fn all_modules(db: &dyn HirDatabase) -> Vec<Module> {
     let mut worklist: Vec<_> =
@@ -25,8 +28,17 @@ fn all_modules(db: &dyn HirDatabase) -> Vec<Module> {
     modules
 }
 
-pub fn diagnostics(path: &Path, load_output_dirs: bool, with_proc_macro: bool) -> Result<()> {
-    let (host, _vfs) = load_cargo(path, &Default::default(), load_output_dirs, with_proc_macro)?;
+pub fn diagnostics(
+    path: &Path,
+    load_out_dirs_from_check: bool,
+    with_proc_macro: bool,
+) -> Result<()> {
+    let load_cargo_config = LoadCargoConfig {
+        cargo_config: Default::default(),
+        load_out_dirs_from_check,
+        with_proc_macro,
+    };
+    let (host, _vfs) = load_cargo(path, &load_cargo_config)?;
     let db = host.raw_database();
     let analysis = host.analysis();
 
diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs
index 4669c9bc34a..cc63c6cc2d0 100644
--- a/crates/rust-analyzer/src/cli/load_cargo.rs
+++ b/crates/rust-analyzer/src/cli/load_cargo.rs
@@ -13,15 +13,16 @@ use vfs::{loader::Handle, AbsPath, AbsPathBuf};
 
 use crate::reload::{ProjectFolders, SourceRootConfig};
 
-pub fn load_cargo(
-    root: &Path,
-    config: &CargoConfig,
-    load_out_dirs_from_check: bool,
-    with_proc_macro: bool,
-) -> Result<(AnalysisHost, vfs::Vfs)> {
+pub struct LoadCargoConfig {
+    pub cargo_config: CargoConfig,
+    pub load_out_dirs_from_check: bool,
+    pub with_proc_macro: bool,
+}
+
+pub fn load_cargo(root: &Path, config: &LoadCargoConfig) -> Result<(AnalysisHost, vfs::Vfs)> {
     let root = AbsPathBuf::assert(std::env::current_dir()?.join(root));
     let root = ProjectManifest::discover_single(&root)?;
-    let ws = ProjectWorkspace::load(root, config, &|_| {})?;
+    let ws = ProjectWorkspace::load(root, &config.cargo_config, &|_| {})?;
 
     let (sender, receiver) = unbounded();
     let mut vfs = vfs::Vfs::default();
@@ -31,14 +32,14 @@ pub fn load_cargo(
         Box::new(loader)
     };
 
-    let proc_macro_client = if with_proc_macro {
+    let proc_macro_client = if config.with_proc_macro {
         let path = std::env::current_exe()?;
         Some(ProcMacroClient::extern_process(path, &["proc-macro"]).unwrap())
     } else {
         None
     };
 
-    let build_data = if load_out_dirs_from_check {
+    let build_data = if config.load_out_dirs_from_check {
         let mut collector = BuildDataCollector::default();
         ws.collect_build_data_configs(&mut collector);
         Some(collector.collect(&|_| {})?)
@@ -117,7 +118,13 @@ mod tests {
     #[test]
     fn test_loading_rust_analyzer() {
         let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap().parent().unwrap();
-        let (host, _vfs) = load_cargo(path, &Default::default(), false, false).unwrap();
+        let load_cargo_config = LoadCargoConfig {
+            cargo_config: Default::default(),
+            load_out_dirs_from_check: false,
+            with_proc_macro: false,
+        };
+
+        let (host, _vfs) = load_cargo(path, &load_cargo_config).unwrap();
         let n_crates = Crate::all(host.raw_database()).len();
         // RA has quite a few crates, but the exact count doesn't matter
         assert!(n_crates > 20);
diff --git a/crates/rust-analyzer/src/cli/ssr.rs b/crates/rust-analyzer/src/cli/ssr.rs
index 8ab43e0f76b..8729ff0d9f6 100644
--- a/crates/rust-analyzer/src/cli/ssr.rs
+++ b/crates/rust-analyzer/src/cli/ssr.rs
@@ -1,11 +1,19 @@
 //! Applies structured search replace rules from the command line.
 
-use crate::cli::{load_cargo::load_cargo, Result};
+use crate::cli::{
+    load_cargo::{load_cargo, LoadCargoConfig},
+    Result,
+};
 use ssr::{MatchFinder, SsrPattern, SsrRule};
 
 pub fn apply_ssr_rules(rules: Vec<SsrRule>) -> Result<()> {
     use ide_db::base_db::SourceDatabaseExt;
-    let (host, vfs) = load_cargo(&std::env::current_dir()?, &Default::default(), true, true)?;
+    let load_cargo_config = LoadCargoConfig {
+        cargo_config: Default::default(),
+        load_out_dirs_from_check: true,
+        with_proc_macro: true,
+    };
+    let (host, vfs) = load_cargo(&std::env::current_dir()?, &load_cargo_config)?;
     let db = host.raw_database();
     let mut match_finder = MatchFinder::at_first_file(db)?;
     for rule in rules {
@@ -28,7 +36,12 @@ pub fn apply_ssr_rules(rules: Vec<SsrRule>) -> Result<()> {
 pub fn search_for_patterns(patterns: Vec<SsrPattern>, debug_snippet: Option<String>) -> Result<()> {
     use ide_db::base_db::SourceDatabaseExt;
     use ide_db::symbol_index::SymbolsDatabase;
-    let (host, _vfs) = load_cargo(&std::env::current_dir()?, &Default::default(), true, true)?;
+    let load_cargo_config = LoadCargoConfig {
+        cargo_config: Default::default(),
+        load_out_dirs_from_check: true,
+        with_proc_macro: true,
+    };
+    let (host, _vfs) = load_cargo(&std::env::current_dir()?, &load_cargo_config)?;
     let db = host.raw_database();
     let mut match_finder = MatchFinder::at_first_file(db)?;
     for pattern in patterns {