⭐️ A friendly language for building type-safe, scalable systems!
1

Configure Feed

Select the types of activity you want to include in your feed.

update the `toml` dependency

and fix failing tests

authored by

Giacomo Cavalieri and committed by
Louis Pilfold
(Aug 27, 2025, 12:18 PM +0100) c1909f1d 0ad674d1

+173 -38
+59 -11
Cargo.lock
··· 882 882 source = "registry+https://github.com/rust-lang/crates.io-index" 883 883 checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" 884 884 dependencies = [ 885 - "toml", 885 + "toml 0.5.11", 886 886 ] 887 887 888 888 [[package]] ··· 1160 1160 "tempfile", 1161 1161 "termcolor", 1162 1162 "tokio", 1163 - "toml", 1163 + "toml 0.9.5", 1164 1164 "toml_edit", 1165 1165 "tracing", 1166 1166 "tracing-subscriber 0.2.25", ··· 1213 1213 "tar", 1214 1214 "termcolor", 1215 1215 "thiserror 1.0.69", 1216 - "toml", 1216 + "toml 0.9.5", 1217 1217 "tracing", 1218 1218 "unicode-segmentation", 1219 1219 "vec1", ··· 1285 1285 1286 1286 [[package]] 1287 1287 name = "hexpm" 1288 - version = "4.1.0" 1288 + version = "4.2.0" 1289 1289 source = "registry+https://github.com/rust-lang/crates.io-index" 1290 - checksum = "4f62182f03cb6894803f78f69dd22720bb9ed5ee6f7e5a64034c67a043e72f81" 1290 + checksum = "a20609f5eaff5bcb81765ccbc70132a67ba03e5e2da78aac9c5ff19049c06122" 1291 1291 dependencies = [ 1292 1292 "base16", 1293 1293 "bytes", ··· 2933 2933 ] 2934 2934 2935 2935 [[package]] 2936 + name = "serde_spanned" 2937 + version = "1.0.0" 2938 + source = "registry+https://github.com/rust-lang/crates.io-index" 2939 + checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" 2940 + dependencies = [ 2941 + "serde", 2942 + ] 2943 + 2944 + [[package]] 2936 2945 name = "serde_urlencoded" 2937 2946 version = "0.7.1" 2938 2947 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3175 3184 "insta", 3176 3185 "itertools", 3177 3186 "regex", 3178 - "toml", 3187 + "toml 0.9.5", 3179 3188 "walkdir", 3180 3189 ] 3181 3190 ··· 3201 3210 "itertools", 3202 3211 "regex", 3203 3212 "test-helpers-rs", 3204 - "toml", 3213 + "toml 0.9.5", 3205 3214 ] 3206 3215 3207 3216 [[package]] ··· 3215 3224 "itertools", 3216 3225 "regex", 3217 3226 "test-helpers-rs", 3218 - "toml", 3227 + "toml 0.9.5", 3219 3228 ] 3220 3229 3221 3230 [[package]] ··· 3360 3369 ] 3361 3370 3362 3371 [[package]] 3372 + name = "toml" 3373 + version = "0.9.5" 3374 + source = "registry+https://github.com/rust-lang/crates.io-index" 3375 + checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" 3376 + dependencies = [ 3377 + "indexmap", 3378 + "serde", 3379 + "serde_spanned", 3380 + "toml_datetime 0.7.0", 3381 + "toml_parser", 3382 + "toml_writer", 3383 + "winnow", 3384 + ] 3385 + 3386 + [[package]] 3363 3387 name = "toml_datetime" 3364 3388 version = "0.6.9" 3365 3389 source = "registry+https://github.com/rust-lang/crates.io-index" 3366 3390 checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" 3367 3391 3368 3392 [[package]] 3393 + name = "toml_datetime" 3394 + version = "0.7.0" 3395 + source = "registry+https://github.com/rust-lang/crates.io-index" 3396 + checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" 3397 + dependencies = [ 3398 + "serde", 3399 + ] 3400 + 3401 + [[package]] 3369 3402 name = "toml_edit" 3370 3403 version = "0.22.26" 3371 3404 source = "registry+https://github.com/rust-lang/crates.io-index" 3372 3405 checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" 3373 3406 dependencies = [ 3374 3407 "indexmap", 3375 - "toml_datetime", 3408 + "toml_datetime 0.6.9", 3376 3409 "toml_write", 3377 3410 "winnow", 3378 3411 ] 3379 3412 3380 3413 [[package]] 3414 + name = "toml_parser" 3415 + version = "1.0.2" 3416 + source = "registry+https://github.com/rust-lang/crates.io-index" 3417 + checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" 3418 + dependencies = [ 3419 + "winnow", 3420 + ] 3421 + 3422 + [[package]] 3381 3423 name = "toml_write" 3382 3424 version = "0.1.1" 3383 3425 source = "registry+https://github.com/rust-lang/crates.io-index" 3384 3426 checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" 3427 + 3428 + [[package]] 3429 + name = "toml_writer" 3430 + version = "1.0.2" 3431 + source = "registry+https://github.com/rust-lang/crates.io-index" 3432 + checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" 3385 3433 3386 3434 [[package]] 3387 3435 name = "tower" ··· 4069 4117 4070 4118 [[package]] 4071 4119 name = "winnow" 4072 - version = "0.7.9" 4120 + version = "0.7.13" 4073 4121 source = "registry+https://github.com/rust-lang/crates.io-index" 4074 - checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" 4122 + checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 4075 4123 dependencies = [ 4076 4124 "memchr", 4077 4125 ]
+55 -24
compiler-core/src/config.rs
··· 52 52 where 53 53 D: serde::Deserializer<'de>, 54 54 { 55 - let s: &str = Deserialize::deserialize(deserializer)?; 56 - match spdx::license_id(s) { 55 + deserializer.deserialize_str(SpdxLicenseVisitor) 56 + } 57 + } 58 + 59 + struct SpdxLicenseVisitor; 60 + 61 + impl<'de> serde::de::Visitor<'de> for SpdxLicenseVisitor { 62 + type Value = SpdxLicense; 63 + 64 + fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { 65 + formatter.write_str("a SPDX License ID") 66 + } 67 + 68 + fn visit_str<E>(self, value: &str) -> Result<Self::Value, E> 69 + where 70 + E: serde::de::Error, 71 + { 72 + match spdx::license_id(value) { 57 73 None => Err(serde::de::Error::custom(format!( 58 - "{s} is not a valid SPDX License ID" 74 + "{value} is not a valid SPDX License ID" 59 75 ))), 60 76 Some(_) => Ok(SpdxLicense { 61 - licence: String::from(s), 77 + licence: value.to_string(), 62 78 }), 63 79 } 64 80 } ··· 341 357 "#; 342 358 let error = deserialise_config("gleam.toml", toml.into()) 343 359 .expect_err("should fail to deserialise because of additional path"); 344 - assert_eq!( 345 - error.to_string(), 346 - r#"Parse "gleam.toml" failed: Some("data did not match any variant of untagged enum Requirement for key `dependencies.aide_generator` at line 6 column 18")"# 347 - ); 360 + 361 + insta::assert_snapshot!(insta::internals::AutoName, error.pretty_string()); 348 362 } 349 363 350 364 #[test] ··· 1032 1046 use ecow::EcoString; 1033 1047 use regex::Regex; 1034 1048 use serde::Deserializer; 1035 - use std::sync::OnceLock; 1049 + use std::{fmt, sync::OnceLock}; 1036 1050 1037 1051 static PACKAGE_NAME_PATTERN: OnceLock<Regex> = OnceLock::new(); 1038 1052 ··· 1040 1054 where 1041 1055 D: Deserializer<'de>, 1042 1056 { 1043 - let name: &str = serde::de::Deserialize::deserialize(deserializer)?; 1044 - if PACKAGE_NAME_PATTERN 1045 - .get_or_init(|| Regex::new("^[a-z][a-z0-9_]*$").expect("Package name regex")) 1046 - .is_match(name) 1057 + deserializer.deserialize_str(NameVisitor) 1058 + } 1059 + 1060 + struct NameVisitor; 1061 + 1062 + impl<'de> serde::de::Visitor<'de> for NameVisitor { 1063 + type Value = EcoString; 1064 + 1065 + fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { 1066 + formatter.write_str("a package name") 1067 + } 1068 + 1069 + fn visit_str<E>(self, value: &str) -> Result<Self::Value, E> 1070 + where 1071 + E: serde::de::Error, 1047 1072 { 1048 - Ok(name.into()) 1049 - } else { 1050 - let error = 1051 - "Package names may only contain lowercase letters, numbers, and underscores"; 1052 - Err(serde::de::Error::custom(error)) 1073 + if PACKAGE_NAME_PATTERN 1074 + .get_or_init(|| Regex::new("^[a-z][a-z0-9_]*$").expect("Package name regex")) 1075 + .is_match(value) 1076 + { 1077 + Ok(value.into()) 1078 + } else { 1079 + let error = 1080 + "Package names may only contain lowercase letters, numbers, and underscores"; 1081 + Err(serde::de::Error::custom(error)) 1082 + } 1053 1083 } 1054 1084 } 1055 1085 } ··· 1059 1089 let input = r#" 1060 1090 name = "one-two" 1061 1091 "#; 1062 - assert_eq!( 1092 + 1093 + insta::assert_snapshot!( 1094 + insta::internals::AutoName, 1063 1095 toml::from_str::<PackageConfig>(input) 1064 1096 .unwrap_err() 1065 - .to_string(), 1066 - "Package names may only contain lowercase letters, numbers, and underscores for key `name` at line 1 column 1" 1067 - ) 1097 + .to_string() 1098 + ); 1068 1099 } 1069 1100 1070 1101 #[test] ··· 1072 1103 let input = r#" 1073 1104 name = "1" 1074 1105 "#; 1075 - assert_eq!( 1106 + insta::assert_snapshot!( 1107 + insta::internals::AutoName, 1076 1108 toml::from_str::<PackageConfig>(input) 1077 1109 .unwrap_err() 1078 1110 .to_string(), 1079 - "Package names may only contain lowercase letters, numbers, and underscores for key `name` at line 1 column 1" 1080 1111 ) 1081 1112 } 1082 1113
+19 -2
compiler-core/src/manifest.rs
··· 1 1 use std::collections::HashMap; 2 + use std::fmt; 2 3 3 4 use crate::Result; 4 5 use crate::io::{make_relative, ordered_map}; ··· 138 139 where 139 140 D: serde::Deserializer<'de>, 140 141 { 141 - let s: &str = serde::de::Deserialize::deserialize(deserializer)?; 142 - base16::decode(s) 142 + deserializer.deserialize_str(Base16ChecksumVisitor) 143 + } 144 + } 145 + 146 + struct Base16ChecksumVisitor; 147 + 148 + impl<'de> serde::de::Visitor<'de> for Base16ChecksumVisitor { 149 + type Value = Base16Checksum; 150 + 151 + fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { 152 + formatter.write_str("a base 16 checksum") 153 + } 154 + 155 + fn visit_str<E>(self, value: &str) -> Result<Self::Value, E> 156 + where 157 + E: serde::de::Error, 158 + { 159 + base16::decode(value) 143 160 .map(Base16Checksum) 144 161 .map_err(serde::de::Error::custom) 145 162 }
+17
compiler-core/src/snapshots/gleam_core__config__deny_extra_deps_properties.snap
··· 1 + --- 2 + source: compiler-core/src/config.rs 3 + expression: error.pretty_string() 4 + --- 5 + error: File IO failure 6 + 7 + An error occurred while trying to parse this file: 8 + 9 + gleam.toml 10 + 11 + The error message from the file IO library was: 12 + 13 + TOML parse error at line 6, column 18 14 + | 15 + 6 | aide_generator = { git = "git@github.com:crowdhailer/aide.git", ref = "f559c5bc", extra = "idk what this is" } 16 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 17 + data did not match any variant of untagged enum Requirement
+9
compiler-core/src/snapshots/gleam_core__config__name_with_dash.snap
··· 1 + --- 2 + source: compiler-core/src/config.rs 3 + expression: "toml::from_str::<PackageConfig>(input).unwrap_err().to_string()" 4 + --- 5 + TOML parse error at line 2, column 8 6 + | 7 + 2 | name = "one-two" 8 + | ^^^^^^^^^ 9 + Package names may only contain lowercase letters, numbers, and underscores
+9
compiler-core/src/snapshots/gleam_core__config__name_with_number_start.snap
··· 1 + --- 2 + source: compiler-core/src/config.rs 3 + expression: "toml::from_str::<PackageConfig>(input).unwrap_err().to_string()" 4 + --- 5 + TOML parse error at line 2, column 8 6 + | 7 + 2 | name = "1" 8 + | ^^^ 9 + Package names may only contain lowercase letters, numbers, and underscores
+5 -1
compiler-core/src/snapshots/gleam_core__requirement__tests__read_wrong_version.snap
··· 2 2 source: compiler-core/src/requirement.rs 3 3 expression: error.to_string() 4 4 --- 5 - >= 2.0 and < 3.0.0 is not a valid version. missing patch version: 2.0 for key `short` at line 2 column 21 5 + TOML parse error at line 2, column 21 6 + | 7 + 2 | short = ">= 2.0 and < 3.0.0" 8 + | ^^^^^^^^^^^^^^^^^^^^ 9 + >= 2.0 and < 3.0.0 is not a valid version. missing patch version: 2.0