1
Fork 0
mirror of https://github.com/RGBCube/alejandra synced 2025-08-01 04:57:44 +00:00

feat: get inherit done right

This commit is contained in:
Kevin Amado 2022-01-29 18:02:47 -05:00
parent 6a5f456d72
commit 56ed74357c
No known key found for this signature in database
GPG key ID: FFF341057F503148
8 changed files with 1180 additions and 118 deletions

View file

@ -178,7 +178,7 @@ fn format(
rnix::SyntaxKind::NODE_IF_ELSE => crate::rules::if_else::rule, rnix::SyntaxKind::NODE_IF_ELSE => crate::rules::if_else::rule,
rnix::SyntaxKind::NODE_INHERIT => crate::rules::inherit::rule, rnix::SyntaxKind::NODE_INHERIT => crate::rules::inherit::rule,
rnix::SyntaxKind::NODE_INHERIT_FROM => { rnix::SyntaxKind::NODE_INHERIT_FROM => {
crate::rules::inherit_from::rule crate::rules::inherit::rule
} }
rnix::SyntaxKind::NODE_KEY => crate::rules::default, rnix::SyntaxKind::NODE_KEY => crate::rules::default,
rnix::SyntaxKind::NODE_KEY_VALUE => { rnix::SyntaxKind::NODE_KEY_VALUE => {

View file

@ -10,7 +10,12 @@ pub fn rule(
&crate::config::Layout::Tall &crate::config::Layout::Tall
} else if node } else if node
.children() .children()
.filter(|node| node.kind() == rnix::SyntaxKind::NODE_KEY_VALUE) .filter(|node| match node.kind() {
rnix::SyntaxKind::NODE_KEY_VALUE
| rnix::SyntaxKind::NODE_INHERIT
| rnix::SyntaxKind::NODE_INHERIT_FROM => true,
_ => false,
})
.count() .count()
> 1 > 1
{ {

View file

@ -30,17 +30,8 @@ pub fn rule(
steps.push_back(crate::builder::Step::Comment(text)); steps.push_back(crate::builder::Step::Comment(text));
}); });
if let Some(child) = children.peek_next() { if let Some(child) = children.get_next() {
let kind = child.element.kind();
if let rnix::SyntaxKind::TOKEN_COMMENT
| rnix::SyntaxKind::TOKEN_SEMICOLON = kind
{
break;
}
// expr // expr
let child = children.get_next().unwrap();
match layout { match layout {
crate::config::Layout::Tall => { crate::config::Layout::Tall => {
steps.push_back(crate::builder::Step::NewLine); steps.push_back(crate::builder::Step::NewLine);
@ -50,7 +41,12 @@ pub fn rule(
)); ));
} }
crate::config::Layout::Wide => { crate::config::Layout::Wide => {
steps.push_back(crate::builder::Step::Whitespace); if let rnix::SyntaxKind::TOKEN_SEMICOLON =
child.element.kind()
{
} else {
steps.push_back(crate::builder::Step::Whitespace);
}
steps steps
.push_back(crate::builder::Step::Format(child.element)); .push_back(crate::builder::Step::Format(child.element));
} }
@ -60,30 +56,12 @@ pub fn rule(
} }
} }
// /**/
children.drain_comments(|text| {
steps.push_back(crate::builder::Step::NewLine);
steps.push_back(crate::builder::Step::Pad);
steps.push_back(crate::builder::Step::Comment(text));
});
if let rnix::SyntaxKind::TOKEN_COMMENT =
children.peek_prev().unwrap().element.kind()
{
steps.push_back(crate::builder::Step::NewLine);
steps.push_back(crate::builder::Step::Pad);
} else {
}
// ;
let child = children.get_next().unwrap();
match layout { match layout {
crate::config::Layout::Tall => { crate::config::Layout::Tall => {
steps.push_back(crate::builder::Step::Dedent); steps.push_back(crate::builder::Step::Dedent);
} }
crate::config::Layout::Wide => {} crate::config::Layout::Wide => {}
} }
steps.push_back(crate::builder::Step::Format(child.element));
steps steps
} }

View file

