From 258d8447a9b12130c41ae968e0f334eefd5780e9 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 19 Mar 2024 14:01:03 -0500 Subject: [PATCH] refactor(toml): Rely on resolved keywords --- crates/cargo-util-schemas/src/manifest/mod.rs | 4 ++++ src/cargo/util/toml/mod.rs | 17 +++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/crates/cargo-util-schemas/src/manifest/mod.rs b/crates/cargo-util-schemas/src/manifest/mod.rs index 121d30af7..d63a2010d 100644 --- a/crates/cargo-util-schemas/src/manifest/mod.rs +++ b/crates/cargo-util-schemas/src/manifest/mod.rs @@ -233,6 +233,10 @@ impl TomlPackage { }) .transpose() } + + pub fn resolved_keywords(&self) -> Result>, UnresolvedError> { + self.keywords.as_ref().map(|v| v.resolved()).transpose() + } } /// An enum that allows for inheriting keys from a workspace in a Cargo.toml. diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 498835e17..35c7a3aa9 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -590,6 +590,12 @@ pub fn to_real_manifest( .as_ref(), ) .map(|s| manifest::InheritableField::Value(StringOrBool::String(s))); + package.keywords = package + .keywords + .clone() + .map(|value| field_inherit_with(value, "keywords", || inherit()?.keywords())) + .transpose()? + .map(manifest::InheritableField::Value); let rust_version = package .resolved_rust_version() @@ -927,10 +933,9 @@ pub fn to_real_manifest( .map(|mw| field_inherit_with(mw, "repository", || inherit()?.repository())) .transpose()?, keywords: package - .keywords - .clone() - .map(|mw| field_inherit_with(mw, "keywords", || inherit()?.keywords())) - .transpose()? + .resolved_keywords() + .expect("previously resolved") + .cloned() .unwrap_or_default(), categories: package .categories @@ -963,10 +968,6 @@ pub fn to_real_manifest( .repository .clone() .map(|repository| manifest::InheritableField::Value(repository)); - package.keywords = package - .keywords - .as_ref() - .map(|_| manifest::InheritableField::Value(metadata.keywords.clone())); package.categories = package .categories .as_ref()