Skip to content

Commit 8d8f336

Browse files
authoredMar 17, 2025··
Add specs for phase 1 of the attr-type proposal (#2051)
See #2050
1 parent 17de10c commit 8d8f336

File tree

16 files changed

+678
-70
lines changed

16 files changed

+678
-70
lines changed
 

Diff for: ‎spec/core_functions/color/hsl/four_args/special_functions.hrx

+40
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,46 @@ a {
160160
b: hsl(1, 2%, 3%, env(--foo));
161161
}
162162

163+
<===>
164+
================================================================================
165+
<===> attr/arg_1/input.scss
166+
a {b: hsl(attr(c, %), 2%, 3%, 0.4)}
167+
168+
<===> attr/arg_1/output.css
169+
a {
170+
b: hsl(attr(c, %), 2%, 3%, 0.4);
171+
}
172+
173+
<===>
174+
================================================================================
175+
<===> attr/arg_2/input.scss
176+
a {b: hsl(1, attr(c, %), 3%, 0.4)}
177+
178+
<===> attr/arg_2/output.css
179+
a {
180+
b: hsl(1, attr(c, %), 3%, 0.4);
181+
}
182+
183+
<===>
184+
================================================================================
185+
<===> attr/arg_3/input.scss
186+
a {b: hsl(1, 2%, attr(c, %), 0.4)}
187+
188+
<===> attr/arg_3/output.css
189+
a {
190+
b: hsl(1, 2%, attr(c, %), 0.4);
191+
}
192+
193+
<===>
194+
================================================================================
195+
<===> attr/arg_4/input.scss
196+
a {b: hsl(1, 2%, 3%, attr(c, %))}
197+
198+
<===> attr/arg_4/output.css
199+
a {
200+
b: hsl(1, 2%, 3%, attr(c, %));
201+
}
202+
163203
<===>
164204
================================================================================
165205
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/hsl/one_arg/special_functions/alpha.hrx

+40
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,46 @@ a {
160160
b: hsl(1, 2%, 3%, env(--foo));
161161
}
162162

163+
<===>
164+
================================================================================
165+
<===> attr/arg_1/input.scss
166+
a {b: hsl(attr(c, %) 2% 3% / 0.4)}
167+
168+
<===> attr/arg_1/output.css
169+
a {
170+
b: hsl(attr(c, %), 2%, 3%, 0.4);
171+
}
172+
173+
<===>
174+
================================================================================
175+
<===> attr/arg_2/input.scss
176+
a {b: hsl(1 attr(c, %) 3% / 0.4)}
177+
178+
<===> attr/arg_2/output.css
179+
a {
180+
b: hsl(1, attr(c, %), 3%, 0.4);
181+
}
182+
183+
<===>
184+
================================================================================
185+
<===> attr/arg_3/input.scss
186+
a {b: hsl(1 2% attr(c, %) / 0.4)}
187+
188+
<===> attr/arg_3/output.css
189+
a {
190+
b: hsl(1, 2%, attr(c, %), 0.4);
191+
}
192+
193+
<===>
194+
================================================================================
195+
<===> attr/arg_4/input.scss
196+
a {b: hsl(1 2% 3% / attr(c, %))}
197+
198+
<===> attr/arg_4/output.css
199+
a {
200+
b: hsl(1, 2%, 3%, attr(c, %));
201+
}
202+
163203
<===>
164204
================================================================================
165205
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/hsl/one_arg/special_functions/no_alpha.hrx

+30
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,36 @@ a {
119119
b: hsl(1, 2%, env(--foo));
120120
}
121121

122+
<===>
123+
================================================================================
124+
<===> attr/arg_1/input.scss
125+
a {b: hsl(attr(c, %) 2% 3%)}
126+
127+
<===> attr/arg_1/output.css
128+
a {
129+
b: hsl(attr(c, %), 2%, 3%);
130+
}
131+
132+
<===>
133+
================================================================================
134+
<===> attr/arg_2/input.scss
135+
a {b: hsl(1 attr(c, %) 3%)}
136+
137+
<===> attr/arg_2/output.css
138+
a {
139+
b: hsl(1, attr(c, %), 3%);
140+
}
141+
142+
<===>
143+
================================================================================
144+
<===> attr/arg_3/input.scss
145+
a {b: hsl(1 2% attr(c, %))}
146+
147+
<===> attr/arg_3/output.css
148+
a {
149+
b: hsl(1, 2%, attr(c, %));
150+
}
151+
122152
<===>
123153
================================================================================
124154
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/hsl/three_args/special_functions.hrx

+30
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,36 @@ a {
119119
b: hsl(1, 2%, env(--foo));
120120
}
121121

122+
<===>
123+
================================================================================
124+
<===> attr/arg_1/input.scss
125+
a {b: hsl(attr(c, %), 2%, 3%)}
126+
127+
<===> attr/arg_1/output.css
128+
a {
129+
b: hsl(attr(c, %), 2%, 3%);
130+
}
131+
132+
<===>
133+
================================================================================
134+
<===> attr/arg_2/input.scss
135+
a {b: hsl(1, attr(c, %), 3%)}
136+
137+
<===> attr/arg_2/output.css
138+
a {
139+
b: hsl(1, attr(c, %), 3%);
140+
}
141+
142+
<===>
143+
================================================================================
144+
<===> attr/arg_3/input.scss
145+
a {b: hsl(1, 2%, attr(c, %))}
146+
147+
<===> attr/arg_3/output.css
148+
a {
149+
b: hsl(1, 2%, attr(c, %));
150+
}
151+
122152
<===>
123153
================================================================================
124154
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/lab/special_functions/alpha.hrx

+48
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,54 @@ a {
204204
type: string;
205205
}
206206

207+
<===>
208+
================================================================================
209+
<===> attr/arg_1/input.scss
210+
@use 'core_functions/color/utils';
211+
@include utils.inspect(lab(attr(c, %) 2 3 / 0.4));
212+
213+
<===> attr/arg_1/output.css
214+
a {
215+
value: lab(attr(c, %) 2 3/0.4);
216+
type: string;
217+
}
218+
219+
<===>
220+
================================================================================
221+
<===> attr/arg_2/input.scss
222+
@use 'core_functions/color/utils';
223+
@include utils.inspect(lab(1% attr(c, %) 3 / 0.4));
224+
225+
<===> attr/arg_2/output.css
226+
a {
227+
value: lab(1% attr(c, %) 3/0.4);
228+
type: string;
229+
}
230+
231+
<===>
232+
================================================================================
233+
<===> attr/arg_3/input.scss
234+
@use 'core_functions/color/utils';
235+
@include utils.inspect(lab(1% 2 attr(c, %) / 0.4));
236+
237+
<===> attr/arg_3/output.css
238+
a {
239+
value: lab(1% 2 attr(c, %)/0.4);
240+
type: string;
241+
}
242+
243+
<===>
244+
================================================================================
245+
<===> attr/arg_4/input.scss
246+
@use 'core_functions/color/utils';
247+
@include utils.inspect(lab(1% 2 3 / attr(c, %)));
248+
249+
<===> attr/arg_4/output.css
250+
a {
251+
value: lab(1% 2 3/attr(c, %));
252+
type: string;
253+
}
254+
207255
<===>
208256
================================================================================
209257
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/lab/special_functions/no_alpha.hrx

+36
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,42 @@ a {
143143
type: string;
144144
}
145145

146+
<===>
147+
================================================================================
148+
<===> attr/arg_1/input.scss
149+
@use 'core_functions/color/utils';
150+
@include utils.inspect(lab(attr(c, %) 2 3));
151+
152+
<===> attr/arg_1/output.css
153+
a {
154+
value: lab(attr(c, %) 2 3);
155+
type: string;
156+
}
157+
158+
<===>
159+
================================================================================
160+
<===> attr/arg_2/input.scss
161+
@use 'core_functions/color/utils';
162+
@include utils.inspect(lab(1% attr(c, %) 3));
163+
164+
<===> attr/arg_2/output.css
165+
a {
166+
value: lab(1% attr(c, %) 3);
167+
type: string;
168+
}
169+
170+
<===>
171+
================================================================================
172+
<===> attr/arg_3/input.scss
173+
@use 'core_functions/color/utils';
174+
@include utils.inspect(lab(1% 2 attr(c, %)));
175+
176+
<===> attr/arg_3/output.css
177+
a {
178+
value: lab(1% 2 attr(c, %));
179+
type: string;
180+
}
181+
146182
<===>
147183
================================================================================
148184
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/rgb/four_args/special_functions.hrx

+40
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,46 @@ a {
160160
b: rgb(1, 2, 3, env(--foo));
161161
}
162162

163+
<===>
164+
================================================================================
165+
<===> attr/arg_1/input.scss
166+
a {b: rgb(attr(c, %), 2, 3, 0.4)}
167+
168+
<===> attr/arg_1/output.css
169+
a {
170+
b: rgb(attr(c, %), 2, 3, 0.4);
171+
}
172+
173+
<===>
174+
================================================================================
175+
<===> attr/arg_2/input.scss
176+
a {b: rgb(1, attr(c, %), 3, 0.4)}
177+
178+
<===> attr/arg_2/output.css
179+
a {
180+
b: rgb(1, attr(c, %), 3, 0.4);
181+
}
182+
183+
<===>
184+
================================================================================
185+
<===> attr/arg_3/input.scss
186+
a {b: rgb(1, 2, attr(c, %), 0.4)}
187+
188+
<===> attr/arg_3/output.css
189+
a {
190+
b: rgb(1, 2, attr(c, %), 0.4);
191+
}
192+
193+
<===>
194+
================================================================================
195+
<===> attr/arg_4/input.scss
196+
a {b: rgb(1, 2, 3, attr(c, %))}
197+
198+
<===> attr/arg_4/output.css
199+
a {
200+
b: rgb(1, 2, 3, attr(c, %));
201+
}
202+
163203
<===>
164204
================================================================================
165205
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/rgb/one_arg/special_functions/alpha.hrx

+40
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,46 @@ a {
160160
b: rgb(1, 2, 3, env(--foo));
161161
}
162162

163+
<===>
164+
================================================================================
165+
<===> attr/arg_1/input.scss
166+
a {b: rgb(attr(c, %) 2 3 / 0.4)}
167+
168+
<===> attr/arg_1/output.css
169+
a {
170+
b: rgb(attr(c, %), 2, 3, 0.4);
171+
}
172+
173+
<===>
174+
================================================================================
175+
<===> attr/arg_2/input.scss
176+
a {b: rgb(1 attr(c, %) 3 / 0.4)}
177+
178+
<===> attr/arg_2/output.css
179+
a {
180+
b: rgb(1, attr(c, %), 3, 0.4);
181+
}
182+
183+
<===>
184+
================================================================================
185+
<===> attr/arg_3/input.scss
186+
a {b: rgb(1 2 attr(c, %) / 0.4)}
187+
188+
<===> attr/arg_3/output.css
189+
a {
190+
b: rgb(1, 2, attr(c, %), 0.4);
191+
}
192+
193+
<===>
194+
================================================================================
195+
<===> attr/arg_4/input.scss
196+
a {b: rgb(1 2 3 / attr(c, %))}
197+
198+
<===> attr/arg_4/output.css
199+
a {
200+
b: rgb(1, 2, 3, attr(c, %));
201+
}
202+
163203
<===>
164204
================================================================================
165205
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/rgb/one_arg/special_functions/no_alpha.hrx

+30
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,36 @@ a {
119119
b: rgb(1, 2, env(--foo));
120120
}
121121

122+
<===>
123+
================================================================================
124+
<===> attr/arg_1/input.scss
125+
a {b: rgb(attr(c, %) 2 3)}
126+
127+
<===> attr/arg_1/output.css
128+
a {
129+
b: rgb(attr(c, %), 2, 3);
130+
}
131+
132+
<===>
133+
================================================================================
134+
<===> attr/arg_2/input.scss
135+
a {b: rgb(1 attr(c, %) 3)}
136+
137+
<===> attr/arg_2/output.css
138+
a {
139+
b: rgb(1, attr(c, %), 3);
140+
}
141+
142+
<===>
143+
================================================================================
144+
<===> attr/arg_3/input.scss
145+
a {b: rgb(1 2 attr(c, %))}
146+
147+
<===> attr/arg_3/output.css
148+
a {
149+
b: rgb(1, 2, attr(c, %));
150+
}
151+
122152
<===>
123153
================================================================================
124154
<===> min/string/arg_1/input.scss

Diff for: ‎spec/core_functions/color/rgb/three_args/special_functions.hrx

+30
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,36 @@ a {
8989
b: rgb(1, 2, env(--foo));
9090
}
9191

92+
<===>
93+
================================================================================
94+
<===> attr/arg_1/input.scss
95+
a {b: rgb(attr(c, %), 2, 3)}
96+
97+
<===> attr/arg_1/output.css
98+
a {
99+
b: rgb(attr(c, %), 2, 3);
100+
}
101+
102+
<===>
103+
================================================================================
104+
<===> attr/arg_2/input.scss
105+
a {b: rgb(1, attr(c, %), 3)}
106+
107+
<===> attr/arg_2/output.css
108+
a {
109+
b: rgb(1, attr(c, %), 3);
110+
}
111+
112+
<===>
113+
================================================================================
114+
<===> attr/arg_3/input.scss
115+
a {b: rgb(1, 2, attr(c, %))}
116+
117+
<===> attr/arg_3/output.css
118+
a {
119+
b: rgb(1, 2, attr(c, %));
120+
}
121+
92122
<===>
93123
================================================================================
94124
<===> min/string/arg_1/input.scss

Diff for: ‎spec/css/percent.hrx

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<===> declaration/alone/input.scss
2+
a {b: %}
3+
4+
<===> declaration/alone/output.css
5+
a {
6+
b: %;
7+
}
8+
9+
<===>
10+
================================================================================
11+
<===> declaration/before/input.scss
12+
a {b: % c}
13+
14+
<===> declaration/before/output.css
15+
a {
16+
b: % c;
17+
}
18+
19+
<===>
20+
================================================================================
21+
<===> declaration/after/input.scss
22+
a {b: c %}
23+
24+
<===> declaration/after/output.css
25+
a {
26+
b: c %;
27+
}
28+
29+
<===>
30+
================================================================================
31+
<===> function/alone/input.scss
32+
a {b: c(%)}
33+
34+
<===> function/alone/output.css
35+
a {
36+
b: c(%);
37+
}
38+
39+
<===>
40+
================================================================================
41+
<===> function/before/input.scss
42+
a {b: c(% d)}
43+
44+
<===> function/before/output.css
45+
a {
46+
b: c(% d);
47+
}
48+
49+
<===>
50+
================================================================================
51+
<===> function/after/input.scss
52+
a {b: c(d %)}
53+
54+
<===> function/after/output.css
55+
a {
56+
b: c(d %);
57+
}
58+
59+
<===>
60+
================================================================================
61+
<===> indented/after/input.sass
62+
a
63+
b: 3 %
64+
2
65+
66+
<===> indented/after/output.css
67+
a {
68+
b: 1;
69+
}
70+
71+
<===>
72+
================================================================================
73+
<===> error/indented/after/input.sass
74+
// This could potentially be parsed as a declaration followed by an empty style
75+
// rule, but this is forbidden by the spec to avoid parser backtracking.
76+
a
77+
b: c %
78+
d
79+
80+
<===> error/indented/after/error
81+
Error: Undefined operation "c % d".
82+
,
83+
4 | b: c %
84+
| ,------^
85+
5 | \ d
86+
'
87+
input.sass 4:6 root stylesheet

Diff for: ‎spec/directives/function/custom_ident_call.hrx

-19
This file was deleted.

Diff for: ‎spec/directives/function/custom_ident_name.hrx

-19
This file was deleted.

Diff for: ‎spec/directives/function/double_underscore_name.hrx

-8
This file was deleted.

Diff for: ‎spec/directives/function/name.hrx

+227
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
<===> custom_ident/define/input.scss
2+
@function --a() {@return 1}
3+
b {c: --a()}
4+
5+
<===> custom_ident/define/output.css
6+
b {
7+
c: 1;
8+
}
9+
10+
<===> custom_ident/define/warning
11+
DEPRECATION WARNING [css-function-mixin]: Sass @function names beginning with -- are deprecated for forward-compatibility with plain CSS functions.
12+
13+
For details, see https://sass-lang.com/d/css-function-mixin
14+
15+
,
16+
1 | @function --a() {@return 1}
17+
| ^^^
18+
'
19+
input.scss 1:11 root stylesheet
20+
21+
<===>
22+
================================================================================
23+
<===> custom_ident/call/input.scss
24+
@function __a() {@return 1}
25+
b {c: --a()}
26+
27+
<===> custom_ident/call/output.css
28+
b {
29+
c: 1;
30+
}
31+
32+
<===> custom_ident/call/warning
33+
DEPRECATION WARNING [css-function-mixin]: Sass @function names beginning with -- are deprecated for forward-compatibility with plain CSS functions.
34+
35+
For details, see https://sass-lang.com/d/css-function-mixin
36+
37+
,
38+
2 | b {c: --a()}
39+
| ^^^
40+
'
41+
input.scss 2:7 root stylesheet
42+
43+
<===>
44+
================================================================================
45+
<===> double_underscore/input.scss
46+
@function __a() {@return 1}
47+
b {c: __a()}
48+
49+
<===> double_underscore/output.css
50+
b {
51+
c: 1;
52+
}
53+
54+
<===>
55+
================================================================================
56+
<===> vendor_like_underscore/README.md
57+
Function names like `-moz-calc()` aren't allowed, but they are with underscores.
58+
59+
<===>
60+
================================================================================
61+
<===> vendor_like_underscore/start/input.scss
62+
@function _moz-calc() {@return 1}
63+
b {c: _moz-calc()}
64+
65+
<===> vendor_like_underscore/start/output.css
66+
b {
67+
c: 1;
68+
}
69+
70+
<===>
71+
================================================================================
72+
<===> vendor_like_underscore/middle/input.scss
73+
@function -moz_calc() {@return 1}
74+
b {c: -moz_calc()}
75+
76+
<===> vendor_like_underscore/middle/output.css
77+
b {
78+
c: 1;
79+
}
80+
81+
<===>
82+
================================================================================
83+
<===> special/type/lowercase/input.scss
84+
@function type() {@return 1}
85+
a {b: type()}
86+
87+
<===> special/type/lowercase/output.css
88+
a {
89+
b: 1;
90+
}
91+
92+
<===> special/type/lowercase/warning
93+
DEPRECATION WARNING [type-function]: Sass @functions named "type" are deprecated for forward-compatibility with the plain CSS type() function.
94+
95+
For details, see https://sass-lang.com/d/type-function
96+
97+
,
98+
1 | @function type() {@return 1}
99+
| ^^^^
100+
'
101+
input.scss 1:11 root stylesheet
102+
103+
<===>
104+
================================================================================
105+
<===> special/type/uppercase/input.scss
106+
@function TYPE() {@return 1}
107+
a {b: TYPE()}
108+
109+
<===> special/type/uppercase/output.css
110+
a {
111+
b: 1;
112+
}
113+
114+
<===> special/type/uppercase/warning
115+
DEPRECATION WARNING [type-function]: Sass @functions named "type" are deprecated for forward-compatibility with the plain CSS type() function.
116+
117+
For details, see https://sass-lang.com/d/type-function
118+
119+
,
120+
1 | @function TYPE() {@return 1}
121+
| ^^^^
122+
'
123+
input.scss 1:11 root stylesheet
124+
125+
<===>
126+
================================================================================
127+
<===> error/special/calc/input.scss
128+
@function calc() {@return 1}
129+
130+
<===> error/special/calc/error
131+
Error: Invalid function name.
132+
,
133+
1 | @function calc() {@return 1}
134+
| ^^^^^^^^^^^^^^^^
135+
'
136+
input.scss 1:1 root stylesheet
137+
138+
<===>
139+
================================================================================
140+
<===> error/special/element/input.scss
141+
@function element() {@return 1}
142+
143+
<===> error/special/element/error
144+
Error: Invalid function name.
145+
,
146+
1 | @function element() {@return 1}
147+
| ^^^^^^^^^^^^^^^^^^^
148+
'
149+
input.scss 1:1 root stylesheet
150+
151+
<===>
152+
================================================================================
153+
<===> error/special/expression/input.scss
154+
@function expression() {@return 1}
155+
156+
<===> error/special/expression/error
157+
Error: Invalid function name.
158+
,
159+
1 | @function expression() {@return 1}
160+
| ^^^^^^^^^^^^^^^^^^^^^^
161+
'
162+
input.scss 1:1 root stylesheet
163+
164+
<===>
165+
================================================================================
166+
<===> error/special/url/input.scss
167+
@function url() {@return 1}
168+
169+
<===> error/special/url/error
170+
Error: Invalid function name.
171+
,
172+
1 | @function url() {@return 1}
173+
| ^^^^^^^^^^^^^^^
174+
'
175+
input.scss 1:1 root stylesheet
176+
177+
<===>
178+
================================================================================
179+
<===> error/special/and/input.scss
180+
@function and() {@return 1}
181+
182+
<===> error/special/and/error
183+
Error: Invalid function name.
184+
,
185+
1 | @function and() {@return 1}
186+
| ^^^^^^^^^^^^^^^
187+
'
188+
input.scss 1:1 root stylesheet
189+
190+
<===>
191+
================================================================================
192+
<===> error/special/or/input.scss
193+
@function or() {@return 1}
194+
195+
<===> error/special/or/error
196+
Error: Invalid function name.
197+
,
198+
1 | @function or() {@return 1}
199+
| ^^^^^^^^^^^^^^
200+
'
201+
input.scss 1:1 root stylesheet
202+
203+
<===>
204+
================================================================================
205+
<===> error/special/not/input.scss
206+
@function not() {@return 1}
207+
208+
<===> error/special/not/error
209+
Error: Invalid function name.
210+
,
211+
1 | @function not() {@return 1}
212+
| ^^^^^^^^^^^^^^^
213+
'
214+
input.scss 1:1 root stylesheet
215+
216+
<===>
217+
================================================================================
218+
<===> error/special/clamp/input.scss
219+
@function clamp() {@return 1}
220+
221+
<===> error/special/clamp/error
222+
Error: Invalid function name.
223+
,
224+
1 | @function clamp() {@return 1}
225+
| ^^^^^^^^^^^^^^^^^
226+
'
227+
input.scss 1:1 root stylesheet

Diff for: ‎spec/directives/function/vendor_like_underscore.hrx

-24
This file was deleted.

0 commit comments

Comments
 (0)
Please sign in to comment.