@@ -453,9 +453,23 @@ SassColor _updateComponents(List<Value> arguments,
453453 /// [max] should be 255 for RGB channels, 1 for the alpha channel, and 100
454454 /// for saturation, lightness, whiteness, and blackness.
455455 double ? getParam (String name, num max,
456- {bool checkPercent = false , bool assertPercent = false }) {
456+ {bool checkPercent = false ,
457+ bool assertPercent = false ,
458+ bool checkUnitless = false }) {
457459 var number = keywords.remove (name)? .assertNumber (name);
458460 if (number == null ) return null ;
461+ if (! scale && checkUnitless) {
462+ if (number.hasUnits) {
463+ warn (
464+ "\$ $name : Passing a number with unit ${number .unitString } is "
465+ "deprecated.\n "
466+ "\n "
467+ "To preserve current behavior: ${number .unitSuggestion (name )}\n "
468+ "\n "
469+ "More info: https://sass-lang.com/d/function-units" ,
470+ deprecation: true );
471+ }
472+ }
459473 if (! scale && checkPercent) _checkPercent (number, name);
460474 if (scale || assertPercent) number.assertUnit ("%" , name);
461475 if (scale) max = 100 ;
@@ -465,7 +479,7 @@ SassColor _updateComponents(List<Value> arguments,
465479 change ? 0 : - max, max, name, checkPercent ? '%' : '' );
466480 }
467481
468- var alpha = getParam ("alpha" , 1 );
482+ var alpha = getParam ("alpha" , 1 , checkUnitless : true );
469483 var red = getParam ("red" , 255 );
470484 var green = getParam ("green" , 255 );
471485 var blue = getParam ("blue" , 255 );
@@ -656,12 +670,13 @@ void _checkAngle(SassNumber angle, String name) {
656670
657671 var actualUnit = angle.numeratorUnits.first;
658672 message
659- ..writeln ("To preserve current behavior: \$ $name * 1deg/1$actualUnit " )
673+ ..writeln (
674+ "To preserve current behavior: calc(\$ $name * 1deg/1$actualUnit )" )
660675 ..writeln ("To migrate to new behavior: 0deg + \$ $name " )
661676 ..writeln ();
662677 } else {
663678 message
664- ..writeln ("To preserve current behavior: \$ $ name ${ _removeUnits ( angle )}" )
679+ ..writeln ("To preserve current behavior: ${ angle . unitSuggestion ( name )}" )
665680 ..writeln ();
666681 }
667682
@@ -676,18 +691,12 @@ void _checkPercent(SassNumber number, String name) {
676691 warn (
677692 "\$ $name : Passing a number without unit % ($number ) is deprecated.\n "
678693 "\n "
679- "To preserve current behavior: \$ $name ${_removeUnits (number )} * 1%" ,
694+ "To preserve current behavior: ${number .unitSuggestion (name , '%' )}\n "
695+ "\n "
696+ "More info: https://sass-lang.com/d/function-units" ,
680697 deprecation: true );
681698}
682699
683- /// Returns the right-hand side of an expression that would remove all units
684- /// from `$number` but leaves the value the same.
685- ///
686- /// Used for constructing deprecation messages.
687- String _removeUnits (SassNumber number) =>
688- number.denominatorUnits.map ((unit) => " * 1$unit " ).join () +
689- number.numeratorUnits.map ((unit) => " / 1$unit " ).join ();
690-
691700/// Create an HWB color from the given [arguments] .
692701Value _hwb (List <Value > arguments) {
693702 var alpha = arguments.length > 3 ? arguments[3 ] : null ;
@@ -805,6 +814,8 @@ double _percentageOrUnitless(SassNumber number, num max, String name) {
805814
806815/// Returns [color1] and [color2] , mixed together and weighted by [weight] .
807816SassColor _mixColors (SassColor color1, SassColor color2, SassNumber weight) {
817+ _checkPercent (weight, 'weight' );
818+
808819 // This algorithm factors in both the user-provided weight (w) and the
809820 // difference between the alpha values of the two colors (a) to decide how
810821 // to perform the weighted average of the two RGB values.
0 commit comments