@ -1,64 +0,0 @@
pub fn rule(
build_ctx: &crate::builder::BuildCtx,
node: &rnix::SyntaxNode,
) -> std::collections::LinkedList<crate::builder::Step> {
let mut steps = std::collections::LinkedList::new();
let mut children = crate::children::Children::new(build_ctx, node);
let layout = if children.has_comments() {
&crate::config::Layout::Tall
} else {
build_ctx.config.layout()
};
let child = children.get_next().unwrap();
steps.push_back(crate::builder::Step::Format(child.element));
match layout {
crate::config::Layout::Tall => {
steps.push_back(crate::builder::Step::Indent);
steps.push_back(crate::builder::Step::NewLine);
steps.push_back(crate::builder::Step::Pad);
}
crate::config::Layout::Wide => {
steps.push_back(crate::builder::Step::Whitespace);
}
}
children.drain_comments(|text| {
steps.push_back(crate::builder::Step::Comment(text));
steps.push_back(crate::builder::Step::NewLine);
steps.push_back(crate::builder::Step::Pad);
});
let child = children.get_next().unwrap();
match layout {
crate::config::Layout::Tall => {
steps.push_back(crate::builder::Step::FormatWider(child.element));
}
crate::config::Layout::Wide => {
steps.push_back(crate::builder::Step::Format(child.element));
}
}
children.drain_comments(|text| {
steps.push_back(crate::builder::Step::NewLine);
steps.push_back(crate::builder::Step::Pad);
steps.push_back(crate::builder::Step::Comment(text));
});
let child = children.get_next().unwrap();
match layout {
crate::config::Layout::Tall => {
steps.push_back(crate::builder::Step::Dedent);
steps.push_back(crate::builder::Step::NewLine);
steps.push_back(crate::builder::Step::Pad);
}
crate::config::Layout::Wide => {
steps.push_back(crate::builder::Step::Whitespace);
}
}
steps.push_back(crate::builder::Step::Format(child.element));
steps
}

View file

@ -5,7 +5,6 @@ pub mod bin_op;
pub mod dynamic; pub mod dynamic;
pub mod if_else; pub mod if_else;
pub mod inherit; pub mod inherit;
pub mod inherit_from;
pub mod key_value; pub mod key_value;
pub mod lambda; pub mod lambda;
pub mod let_in; pub mod let_in;

View file

