Skip to content

Commit

Permalink
Support group-data arbitrary and wildcard modifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
Oyelowo committed Jan 17, 2025
1 parent 6007eb6 commit d1f7c89
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions twust-macro/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ fn get_classes_straight() -> HashSet<String> {
}

fn is_valid_classname(class_name: &str) -> bool {
get_classes_straight().contains(&class_name.to_string())
get_classes_straight().contains(class_name)
}

fn is_valid_modifier(modifier: &str) -> bool {
Expand Down Expand Up @@ -616,13 +616,16 @@ fn supports_arbitrary(input: &str) -> IResult<&str, ()> {

// aria-[sort=ascending]:bg-[url('/img/down-arrow.svg')]
// aria-[sort=descending]:bg-[url('/img/up-arrow.svg')]
fn aria_arbitrary(input: &str) -> IResult<&str, ()> {
// group-data-[selected=Right]:w-[30px]
// group-aria-[main-page=false]/main:hidden / group-data-[main-page=false]/main:hidden
fn aria_or_data_arbitrary(input: &str) -> IResult<&str, ()> {
let (input, _) = opt(tag("group-"))(input)?;
let (input, _) = tag("aria-[")(input)?;
let (input, _) = alt((tag("aria-["), tag("data-[")))(input)?;
let (input, _) = take_while1(is_ident_char)(input)?;
let (input, _) = tag("=")(input)?;
let (input, _) = take_while1(is_ident_char)(input)?;
let (input, _) = tag("]")(input)?;
let (input, _) = opt(tuple((tag("/"), take_while1(is_ident_char))))(input)?;
Ok((input, ()))
}

Expand All @@ -645,6 +648,12 @@ fn min_max_arbitrary_modifier(input: &str) -> IResult<&str, ()> {
Ok((input, ()))
}

// *:overflow-scroll
fn wildcard_modifier(input: &str) -> IResult<&str, ()> {
let (input, _) = tag("*")(input)?;
Ok((input, ()))
}

fn modifier(input: &str) -> IResult<&str, ()> {
alt((
group_modifier_selector,
Expand All @@ -656,9 +665,10 @@ fn modifier(input: &str) -> IResult<&str, ()> {
arbitrary_at_media_rule_modifier,
predefined_modifier,
supports_arbitrary,
aria_arbitrary,
aria_or_data_arbitrary,
data_arbitrary,
min_max_arbitrary_modifier,
wildcard_modifier,
))(input)
}

Expand Down Expand Up @@ -723,6 +733,11 @@ fn parse_top(input: &str) -> IResult<&str, Vec<&str>> {
all_consuming(parse_class_names)(input)
}

#[test]
fn test_group_attr_arbitrary2() {
assert_eq!(parse_top("group-data-[selected=Right]"), Ok(("", vec![])));
}

#[proc_macro]
pub fn tw(raw_input: TokenStream) -> TokenStream {
let r_input = raw_input.clone();
Expand Down

0 comments on commit d1f7c89

Please sign in to comment.