diff --git a/crates/cargo-util-schemas/src/manifest/mod.rs b/crates/cargo-util-schemas/src/manifest/mod.rs index d63a2010d..b58d65276 100644 --- a/crates/cargo-util-schemas/src/manifest/mod.rs +++ b/crates/cargo-util-schemas/src/manifest/mod.rs @@ -237,6 +237,10 @@ impl TomlPackage { pub fn resolved_keywords(&self) -> Result>, UnresolvedError> { self.keywords.as_ref().map(|v| v.resolved()).transpose() } + + pub fn resolved_categories(&self) -> Result>, UnresolvedError> { + self.categories.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 35c7a3aa9..e2aac30a1 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -596,6 +596,12 @@ pub fn to_real_manifest( .map(|value| field_inherit_with(value, "keywords", || inherit()?.keywords())) .transpose()? .map(manifest::InheritableField::Value); + package.categories = package + .categories + .clone() + .map(|value| field_inherit_with(value, "categories", || inherit()?.categories())) + .transpose()? + .map(manifest::InheritableField::Value); let rust_version = package .resolved_rust_version() @@ -938,10 +944,9 @@ pub fn to_real_manifest( .cloned() .unwrap_or_default(), categories: package - .categories - .clone() - .map(|mw| field_inherit_with(mw, "categories", || inherit()?.categories())) - .transpose()? + .resolved_categories() + .expect("previously resolved") + .cloned() .unwrap_or_default(), badges: original_toml .badges @@ -968,10 +973,6 @@ pub fn to_real_manifest( .repository .clone() .map(|repository| manifest::InheritableField::Value(repository)); - package.categories = package - .categories - .as_ref() - .map(|_| manifest::InheritableField::Value(metadata.categories.clone())); package.exclude = package .exclude .as_ref()