From dd798aaf29dddce8f21e222ab5c1900b2c4df2af Mon Sep 17 00:00:00 2001 From: Erich Gubler Date: Mon, 5 Aug 2024 17:39:05 -0400 Subject: [PATCH] fix: allow hyphens in `tags` props. --- moz-webgpu-cts/src/wpt/metadata.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/moz-webgpu-cts/src/wpt/metadata.rs b/moz-webgpu-cts/src/wpt/metadata.rs index 16d4235..28a438b 100644 --- a/moz-webgpu-cts/src/wpt/metadata.rs +++ b/moz-webgpu-cts/src/wpt/metadata.rs @@ -181,11 +181,34 @@ fn tags_parser<'a, T>( helper: &mut PropertiesParseHelper<'a>, conditional_term: impl Parser<'a, &'a str, T, ParseError<'a>>, ) -> impl Parser<'a, &'a str, PropertyValue>, ParseError<'a>> { + use crate::chumsky::{error::Error, util::MaybeRef}; + + let tag_ident = { + let underscore_or_hyphen = |c| matches!(c, '_' | '-'); + any::<'a, &'a str, ParseError<'a>>() + .try_map(move |c: char, span| { + if c.is_ascii_alphabetic() || underscore_or_hyphen(c) { + Ok(c) + } else { + Err(Error::<&'a str>::expected_found( + [], + Some(MaybeRef::Val(c)), + span, + )) + } + }) + .then( + any() + .filter(move |c: &char| c.is_ascii_alphanumeric() || underscore_or_hyphen(*c)) + .repeated(), + ) + .to_slice() + }; helper .parser( keyword("tags").to(()), conditional_term, - ascii::ident() + tag_ident .map(|i: &str| i.to_owned()) .separated_by(just(',').padded_by(inline_whitespace())) .collect()