diff options
Diffstat (limited to 'crates/project_model/src/workspace.rs')
-rw-r--r-- | crates/project_model/src/workspace.rs | 34 |
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 | |||
1 | use std::{fmt, fs, path::Component, process::Command}; | 5 | use std::{fmt, fs, path::Component, process::Command}; |
2 | 6 | ||
3 | use anyhow::{Context, Result}; | 7 | use anyhow::{Context, Result}; |
@@ -56,11 +60,7 @@ impl fmt::Debug for ProjectWorkspace { | |||
56 | } | 60 | } |
57 | 61 | ||
58 | impl ProjectWorkspace { | 62 | impl 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 | }; |