aboutsummaryrefslogtreecommitdiff
path: root/crates/project_model/src/workspace.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/project_model/src/workspace.rs')
-rw-r--r--crates/project_model/src/workspace.rs34
1 files changed, 16 insertions, 18 deletions
diff --git a/crates/project_model/src/workspace.rs b/crates/project_model/src/workspace.rs
index 43ea351d1..8a1a60e0e 100644
--- a/crates/project_model/src/workspace.rs
+++ b/crates/project_model/src/workspace.rs
@@ -1,3 +1,7 @@
1//! Handles lowering of build-system specific workspace information (`cargo
2//! metadata` or `rust-project.json`) into representation stored in the salsa
3//! database -- `CrateGraph`.
4
1use std::{fmt, fs, path::Component, process::Command}; 5use std::{fmt, fs, path::Component, process::Command};
2 6
3use anyhow::{Context, Result}; 7use anyhow::{Context, Result};
@@ -56,11 +60,7 @@ impl fmt::Debug for ProjectWorkspace {
56} 60}
57 61
58impl ProjectWorkspace { 62impl ProjectWorkspace {
59 pub fn load( 63 pub fn load(manifest: ProjectManifest, config: &CargoConfig) -> Result<ProjectWorkspace> {
60 manifest: ProjectManifest,
61 cargo_config: &CargoConfig,
62 with_sysroot: bool,
63 ) -> Result<ProjectWorkspace> {
64 let res = match manifest { 64 let res = match manifest {
65 ProjectManifest::ProjectJson(project_json) => { 65 ProjectManifest::ProjectJson(project_json) => {
66 let file = fs::read_to_string(&project_json).with_context(|| { 66 let file = fs::read_to_string(&project_json).with_context(|| {
@@ -84,32 +84,30 @@ impl ProjectWorkspace {
84 cmd 84 cmd
85 })?; 85 })?;
86 86
87 let cargo = CargoWorkspace::from_cargo_metadata(&cargo_toml, cargo_config) 87 let cargo = CargoWorkspace::from_cargo_metadata(&cargo_toml, config).with_context(
88 .with_context(|| { 88 || {
89 format!( 89 format!(
90 "Failed to read Cargo metadata from Cargo.toml file {}, {}", 90 "Failed to read Cargo metadata from Cargo.toml file {}, {}",
91 cargo_toml.display(), 91 cargo_toml.display(),
92 cargo_version 92 cargo_version
93 ) 93 )
94 })?; 94 },
95 let sysroot = if with_sysroot { 95 )?;
96 let sysroot = if config.no_sysroot {
97 Sysroot::default()
98 } else {
96 Sysroot::discover(&cargo_toml).with_context(|| { 99 Sysroot::discover(&cargo_toml).with_context(|| {
97 format!( 100 format!(
98 "Failed to find sysroot for Cargo.toml file {}. Is rust-src installed?", 101 "Failed to find sysroot for Cargo.toml file {}. Is rust-src installed?",
99 cargo_toml.display() 102 cargo_toml.display()
100 ) 103 )
101 })? 104 })?
102 } else {
103 Sysroot::default()
104 }; 105 };
105 106
106 let rustc = if let Some(rustc_dir) = &cargo_config.rustc_source { 107 let rustc = if let Some(rustc_dir) = &config.rustc_source {
107 Some( 108 Some(CargoWorkspace::from_cargo_metadata(&rustc_dir, config).with_context(
108 CargoWorkspace::from_cargo_metadata(&rustc_dir, cargo_config) 109 || format!("Failed to read Cargo metadata for Rust sources"),
109 .with_context(|| { 110 )?)
110 format!("Failed to read Cargo metadata for Rust sources")
111 })?,
112 )
113 } else { 111 } else {
114 None 112 None
115 }; 113 };