@@ -59,7 +59,7 @@ test('class regex works in astro', async ({ expect }) => {
59
59
test ( 'find class lists in functions' , async ( { expect } ) => {
60
60
let fileA = createDocument ( {
61
61
name : 'file.jsx' ,
62
- lang : 'javascript ' ,
62
+ lang : 'javascriptreact ' ,
63
63
settings : {
64
64
tailwindCSS : {
65
65
classFunctions : [ 'clsx' , 'cva' ] ,
@@ -84,7 +84,7 @@ test('find class lists in functions', async ({ expect }) => {
84
84
85
85
let fileB = createDocument ( {
86
86
name : 'file.jsx' ,
87
- lang : 'javascript ' ,
87
+ lang : 'javascriptreact ' ,
88
88
settings : {
89
89
tailwindCSS : {
90
90
classFunctions : [ 'clsx' , 'cva' ] ,
@@ -171,7 +171,7 @@ test('find class lists in functions', async ({ expect }) => {
171
171
test ( 'find class lists in nested fn calls' , async ( { expect } ) => {
172
172
let fileA = createDocument ( {
173
173
name : 'file.jsx' ,
174
- lang : 'javascript ' ,
174
+ lang : 'javascriptreact ' ,
175
175
settings : {
176
176
tailwindCSS : {
177
177
classFunctions : [ 'clsx' , 'cva' ] ,
@@ -303,7 +303,7 @@ test('find class lists in nested fn calls', async ({ expect }) => {
303
303
test ( 'find class lists in nested fn calls (only nested matches)' , async ( { expect } ) => {
304
304
let fileA = createDocument ( {
305
305
name : 'file.jsx' ,
306
- lang : 'javascript ' ,
306
+ lang : 'javascriptreact ' ,
307
307
settings : {
308
308
tailwindCSS : {
309
309
classFunctions : [ 'clsx' , 'cva' ] ,
@@ -350,7 +350,7 @@ test('find class lists in nested fn calls (only nested matches)', async ({ expec
350
350
test ( 'find class lists in tagged template literals' , async ( { expect } ) => {
351
351
let fileA = createDocument ( {
352
352
name : 'file.jsx' ,
353
- lang : 'javascript ' ,
353
+ lang : 'javascriptreact ' ,
354
354
settings : {
355
355
tailwindCSS : {
356
356
classFunctions : [ 'clsx' , 'cva' ] ,
@@ -375,7 +375,7 @@ test('find class lists in tagged template literals', async ({ expect }) => {
375
375
376
376
let fileB = createDocument ( {
377
377
name : 'file.jsx' ,
378
- lang : 'javascript ' ,
378
+ lang : 'javascriptreact ' ,
379
379
settings : {
380
380
tailwindCSS : {
381
381
classFunctions : [ 'clsx' , 'cva' ] ,
@@ -445,6 +445,71 @@ test('find class lists in tagged template literals', async ({ expect }) => {
445
445
expect ( classListsB ) . toEqual ( [ ] )
446
446
} )
447
447
448
+ test ( 'classFunctions can be a regex' , async ( { expect } ) => {
449
+ let fileA = createDocument ( {
450
+ name : 'file.jsx' ,
451
+ lang : 'javascriptreact' ,
452
+ settings : {
453
+ tailwindCSS : {
454
+ classFunctions : [ 'tw\\.[a-z]+' ] ,
455
+ } ,
456
+ } ,
457
+ content : js `
458
+ let classes = tw.div('flex p-4')
459
+ ` ,
460
+ } )
461
+
462
+ let fileB = createDocument ( {
463
+ name : 'file.jsx' ,
464
+ lang : 'javascriptreact' ,
465
+ settings : {
466
+ tailwindCSS : {
467
+ classFunctions : [ 'tw\\.[a-z]+' ] ,
468
+ } ,
469
+ } ,
470
+ content : js `
471
+ let classes = tw.div.foo('flex p-4')
472
+ ` ,
473
+ } )
474
+
475
+ let classListsA = await findClassListsInHtmlRange ( fileA . state , fileA . doc , 'js' )
476
+ let classListsB = await findClassListsInHtmlRange ( fileB . state , fileB . doc , 'js' )
477
+
478
+ expect ( classListsA ) . toEqual ( [
479
+ {
480
+ classList : 'flex p-4' ,
481
+ range : {
482
+ start : { line : 0 , character : 22 } ,
483
+ end : { line : 0 , character : 30 } ,
484
+ } ,
485
+ } ,
486
+ ] )
487
+
488
+ // none from tw.div.foo(`…`) since it does not match a class function
489
+ expect ( classListsB ) . toEqual ( [ ] )
490
+ } )
491
+
492
+ test ( 'classFunctions regexes only match on function names' , async ( { expect } ) => {
493
+ let fileA = createDocument ( {
494
+ name : 'file.jsx' ,
495
+ lang : 'javascriptreact' ,
496
+ settings : {
497
+ tailwindCSS : {
498
+ // A function name itself cannot contain a `:`
499
+ classFunctions : [ ':\\s*tw\\.[a-z]+' ] ,
500
+ } ,
501
+ } ,
502
+ content : js `
503
+ let classes = tw.div('flex p-4')
504
+ let classes = { foo: tw.div('flex p-4') }
505
+ ` ,
506
+ } )
507
+
508
+ let classListsA = await findClassListsInHtmlRange ( fileA . state , fileA . doc , 'js' )
509
+
510
+ expect ( classListsA ) . toEqual ( [ ] )
511
+ } )
512
+
448
513
function createDocument ( {
449
514
name,
450
515
lang,
0 commit comments