Skip to content

Commit 6876968

Browse files
authored
[Color 4] Be stricter about slash-separated strings (#2238)
1 parent 07b33ce commit 6876968

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

lib/src/functions/color.dart

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,15 +1270,18 @@ Value _parseChannels(String functionName, Value input,
12701270
channels = componentList;
12711271
}
12721272

1273-
for (var channel in channels) {
1273+
for (var i = 0; i < channels.length; i++) {
1274+
var channel = channels[i];
12741275
if (!channel.isSpecialNumber &&
12751276
channel is! SassNumber &&
12761277
!_isNone(channel)) {
1277-
var channelName =
1278-
space?.channels[channels.indexOf(channel)].name ?? 'channel';
1278+
var channelName = space?.channels
1279+
.elementAtOrNull(i)
1280+
?.name
1281+
.andThen((name) => '$name channel') ??
1282+
'channel ${i + 1}';
12791283
throw SassScriptException(
1280-
'Expected $channelName channel to be a number, was $channel.',
1281-
name);
1284+
'Expected $channelName to be a number, was $channel.', name);
12821285
}
12831286
}
12841287

@@ -1353,15 +1356,11 @@ Value _parseChannels(String functionName, Value input,
13531356
[...var initial, SassString(hasQuotes: false, :var text)] => switch (
13541357
text.split('/')) {
13551358
[_] => (input, null),
1356-
[var channel3 && 'none', var alpha] ||
1357-
[var channel3, var alpha && 'none'] =>
1358-
switch ((_parseNumberOrNone(channel3), _parseNumberOrNone(alpha))) {
1359-
(var channel3Value?, var alphaValue?) => (
1360-
SassList([...initial, channel3Value], ListSeparator.space),
1361-
alphaValue
1362-
),
1363-
_ => null
1364-
},
1359+
[var channel3, var alpha] => (
1360+
SassList([...initial, _parseNumberOrString(channel3)],
1361+
ListSeparator.space),
1362+
_parseNumberOrString(alpha)
1363+
),
13651364
_ => null
13661365
},
13671366
[...var initial, SassNumber(asSlash: (var before, var after))] => (
@@ -1371,15 +1370,12 @@ Value _parseChannels(String functionName, Value input,
13711370
_ => (input, null)
13721371
};
13731372

1374-
/// Parses [text] as either a Sass number or the unquoted Sass string "none".
1375-
///
1376-
/// If neither matches, returns null.
1377-
Value? _parseNumberOrNone(String text) {
1378-
if (text == 'none') return SassString('none', quotes: false);
1373+
/// Parses [text] as either a Sass number or an unquoted Sass string.
1374+
Value _parseNumberOrString(String text) {
13791375
try {
13801376
return ScssParser(text).parseNumber();
13811377
} on SassFormatException {
1382-
return null;
1378+
return SassString(text, quotes: false);
13831379
}
13841380
}
13851381

0 commit comments

Comments
 (0)