Skip to content

Commit 0abbc2d

Browse files
authored
Merge pull request #2207 from xzyfer/fix/issue_2200
Don't drop pseudo elements in wrapped selectors
2 parents 50a628f + 3ba77f3 commit 0abbc2d

File tree

2 files changed

+10
-19
lines changed

2 files changed

+10
-19
lines changed

src/debugger.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
116116
std::cerr << ind << "Sequence_Selector " << selector
117117
<< " (" << pstate_source_position(node) << ")"
118118
<< " <" << selector->hash() << ">"
119+
<< " [length:" << longToHex(selector->length()) << "]"
119120
<< " [weight:" << longToHex(selector->specificity()) << "]"
120121
<< " [@media:" << selector->media_block() << "]"
121122
<< (selector->is_invisible() ? " [INVISIBLE]": " -")

src/extend.cpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1722,23 +1722,6 @@ namespace Sass {
17221722
SimpleSequence_Selector* pHead = pIter->head();
17231723

17241724
if (pHead) {
1725-
if (seen.find(*pHead) == seen.end()) {
1726-
for (Simple_Selector* pSimple : *pHead) {
1727-
if (Wrapped_Selector* ws = dynamic_cast<Wrapped_Selector*>(pSimple)) {
1728-
if (CommaSequence_Selector* sl = dynamic_cast<CommaSequence_Selector*>(ws->selector())) {
1729-
for (Sequence_Selector* cs : sl->elements()) {
1730-
while (cs) {
1731-
if (complexSelectorHasExtension(cs, ctx, subset_map, seen)) {
1732-
hasExtension = true;
1733-
break;
1734-
}
1735-
cs = cs->tail();
1736-
}
1737-
}
1738-
}
1739-
}
1740-
}
1741-
}
17421725
SubsetMapEntries entries = subset_map.get_v(pHead->to_str_vec());
17431726
for (ExtensionPair ext : entries) {
17441727
// check if both selectors have the same media block parent
@@ -1989,8 +1972,15 @@ namespace Sass {
19891972
CommaSequence_Selector* cpy_ws_sl = SASS_MEMORY_NEW(ctx.mem, CommaSequence_Selector, sl->pstate());
19901973
// remove parent selectors from inner selector
19911974
if (ext_cs->first()) {
1992-
if (ext_cs->first()->has_wrapped_selector()) {
1993-
continue; // ignore this case for now
1975+
Wrapped_Selector* ext_ws = dynamic_cast<Wrapped_Selector*>(ext_cs->first()->head()->first());
1976+
if (ext_ws/* && ext_cs->length() == 1*/) {
1977+
CommaSequence_Selector* ws_cs = dynamic_cast<CommaSequence_Selector*>(ext_ws->selector());
1978+
SimpleSequence_Selector* ws_ss = ws_cs->first()->head();
1979+
if (!(
1980+
dynamic_cast<Pseudo_Selector*>(ws_ss->first()) ||
1981+
dynamic_cast<Element_Selector*>(ws_ss->first()) ||
1982+
dynamic_cast<Placeholder_Selector*>(ws_ss->first())
1983+
)) continue;
19941984
}
19951985
*cpy_ws_sl << ext_cs->first();
19961986
}

0 commit comments

Comments
 (0)