diff --git a/src/serde_tokenstream.rs b/src/serde_tokenstream.rs index ee3dc33..9a88c11 100644 --- a/src/serde_tokenstream.rs +++ b/src/serde_tokenstream.rs @@ -1083,22 +1083,13 @@ impl<'de> Deserializer<'de> for &mut TokenDe { // TODO format a spanned error of some sort let mut token = match &next { None => { - return self.deserialize_error( - next, - "anything but a ',', '=', or EOF", - ); + return self.deserialize_error(next, "a value"); } Some(TokenTree::Punct(punct)) if punct.as_char() == ',' => { - return self.deserialize_error( - next, - "anything but a ',', '=', or EOF", - ); + return self.deserialize_error(next, "a value"); } Some(TokenTree::Punct(punct)) if punct.as_char() == '=' => { - return self.deserialize_error( - next, - "anything but a ',', '=', or EOF", - ); + return self.deserialize_error(next, "a value"); } Some(token) => token.clone(), }; diff --git a/ui-tests/tests/ui/bad_parse_wrapper_missing.rs b/ui-tests/tests/ui/bad_parse_wrapper_missing.rs new file mode 100644 index 0000000..92cdc8d --- /dev/null +++ b/ui-tests/tests/ui/bad_parse_wrapper_missing.rs @@ -0,0 +1,17 @@ +// Copyright 2026 Oxide Computer Company + +// A ParseWrapper value that is missing before a `,` must be reported as a +// missing value at the `,`. + +use testlib::annotation; + +#[annotation { + string = "test", + options = OptionA, + unit = (), + tup = (1, 2.0), + bool_expr = , +}] +fn test() {} + +fn main() {} diff --git a/ui-tests/tests/ui/bad_parse_wrapper_missing.stderr b/ui-tests/tests/ui/bad_parse_wrapper_missing.stderr new file mode 100644 index 0000000..1dea786 --- /dev/null +++ b/ui-tests/tests/ui/bad_parse_wrapper_missing.stderr @@ -0,0 +1,5 @@ +error: expected a value, but found `,` + --> tests/ui/bad_parse_wrapper_missing.rs:13:17 + | +13 | bool_expr = , + | ^ diff --git a/ui-tests/tests/ui/bad_parse_wrapper_missing_eof.rs b/ui-tests/tests/ui/bad_parse_wrapper_missing_eof.rs new file mode 100644 index 0000000..e30dde0 --- /dev/null +++ b/ui-tests/tests/ui/bad_parse_wrapper_missing_eof.rs @@ -0,0 +1,17 @@ +// Copyright 2026 Oxide Computer Company + +// A ParseWrapper value that is missing at the end of the input must be reported +// as a missing value at the `=`. + +use testlib::annotation; + +#[annotation { + string = "test", + options = OptionA, + unit = (), + tup = (1, 2.0), + bool_expr = +}] +fn test() {} + +fn main() {} diff --git a/ui-tests/tests/ui/bad_parse_wrapper_missing_eof.stderr b/ui-tests/tests/ui/bad_parse_wrapper_missing_eof.stderr new file mode 100644 index 0000000..f995eab --- /dev/null +++ b/ui-tests/tests/ui/bad_parse_wrapper_missing_eof.stderr @@ -0,0 +1,5 @@ +error: expected a value following `=` + --> tests/ui/bad_parse_wrapper_missing_eof.rs:13:15 + | +13 | bool_expr = + | ^