Skip to content

Commit c1909f1

Browse files
giacomocavalierilpil
authored andcommitted
update the toml dependency
and fix failing tests
1 parent 0ad674d commit c1909f1

7 files changed

+173
-38
lines changed

Cargo.lock

Lines changed: 59 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler-core/src/config.rs

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,29 @@ impl<'de> Deserialize<'de> for SpdxLicense {
5252
where
5353
D: serde::Deserializer<'de>,
5454
{
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) {
5773
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"
5975
))),
6076
Some(_) => Ok(SpdxLicense {
61-
licence: String::from(s),
77+
licence: value.to_string(),
6278
}),
6379
}
6480
}
@@ -341,10 +357,8 @@ aide_generator = { git = "[email protected]:crowdhailer/aide.git", ref = "f559c5bc"
341357
"#;
342358
let error = deserialise_config("gleam.toml", toml.into())
343359
.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());
348362
}
349363

350364
#[test]
@@ -1032,24 +1046,40 @@ mod package_name {
10321046
use ecow::EcoString;
10331047
use regex::Regex;
10341048
use serde::Deserializer;
1035-
use std::sync::OnceLock;
1049+
use std::{fmt, sync::OnceLock};
10361050

10371051
static PACKAGE_NAME_PATTERN: OnceLock<Regex> = OnceLock::new();
10381052

10391053
pub fn deserialize<'de, D>(deserializer: D) -> Result<EcoString, D::Error>
10401054
where
10411055
D: Deserializer<'de>,
10421056
{
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,
10471072
{
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+
}
10531083
}
10541084
}
10551085
}
@@ -1059,24 +1089,25 @@ fn name_with_dash() {
10591089
let input = r#"
10601090
name = "one-two"
10611091
"#;
1062-
assert_eq!(
1092+
1093+
insta::assert_snapshot!(
1094+
insta::internals::AutoName,
10631095
toml::from_str::<PackageConfig>(input)
10641096
.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+
);
10681099
}
10691100

10701101
#[test]
10711102
fn name_with_number_start() {
10721103
let input = r#"
10731104
name = "1"
10741105
"#;
1075-
assert_eq!(
1106+
insta::assert_snapshot!(
1107+
insta::internals::AutoName,
10761108
toml::from_str::<PackageConfig>(input)
10771109
.unwrap_err()
10781110
.to_string(),
1079-
"Package names may only contain lowercase letters, numbers, and underscores for key `name` at line 1 column 1"
10801111
)
10811112
}
10821113

compiler-core/src/manifest.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::collections::HashMap;
2+
use std::fmt;
23

34
use crate::Result;
45
use crate::io::{make_relative, ordered_map};
@@ -138,8 +139,24 @@ impl<'de> serde::Deserialize<'de> for Base16Checksum {
138139
where
139140
D: serde::Deserializer<'de>,
140141
{
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)
143160
.map(Base16Checksum)
144161
.map_err(serde::de::Error::custom)
145162
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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 = "[email protected]:crowdhailer/aide.git", ref = "f559c5bc", extra = "idk what this is" }
16+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17+
data did not match any variant of untagged enum Requirement
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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

compiler-core/src/snapshots/gleam_core__requirement__tests__read_wrong_version.snap

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@
22
source: compiler-core/src/requirement.rs
33
expression: error.to_string()
44
---
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

0 commit comments

Comments
 (0)