diff --git a/CHANGELOG.md b/CHANGELOG.md index 99dd2d602..37309686e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ URLs (those that begin with `/`) in `@import` rules would be passed to both Dart and JS importers as `file:` URLs. +* Properly support selector lists for the `$extendee` argument to + `selector.extend()` and `selector.replace()`. + * Fix an edge case where `@extend` wouldn't affect a selector within a pseudo-selector such as `:is()` that itself extended other selectors. diff --git a/lib/src/extend/extension_store.dart b/lib/src/extend/extension_store.dart index 7ef3d93cf..44d21dfa4 100644 --- a/lib/src/extend/extension_store.dart +++ b/lib/src/extend/extension_store.dart @@ -95,28 +95,25 @@ class ExtensionStore { SelectorList targets, ExtendMode mode, FileSpan span) { - var compoundTargets = [ - for (var complex in targets.components) - if (complex.components.length != 1) - throw SassScriptException("Can't extend complex selector $complex.") - else - complex.components.first as CompoundSelector - ]; - - var extensions = { - for (var compound in compoundTargets) + var extender = ExtensionStore._mode(mode); + if (!selector.isInvisible) { + extender._originals.addAll(selector.components); + } + + for (var complex in targets.components) { + if (complex.components.length != 1) { + throw SassScriptException("Can't extend complex selector $complex."); + } + var compound = complex.components.first as CompoundSelector; + + selector = extender._extendList(selector, span, { for (var simple in compound.components) simple: { for (var complex in source.components) complex: Extension(complex, span, simple, span, optional: true) } - }; - - var extender = ExtensionStore._mode(mode); - if (!selector.isInvisible) { - extender._originals.addAll(selector.components); + }); } - selector = extender._extendList(selector, span, extensions); return selector; }