@@ -914,6 +914,9 @@ test('Can find helper functions in CSS', async ({ expect }) => {
914
914
.a { color: from-config(theme(foo / 0.5, default)); }
915
915
.a { color: from-config(theme("foo" / 0.5)); }
916
916
.a { color: from-config(theme("foo" / 0.5, default)); }
917
+
918
+ /* nested helpers */
919
+ .a { color: config(theme(foo)); }
917
920
` ,
918
921
} )
919
922
@@ -962,89 +965,132 @@ test('Can find helper functions in CSS', async ({ expect }) => {
962
965
} ,
963
966
964
967
// Nested
965
- {
966
- helper : 'config' ,
967
- path : 'theme(foo)' ,
968
- ranges : { full : range ( 11 , 30 , 11 , 40 ) , path : range ( 11 , 30 , 11 , 40 ) } ,
969
- } ,
970
968
{
971
969
helper : 'theme' ,
972
970
path : 'foo' ,
973
971
ranges : { full : range ( 11 , 36 , 11 , 39 ) , path : range ( 11 , 36 , 11 , 39 ) } ,
974
972
} ,
975
- {
976
- helper : 'config' ,
977
- path : 'theme(foo, default)' ,
978
- ranges : { full : range ( 12 , 30 , 12 , 49 ) , path : range ( 12 , 30 , 12 , 49 ) } ,
979
- } ,
980
973
{
981
974
helper : 'theme' ,
982
975
path : 'foo' ,
983
976
ranges : { full : range ( 12 , 36 , 12 , 48 ) , path : range ( 12 , 36 , 12 , 39 ) } ,
984
977
} ,
985
978
{
986
- helper : 'config ' ,
987
- path : 'theme(" foo") ' ,
988
- ranges : { full : range ( 13 , 30 , 13 , 42 ) , path : range ( 13 , 30 , 13 , 42 ) } ,
979
+ helper : 'theme ' ,
980
+ path : 'foo' ,
981
+ ranges : { full : range ( 13 , 36 , 13 , 41 ) , path : range ( 13 , 37 , 13 , 40 ) } ,
989
982
} ,
990
983
{
991
984
helper : 'theme' ,
992
985
path : 'foo' ,
993
- ranges : { full : range ( 13 , 36 , 13 , 41 ) , path : range ( 13 , 37 , 13 , 40 ) } ,
986
+ ranges : { full : range ( 14 , 36 , 14 , 50 ) , path : range ( 14 , 37 , 14 , 40 ) } ,
994
987
} ,
995
988
{
996
- helper : 'config ' ,
997
- path : 'theme(" foo", default) ' ,
998
- ranges : { full : range ( 14 , 30 , 14 , 51 ) , path : range ( 14 , 30 , 14 , 51 ) } ,
989
+ helper : 'theme ' ,
990
+ path : 'foo' ,
991
+ ranges : { full : range ( 15 , 36 , 15 , 45 ) , path : range ( 15 , 36 , 15 , 39 ) } ,
999
992
} ,
1000
993
{
1001
994
helper : 'theme' ,
1002
995
path : 'foo' ,
1003
- ranges : { full : range ( 14 , 36 , 14 , 50 ) , path : range ( 14 , 37 , 14 , 40 ) } ,
996
+ ranges : { full : range ( 16 , 36 , 16 , 54 ) , path : range ( 16 , 36 , 16 , 39 ) } ,
1004
997
} ,
1005
998
{
1006
- helper : 'config ' ,
1007
- path : 'theme( foo / 0.5) ' ,
1008
- ranges : { full : range ( 15 , 30 , 15 , 46 ) , path : range ( 15 , 30 , 15 , 46 ) } ,
999
+ helper : 'theme ' ,
1000
+ path : 'foo' ,
1001
+ ranges : { full : range ( 17 , 36 , 17 , 47 ) , path : range ( 17 , 37 , 17 , 40 ) } ,
1009
1002
} ,
1010
1003
{
1011
1004
helper : 'theme' ,
1012
1005
path : 'foo' ,
1013
- ranges : { full : range ( 15 , 36 , 15 , 45 ) , path : range ( 15 , 36 , 15 , 39 ) } ,
1006
+ ranges : { full : range ( 18 , 36 , 18 , 56 ) , path : range ( 18 , 37 , 18 , 40 ) } ,
1014
1007
} ,
1008
+
1009
+ // Nested helpers
1015
1010
{
1016
1011
helper : 'config' ,
1017
- path : 'theme(foo / 0.5, default )' ,
1018
- ranges : { full : range ( 16 , 30 , 16 , 55 ) , path : range ( 16 , 30 , 16 , 55 ) } ,
1012
+ path : 'theme(foo)' ,
1013
+ ranges : { full : range ( 21 , 25 , 21 , 35 ) , path : range ( 21 , 25 , 21 , 35 ) } ,
1019
1014
} ,
1020
1015
{
1021
1016
helper : 'theme' ,
1022
1017
path : 'foo' ,
1023
- ranges : { full : range ( 16 , 36 , 16 , 54 ) , path : range ( 16 , 36 , 16 , 39 ) } ,
1018
+ ranges : { full : range ( 21 , 31 , 21 , 34 ) , path : range ( 21 , 31 , 21 , 34 ) } ,
1024
1019
} ,
1025
- {
1026
- helper : 'config' ,
1027
- path : 'theme("foo" / 0.5)' ,
1028
- ranges : { full : range ( 17 , 30 , 17 , 48 ) , path : range ( 17 , 30 , 17 , 48 ) } ,
1020
+ ] )
1021
+ } )
1022
+
1023
+ test ( 'Helper functions can start with --' , async ( { expect } ) => {
1024
+ let file = createDocument ( {
1025
+ name : 'file.css' ,
1026
+ lang : 'css' ,
1027
+ settings : {
1028
+ tailwindCSS : {
1029
+ classFunctions : [ 'clsx' ] ,
1030
+ } ,
1029
1031
} ,
1032
+ content : `
1033
+ .a { color: --theme(foo); }
1034
+ .a { color: --theme(--theme(foo)); }
1035
+ ` ,
1036
+ } )
1037
+
1038
+ let fns = findHelperFunctionsInDocument ( file . state , file . doc )
1039
+
1040
+ expect ( fns ) . toEqual ( [
1030
1041
{
1031
1042
helper : 'theme' ,
1032
1043
path : 'foo' ,
1033
- ranges : { full : range ( 17 , 36 , 17 , 47 ) , path : range ( 17 , 37 , 17 , 40 ) } ,
1044
+ ranges : { full : range ( 1 , 26 , 1 , 29 ) , path : range ( 1 , 26 , 1 , 29 ) } ,
1034
1045
} ,
1035
1046
{
1036
- helper : 'config ' ,
1037
- path : 'theme(" foo" / 0.5, default )' ,
1038
- ranges : { full : range ( 18 , 30 , 18 , 57 ) , path : range ( 18 , 30 , 18 , 57 ) } ,
1047
+ helper : 'theme ' ,
1048
+ path : '-- theme(foo)' ,
1049
+ ranges : { full : range ( 2 , 26 , 2 , 38 ) , path : range ( 2 , 26 , 2 , 38 ) } ,
1039
1050
} ,
1040
1051
{
1041
1052
helper : 'theme' ,
1042
1053
path : 'foo' ,
1043
- ranges : { full : range ( 18 , 36 , 18 , 56 ) , path : range ( 18 , 37 , 18 , 40 ) } ,
1054
+ ranges : { full : range ( 2 , 34 , 2 , 37 ) , path : range ( 2 , 34 , 2 , 37 ) } ,
1044
1055
} ,
1045
1056
] )
1046
1057
} )
1047
1058
1059
+ test ( 'Can find helper functions in SCSS' , async ( { expect } ) => {
1060
+ let file = createDocument ( {
1061
+ name : 'file.scss' ,
1062
+ lang : 'scss' ,
1063
+ settings : {
1064
+ tailwindCSS : {
1065
+ classFunctions : [ 'clsx' ] ,
1066
+ } ,
1067
+ } ,
1068
+ content : `
1069
+ .foo {
1070
+ color: config(foo);
1071
+ @include my-config($foo: bar);
1072
+ @include .my-config($foo: bar);
1073
+ @include $my-config($foo: bar);
1074
+ @include %my-config($foo: bar);
1075
+ @include #my-config($foo: bar);
1076
+ }
1077
+ ` ,
1078
+ } )
1079
+
1080
+ let fns = findHelperFunctionsInDocument ( file . state , file . doc )
1081
+
1082
+ expect ( fns ) . toEqual ( [
1083
+ // The first function matches
1084
+ {
1085
+ helper : 'config' ,
1086
+ path : 'foo' ,
1087
+ ranges : { full : range ( 2 , 22 , 2 , 25 ) , path : range ( 2 , 22 , 2 , 25 ) } ,
1088
+ } ,
1089
+
1090
+ // The rest don't
1091
+ ] )
1092
+ } )
1093
+
1048
1094
test ( 'class functions work inside astro code fences' , async ( { expect } ) => {
1049
1095
let file = createDocument ( {
1050
1096
name : 'file.astro' ,
@@ -1082,7 +1128,9 @@ test('class functions work inside astro code fences', async ({ expect }) => {
1082
1128
] )
1083
1129
} )
1084
1130
1085
- test ( 'classFunctions are detected inside of arrays in javascript just after opening bracket' , async ( { expect } ) => {
1131
+ test ( 'classFunctions are detected inside of arrays in javascript just after opening bracket' , async ( {
1132
+ expect,
1133
+ } ) => {
1086
1134
let file = createDocument ( {
1087
1135
name : 'file.js' ,
1088
1136
lang : 'javascript' ,
0 commit comments