From cbd466b0b0835c4f9ca8fb41904b9fd05e5f6abb Mon Sep 17 00:00:00 2001 From: Ed Page Date: Fri, 10 Nov 2023 16:07:41 -0600 Subject: [PATCH 1/3] refactor(toml): Consistently use '_' prefix for bookkeeping --- src/cargo/util/toml/mod.rs | 10 +++++----- src/cargo/util/toml/schema.rs | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index cb841476b17..7ce22437576 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -1508,20 +1508,20 @@ impl schema::InheritableFields { let Some(license_file) = &self.license_file else { bail!("`workspace.package.license-file` was not defined"); }; - resolve_relative_path("license-file", &self.ws_root, package_root, license_file) + resolve_relative_path("license-file", &self._ws_root, package_root, license_file) } /// Gets the field `workspace.package.readme`. fn readme(&self, package_root: &Path) -> CargoResult { - let Some(readme) = readme_for_package(self.ws_root.as_path(), self.readme.as_ref()) else { + let Some(readme) = readme_for_package(self._ws_root.as_path(), self.readme.as_ref()) else { bail!("`workspace.package.readme` was not defined"); }; - resolve_relative_path("readme", &self.ws_root, package_root, &readme) + resolve_relative_path("readme", &self._ws_root, package_root, &readme) .map(schema::StringOrBool::String) } fn ws_root(&self) -> &PathBuf { - &self.ws_root + &self._ws_root } fn update_deps(&mut self, deps: Option>) { @@ -1533,7 +1533,7 @@ impl schema::InheritableFields { } fn update_ws_path(&mut self, ws_root: PathBuf) { - self.ws_root = ws_root; + self._ws_root = ws_root; } } diff --git a/src/cargo/util/toml/schema.rs b/src/cargo/util/toml/schema.rs index 6ea93e02193..ddc6b7228c5 100644 --- a/src/cargo/util/toml/schema.rs +++ b/src/cargo/util/toml/schema.rs @@ -1,3 +1,9 @@ +//! `Cargo.toml` / Manifest schema definition +//! +//! ## Style +//! +//! - Keys that exist for bookkeeping but don't correspond to the schema have a `_` prefix + use std::collections::BTreeMap; use std::fmt::{self, Display, Write}; use std::path::PathBuf; @@ -108,7 +114,7 @@ pub struct InheritableFields { // We use skip here since it will never be present when deserializing // and we don't want it present when serializing #[serde(skip)] - pub ws_root: PathBuf, + pub _ws_root: PathBuf, } /// Represents the `package`/`project` sections of a `Cargo.toml`. @@ -430,7 +436,7 @@ impl MaybeWorkspaceDependency { pub fn unused_keys(&self) -> Vec { match self { MaybeWorkspaceDependency::Defined(d) => d.unused_keys(), - MaybeWorkspaceDependency::Workspace(w) => w.unused_keys.keys().cloned().collect(), + MaybeWorkspaceDependency::Workspace(w) => w._unused_keys.keys().cloned().collect(), } } } @@ -471,7 +477,7 @@ pub struct TomlWorkspaceDependency { /// This is here to provide a way to see the "unused manifest keys" when deserializing #[serde(skip_serializing)] #[serde(flatten)] - pub unused_keys: BTreeMap, + pub _unused_keys: BTreeMap, } impl TomlWorkspaceDependency { @@ -510,7 +516,7 @@ impl TomlDependency { pub fn unused_keys(&self) -> Vec { match self { TomlDependency::Simple(_) => vec![], - TomlDependency::Detailed(detailed) => detailed.unused_keys.keys().cloned().collect(), + TomlDependency::Detailed(detailed) => detailed._unused_keys.keys().cloned().collect(), } } } @@ -568,7 +574,7 @@ pub struct DetailedTomlDependency { /// This is here to provide a way to see the "unused manifest keys" when deserializing #[serde(skip_serializing)] #[serde(flatten)] - pub unused_keys: BTreeMap, + pub _unused_keys: BTreeMap, } impl DetailedTomlDependency

