diff --git a/CHANGELOG.md b/CHANGELOG.md index c7e3a4a2a..11166ace7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +## 1.56.3 + +### JavaScript API + +* **Potentially breaking bug fix**: Custom functions in both the modern and + legacy API now properly reject signatures with whitespace between the function + name and parentheses. + +* Custom functions in the legacy API now allow signatures with whitespace before + the function name, to match a bug in Node Sass. + +### Dart API + +* **Potentially breaking bug fix**: `Callable.fromSignature()` and + `AsyncCallable.fromSignature()` now reject signatures with whitespace between + the function name and parentheses. + ## 1.56.2 ### Embedded Sass diff --git a/lib/src/node/legacy.dart b/lib/src/node/legacy.dart index 1fe86d11f..3cda764a5 100644 --- a/lib/src/node/legacy.dart +++ b/lib/src/node/legacy.dart @@ -210,7 +210,7 @@ List _parseFunctions(RenderOptions options, DateTime start, var fiber = options.fiber; if (fiber != null) { - result.add(Callable.fromSignature(signature, (arguments) { + result.add(Callable.fromSignature(signature.trimLeft(), (arguments) { var currentFiber = fiber.current; var jsArguments = [ ...arguments.map(wrapValue), @@ -230,12 +230,13 @@ List _parseFunctions(RenderOptions options, DateTime start, }, requireParens: false)); } else if (!asynch) { result.add(Callable.fromSignature( - signature, + signature.trimLeft(), (arguments) => unwrapValue((callback as JSFunction) .apply(context, arguments.map(wrapValue).toList())), requireParens: false)); } else { - result.add(AsyncCallable.fromSignature(signature, (arguments) async { + result.add( + AsyncCallable.fromSignature(signature.trimLeft(), (arguments) async { var completer = Completer(); var jsArguments = [ ...arguments.map(wrapValue), diff --git a/lib/src/parse/stylesheet.dart b/lib/src/parse/stylesheet.dart index ac3e9f582..ea7af982f 100644 --- a/lib/src/parse/stylesheet.dart +++ b/lib/src/parse/stylesheet.dart @@ -147,7 +147,6 @@ abstract class StylesheetParser extends Parser { {bool requireParens = true}) { return wrapSpanFormatException(() { var name = identifier(); - whitespace(); var arguments = requireParens || scanner.peekChar() == $lparen ? _argumentDeclaration() : ArgumentDeclaration.empty(scanner.emptySpan); diff --git a/pubspec.yaml b/pubspec.yaml index 36f86e43f..f4e6d8258 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: sass -version: 1.56.2 +version: 1.56.3-dev description: A Sass implementation in Dart. homepage: https://github.com/sass/dart-sass