From 9f8c23c046a81e3ad9461b790e0fdb59de9288e7 Mon Sep 17 00:00:00 2001 From: awjin Date: Thu, 26 Dec 2019 13:02:46 -0800 Subject: [PATCH 1/4] Add built-in variables e and pi. See https://github.com/sass/sass-spec/pull/1501 --- CHANGELOG.md | 2 ++ lib/src/functions/math.dart | 5 ++++- lib/src/module/built_in.dart | 18 ++++++++++++++---- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a47dc2b31..a1283ad33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ * `hypot()`: given *n* numbers, outputs the length of the *n*-dimensional vector that has components equal to each of the inputs. +* Add the variables `pi` and `e` to the built-in "sass:math" module. + ## 1.24.0 * Add an optional `with` clause to the `@forward` rule. This works like the diff --git a/lib/src/functions/math.dart b/lib/src/functions/math.dart index e0a106183..84d81ff9c 100644 --- a/lib/src/functions/math.dart +++ b/lib/src/functions/math.dart @@ -25,7 +25,10 @@ final global = UnmodifiableListView([ final module = BuiltInModule("math", functions: [ _abs, _ceil, _clamp, _compatible, _floor, _hypot, _isUnitless, _max, _min, // _percentage, _randomFunction, _round, _unit, -]); +], variables: { + "e": SassNumber(math.e), + "pi": SassNumber(math.pi), +}); /// Returns a [Callable] named [name] that transforms a number's value /// using [transform] and preserves its units. diff --git a/lib/src/module/built_in.dart b/lib/src/module/built_in.dart index 63d098687..2a2183f68 100644 --- a/lib/src/module/built_in.dart +++ b/lib/src/module/built_in.dart @@ -17,19 +17,21 @@ class BuiltInModule implements Module { final Uri url; final Map functions; final Map mixins; + final Map variables; List> get upstream => const []; - Map get variables => const {}; Map get variableNodes => const {}; Extender get extender => Extender.empty; CssStylesheet get css => CssStylesheet.empty(url: url); bool get transitivelyContainsCss => false; bool get transitivelyContainsExtensions => false; - BuiltInModule(String name, {Iterable functions, Iterable mixins}) + BuiltInModule(String name, + {Iterable functions, Iterable mixins, Map variables}) : url = Uri(scheme: "sass", path: name), functions = _callableMap(functions), - mixins = _callableMap(mixins); + mixins = _callableMap(mixins), + variables = _variableMap(variables); /// Returns a map from [callables]' names to their values. static Map _callableMap( @@ -39,8 +41,16 @@ class BuiltInModule implements Module { : UnmodifiableMapView( {for (var callable in callables) callable.name: callable})); + /// Returns a map from [variables]' names to their values. + static Map _variableMap(Map variables) => + UnmodifiableMapView( + variables == null ? {} : UnmodifiableMapView(variables)); + void setVariable(String name, Value value, AstNode nodeWithSpan) { - throw SassScriptException("Undefined variable."); + if (!variables.containsKey(name)) { + throw SassScriptException("Undefined variable."); + } + throw SassScriptException("Cannot modify built-in variable \$$name."); } Module cloneCss() => this; From 8ea0e2894c82acf79b6bb7249bff9e87a9cbdb68 Mon Sep 17 00:00:00 2001 From: awjin Date: Thu, 26 Dec 2019 15:11:31 -0800 Subject: [PATCH 2/4] Code review. --- CHANGELOG.md | 2 +- lib/src/module/built_in.dart | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1283ad33..7093b4778 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ * `hypot()`: given *n* numbers, outputs the length of the *n*-dimensional vector that has components equal to each of the inputs. -* Add the variables `pi` and `e` to the built-in "sass:math" module. +* Add the variables `$pi` and `$e` to the built-in "sass:math" module. ## 1.24.0 diff --git a/lib/src/module/built_in.dart b/lib/src/module/built_in.dart index 2a2183f68..cff8c876a 100644 --- a/lib/src/module/built_in.dart +++ b/lib/src/module/built_in.dart @@ -31,7 +31,9 @@ class BuiltInModule implements Module { : url = Uri(scheme: "sass", path: name), functions = _callableMap(functions), mixins = _callableMap(mixins), - variables = _variableMap(variables); + variables = variables == null + ? UnmodifiableMapView({}) + : UnmodifiableMapView(variables); /// Returns a map from [callables]' names to their values. static Map _callableMap( @@ -41,16 +43,11 @@ class BuiltInModule implements Module { : UnmodifiableMapView( {for (var callable in callables) callable.name: callable})); - /// Returns a map from [variables]' names to their values. - static Map _variableMap(Map variables) => - UnmodifiableMapView( - variables == null ? {} : UnmodifiableMapView(variables)); - void setVariable(String name, Value value, AstNode nodeWithSpan) { if (!variables.containsKey(name)) { throw SassScriptException("Undefined variable."); } - throw SassScriptException("Cannot modify built-in variable \$$name."); + throw SassScriptException("Cannot modify built-in variable."); } Module cloneCss() => this; From 4ade58dfc8c3d6f16593a504cea50bb0d9d63479 Mon Sep 17 00:00:00 2001 From: Awjin Ahn Date: Thu, 26 Dec 2019 15:22:29 -0800 Subject: [PATCH 3/4] Update lib/src/module/built_in.dart Co-Authored-By: Natalie Weizenbaum --- lib/src/module/built_in.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/module/built_in.dart b/lib/src/module/built_in.dart index cff8c876a..adb5c9740 100644 --- a/lib/src/module/built_in.dart +++ b/lib/src/module/built_in.dart @@ -32,7 +32,7 @@ class BuiltInModule implements Module { functions = _callableMap(functions), mixins = _callableMap(mixins), variables = variables == null - ? UnmodifiableMapView({}) + ? const {} : UnmodifiableMapView(variables); /// Returns a map from [callables]' names to their values. From 7d3604f89839c506f6613962d51c4bfde68ff680 Mon Sep 17 00:00:00 2001 From: awjin Date: Thu, 26 Dec 2019 15:52:19 -0800 Subject: [PATCH 4/4] Formatting. --- lib/src/module/built_in.dart | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/src/module/built_in.dart b/lib/src/module/built_in.dart index adb5c9740..8e4abf413 100644 --- a/lib/src/module/built_in.dart +++ b/lib/src/module/built_in.dart @@ -31,9 +31,8 @@ class BuiltInModule implements Module { : url = Uri(scheme: "sass", path: name), functions = _callableMap(functions), mixins = _callableMap(mixins), - variables = variables == null - ? const {} - : UnmodifiableMapView(variables); + variables = + variables == null ? const {} : UnmodifiableMapView(variables); /// Returns a map from [callables]' names to their values. static Map _callableMap(