Skip to content

Commit f022e02

Browse files
authored
Improve errors for invalid CSS values passed to CSS functions (#1901)
Closes #1769
1 parent eb1ced1 commit f022e02

File tree

3 files changed

+51
-29
lines changed

3 files changed

+51
-29
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Pull `@font-face` to the root rather than bubbling the style rule selector
44
inwards.
55

6+
* Improve error messages for invalid CSS values passed to plain CSS functions.
7+
68
### Embedded Sass
79

810
* Improve the performance of starting up a compilation.

lib/src/visitor/async_evaluate.dart

+24-14
Original file line numberDiff line numberDiff line change
@@ -2622,22 +2622,32 @@ class _EvaluateVisitor
26222622
}
26232623

26242624
var buffer = StringBuffer("${callable.name}(");
2625-
var first = true;
2626-
for (var argument in arguments.positional) {
2627-
if (first) {
2628-
first = false;
2629-
} else {
2630-
buffer.write(", ");
2631-
}
2625+
try {
2626+
var first = true;
2627+
for (var argument in arguments.positional) {
2628+
if (first) {
2629+
first = false;
2630+
} else {
2631+
buffer.write(", ");
2632+
}
26322633

2633-
buffer.write(await _evaluateToCss(argument));
2634-
}
2634+
buffer.write(await _evaluateToCss(argument));
2635+
}
26352636

2636-
var restArg = arguments.rest;
2637-
if (restArg != null) {
2638-
var rest = await restArg.accept(this);
2639-
if (!first) buffer.write(", ");
2640-
buffer.write(_serialize(rest, restArg));
2637+
var restArg = arguments.rest;
2638+
if (restArg != null) {
2639+
var rest = await restArg.accept(this);
2640+
if (!first) buffer.write(", ");
2641+
buffer.write(_serialize(rest, restArg));
2642+
}
2643+
} on SassRuntimeException catch (error) {
2644+
if (!error.message.endsWith("isn't a valid CSS value.")) rethrow;
2645+
throw MultiSpanSassRuntimeException(
2646+
error.message,
2647+
error.span,
2648+
"value",
2649+
{nodeWithSpan.span: "unknown function treated as plain CSS"},
2650+
error.trace);
26412651
}
26422652
buffer.writeCharCode($rparen);
26432653

lib/src/visitor/evaluate.dart

+25-15
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// DO NOT EDIT. This file was generated from async_evaluate.dart.
66
// See tool/grind/synchronize.dart for details.
77
//
8-
// Checksum: 73b7fb0f310d090dee2b3383f7b08c095e5fb1c0
8+
// Checksum: 4cdc21090d758118f0250f6efb2e6bdb0df5f337
99
//
1010
// ignore_for_file: unused_import
1111

@@ -2605,22 +2605,32 @@ class _EvaluateVisitor
26052605
}
26062606

26072607
var buffer = StringBuffer("${callable.name}(");
2608-
var first = true;
2609-
for (var argument in arguments.positional) {
2610-
if (first) {
2611-
first = false;
2612-
} else {
2613-
buffer.write(", ");
2614-
}
2608+
try {
2609+
var first = true;
2610+
for (var argument in arguments.positional) {
2611+
if (first) {
2612+
first = false;
2613+
} else {
2614+
buffer.write(", ");
2615+
}
26152616

2616-
buffer.write(_evaluateToCss(argument));
2617-
}
2617+
buffer.write(_evaluateToCss(argument));
2618+
}
26182619

2619-
var restArg = arguments.rest;
2620-
if (restArg != null) {
2621-
var rest = restArg.accept(this);
2622-
if (!first) buffer.write(", ");
2623-
buffer.write(_serialize(rest, restArg));
2620+
var restArg = arguments.rest;
2621+
if (restArg != null) {
2622+
var rest = restArg.accept(this);
2623+
if (!first) buffer.write(", ");
2624+
buffer.write(_serialize(rest, restArg));
2625+
}
2626+
} on SassRuntimeException catch (error) {
2627+
if (!error.message.endsWith("isn't a valid CSS value.")) rethrow;
2628+
throw MultiSpanSassRuntimeException(
2629+
error.message,
2630+
error.span,
2631+
"value",
2632+
{nodeWithSpan.span: "unknown function treated as plain CSS"},
2633+
error.trace);
26242634
}
26252635
buffer.writeCharCode($rparen);
26262636

0 commit comments

Comments
 (0)