Skip to content

Commit cb8a048

Browse files
authored
Refactor Extender._extendOrReplace() (#965)
This combines all targets into a single extender invocation, which is more efficient and allows it to more aggressively do redundant selector elimination.
1 parent f81f57d commit cb8a048

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 1.26.2
2+
3+
* More aggressively eliminate redundant selectors in the `selector.extend()` and
4+
`selector.replace()` functions.
5+
16
## 1.26.1
27

38
### Command Line Interface

lib/src/extend/extender.dart

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -90,25 +90,28 @@ class Extender {
9090
/// A helper function for [extend] and [replace].
9191
static SelectorList _extendOrReplace(SelectorList selector,
9292
SelectorList source, SelectorList targets, ExtendMode mode) {
93-
var extenders = Map<ComplexSelector, Extension>.fromIterable(
94-
source.components,
95-
value: (complex) => Extension.oneOff(complex as ComplexSelector));
96-
for (var complex in targets.components) {
97-
if (complex.components.length != 1) {
98-
throw SassScriptException("Can't extend complex selector $complex.");
99-
}
100-
101-
var compound = complex.components.first as CompoundSelector;
102-
var extensions = {
93+
var extenders = {
94+
for (var complex in source.components) complex: Extension.oneOff(complex)
95+
};
96+
97+
var compoundTargets = [
98+
for (var complex in targets.components)
99+
if (complex.components.length != 1)
100+
throw SassScriptException("Can't extend complex selector $complex.")
101+
else
102+
complex.components.first as CompoundSelector
103+
];
104+
105+
var extensions = {
106+
for (var compound in compoundTargets)
103107
for (var simple in compound.components) simple: extenders
104-
};
108+
};
105109

106-
var extender = Extender._mode(mode);
107-
if (!selector.isInvisible) {
108-
extender._originals.addAll(selector.components);
109-
}
110-
selector = extender._extendList(selector, extensions, null);
110+
var extender = Extender._mode(mode);
111+
if (!selector.isInvisible) {
112+
extender._originals.addAll(selector.components);
111113
}
114+
selector = extender._extendList(selector, extensions, null);
112115

113116
return selector;
114117
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: sass
2-
version: 1.26.1
2+
version: 1.26.2
33
description: A Sass implementation in Dart.
44
author: Sass Team
55
homepage: https://github.com/sass/dart-sass

0 commit comments

Comments
 (0)