@@ -248,6 +248,22 @@ mod tests {
248
248
assert_eq ! ( actual, expected) ;
249
249
}
250
250
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
+
251
267
fn assert_extract_sorted_css_variables ( input : & str , expected : Vec < & str > ) {
252
268
let actual = extract_sorted_css_variables ( input) ;
253
269
@@ -311,6 +327,7 @@ mod tests {
311
327
(
312
328
r#"<div class="flex items-center px-2.5 bg-[#0088cc] text-(--my-color)"></div>"# ,
313
329
vec ! [
330
+ "class" ,
314
331
"flex" ,
315
332
"items-center" ,
316
333
"px-2.5" ,
@@ -363,7 +380,7 @@ mod tests {
363
380
( "{ underline: true }" , vec ! [ "underline" , "true" ] ) ,
364
381
(
365
382
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" ] ,
367
384
) ,
368
385
// You can have variants but in a string. Vue example.
369
386
(
@@ -480,13 +497,16 @@ mod tests {
480
497
//
481
498
// HTML
482
499
// Inside a class (on its own)
483
- ( r#"<div class="{}"></div>"# , vec ! [ ] ) ,
500
+ ( r#"<div class="{}"></div>"# , vec ! [ "class" ] ) ,
484
501
// Inside a class (first)
485
- ( r#"<div class="{} foo"></div>"# , vec ! [ "foo" ] ) ,
502
+ ( r#"<div class="{} foo"></div>"# , vec ! [ "class" , " foo"] ) ,
486
503
// Inside a class (second)
487
- ( r#"<div class="foo {}"></div>"# , vec ! [ "foo" ] ) ,
504
+ ( r#"<div class="foo {}"></div>"# , vec ! [ "class" , " foo"] ) ,
488
505
// 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
+ ) ,
490
510
// --------------------------
491
511
//
492
512
// JavaScript
@@ -590,7 +610,7 @@ mod tests {
590
610
// Quoted attribute
591
611
(
592
612
r#"input(type="checkbox" class="px-2.5")"# ,
593
- vec ! [ "checkbox" , "px-2.5" ] ,
613
+ vec ! [ "checkbox" , "class" , " px-2.5"] ,
594
614
) ,
595
615
] {
596
616
assert_extract_sorted_candidates ( & pre_process_input ( input, "pug" ) , expected) ;
@@ -611,7 +631,7 @@ mod tests {
611
631
vec ! [ "bg-blue-100" , "2xl:bg-red-100" ] ,
612
632
) ,
613
633
// 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"] ) ,
615
635
] {
616
636
assert_extract_sorted_candidates ( & pre_process_input ( input, "slim" ) , expected) ;
617
637
}
@@ -831,6 +851,25 @@ mod tests {
831
851
& pre_process_input ( r#"<div class:px-4='condition'></div>"# , "svelte" ) ,
832
852
vec ! [ "class" , "px-4" , "condition" ] ,
833
853
) ;
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
+ ) ;
834
873
}
835
874
836
875
// https://github.com/tailwindlabs/tailwindcss/issues/16982
@@ -839,6 +878,7 @@ mod tests {
839
878
assert_extract_sorted_candidates (
840
879
r#"<div class="@md:flex @max-md:flex @-[36rem]:flex @[36rem]:flex"></div>"# ,
841
880
vec ! [
881
+ "class" ,
842
882
"@md:flex" ,
843
883
"@max-md:flex" ,
844
884
"@-[36rem]:flex" ,
@@ -852,7 +892,7 @@ mod tests {
852
892
fn test_classes_containing_number_followed_by_dash_or_underscore ( ) {
853
893
assert_extract_sorted_candidates (
854
894
r#"<div class="text-Title1_Strong"></div>"# ,
855
- vec ! [ "text-Title1_Strong" ] ,
895
+ vec ! [ "class" , " text-Title1_Strong"] ,
856
896
) ;
857
897
}
858
898
@@ -861,7 +901,11 @@ mod tests {
861
901
fn test_arbitrary_variable_with_data_type ( ) {
862
902
assert_extract_sorted_candidates (
863
903
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
+ ] ,
865
909
) ;
866
910
}
867
911
0 commit comments