mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 07:04:49 +00:00
Re-add rust-analyzer.cargo.sysrootQueryMetadata
This commit is contained in:
parent
ba56d9b9b5
commit
3c98b98ca7
12 changed files with 150 additions and 51 deletions
|
@ -211,34 +211,35 @@ impl ProjectWorkspace {
|
|||
let project_location = project_json.parent().to_path_buf();
|
||||
let project_json: ProjectJson =
|
||||
ProjectJson::new(Some(project_json.clone()), &project_location, data);
|
||||
ProjectWorkspace::load_inline(
|
||||
project_json,
|
||||
config.target.as_deref(),
|
||||
&config.extra_env,
|
||||
&config.cfg_overrides,
|
||||
)
|
||||
ProjectWorkspace::load_inline(project_json, config)
|
||||
}
|
||||
ProjectManifest::CargoScript(rust_file) => {
|
||||
ProjectWorkspace::load_detached_file(rust_file, config)?
|
||||
}
|
||||
ProjectManifest::CargoToml(cargo_toml) => {
|
||||
let sysroot = match (&config.sysroot, &config.sysroot_src) {
|
||||
(Some(RustLibSource::Discover), None) => {
|
||||
Sysroot::discover(cargo_toml.parent(), &config.extra_env)
|
||||
}
|
||||
(Some(RustLibSource::Discover), None) => Sysroot::discover(
|
||||
cargo_toml.parent(),
|
||||
&config.extra_env,
|
||||
config.sysroot_query_metadata,
|
||||
),
|
||||
(Some(RustLibSource::Discover), Some(sysroot_src)) => {
|
||||
Sysroot::discover_with_src_override(
|
||||
cargo_toml.parent(),
|
||||
&config.extra_env,
|
||||
sysroot_src.clone(),
|
||||
config.sysroot_query_metadata,
|
||||
)
|
||||
}
|
||||
(Some(RustLibSource::Path(path)), None) => {
|
||||
Sysroot::discover_sysroot_src_dir(path.clone())
|
||||
}
|
||||
(Some(RustLibSource::Path(sysroot)), Some(sysroot_src)) => {
|
||||
Sysroot::load(Some(sysroot.clone()), Some(sysroot_src.clone()))
|
||||
}
|
||||
(Some(RustLibSource::Path(path)), None) => Sysroot::discover_sysroot_src_dir(
|
||||
path.clone(),
|
||||
config.sysroot_query_metadata,
|
||||
),
|
||||
(Some(RustLibSource::Path(sysroot)), Some(sysroot_src)) => Sysroot::load(
|
||||
Some(sysroot.clone()),
|
||||
Some(sysroot_src.clone()),
|
||||
config.sysroot_query_metadata,
|
||||
),
|
||||
(None, _) => Sysroot::empty(),
|
||||
};
|
||||
tracing::info!(workspace = %cargo_toml, src_root = ?sysroot.src_root(), root = ?sysroot.root(), "Using sysroot");
|
||||
|
@ -352,20 +353,19 @@ impl ProjectWorkspace {
|
|||
Ok(res)
|
||||
}
|
||||
|
||||
pub fn load_inline(
|
||||
project_json: ProjectJson,
|
||||
target: Option<&str>,
|
||||
extra_env: &FxHashMap<String, String>,
|
||||
cfg_overrides: &CfgOverrides,
|
||||
) -> ProjectWorkspace {
|
||||
let sysroot = Sysroot::load(project_json.sysroot.clone(), project_json.sysroot_src.clone());
|
||||
pub fn load_inline(project_json: ProjectJson, config: &CargoConfig) -> ProjectWorkspace {
|
||||
let sysroot = Sysroot::load(
|
||||
project_json.sysroot.clone(),
|
||||
project_json.sysroot_src.clone(),
|
||||
config.sysroot_query_metadata,
|
||||
);
|
||||
let cfg_config = RustcCfgConfig::Rustc(&sysroot);
|
||||
let data_layout_config = RustcDataLayoutConfig::Rustc(&sysroot);
|
||||
let toolchain = match get_toolchain_version(
|
||||
project_json.path(),
|
||||
&sysroot,
|
||||
Tool::Rustc,
|
||||
extra_env,
|
||||
&config.extra_env,
|
||||
"rustc ",
|
||||
) {
|
||||
Ok(it) => it,
|
||||
|
@ -375,15 +375,16 @@ impl ProjectWorkspace {
|
|||
}
|
||||
};
|
||||
|
||||
let rustc_cfg = rustc_cfg::get(target, extra_env, cfg_config);
|
||||
let data_layout = target_data_layout::get(data_layout_config, target, extra_env);
|
||||
let target = config.target.as_deref();
|
||||
let rustc_cfg = rustc_cfg::get(target, &config.extra_env, cfg_config);
|
||||
let data_layout = target_data_layout::get(data_layout_config, target, &config.extra_env);
|
||||
ProjectWorkspace {
|
||||
kind: ProjectWorkspaceKind::Json(project_json),
|
||||
sysroot,
|
||||
rustc_cfg,
|
||||
toolchain,
|
||||
target_layout: data_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
||||
cfg_overrides: cfg_overrides.clone(),
|
||||
cfg_overrides: config.cfg_overrides.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -393,8 +394,12 @@ impl ProjectWorkspace {
|
|||
) -> anyhow::Result<ProjectWorkspace> {
|
||||
let dir = detached_file.parent();
|
||||
let sysroot = match &config.sysroot {
|
||||
Some(RustLibSource::Path(path)) => Sysroot::discover_sysroot_src_dir(path.clone()),
|
||||
Some(RustLibSource::Discover) => Sysroot::discover(dir, &config.extra_env),
|
||||
Some(RustLibSource::Path(path)) => {
|
||||
Sysroot::discover_sysroot_src_dir(path.clone(), config.sysroot_query_metadata)
|
||||
}
|
||||
Some(RustLibSource::Discover) => {
|
||||
Sysroot::discover(dir, &config.extra_env, config.sysroot_query_metadata)
|
||||
}
|
||||
None => Sysroot::empty(),
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue