Skip to content

Commit 6141e27

Browse files
bors[bot]matklad
andauthored
Merge #5882
5882: Don't expose indexing details r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2 parents 13fd884 + 9786a8f commit 6141e27

File tree

2 files changed

+20
-24
lines changed

2 files changed

+20
-24
lines changed

crates/project_model/src/lib.rs

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl fmt::Debug for ProjectWorkspace {
4343
f.debug_struct("Cargo").field("n_packages", &cargo.packages().len()).finish()
4444
}
4545
ProjectWorkspace::Json { project } => {
46-
f.debug_struct("Json").field("n_crates", &project.crates.len()).finish()
46+
f.debug_struct("Json").field("n_crates", &project.n_crates()).finish()
4747
}
4848
}
4949
}
@@ -202,9 +202,8 @@ impl ProjectWorkspace {
202202
pub fn to_roots(&self) -> Vec<PackageRoot> {
203203
match self {
204204
ProjectWorkspace::Json { project } => project
205-
.crates
206-
.iter()
207-
.map(|krate| PackageRoot {
205+
.crates()
206+
.map(|(_, krate)| PackageRoot {
208207
is_member: krate.is_workspace_member,
209208
include: krate.include.clone(),
210209
exclude: krate.exclude.clone(),
@@ -243,9 +242,8 @@ impl ProjectWorkspace {
243242
pub fn proc_macro_dylib_paths(&self) -> Vec<AbsPathBuf> {
244243
match self {
245244
ProjectWorkspace::Json { project } => project
246-
.crates
247-
.iter()
248-
.filter_map(|krate| krate.proc_macro_dylib_path.as_ref())
245+
.crates()
246+
.filter_map(|(_, krate)| krate.proc_macro_dylib_path.as_ref())
249247
.cloned()
250248
.collect(),
251249
ProjectWorkspace::Cargo { cargo, sysroot: _sysroot } => cargo
@@ -258,7 +256,7 @@ impl ProjectWorkspace {
258256

259257
pub fn n_packages(&self) -> usize {
260258
match self {
261-
ProjectWorkspace::Json { project, .. } => project.crates.len(),
259+
ProjectWorkspace::Json { project, .. } => project.n_crates(),
262260
ProjectWorkspace::Cargo { cargo, sysroot } => {
263261
cargo.packages().len() + sysroot.crates().len()
264262
}
@@ -276,10 +274,8 @@ impl ProjectWorkspace {
276274
ProjectWorkspace::Json { project } => {
277275
let mut cfg_cache: FxHashMap<Option<&str>, Vec<CfgFlag>> = FxHashMap::default();
278276
let crates: FxHashMap<_, _> = project
279-
.crates
280-
.iter()
281-
.enumerate()
282-
.filter_map(|(seq_index, krate)| {
277+
.crates()
278+
.filter_map(|(crate_id, krate)| {
283279
let file_path = &krate.root_module;
284280
let file_id = load(&file_path)?;
285281

@@ -297,9 +293,8 @@ impl ProjectWorkspace {
297293
let mut cfg_options = CfgOptions::default();
298294
cfg_options.extend(target_cfgs.iter().chain(krate.cfg.iter()).cloned());
299295

300-
// FIXME: No crate name in json definition such that we cannot add OUT_DIR to env
301296
Some((
302-
CrateId(seq_index as u32),
297+
crate_id,
303298
crate_graph.add_crate_root(
304299
file_id,
305300
krate.edition,
@@ -313,19 +308,14 @@ impl ProjectWorkspace {
313308
})
314309
.collect();
315310

316-
for (id, krate) in project.crates.iter().enumerate() {
311+
for (from, krate) in project.crates() {
317312
for dep in &krate.deps {
318-
let from_crate_id = CrateId(id as u32);
319313
let to_crate_id = dep.crate_id;
320314
if let (Some(&from), Some(&to)) =
321-
(crates.get(&from_crate_id), crates.get(&to_crate_id))
315+
(crates.get(&from), crates.get(&to_crate_id))
322316
{
323-
if crate_graph.add_dep(from, dep.name.clone(), to).is_err() {
324-
log::error!(
325-
"cyclic dependency {:?} -> {:?}",
326-
from_crate_id,
327-
to_crate_id
328-
);
317+
if let Err(_) = crate_graph.add_dep(from, dep.name.clone(), to) {
318+
log::error!("cyclic dependency {:?} -> {:?}", from, to_crate_id);
329319
}
330320
}
331321
}

crates/project_model/src/project_json.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::cfg_flag::CfgFlag;
1212
/// Roots and crates that compose this Rust project.
1313
#[derive(Clone, Debug, Eq, PartialEq)]
1414
pub struct ProjectJson {
15-
pub(crate) crates: Vec<Crate>,
15+
crates: Vec<Crate>,
1616
}
1717

1818
/// A crate points to the root module of a crate and lists the dependencies of the crate. This is
@@ -79,6 +79,12 @@ impl ProjectJson {
7979
.collect::<Vec<_>>(),
8080
}
8181
}
82+
pub fn n_crates(&self) -> usize {
83+
self.crates.len()
84+
}
85+
pub fn crates(&self) -> impl Iterator<Item = (CrateId, &Crate)> + '_ {
86+
self.crates.iter().enumerate().map(|(idx, krate)| (CrateId(idx as u32), krate))
87+
}
8288
}
8389

8490
#[derive(Deserialize)]

0 commit comments

Comments
 (0)