Skip to content

Commit 9ec5e6e

Browse files
committed
Clearer naming
1 parent ad02bfe commit 9ec5e6e

File tree

3 files changed

+47
-29
lines changed

3 files changed

+47
-29
lines changed

crates/paths/src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//! Thin wrappers around `std::path`, distinguishing between absolute and
22
//! relative paths.
33
use std::{
4+
borrow::Borrow,
45
convert::{TryFrom, TryInto},
56
ops,
67
path::{Component, Path, PathBuf},
@@ -35,6 +36,12 @@ impl AsRef<AbsPath> for AbsPathBuf {
3536
}
3637
}
3738

39+
impl Borrow<AbsPath> for AbsPathBuf {
40+
fn borrow(&self) -> &AbsPath {
41+
self.as_path()
42+
}
43+
}
44+
3845
impl TryFrom<PathBuf> for AbsPathBuf {
3946
type Error = PathBuf;
4047
fn try_from(path_buf: PathBuf) -> Result<AbsPathBuf, PathBuf> {

crates/project_model/src/build_data.rs

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use stdx::JodChild;
1818
use crate::{cfg_flag::CfgFlag, CargoConfig};
1919

2020
#[derive(Debug, Clone, Default, PartialEq, Eq)]
21-
pub(crate) struct BuildData {
21+
pub(crate) struct PackageBuildData {
2222
/// List of config flags defined by this package's build script
2323
pub(crate) cfgs: Vec<CfgFlag>,
2424
/// List of cargo-related environment variables with their value
@@ -32,6 +32,16 @@ pub(crate) struct BuildData {
3232
pub(crate) proc_macro_dylib_path: Option<AbsPathBuf>,
3333
}
3434

35+
#[derive(Debug, Default, PartialEq, Eq, Clone)]
36+
pub(crate) struct WorkspaceBuildData {
37+
per_package: FxHashMap<String, PackageBuildData>,
38+
}
39+
40+
#[derive(Debug, Default, PartialEq, Eq, Clone)]
41+
pub struct BuildDataResult {
42+
per_workspace: FxHashMap<AbsPathBuf, WorkspaceBuildData>,
43+
}
44+
3545
#[derive(Clone, Debug)]
3646
pub(crate) struct BuildDataConfig {
3747
cargo_toml: AbsPathBuf,
@@ -52,13 +62,6 @@ pub struct BuildDataCollector {
5262
configs: FxHashMap<AbsPathBuf, BuildDataConfig>,
5363
}
5464

55-
#[derive(Debug, Default, PartialEq, Eq, Clone)]
56-
pub struct BuildDataResult {
57-
data: FxHashMap<AbsPathBuf, BuildDataMap>,
58-
}
59-
60-
pub(crate) type BuildDataMap = FxHashMap<String, BuildData>;
61-
6265
impl BuildDataCollector {
6366
pub(crate) fn add_config(&mut self, workspace_root: &AbsPath, config: BuildDataConfig) {
6467
self.configs.insert(workspace_root.to_path_buf(), config);
@@ -67,7 +70,7 @@ impl BuildDataCollector {
6770
pub fn collect(&mut self, progress: &dyn Fn(String)) -> Result<BuildDataResult> {
6871
let mut res = BuildDataResult::default();
6972
for (path, config) in self.configs.iter() {
70-
res.data.insert(
73+
res.per_workspace.insert(
7174
path.clone(),
7275
collect_from_workspace(
7376
&config.cargo_toml,
@@ -81,9 +84,15 @@ impl BuildDataCollector {
8184
}
8285
}
8386

87+
impl WorkspaceBuildData {
88+
pub(crate) fn get(&self, package_id: &str) -> Option<&PackageBuildData> {
89+
self.per_package.get(package_id)
90+
}
91+
}
92+
8493
impl BuildDataResult {
85-
pub(crate) fn get(&self, root: &AbsPath) -> Option<&BuildDataMap> {
86-
self.data.get(&root.to_path_buf())
94+
pub(crate) fn get(&self, workspace_root: &AbsPath) -> Option<&WorkspaceBuildData> {
95+
self.per_workspace.get(workspace_root)
8796
}
8897
}
8998

@@ -102,7 +111,7 @@ fn collect_from_workspace(
102111
cargo_features: &CargoConfig,
103112
packages: &Vec<cargo_metadata::Package>,
104113
progress: &dyn Fn(String),
105-
) -> Result<BuildDataMap> {
114+
) -> Result<WorkspaceBuildData> {
106115
let mut cmd = Command::new(toolchain::cargo());
107116
cmd.args(&["check", "--workspace", "--message-format=json", "--manifest-path"])
108117
.arg(cargo_toml.as_ref());
@@ -136,7 +145,7 @@ fn collect_from_workspace(
136145
let child_stdout = child.stdout.take().unwrap();
137146
let stdout = BufReader::new(child_stdout);
138147

139-
let mut res = BuildDataMap::default();
148+
let mut res = WorkspaceBuildData::default();
140149
for message in cargo_metadata::Message::parse_stream(stdout).flatten() {
141150
match message {
142151
Message::BuildScriptExecuted(BuildScript {
@@ -154,16 +163,17 @@ fn collect_from_workspace(
154163
}
155164
acc
156165
};
157-
let res = res.entry(package_id.repr.clone()).or_default();
166+
let package_build_data =
167+
res.per_package.entry(package_id.repr.clone()).or_default();
158168
// cargo_metadata crate returns default (empty) path for
159169
// older cargos, which is not absolute, so work around that.
160170
if !out_dir.as_str().is_empty() {
161171
let out_dir = AbsPathBuf::assert(PathBuf::from(out_dir.into_os_string()));
162-
res.out_dir = Some(out_dir);
163-
res.cfgs = cfgs;
172+
package_build_data.out_dir = Some(out_dir);
173+
package_build_data.cfgs = cfgs;
164174
}
165175

166-
res.envs = env;
176+
package_build_data.envs = env;
167177
}
168178
Message::CompilerArtifact(message) => {
169179
progress(format!("metadata {}", message.target.name));
@@ -173,8 +183,9 @@ fn collect_from_workspace(
173183
// Skip rmeta file
174184
if let Some(filename) = message.filenames.iter().find(|name| is_dylib(name)) {
175185
let filename = AbsPathBuf::assert(PathBuf::from(&filename));
176-
let res = res.entry(package_id.repr.clone()).or_default();
177-
res.proc_macro_dylib_path = Some(filename);
186+
let package_build_data =
187+
res.per_package.entry(package_id.repr.clone()).or_default();
188+
package_build_data.proc_macro_dylib_path = Some(filename);
178189
}
179190
}
180191
}
@@ -188,12 +199,12 @@ fn collect_from_workspace(
188199
}
189200

190201
for package in packages {
191-
let build_data = res.entry(package.id.repr.clone()).or_default();
192-
inject_cargo_env(package, build_data);
193-
if let Some(out_dir) = &build_data.out_dir {
202+
let package_build_data = res.per_package.entry(package.id.repr.clone()).or_default();
203+
inject_cargo_env(package, package_build_data);
204+
if let Some(out_dir) = &package_build_data.out_dir {
194205
// NOTE: cargo and rustc seem to hide non-UTF-8 strings from env! and option_env!()
195206
if let Some(out_dir) = out_dir.to_str().map(|s| s.to_owned()) {
196-
build_data.envs.push(("OUT_DIR".to_string(), out_dir));
207+
package_build_data.envs.push(("OUT_DIR".to_string(), out_dir));
197208
}
198209
}
199210
}
@@ -212,7 +223,7 @@ fn is_dylib(path: &Utf8Path) -> bool {
212223
/// Recreates the compile-time environment variables that Cargo sets.
213224
///
214225
/// Should be synced with <https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates>
215-
fn inject_cargo_env(package: &cargo_metadata::Package, build_data: &mut BuildData) {
226+
fn inject_cargo_env(package: &cargo_metadata::Package, build_data: &mut PackageBuildData) {
216227
let env = &mut build_data.envs;
217228

218229
// FIXME: Missing variables:

crates/project_model/src/workspace.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use proc_macro_api::ProcMacroClient;
1212
use rustc_hash::{FxHashMap, FxHashSet};
1313

1414
use crate::{
15-
build_data::{BuildData, BuildDataMap, BuildDataResult},
15+
build_data::{BuildDataResult, PackageBuildData, WorkspaceBuildData},
1616
cargo_workspace,
1717
cfg_flag::CfgFlag,
1818
rustc_cfg,
@@ -354,10 +354,10 @@ fn cargo_to_crate_graph(
354354
proc_macro_loader: &dyn Fn(&Path) -> Vec<ProcMacro>,
355355
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
356356
cargo: &CargoWorkspace,
357-
build_data_map: Option<&BuildDataMap>,
357+
build_data_map: Option<&WorkspaceBuildData>,
358358
sysroot: &Sysroot,
359359
rustc: &Option<CargoWorkspace>,
360-
rustc_build_data_map: Option<&BuildDataMap>,
360+
rustc_build_data_map: Option<&WorkspaceBuildData>,
361361
) -> CrateGraph {
362362
let _p = profile::span("cargo_to_crate_graph");
363363
let mut crate_graph = CrateGraph::default();
@@ -464,7 +464,7 @@ fn handle_rustc_crates(
464464
rustc_workspace: &CargoWorkspace,
465465
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>,
466466
crate_graph: &mut CrateGraph,
467-
rustc_build_data_map: Option<&FxHashMap<String, BuildData>>,
467+
rustc_build_data_map: Option<&WorkspaceBuildData>,
468468
cfg_options: &CfgOptions,
469469
proc_macro_loader: &dyn Fn(&Path) -> Vec<ProcMacro>,
470470
pkg_to_lib_crate: &mut FxHashMap<la_arena::Idx<crate::PackageData>, CrateId>,
@@ -555,7 +555,7 @@ fn handle_rustc_crates(
555555
fn add_target_crate_root(
556556
crate_graph: &mut CrateGraph,
557557
pkg: &cargo_workspace::PackageData,
558-
build_data: Option<&BuildData>,
558+
build_data: Option<&PackageBuildData>,
559559
cfg_options: &CfgOptions,
560560
proc_macro_loader: &dyn Fn(&Path) -> Vec<ProcMacro>,
561561
file_id: FileId,

0 commit comments

Comments
 (0)