From 539a48452a03a68d18cd32481e364550ee42f329 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 3 Jul 2025 16:34:49 -0500 Subject: [PATCH] perf: Update toml --- Cargo.lock | 87 ++++++++++++++++--- Cargo.toml | 6 +- benches/capture/Cargo.toml | 2 +- crates/cargo-test-support/Cargo.toml | 2 +- crates/cargo-util-schemas/Cargo.toml | 2 +- src/cargo/util/context/mod.rs | 7 +- tests/testsuite/alt_registry.rs | 12 ++- tests/testsuite/bad_config.rs | 8 +- tests/testsuite/build.rs | 18 ++-- .../invalid_manifest/stderr.term.svg | 18 ++-- tests/testsuite/cargo_alias_config.rs | 3 +- tests/testsuite/config.rs | 11 ++- tests/testsuite/config_cli.rs | 4 +- tests/testsuite/git.rs | 7 +- .../testsuite/inheritable_workspace_fields.rs | 9 +- tests/testsuite/install.rs | 6 +- tests/testsuite/member_errors.rs | 3 +- tests/testsuite/workspaces.rs | 4 +- 18 files changed, 129 insertions(+), 80 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2691b270d..62e3e4182 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -295,7 +295,7 @@ dependencies = [ "cargo_metadata", "flate2", "tar", - "toml", + "toml 0.9.0", ] [[package]] @@ -369,8 +369,8 @@ dependencies = [ "tempfile", "thiserror 2.0.12", "time", - "toml", - "toml_edit", + "toml 0.9.0", + "toml_edit 0.23.0", "tracing", "tracing-chrome", "tracing-subscriber", @@ -472,7 +472,7 @@ dependencies = [ "snapbox", "tar", "time", - "toml", + "toml 0.9.0", "url", "walkdir", "windows-sys 0.60.2", @@ -510,7 +510,7 @@ dependencies = [ "serde-untagged", "serde-value", "thiserror 1.0.69", - "toml", + "toml 0.8.23", "unicode-xid", "url", ] @@ -527,7 +527,7 @@ dependencies = [ "serde_json", "snapbox", "thiserror 2.0.12", - "toml", + "toml 0.9.0", "unicode-xid", "url", ] @@ -3659,6 +3659,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" +dependencies = [ + "serde", +] + [[package]] name = "sha1" version = "0.10.6" @@ -4039,9 +4048,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f271e09bde39ab52250160a67e88577e0559ad77e9085de6e9051a2c4353f8f8" +dependencies = [ + "indexmap", + "serde", + "serde_spanned 1.0.0", + "toml_datetime 0.7.0", + "toml_parser", + "toml_writer", + "winnow", ] [[package]] @@ -4053,6 +4077,15 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +dependencies = [ + "serde", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -4061,18 +4094,48 @@ checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54449f7f7569ce6f57cda7812361961c0f6a77f720802537b5618585b4a7ff4c" +dependencies = [ + "indexmap", + "serde", + "serde_spanned 1.0.0", + "toml_datetime 0.7.0", + "toml_parser", + "toml_writer", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5c1c469eda89749d2230d8156a5969a69ffe0d6d01200581cdc6110674d293e" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "toml_writer" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b679217f2848de74cabd3e8fc5e6d66f40b7da40f8e1954d92054d9010690fd5" + [[package]] name = "tracing" version = "0.1.41" @@ -4752,7 +4815,7 @@ dependencies = [ name = "xtask-stale-label" version = "0.0.0" dependencies = [ - "toml_edit", + "toml_edit 0.23.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 87dfc598b..ccb8983a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -105,8 +105,8 @@ tar = { version = "0.4.44", default-features = false } tempfile = "3.20.0" thiserror = "2.0.12" time = { version = "0.3.41", features = ["parsing", "formatting", "serde"] } -toml = { version = "0.8.23", default-features = false } -toml_edit = { version = "0.22.27", features = ["serde"] } +toml = { version = "0.9.0", default-features = false } +toml_edit = { version = "0.23.0", features = ["serde"] } tracing = { version = "0.1.41", default-features = false, features = ["std"] } # be compatible with rustc_log: https://github.com/rust-lang/rust/blob/e51e98dde6a/compiler/rustc_log/Cargo.toml#L9 tracing-chrome = "0.7.2" tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } @@ -211,7 +211,7 @@ tar.workspace = true tempfile.workspace = true thiserror.workspace = true time.workspace = true -toml = { workspace = true, features = ["display", "parse"] } +toml = { workspace = true, features = ["std", "serde", "parse", "display"] } toml_edit.workspace = true tracing = { workspace = true, features = ["attributes"] } tracing-subscriber.workspace = true diff --git a/benches/capture/Cargo.toml b/benches/capture/Cargo.toml index 177892f9b..2a8466d2b 100644 --- a/benches/capture/Cargo.toml +++ b/benches/capture/Cargo.toml @@ -10,7 +10,7 @@ publish = false cargo_metadata.workspace = true flate2.workspace = true tar.workspace = true -toml = { workspace = true, features = ["display", "parse"] } +toml = { workspace = true, features = ["display", "parse", "serde"] } [lints] workspace = true diff --git a/crates/cargo-test-support/Cargo.toml b/crates/cargo-test-support/Cargo.toml index d37951a52..41a8f3101 100644 --- a/crates/cargo-test-support/Cargo.toml +++ b/crates/cargo-test-support/Cargo.toml @@ -27,7 +27,7 @@ serde_json.workspace = true snapbox.workspace = true tar.workspace = true time.workspace = true -toml = { workspace = true, features = ["display"] } +toml = { workspace = true, features = ["display", "serde"] } url.workspace = true walkdir.workspace = true diff --git a/crates/cargo-util-schemas/Cargo.toml b/crates/cargo-util-schemas/Cargo.toml index e45ee3386..4159e33c2 100644 --- a/crates/cargo-util-schemas/Cargo.toml +++ b/crates/cargo-util-schemas/Cargo.toml @@ -16,7 +16,7 @@ serde_json = { workspace = true, optional = true } serde-untagged.workspace = true serde-value.workspace = true thiserror.workspace = true -toml.workspace = true +toml = { workspace = true, features = ["serde"] } unicode-xid.workspace = true url.workspace = true diff --git a/src/cargo/util/context/mod.rs b/src/cargo/util/context/mod.rs index ef69f3886..731255800 100644 --- a/src/cargo/util/context/mod.rs +++ b/src/cargo/util/context/mod.rs @@ -1043,10 +1043,9 @@ impl GlobalContext { let def = Definition::Environment(key.as_env_key().to_string()); if self.cli_unstable().advanced_env && env_val.starts_with('[') && env_val.ends_with(']') { // Parse an environment string as a TOML array. - let toml_v = toml::Value::deserialize(toml::de::ValueDeserializer::new(&env_val)) - .map_err(|e| { - ConfigError::new(format!("could not parse TOML list: {}", e), def.clone()) - })?; + let toml_v = env_val.parse::().map_err(|e| { + ConfigError::new(format!("could not parse TOML list: {}", e), def.clone()) + })?; let values = toml_v.as_array().expect("env var was not array"); for value in values { // TODO: support other types. diff --git a/tests/testsuite/alt_registry.rs b/tests/testsuite/alt_registry.rs index 58ac1f101..7e3774bc6 100644 --- a/tests/testsuite/alt_registry.rs +++ b/tests/testsuite/alt_registry.rs @@ -751,13 +751,11 @@ fn bad_registry_name() { [ERROR] invalid character ` ` in registry name: `bad name`, characters must be Unicode XID characters (numbers, `-`, `_`, or most letters) - --> Cargo.toml:8:17 - | - 8 | / [dependencies.bar] - 9 | | version = "0.0.1" -10 | | registry = "bad name" - | |_____________________________________^ - | + --> Cargo.toml:8:17 + | +8 | [dependencies.bar] + | ^^^^^^^^^^^^^^^^^^ + | "#]]) .run(); diff --git a/tests/testsuite/bad_config.rs b/tests/testsuite/bad_config.rs index 4b94654a0..da7d47329 100644 --- a/tests/testsuite/bad_config.rs +++ b/tests/testsuite/bad_config.rs @@ -172,7 +172,7 @@ Caused by: | 1 | 4 | ^ - expected `.`, `=` + key with no value, expected `=` "#]]) .run(); @@ -454,8 +454,7 @@ fn malformed_override() { p.cargo("check") .with_status(101) .with_stderr_data(str![[r#" -[ERROR] invalid inline table -expected `}` +[ERROR] newlines are unsupported in inline tables, expected nothing --> Cargo.toml:9:27 | 9 | native = { @@ -2130,8 +2129,7 @@ Caused by: | 1 | [bar] baz = 2 | ^ - invalid table header - expected newline, `#` + unexpected key or value, expected newline, `#` "#]]) .run(); diff --git a/tests/testsuite/build.rs b/tests/testsuite/build.rs index 92b030e21..4c44c8836 100644 --- a/tests/testsuite/build.rs +++ b/tests/testsuite/build.rs @@ -377,11 +377,11 @@ Caused by: could not parse TOML configuration in `[ROOT]/foo/.cargo/config.toml` Caused by: - TOML parse error at line 1, column 1 + TOML parse error at line 1, column 2 | 1 | ! - | ^ - invalid key + | ^ + key with no value, expected `=` "#]]) .run(); @@ -418,12 +418,11 @@ fn cargo_compile_with_invalid_manifest2() { p.cargo("build") .with_status(101) .with_stderr_data(str![[r#" -[ERROR] invalid string -expected `"`, `'` +[ERROR] string values must be quoted, expected literal string --> Cargo.toml:3:23 | 3 | foo = bar - | ^ + | ^^^ | "#]]) @@ -437,12 +436,11 @@ fn cargo_compile_with_invalid_manifest3() { p.cargo("build --manifest-path src/Cargo.toml") .with_status(101) .with_stderr_data(str![[r#" -[ERROR] invalid string -expected `"`, `'` +[ERROR] string values must be quoted, expected literal string --> src/Cargo.toml:1:5 | 1 | a = bar - | ^ + | ^^^ | "#]]) @@ -2740,7 +2738,7 @@ Caused by: | 1 | this is not valid toml | ^ - expected `.`, `=` + key with no value, expected `=` "#]]) .run(); diff --git a/tests/testsuite/cargo_add/invalid_manifest/stderr.term.svg b/tests/testsuite/cargo_add/invalid_manifest/stderr.term.svg index 0ebf039fc..f9c867bc7 100644 --- a/tests/testsuite/cargo_add/invalid_manifest/stderr.term.svg +++ b/tests/testsuite/cargo_add/invalid_manifest/stderr.term.svg @@ -1,4 +1,4 @@ - +