internal: simplify handling of the build scripts
This commit is contained in:
@@ -68,7 +68,6 @@ impl AnalysisStatsCmd {
|
||||
cargo_config.no_sysroot = self.no_sysroot;
|
||||
let load_cargo_config = LoadCargoConfig {
|
||||
load_out_dirs_from_check: self.enable_build_scripts,
|
||||
wrap_rustc: false,
|
||||
with_proc_macro: self.enable_proc_macros,
|
||||
prefill_caches: false,
|
||||
};
|
||||
|
||||
@@ -34,12 +34,8 @@ pub fn diagnostics(
|
||||
with_proc_macro: bool,
|
||||
) -> Result<()> {
|
||||
let cargo_config = Default::default();
|
||||
let load_cargo_config = LoadCargoConfig {
|
||||
load_out_dirs_from_check,
|
||||
with_proc_macro,
|
||||
wrap_rustc: false,
|
||||
prefill_caches: false,
|
||||
};
|
||||
let load_cargo_config =
|
||||
LoadCargoConfig { load_out_dirs_from_check, with_proc_macro, prefill_caches: false };
|
||||
let (host, _vfs, _proc_macro) =
|
||||
load_workspace_at(path, &cargo_config, &load_cargo_config, &|_| {})?;
|
||||
let db = host.raw_database();
|
||||
|
||||
@@ -8,7 +8,7 @@ use hir::db::DefDatabase;
|
||||
use ide::{AnalysisHost, Change};
|
||||
use ide_db::base_db::CrateGraph;
|
||||
use project_model::{
|
||||
BuildDataCollector, CargoConfig, ProcMacroClient, ProjectManifest, ProjectWorkspace,
|
||||
CargoConfig, ProcMacroClient, ProjectManifest, ProjectWorkspace, WorkspaceBuildScripts,
|
||||
};
|
||||
use vfs::{loader::Handle, AbsPath, AbsPathBuf};
|
||||
|
||||
@@ -16,7 +16,6 @@ use crate::reload::{ProjectFolders, SourceRootConfig};
|
||||
|
||||
pub(crate) struct LoadCargoConfig {
|
||||
pub(crate) load_out_dirs_from_check: bool,
|
||||
pub(crate) wrap_rustc: bool,
|
||||
pub(crate) with_proc_macro: bool,
|
||||
pub(crate) prefill_caches: bool,
|
||||
}
|
||||
@@ -33,12 +32,13 @@ pub(crate) fn load_workspace_at(
|
||||
eprintln!("root = {:?}", root);
|
||||
let workspace = ProjectWorkspace::load(root, cargo_config, progress)?;
|
||||
|
||||
load_workspace(workspace, load_config, progress)
|
||||
load_workspace(workspace, cargo_config, load_config, progress)
|
||||
}
|
||||
|
||||
fn load_workspace(
|
||||
ws: ProjectWorkspace,
|
||||
config: &LoadCargoConfig,
|
||||
cargo_config: &CargoConfig,
|
||||
load_config: &LoadCargoConfig,
|
||||
progress: &dyn Fn(String),
|
||||
) -> Result<(AnalysisHost, vfs::Vfs, Option<ProcMacroClient>)> {
|
||||
let (sender, receiver) = unbounded();
|
||||
@@ -49,33 +49,29 @@ fn load_workspace(
|
||||
Box::new(loader)
|
||||
};
|
||||
|
||||
let proc_macro_client = if config.with_proc_macro {
|
||||
let proc_macro_client = if load_config.with_proc_macro {
|
||||
let path = AbsPathBuf::assert(std::env::current_exe()?);
|
||||
Some(ProcMacroClient::extern_process(path, &["proc-macro"]).unwrap())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let build_data = if config.load_out_dirs_from_check {
|
||||
let mut collector = BuildDataCollector::new(config.wrap_rustc);
|
||||
ws.collect_build_data_configs(&mut collector);
|
||||
Some(collector.collect(progress)?)
|
||||
} else {
|
||||
None
|
||||
let build_scripts = match &ws {
|
||||
ProjectWorkspace::Cargo { cargo, .. } if load_config.load_out_dirs_from_check => {
|
||||
WorkspaceBuildScripts::run(cargo_config, cargo, progress)?
|
||||
}
|
||||
_ => WorkspaceBuildScripts::default(),
|
||||
};
|
||||
|
||||
let crate_graph = ws.to_crate_graph(
|
||||
build_data.as_ref(),
|
||||
proc_macro_client.as_ref(),
|
||||
&mut |path: &AbsPath| {
|
||||
let crate_graph =
|
||||
ws.to_crate_graph(&build_scripts, proc_macro_client.as_ref(), &mut |path: &AbsPath| {
|
||||
let contents = loader.load_sync(path);
|
||||
let path = vfs::VfsPath::from(path.to_path_buf());
|
||||
vfs.set_file_contents(path.clone(), contents);
|
||||
vfs.file_id(&path)
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
let project_folders = ProjectFolders::new(&[ws], &[], build_data.as_ref());
|
||||
let project_folders = ProjectFolders::new(&[ws], &[build_scripts], &[]);
|
||||
loader.set_config(vfs::loader::Config {
|
||||
load: project_folders.load,
|
||||
watch: vec![],
|
||||
@@ -86,7 +82,7 @@ fn load_workspace(
|
||||
let host =
|
||||
load_crate_graph(crate_graph, project_folders.source_root_config, &mut vfs, &receiver);
|
||||
|
||||
if config.prefill_caches {
|
||||
if load_config.prefill_caches {
|
||||
host.analysis().prime_caches(|_| {})?;
|
||||
}
|
||||
Ok((host, vfs, proc_macro_client))
|
||||
@@ -146,10 +142,9 @@ mod tests {
|
||||
#[test]
|
||||
fn test_loading_rust_analyzer() {
|
||||
let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap().parent().unwrap();
|
||||
let cargo_config = Default::default();
|
||||
let cargo_config = CargoConfig::default();
|
||||
let load_cargo_config = LoadCargoConfig {
|
||||
load_out_dirs_from_check: false,
|
||||
wrap_rustc: false,
|
||||
with_proc_macro: false,
|
||||
prefill_caches: false,
|
||||
};
|
||||
|
||||
@@ -5,13 +5,13 @@ use crate::cli::{
|
||||
Result,
|
||||
};
|
||||
use ide_ssr::{MatchFinder, SsrPattern, SsrRule};
|
||||
use project_model::CargoConfig;
|
||||
|
||||
pub fn apply_ssr_rules(rules: Vec<SsrRule>) -> Result<()> {
|
||||
use ide_db::base_db::SourceDatabaseExt;
|
||||
let cargo_config = Default::default();
|
||||
let cargo_config = CargoConfig::default();
|
||||
let load_cargo_config = LoadCargoConfig {
|
||||
load_out_dirs_from_check: true,
|
||||
wrap_rustc: false,
|
||||
with_proc_macro: true,
|
||||
prefill_caches: false,
|
||||
};
|
||||
@@ -39,10 +39,9 @@ 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 cargo_config = Default::default();
|
||||
let cargo_config = CargoConfig::default();
|
||||
let load_cargo_config = LoadCargoConfig {
|
||||
load_out_dirs_from_check: true,
|
||||
wrap_rustc: true,
|
||||
with_proc_macro: true,
|
||||
prefill_caches: false,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user