Skip to content

Commit bef899a

Browse files
committed
Less mutability
1 parent a90401a commit bef899a

File tree

1 file changed

+23
-19
lines changed
  • crates/ra_project_model/src

1 file changed

+23
-19
lines changed

crates/ra_project_model/src/lib.rs

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,12 @@ impl ProjectWorkspace {
185185
let mut crate_graph = CrateGraph::default();
186186
match self {
187187
ProjectWorkspace::Json { project } => {
188-
let mut crates = FxHashMap::default();
189-
for (id, krate) in project.crates.iter().enumerate() {
190-
let crate_id = json_project::CrateId(id);
191-
if let Some(file_id) = load(&krate.root_module) {
188+
let crates: FxHashMap<_, _> = project
189+
.crates
190+
.iter()
191+
.enumerate()
192+
.filter_map(|(seq_index, krate)| {
193+
let file_id = load(&krate.root_module)?;
192194
let edition = match krate.edition {
193195
json_project::Edition::Edition2015 => Edition::Edition2015,
194196
json_project::Edition::Edition2018 => Edition::Edition2018,
@@ -218,8 +220,8 @@ impl ProjectWorkspace {
218220
.clone()
219221
.map(|it| proc_macro_client.by_dylib_path(&it));
220222
// FIXME: No crate name in json definition such that we cannot add OUT_DIR to env
221-
crates.insert(
222-
crate_id,
223+
Some((
224+
json_project::CrateId(seq_index),
223225
crate_graph.add_crate_root(
224226
file_id,
225227
edition,
@@ -230,9 +232,9 @@ impl ProjectWorkspace {
230232
extern_source,
231233
proc_macro.unwrap_or_default(),
232234
),
233-
);
234-
}
235-
}
235+
))
236+
})
237+
.collect();
236238

237239
for (id, krate) in project.crates.iter().enumerate() {
238240
for dep in &krate.deps {
@@ -256,9 +258,11 @@ impl ProjectWorkspace {
256258
}
257259
}
258260
ProjectWorkspace::Cargo { cargo, sysroot } => {
259-
let mut sysroot_crates = FxHashMap::default();
260-
for krate in sysroot.crates() {
261-
if let Some(file_id) = load(&sysroot[krate].root) {
261+
let sysroot_crates: FxHashMap<_, _> = sysroot
262+
.crates()
263+
.filter_map(|krate| {
264+
let file_id = load(&sysroot[krate].root)?;
265+
262266
// Crates from sysroot have `cfg(test)` disabled
263267
let cfg_options = {
264268
let mut opts = default_cfg_options.clone();
@@ -269,22 +273,22 @@ impl ProjectWorkspace {
269273
let env = Env::default();
270274
let extern_source = ExternSource::default();
271275
let proc_macro = vec![];
276+
let crate_name = CrateName::new(&sysroot[krate].name)
277+
.expect("Sysroot crate names should not contain dashes");
272278

273279
let crate_id = crate_graph.add_crate_root(
274280
file_id,
275281
Edition::Edition2018,
276-
Some(
277-
CrateName::new(&sysroot[krate].name)
278-
.expect("Sysroot crate names should not contain dashes"),
279-
),
282+
Some(crate_name),
280283
cfg_options,
281284
env,
282285
extern_source,
283286
proc_macro,
284287
);
285-
sysroot_crates.insert(krate, crate_id);
286-
}
287-
}
288+
Some((krate, crate_id))
289+
})
290+
.collect();
291+
288292
for from in sysroot.crates() {
289293
for &to in sysroot[from].deps.iter() {
290294
let name = &sysroot[to].name;

0 commit comments

Comments
 (0)