@@ -248,6 +248,22 @@ mod tests {
248248 assert_eq ! ( actual, expected) ;
249249 }
250250
251+ fn assert_extract_candidates_contains ( input : & str , expected : Vec < & str > ) {
252+ let actual = extract_sorted_candidates ( input) ;
253+
254+ let mut missing = vec ! [ ] ;
255+ for item in & expected {
256+ if !actual. contains ( item) {
257+ missing. push ( item) ;
258+ }
259+ }
260+
261+ if !missing. is_empty ( ) {
262+ dbg ! ( & actual, & missing) ;
263+ panic ! ( "Missing some items" ) ;
264+ }
265+ }
266+
251267 fn assert_extract_sorted_css_variables ( input : & str , expected : Vec < & str > ) {
252268 let actual = extract_sorted_css_variables ( input) ;
253269
@@ -311,6 +327,7 @@ mod tests {
311327 (
312328 r#"<div class="flex items-center px-2.5 bg-[#0088cc] text-(--my-color)"></div>"# ,
313329 vec ! [
330+ "class" ,
314331 "flex" ,
315332 "items-center" ,
316333 "px-2.5" ,
@@ -363,7 +380,7 @@ mod tests {
363380 ( "{ underline: true }" , vec ! [ "underline" , "true" ] ) ,
364381 (
365382 r#" <CheckIcon className={clsx('h-4 w-4', { invisible: index !== 0 })} />"# ,
366- vec ! [ "h-4" , "w-4" , "invisible" , "index" ] ,
383+ vec ! [ "className" , " h-4", "w-4" , "invisible" , "index" ] ,
367384 ) ,
368385 // You can have variants but in a string. Vue example.
369386 (
@@ -480,13 +497,16 @@ mod tests {
480497 //
481498 // HTML
482499 // Inside a class (on its own)
483- ( r#"<div class="{}"></div>"# , vec ! [ ] ) ,
500+ ( r#"<div class="{}"></div>"# , vec ! [ "class" ] ) ,
484501 // Inside a class (first)
485- ( r#"<div class="{} foo"></div>"# , vec ! [ "foo" ] ) ,
502+ ( r#"<div class="{} foo"></div>"# , vec ! [ "class" , " foo"] ) ,
486503 // Inside a class (second)
487- ( r#"<div class="foo {}"></div>"# , vec ! [ "foo" ] ) ,
504+ ( r#"<div class="foo {}"></div>"# , vec ! [ "class" , " foo"] ) ,
488505 // Inside a class (surrounded)
489- ( r#"<div class="foo {} bar"></div>"# , vec ! [ "foo" , "bar" ] ) ,
506+ (
507+ r#"<div class="foo {} bar"></div>"# ,
508+ vec ! [ "class" , "foo" , "bar" ] ,
509+ ) ,
490510 // --------------------------
491511 //
492512 // JavaScript
@@ -590,7 +610,7 @@ mod tests {
590610 // Quoted attribute
591611 (
592612 r#"input(type="checkbox" class="px-2.5")"# ,
593- vec ! [ "checkbox" , "px-2.5" ] ,
613+ vec ! [ "checkbox" , "class" , " px-2.5"] ,
594614 ) ,
595615 ] {
596616 assert_extract_sorted_candidates ( & pre_process_input ( input, "pug" ) , expected) ;
@@ -611,7 +631,7 @@ mod tests {
611631 vec ! [ "bg-blue-100" , "2xl:bg-red-100" ] ,
612632 ) ,
613633 // Quoted attribute
614- ( r#"div class="px-2.5""# , vec ! [ "div" , "px-2.5" ] ) ,
634+ ( r#"div class="px-2.5""# , vec ! [ "div" , "class" , " px-2.5"] ) ,
615635 ] {
616636 assert_extract_sorted_candidates ( & pre_process_input ( input, "slim" ) , expected) ;
617637 }
@@ -831,6 +851,25 @@ mod tests {
831851 & pre_process_input ( r#"<div class:px-4='condition'></div>"# , "svelte" ) ,
832852 vec ! [ "class" , "px-4" , "condition" ] ,
833853 ) ;
854+ assert_extract_sorted_candidates (
855+ & pre_process_input ( r#"<div class:flex='condition'></div>"# , "svelte" ) ,
856+ vec ! [ "class" , "flex" , "condition" ] ,
857+ ) ;
858+ }
859+
860+ // https://github.com/tailwindlabs/tailwindcss/issues/16999
861+ #[ test]
862+ fn test_twig_syntax ( ) {
863+ assert_extract_candidates_contains (
864+ r#"<div class="flex items-center mx-4{% if session.isValid %}{% else %} h-4{% endif %}"></div>"# ,
865+ vec ! [ "flex" , "items-center" , "mx-4" , "h-4" ] ,
866+ ) ;
867+
868+ // With touching both `}` and `{`
869+ assert_extract_candidates_contains (
870+ r#"<div class="{% if true %}flex{% else %}block{% endif %}">"# ,
871+ vec ! [ "flex" , "block" ] ,
872+ ) ;
834873 }
835874
836875 // https://github.com/tailwindlabs/tailwindcss/issues/16982
@@ -839,6 +878,7 @@ mod tests {
839878 assert_extract_sorted_candidates (
840879 r#"<div class="@md:flex @max-md:flex @-[36rem]:flex @[36rem]:flex"></div>"# ,
841880 vec ! [
881+ "class" ,
842882 "@md:flex" ,
843883 "@max-md:flex" ,
844884 "@-[36rem]:flex" ,
@@ -852,7 +892,7 @@ mod tests {
852892 fn test_classes_containing_number_followed_by_dash_or_underscore ( ) {
853893 assert_extract_sorted_candidates (
854894 r#"<div class="text-Title1_Strong"></div>"# ,
855- vec ! [ "text-Title1_Strong" ] ,
895+ vec ! [ "class" , " text-Title1_Strong"] ,
856896 ) ;
857897 }
858898
@@ -861,7 +901,11 @@ mod tests {
861901 fn test_arbitrary_variable_with_data_type ( ) {
862902 assert_extract_sorted_candidates (
863903 r#"<div class="bg-(length:--my-length) bg-[color:var(--my-color)]"></div>"# ,
864- vec ! [ "bg-(length:--my-length)" , "bg-[color:var(--my-color)]" ] ,
904+ vec ! [
905+ "class" ,
906+ "bg-(length:--my-length)" ,
907+ "bg-[color:var(--my-color)]" ,
908+ ] ,
865909 ) ;
866910 }
867911
0 commit comments