Skip to content

Commit 2811c15

Browse files
committed
refactor(toml): Build up resolved manifest as we go
Normally, I prefer directly constructing something but I feel this works better in this case so I can limit a lot of work that is coupled to a `package` being present. Since we still directly construct, just with `None`, I think this still works.
1 parent 8a6fa8b commit 2811c15

File tree

1 file changed

+39
-36
lines changed

1 file changed

+39
-36
lines changed

src/cargo/util/toml/mod.rs

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,31 @@ fn resolve_toml(
523523
warnings: &mut Vec<String>,
524524
_errors: &mut Vec<String>,
525525
) -> CargoResult<manifest::TomlManifest> {
526+
let mut resolved_toml = manifest::TomlManifest {
527+
cargo_features: original_toml.cargo_features.clone(),
528+
package: None,
529+
project: None,
530+
profile: original_toml.profile.clone(),
531+
lib: original_toml.lib.clone(),
532+
bin: original_toml.bin.clone(),
533+
example: original_toml.example.clone(),
534+
test: original_toml.test.clone(),
535+
bench: original_toml.bench.clone(),
536+
dependencies: None,
537+
dev_dependencies: None,
538+
dev_dependencies2: None,
539+
build_dependencies: None,
540+
build_dependencies2: None,
541+
features: original_toml.features.clone(),
542+
target: None,
543+
replace: original_toml.replace.clone(),
544+
patch: original_toml.patch.clone(),
545+
workspace: original_toml.workspace.clone(),
546+
badges: None,
547+
lints: None,
548+
_unused_keys: Default::default(),
549+
};
550+
526551
let package_root = manifest_file.parent().unwrap();
527552

528553
let inherit_cell: LazyCell<InheritableFields> = LazyCell::new();
@@ -531,13 +556,11 @@ fn resolve_toml(
531556
.try_borrow_with(|| load_inheritable_fields(gctx, manifest_file, &workspace_config))
532557
};
533558

534-
let resolved_package = if let Some(original_package) = original_toml.package() {
559+
if let Some(original_package) = original_toml.package() {
535560
let resolved_package = resolve_package_toml(original_package, package_root, &inherit)?;
536-
Some(resolved_package)
537-
} else {
538-
None
539-
};
540-
let resolved_dependencies = resolve_dependencies(
561+
resolved_toml.package = Some(resolved_package);
562+
}
563+
resolved_toml.dependencies = resolve_dependencies(
541564
gctx,
542565
&features,
543566
original_toml.dependencies.as_ref(),
@@ -546,7 +569,7 @@ fn resolve_toml(
546569
package_root,
547570
warnings,
548571
)?;
549-
let resolved_dev_dependencies = resolve_dependencies(
572+
resolved_toml.dev_dependencies = resolve_dependencies(
550573
gctx,
551574
&features,
552575
original_toml.dev_dependencies(),
@@ -555,7 +578,7 @@ fn resolve_toml(
555578
package_root,
556579
warnings,
557580
)?;
558-
let resolved_build_dependencies = resolve_dependencies(
581+
resolved_toml.build_dependencies = resolve_dependencies(
559582
gctx,
560583
&features,
561584
original_toml.build_dependencies(),
@@ -604,44 +627,24 @@ fn resolve_toml(
604627
},
605628
);
606629
}
607-
let resolved_target = (!resolved_target.is_empty()).then_some(resolved_target);
630+
resolved_toml.target = (!resolved_target.is_empty()).then_some(resolved_target);
631+
608632
let resolved_lints = original_toml
609633
.lints
610634
.clone()
611635
.map(|value| lints_inherit_with(value, || inherit()?.lints()))
612636
.transpose()?;
637+
resolved_toml.lints = resolved_lints.map(|lints| manifest::InheritableLints {
638+
workspace: false,
639+
lints,
640+
});
641+
613642
let resolved_badges = original_toml
614643
.badges
615644
.clone()
616645
.map(|mw| field_inherit_with(mw, "badges", || inherit()?.badges()))
617646
.transpose()?;
618-
let resolved_toml = manifest::TomlManifest {
619-
cargo_features: original_toml.cargo_features.clone(),
620-
package: resolved_package,
621-
project: None,
622-
profile: original_toml.profile.clone(),
623-
lib: original_toml.lib.clone(),
624-
bin: original_toml.bin.clone(),
625-
example: original_toml.example.clone(),
626-
test: original_toml.test.clone(),
627-
bench: original_toml.bench.clone(),
628-
dependencies: resolved_dependencies,
629-
dev_dependencies: resolved_dev_dependencies,
630-
dev_dependencies2: None,
631-
build_dependencies: resolved_build_dependencies,
632-
build_dependencies2: None,
633-
features: original_toml.features.clone(),
634-
target: resolved_target,
635-
replace: original_toml.replace.clone(),
636-
patch: original_toml.patch.clone(),
637-
workspace: original_toml.workspace.clone(),
638-
badges: resolved_badges.map(manifest::InheritableField::Value),
639-
lints: resolved_lints.map(|lints| manifest::InheritableLints {
640-
workspace: false,
641-
lints,
642-
}),
643-
_unused_keys: Default::default(),
644-
};
647+
resolved_toml.badges = resolved_badges.map(manifest::InheritableField::Value);
645648

646649
Ok(resolved_toml)
647650
}

0 commit comments

Comments
 (0)