reimplement @ at-root
This commit is contained in:
parent
113e011652
commit
457eccc59b
@ -153,15 +153,13 @@ impl AtRule {
|
||||
}
|
||||
}
|
||||
AtRuleKind::AtRoot => {
|
||||
let mut selector = &Selector::replace(
|
||||
let mut selector = &Selector::from_tokens(
|
||||
&mut read_until_open_curly_brace(toks)?.into_iter().peekmore(),
|
||||
scope,
|
||||
super_selector,
|
||||
Selector::from_tokens(
|
||||
&mut read_until_open_curly_brace(toks)?.into_iter().peekmore(),
|
||||
scope,
|
||||
super_selector,
|
||||
true,
|
||||
)?,
|
||||
);
|
||||
true,
|
||||
)?
|
||||
.resolve_parent_selectors(super_selector, false);
|
||||
let mut is_some = true;
|
||||
if selector.is_empty() {
|
||||
is_some = false;
|
||||
|
@ -81,11 +81,8 @@ pub(crate) fn eat_stmts_at_root<I: Iterator<Item = Token>>(
|
||||
),
|
||||
Expr::MixinDecl(..) | Expr::FunctionDecl(..) => todo!(),
|
||||
Expr::Selector(mut selector) => {
|
||||
if nesting > 1 || is_some {
|
||||
selector = selector.resolve_parent_selectors(super_selector, true);
|
||||
} else {
|
||||
selector = Selector::replace(super_selector, selector);
|
||||
}
|
||||
selector =
|
||||
selector.resolve_parent_selectors(super_selector, nesting > 1 || is_some);
|
||||
nesting += 1;
|
||||
let rules = eat_stmts_at_root(toks, scope, &selector, nesting, true, content)?;
|
||||
nesting -= 1;
|
||||
|
@ -112,11 +112,6 @@ impl Selector {
|
||||
))
|
||||
}
|
||||
|
||||
#[allow(clippy::needless_pass_by_value)]
|
||||
pub fn replace(super_selector: &Selector, this: Selector) -> Selector {
|
||||
todo!()
|
||||
}
|
||||
|
||||
/// Small wrapper around `SelectorList`'s method that turns an empty parent selector
|
||||
/// into `None`. This is a hack and in the future should be replaced.
|
||||
// todo: take Option<Self> for parent
|
||||
|
126
tests/at-root.rs
126
tests/at-root.rs
@ -1,65 +1,65 @@
|
||||
// #![cfg(test)]
|
||||
#![cfg(test)]
|
||||
|
||||
// #[macro_use]
|
||||
// mod macros;
|
||||
#[macro_use]
|
||||
mod macros;
|
||||
|
||||
// test!(
|
||||
// simple_nested,
|
||||
// ".foo {\n @at-root {\n .bar {a: b}\n }\n}\n",
|
||||
// ".bar {\n a: b;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// with_selector,
|
||||
// ".foo {\n @at-root .bar {a: b}\n}\n",
|
||||
// ".bar {\n a: b;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// with_selector_in_mixin,
|
||||
// "@mixin bar {\n @at-root .bar {a: b}\n}\n\n.foo {\n @include bar;\n}\n",
|
||||
// ".bar {\n a: b;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// with_super_selector,
|
||||
// ".foo {\n @at-root & {\n a: b;\n }\n}\n",
|
||||
// ".foo {\n a: b;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// nested_with_super_selector,
|
||||
// ".foo {\n @at-root & {\n .bar {\n @at-root & {\n a: b;\n }\n }\n }\n}\n",
|
||||
// ".foo .bar {\n a: b;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// deeply_nested_with_rulesets_and_styles,
|
||||
// ".foo {\n @at-root .bar {\n a: b;\n c {\n d: e;\n foo {\n bar: baz;\n }\n h: j;\n }\n f: g;\n }\n}\n",
|
||||
// ".bar {\n a: b;\n f: g;\n}\n.bar c {\n d: e;\n h: j;\n}\n.bar c foo {\n bar: baz;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// super_selector_inside_with_nothing,
|
||||
// "foo {\n @at-root {\n & {\n color: bar;\n }\n }\n}\n",
|
||||
// "foo {\n color: bar;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// interpolated_super_selector_with_nothing,
|
||||
// "test {\n @at-root {\n #{&}post {\n foo {\n bar: baz;\n }\n }\n }\n}\n",
|
||||
// "testpost foo {\n bar: baz;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// with_ampersand_single,
|
||||
// "test {\n @at-root {\n #{&}post {\n foo {\n bar: baz;\n }\n }\n }\n}\n",
|
||||
// "testpost foo {\n bar: baz;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// root_interpolated_ampersand,
|
||||
// "@at-root {\n #{&}post {\n foo {\n bar: baz;\n }\n }\n}\n",
|
||||
// "post foo {\n bar: baz;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// nested_prefix_interpolated_ampersand,
|
||||
// "test {\n @at-root {\n pre#{&} {\n foo {\n bar: baz;\n }\n }\n }\n}\n",
|
||||
// "pretest foo {\n bar: baz;\n}\n"
|
||||
// );
|
||||
// test!(
|
||||
// nested_alone_interpolated_ampersand,
|
||||
// "test {\n @at-root {\n #{&} {\n foo {\n bar: baz;\n }\n }\n }\n}\n",
|
||||
// "test foo {\n bar: baz;\n}\n"
|
||||
// );
|
||||
test!(
|
||||
simple_nested,
|
||||
".foo {\n @at-root {\n .bar {a: b}\n }\n}\n",
|
||||
".bar {\n a: b;\n}\n"
|
||||
);
|
||||
test!(
|
||||
with_selector,
|
||||
".foo {\n @at-root .bar {a: b}\n}\n",
|
||||
".bar {\n a: b;\n}\n"
|
||||
);
|
||||
test!(
|
||||
with_selector_in_mixin,
|
||||
"@mixin bar {\n @at-root .bar {a: b}\n}\n\n.foo {\n @include bar;\n}\n",
|
||||
".bar {\n a: b;\n}\n"
|
||||
);
|
||||
test!(
|
||||
with_super_selector,
|
||||
".foo {\n @at-root & {\n a: b;\n }\n}\n",
|
||||
".foo {\n a: b;\n}\n"
|
||||
);
|
||||
test!(
|
||||
nested_with_super_selector,
|
||||
".foo {\n @at-root & {\n .bar {\n @at-root & {\n a: b;\n }\n }\n }\n}\n",
|
||||
".foo .bar {\n a: b;\n}\n"
|
||||
);
|
||||
test!(
|
||||
deeply_nested_with_rulesets_and_styles,
|
||||
".foo {\n @at-root .bar {\n a: b;\n c {\n d: e;\n foo {\n bar: baz;\n }\n h: j;\n }\n f: g;\n }\n}\n",
|
||||
".bar {\n a: b;\n f: g;\n}\n.bar c {\n d: e;\n h: j;\n}\n.bar c foo {\n bar: baz;\n}\n"
|
||||
);
|
||||
test!(
|
||||
super_selector_inside_with_nothing,
|
||||
"foo {\n @at-root {\n & {\n color: bar;\n }\n }\n}\n",
|
||||
"foo {\n color: bar;\n}\n"
|
||||
);
|
||||
test!(
|
||||
interpolated_super_selector_with_nothing,
|
||||
"test {\n @at-root {\n #{&}post {\n foo {\n bar: baz;\n }\n }\n }\n}\n",
|
||||
"testpost foo {\n bar: baz;\n}\n"
|
||||
);
|
||||
test!(
|
||||
with_ampersand_single,
|
||||
"test {\n @at-root {\n #{&}post {\n foo {\n bar: baz;\n }\n }\n }\n}\n",
|
||||
"testpost foo {\n bar: baz;\n}\n"
|
||||
);
|
||||
test!(
|
||||
root_interpolated_ampersand,
|
||||
"@at-root {\n #{&}post {\n foo {\n bar: baz;\n }\n }\n}\n",
|
||||
"post foo {\n bar: baz;\n}\n"
|
||||
);
|
||||
test!(
|
||||
nested_prefix_interpolated_ampersand,
|
||||
"test {\n @at-root {\n pre#{&} {\n foo {\n bar: baz;\n }\n }\n }\n}\n",
|
||||
"pretest foo {\n bar: baz;\n}\n"
|
||||
);
|
||||
test!(
|
||||
nested_alone_interpolated_ampersand,
|
||||
"test {\n @at-root {\n #{&} {\n foo {\n bar: baz;\n }\n }\n }\n}\n",
|
||||
"test foo {\n bar: baz;\n}\n"
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user