{ @@ -598,7 +604,7 @@ impl Default for DetailedTomlDependency

{ artifact: Default::default(), lib: Default::default(), target: Default::default(), - unused_keys: Default::default(), + _unused_keys: Default::default(), } } } From f520d6cf2c2b8476e03bb7822f9efd74181279db Mon Sep 17 00:00:00 2001 From: Ed Page Date: Fri, 10 Nov 2023 16:10:40 -0600 Subject: [PATCH 2/3] refactor(toml): Be consistent for duplicate field names --- src/cargo/util/toml/schema.rs | 7 +++---- src/cargo/util/toml/targets.rs | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/cargo/util/toml/schema.rs b/src/cargo/util/toml/schema.rs index ddc6b7228c5..7c86b59df14 100644 --- a/src/cargo/util/toml/schema.rs +++ b/src/cargo/util/toml/schema.rs @@ -956,10 +956,9 @@ pub struct TomlTarget { pub doc: Option, pub plugin: Option, pub doc_scrape_examples: Option, - #[serde(rename = "proc-macro")] - pub proc_macro_raw: Option, + pub proc_macro: Option, #[serde(rename = "proc_macro")] - pub proc_macro_raw2: Option, + pub proc_macro2: Option, pub harness: Option, pub required_features: Option>, pub edition: Option, @@ -971,7 +970,7 @@ impl TomlTarget { } pub fn proc_macro(&self) -> Option { - self.proc_macro_raw.or(self.proc_macro_raw2).or_else(|| { + self.proc_macro.or(self.proc_macro2).or_else(|| { if let Some(types) = self.crate_types() { if types.contains(&"proc-macro".to_string()) { return Some(true); diff --git a/src/cargo/util/toml/targets.rs b/src/cargo/util/toml/targets.rs index 9d456ffd731..4f8383a94c7 100644 --- a/src/cargo/util/toml/targets.rs +++ b/src/cargo/util/toml/targets.rs @@ -1004,7 +1004,7 @@ fn name_or_panic(target: &TomlTarget) -> &str { } fn validate_proc_macro(target: &TomlTarget, kind: &str, warnings: &mut Vec) { - if target.proc_macro_raw.is_some() && target.proc_macro_raw2.is_some() { + if target.proc_macro.is_some() && target.proc_macro2.is_some() { warn_on_deprecated( "proc-macro", name_or_panic(target), From 86a11baa06aeeb45798c6d5431d67c23f0157289 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Fri, 10 Nov 2023 16:13:56 -0600 Subject: [PATCH 3/3] refactor(toml): Be consistent in duplicate field access --- src/cargo/util/toml/mod.rs | 7 +------ src/cargo/util/toml/schema.rs | 5 +++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 7ce22437576..b634ff654ad 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -194,12 +194,7 @@ impl schema::TomlManifest { package_root: &Path, ) -> CargoResult { let config = ws.config(); - let mut package = self - .package - .as_ref() - .or_else(|| self.project.as_ref()) - .unwrap() - .clone(); + let mut package = self.package().unwrap().clone(); package.workspace = None; let current_resolver = package .resolver diff --git a/src/cargo/util/toml/schema.rs b/src/cargo/util/toml/schema.rs index 7c86b59df14..7a85b3edf3f 100644 --- a/src/cargo/util/toml/schema.rs +++ b/src/cargo/util/toml/schema.rs @@ -2,6 +2,7 @@ //! //! ## Style //! +//! - Fields duplicated for an alias will have an accessor with the primary field's name //! - Keys that exist for bookkeeping but don't correspond to the schema have a `_` prefix use std::collections::BTreeMap; @@ -51,6 +52,10 @@ impl TomlManifest { self.profile.is_some() } + pub fn package(&self) -> Option<&Box> { + self.package.as_ref().or(self.project.as_ref()) + } + pub fn dev_dependencies(&self) -> Option<&BTreeMap> { self.dev_dependencies .as_ref()