Skip to content

Commit 6ef771d

Browse files
committed
Auto merge of #12954 - epage:extra, r=Muscraft
refactor(toml): Improve consistency ### What does this PR try to resolve? As I was working towards #12801, these inconsistencies bothered me. Hopefully this will also make it easier to discover special cases in the schema and deal with them properly. ### How should we test and review this PR? ### Additional information
2 parents 90a703e + 86a11ba commit 6ef771d

File tree

3 files changed

+27
-22
lines changed

3 files changed

+27
-22
lines changed

src/cargo/util/toml/mod.rs

+6-11
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,7 @@ impl schema::TomlManifest {
194194
package_root: &Path,
195195
) -> CargoResult<schema::TomlManifest> {
196196
let config = ws.config();
197-
let mut package = self
198-
.package
199-
.as_ref()
200-
.or_else(|| self.project.as_ref())
201-
.unwrap()
202-
.clone();
197+
let mut package = self.package().unwrap().clone();
203198
package.workspace = None;
204199
let current_resolver = package
205200
.resolver
@@ -1508,20 +1503,20 @@ impl schema::InheritableFields {
15081503
let Some(license_file) = &self.license_file else {
15091504
bail!("`workspace.package.license-file` was not defined");
15101505
};
1511-
resolve_relative_path("license-file", &self.ws_root, package_root, license_file)
1506+
resolve_relative_path("license-file", &self._ws_root, package_root, license_file)
15121507
}
15131508

15141509
/// Gets the field `workspace.package.readme`.
15151510
fn readme(&self, package_root: &Path) -> CargoResult<schema::StringOrBool> {
1516-
let Some(readme) = readme_for_package(self.ws_root.as_path(), self.readme.as_ref()) else {
1511+
let Some(readme) = readme_for_package(self._ws_root.as_path(), self.readme.as_ref()) else {
15171512
bail!("`workspace.package.readme` was not defined");
15181513
};
1519-
resolve_relative_path("readme", &self.ws_root, package_root, &readme)
1514+
resolve_relative_path("readme", &self._ws_root, package_root, &readme)
15201515
.map(schema::StringOrBool::String)
15211516
}
15221517

15231518
fn ws_root(&self) -> &PathBuf {
1524-
&self.ws_root
1519+
&self._ws_root
15251520
}
15261521

15271522
fn update_deps(&mut self, deps: Option<BTreeMap<String, schema::TomlDependency>>) {
@@ -1533,7 +1528,7 @@ impl schema::InheritableFields {
15331528
}
15341529

15351530
fn update_ws_path(&mut self, ws_root: PathBuf) {
1536-
self.ws_root = ws_root;
1531+
self._ws_root = ws_root;
15371532
}
15381533
}
15391534

src/cargo/util/toml/schema.rs

+20-10
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
//! `Cargo.toml` / Manifest schema definition
2+
//!
3+
//! ## Style
4+
//!
5+
//! - Fields duplicated for an alias will have an accessor with the primary field's name
6+
//! - Keys that exist for bookkeeping but don't correspond to the schema have a `_` prefix
7+
18
use std::collections::BTreeMap;
29
use std::fmt::{self, Display, Write};
310
use std::path::PathBuf;
@@ -45,6 +52,10 @@ impl TomlManifest {
4552
self.profile.is_some()
4653
}
4754

55+
pub fn package(&self) -> Option<&Box<TomlPackage>> {
56+
self.package.as_ref().or(self.project.as_ref())
57+
}
58+
4859
pub fn dev_dependencies(&self) -> Option<&BTreeMap<String, MaybeWorkspaceDependency>> {
4960
self.dev_dependencies
5061
.as_ref()
@@ -108,7 +119,7 @@ pub struct InheritableFields {
108119
// We use skip here since it will never be present when deserializing
109120
// and we don't want it present when serializing
110121
#[serde(skip)]
111-
pub ws_root: PathBuf,
122+
pub _ws_root: PathBuf,
112123
}
113124

114125
/// Represents the `package`/`project` sections of a `Cargo.toml`.
@@ -430,7 +441,7 @@ impl MaybeWorkspaceDependency {
430441
pub fn unused_keys(&self) -> Vec<String> {
431442
match self {
432443
MaybeWorkspaceDependency::Defined(d) => d.unused_keys(),
433-
MaybeWorkspaceDependency::Workspace(w) => w.unused_keys.keys().cloned().collect(),
444+
MaybeWorkspaceDependency::Workspace(w) => w._unused_keys.keys().cloned().collect(),
434445
}
435446
}
436447
}
@@ -471,7 +482,7 @@ pub struct TomlWorkspaceDependency {
471482
/// This is here to provide a way to see the "unused manifest keys" when deserializing
472483
#[serde(skip_serializing)]
473484
#[serde(flatten)]
474-
pub unused_keys: BTreeMap<String, toml::Value>,
485+
pub _unused_keys: BTreeMap<String, toml::Value>,
475486
}
476487

477488
impl TomlWorkspaceDependency {
@@ -510,7 +521,7 @@ impl TomlDependency {
510521
pub fn unused_keys(&self) -> Vec<String> {
511522
match self {
512523
TomlDependency::Simple(_) => vec![],
513-
TomlDependency::Detailed(detailed) => detailed.unused_keys.keys().cloned().collect(),
524+
TomlDependency::Detailed(detailed) => detailed._unused_keys.keys().cloned().collect(),
514525
}
515526
}
516527
}
@@ -568,7 +579,7 @@ pub struct DetailedTomlDependency<P: Clone = String> {
568579
/// This is here to provide a way to see the "unused manifest keys" when deserializing
569580
#[serde(skip_serializing)]
570581
#[serde(flatten)]
571-
pub unused_keys: BTreeMap<String, toml::Value>,
582+
pub _unused_keys: BTreeMap<String, toml::Value>,
572583
}
573584

574585
impl<P: Clone> DetailedTomlDependency<P> {
@@ -598,7 +609,7 @@ impl<P: Clone> Default for DetailedTomlDependency<P> {
598609
artifact: Default::default(),
599610
lib: Default::default(),
600611
target: Default::default(),
601-
unused_keys: Default::default(),
612+
_unused_keys: Default::default(),
602613
}
603614
}
604615
}
@@ -950,10 +961,9 @@ pub struct TomlTarget {
950961
pub doc: Option<bool>,
951962
pub plugin: Option<bool>,
952963
pub doc_scrape_examples: Option<bool>,
953-
#[serde(rename = "proc-macro")]
954-
pub proc_macro_raw: Option<bool>,
964+
pub proc_macro: Option<bool>,
955965
#[serde(rename = "proc_macro")]
956-
pub proc_macro_raw2: Option<bool>,
966+
pub proc_macro2: Option<bool>,
957967
pub harness: Option<bool>,
958968
pub required_features: Option<Vec<String>>,
959969
pub edition: Option<String>,
@@ -965,7 +975,7 @@ impl TomlTarget {
965975
}
966976

967977
pub fn proc_macro(&self) -> Option<bool> {
968-
self.proc_macro_raw.or(self.proc_macro_raw2).or_else(|| {
978+
self.proc_macro.or(self.proc_macro2).or_else(|| {
969979
if let Some(types) = self.crate_types() {
970980
if types.contains(&"proc-macro".to_string()) {
971981
return Some(true);

src/cargo/util/toml/targets.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,7 @@ fn name_or_panic(target: &TomlTarget) -> &str {
10041004
}
10051005

10061006
fn validate_proc_macro(target: &TomlTarget, kind: &str, warnings: &mut Vec<String>) {
1007-
if target.proc_macro_raw.is_some() && target.proc_macro_raw2.is_some() {
1007+
if target.proc_macro.is_some() && target.proc_macro2.is_some() {
10081008
warn_on_deprecated(
10091009
"proc-macro",
10101010
name_or_panic(target),

0 commit comments

Comments
 (0)