super selectors are resolved eagerly

This commit is contained in:
ConnorSkees 2020-06-23 01:47:24 -04:00
parent e94dd80a53
commit 0650f0ebcf
2 changed files with 14 additions and 24 deletions

View File

@ -259,14 +259,22 @@ impl<'a> Parser<'a> {
SelectorOrStyle::Selector(init) => {
let at_root = self.at_root;
self.at_root = false;
let super_selector = self.super_selectors.last().clone().clone();
let selector =
self.parse_selector(!self.super_selectors.is_empty(), false, init)?;
let selector = Selector(
self.extender.add_selector(
selector
.resolve_parent_selectors(
self.super_selectors.last(),
!at_root || self.at_root_has_selector,
)?
.0,
None,
),
);
self.scopes.push(self.scopes.last().clone());
self.super_selectors.push(selector.resolve_parent_selectors(
&super_selector,
!at_root || self.at_root_has_selector,
)?);
self.super_selectors.push(selector.clone());
let body = self.parse_stmt()?;
self.scopes.pop();
self.super_selectors.pop();
@ -373,10 +381,7 @@ impl<'a> Parser<'a> {
// todo: we should be registering the selector here, but that would require being given
// an `Rc<RefCell<Selector>>`, which we haven't implemented yet.
Ok(Selector(selector).resolve_parent_selectors(
self.super_selectors.last(),
!self.at_root || self.at_root_has_selector,
)?)
Ok(Selector(selector))
}
/// Eat and return the contents of a comment.
@ -1138,16 +1143,6 @@ impl<'a> Parser<'a> {
styles.push(s);
None
}
Stmt::RuleSet { selector, body, .. } if !at_root_has_selector => {
Some(Ok(Stmt::RuleSet {
selector,
// selector: match selector.resolve_parent_selectors(&at_rule_selector, false) {
// Ok(v) => v,
// Err(e) => return Some(Err(e)),
// },
body,
}))
}
_ => Some(Ok(s)),
})
.collect::<SassResult<Vec<Stmt>>>()?;

View File

@ -132,11 +132,6 @@ impl Extender {
}
}
/// Whether there exist any extensions
pub fn is_empty(&self) -> bool {
self.extensions.is_empty()
}
pub fn replace(
selector: SelectorList,
source: SelectorList,