@ -4,7 +4,8 @@
} }
{ {
inherit inherit
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
;
} }
{ inherit b d; } { inherit b d; }
{ {
@ -22,7 +23,8 @@
/* /*
c c
*/ */
d; d
;
} }
{ {
inherit inherit
@ -42,7 +44,8 @@
a a
*/ */
b b
d; d
;
} }
{ {
inherit inherit
@ -65,7 +68,8 @@
/* /*
c c
*/ */
d; d
;
} }
{ {
inherit inherit

View file

@ -1,6 +1,66 @@
[ [
{ inherit ( b ) d; } { inherit ( c ) f h ; }
{ inherit ( b /*c*/) d; } { inherit ( c ) f h /*i*/; }
{ inherit (/*a*/ b ) d; } { inherit ( c ) f /*g*/ h ; }
{ inherit (/*a*/ b /*c*/) d; } { inherit ( c ) f /*g*/ h /*i*/; }
{ inherit ( c ) /*e*/ f h ; }
{ inherit ( c ) /*e*/ f h /*i*/; }
{ inherit ( c ) /*e*/ f /*g*/ h ; }
{ inherit ( c ) /*e*/ f /*g*/ h /*i*/; }
{ inherit ( c /*d*/) f h ; }
{ inherit ( c /*d*/) f h /*i*/; }
{ inherit ( c /*d*/) f /*g*/ h ; }
{ inherit ( c /*d*/) f /*g*/ h /*i*/; }
{ inherit ( c /*d*/) /*e*/ f h ; }
{ inherit ( c /*d*/) /*e*/ f h /*i*/; }
{ inherit ( c /*d*/) /*e*/ f /*g*/ h ; }
{ inherit ( c /*d*/) /*e*/ f /*g*/ h /*i*/; }
{ inherit (/*b*/ c ) f h ; }
{ inherit (/*b*/ c ) f h /*i*/; }
{ inherit (/*b*/ c ) f /*g*/ h ; }
{ inherit (/*b*/ c ) f /*g*/ h /*i*/; }
{ inherit (/*b*/ c ) /*e*/ f h ; }
{ inherit (/*b*/ c ) /*e*/ f h /*i*/; }
{ inherit (/*b*/ c ) /*e*/ f /*g*/ h ; }
{ inherit (/*b*/ c ) /*e*/ f /*g*/ h /*i*/; }
{ inherit (/*b*/ c /*d*/) f h ; }
{ inherit (/*b*/ c /*d*/) f h /*i*/; }
{ inherit (/*b*/ c /*d*/) f /*g*/ h ; }
{ inherit (/*b*/ c /*d*/) f /*g*/ h /*i*/; }
{ inherit (/*b*/ c /*d*/) /*e*/ f h ; }
{ inherit (/*b*/ c /*d*/) /*e*/ f h /*i*/; }
{ inherit (/*b*/ c /*d*/) /*e*/ f /*g*/ h ; }
{ inherit (/*b*/ c /*d*/) /*e*/ f /*g*/ h /*i*/; }
{ inherit /*a*/ ( c ) f h ; }
{ inherit /*a*/ ( c ) f h /*i*/; }
{ inherit /*a*/ ( c ) f /*g*/ h ; }
{ inherit /*a*/ ( c ) f /*g*/ h /*i*/; }
{ inherit /*a*/ ( c ) /*e*/ f h ; }
{ inherit /*a*/ ( c ) /*e*/ f h /*i*/; }
{ inherit /*a*/ ( c ) /*e*/ f /*g*/ h ; }
{ inherit /*a*/ ( c ) /*e*/ f /*g*/ h /*i*/; }
{ inherit /*a*/ ( c /*d*/) f h ; }
{ inherit /*a*/ ( c /*d*/) f h /*i*/; }
{ inherit /*a*/ ( c /*d*/) f /*g*/ h ; }
{ inherit /*a*/ ( c /*d*/) f /*g*/ h /*i*/; }
{ inherit /*a*/ ( c /*d*/) /*e*/ f h ; }
{ inherit /*a*/ ( c /*d*/) /*e*/ f h /*i*/; }
{ inherit /*a*/ ( c /*d*/) /*e*/ f /*g*/ h ; }
{ inherit /*a*/ ( c /*d*/) /*e*/ f /*g*/ h /*i*/; }
{ inherit /*a*/ (/*b*/ c ) f h ; }
{ inherit /*a*/ (/*b*/ c ) f h /*i*/; }
{ inherit /*a*/ (/*b*/ c ) f /*g*/ h ; }
{ inherit /*a*/ (/*b*/ c ) f /*g*/ h /*i*/; }
{ inherit /*a*/ (/*b*/ c ) /*e*/ f h ; }
{ inherit /*a*/ (/*b*/ c ) /*e*/ f h /*i*/; }
{ inherit /*a*/ (/*b*/ c ) /*e*/ f /*g*/ h ; }
{ inherit /*a*/ (/*b*/ c ) /*e*/ f /*g*/ h /*i*/; }
{ inherit /*a*/ (/*b*/ c /*d*/) f h ; }
{ inherit /*a*/ (/*b*/ c /*d*/) f h /*i*/; }
{ inherit /*a*/ (/*b*/ c /*d*/) f /*g*/ h ; }
{ inherit /*a*/ (/*b*/ c /*d*/) f /*g*/ h /*i*/; }
{ inherit /*a*/ (/*b*/ c /*d*/) /*e*/ f h ; }
{ inherit /*a*/ (/*b*/ c /*d*/) /*e*/ f h /*i*/; }
{ inherit /*a*/ (/*b*/ c /*d*/) /*e*/ f /*g*/ h ; }
{ inherit /*a*/ (/*b*/ c /*d*/) /*e*/ f /*g*/ h /*i*/; }
] ]

File diff suppressed because it is too large Load diff