Skip to content

Commit 50093fb

Browse files
authored
feat(format/grit): add formatting for lists (#4378)
1 parent 6ea65f4 commit 50093fb

File tree

5 files changed

+147
-7
lines changed

5 files changed

+147
-7
lines changed
Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,33 @@
11
use crate::prelude::*;
2-
use biome_grit_syntax::GritList;
3-
use biome_rowan::AstNode;
2+
use biome_formatter::{format_args, write};
3+
use biome_grit_syntax::{GritList, GritListFields};
4+
45
#[derive(Debug, Clone, Default)]
56
pub(crate) struct FormatGritList;
67
impl FormatNodeRule<GritList> for FormatGritList {
78
fn fmt_fields(&self, node: &GritList, f: &mut GritFormatter) -> FormatResult<()> {
8-
format_verbatim_node(node.syntax()).fmt(f)
9+
let GritListFields {
10+
l_brack_token,
11+
name,
12+
patterns,
13+
r_brack_token,
14+
} = node.as_fields();
15+
16+
let should_expand = f.comments().has_dangling_comments(node.syntax());
17+
18+
write!(
19+
f,
20+
[
21+
l_brack_token.format(),
22+
name.format(),
23+
group(&soft_block_indent(&format_args![
24+
patterns.format(),
25+
format_dangling_comments(node.syntax())
26+
]))
27+
.should_expand(should_expand),
28+
line_suffix_boundary(),
29+
r_brack_token.format()
30+
]
31+
)
932
}
1033
}
Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,29 @@
11
use crate::prelude::*;
2-
use biome_grit_syntax::GritListAccessor;
3-
use biome_rowan::AstNode;
2+
use biome_formatter::write;
3+
use biome_grit_syntax::{GritListAccessor, GritListAccessorFields};
4+
45
#[derive(Debug, Clone, Default)]
56
pub(crate) struct FormatGritListAccessor;
67
impl FormatNodeRule<GritListAccessor> for FormatGritListAccessor {
78
fn fmt_fields(&self, node: &GritListAccessor, f: &mut GritFormatter) -> FormatResult<()> {
8-
format_verbatim_node(node.syntax()).fmt(f)
9+
let GritListAccessorFields {
10+
l_brack_token,
11+
index,
12+
list,
13+
r_brack_token,
14+
} = node.as_fields();
15+
16+
write!(
17+
f,
18+
[
19+
l_brack_token.format(),
20+
space(),
21+
index.format(),
22+
space(),
23+
list.format(),
24+
space(),
25+
r_brack_token.format()
26+
]
27+
)
928
}
1029
}
Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,27 @@
11
use crate::prelude::*;
2+
use biome_formatter::write;
23
use biome_grit_syntax::GritListPatternList;
4+
35
#[derive(Debug, Clone, Default)]
46
pub(crate) struct FormatGritListPatternList;
57
impl FormatRule<GritListPatternList> for FormatGritListPatternList {
68
type Context = GritFormatContext;
79
fn fmt(&self, node: &GritListPatternList, f: &mut GritFormatter) -> FormatResult<()> {
8-
format_verbatim_node(node.syntax()).fmt(f)
10+
let mut filler = f.fill();
11+
12+
for (element, formatted) in node.iter().zip(node.format_separated(",")) {
13+
filler.entry(
14+
&format_once(|f| {
15+
if get_lines_before(element?.syntax()) > 0 {
16+
write!(f, [empty_line()])
17+
} else {
18+
write!(f, [soft_line_break_or_space()])
19+
}
20+
}),
21+
&formatted,
22+
);
23+
}
24+
25+
filler.finish()
926
}
1027
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
`var $x = [$numbers]`=>`var firstPrimes = [$numbers]`where{$numbers<:[`2`,`3`,`5`]}
2+
3+
4+
`var $x = [$numbers]`=>`var numbersLong = [$numbers]`where{$numbers<:[`2`,`3`,`5`,`6`,`7`,`8`,`2`,`3`,`5`,`6`,`7`,`8`,`2`,`3`,`5`,`6`,`7`,`8`,`2`,`3`,`5`,`6`,`7`,`8`]}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
source: crates/biome_formatter_test/src/snapshot_builder.rs
3+
info: grit/patterns/list_pattern.grit
4+
---
5+
# Input
6+
7+
```grit
8+
`var $x = [$numbers]`=>`var firstPrimes = [$numbers]`where{$numbers<:[`2`,`3`,`5`]}
9+
10+
11+
`var $x = [$numbers]`=>`var numbersLong = [$numbers]`where{$numbers<:[`2`,`3`,`5`,`6`,`7`,`8`,`2`,`3`,`5`,`6`,`7`,`8`,`2`,`3`,`5`,`6`,`7`,`8`,`2`,`3`,`5`,`6`,`7`,`8`]}
12+
13+
```
14+
15+
16+
=============================
17+
18+
# Outputs
19+
20+
## Output 1
21+
22+
-----
23+
Indent style: Tab
24+
Indent width: 2
25+
Line ending: LF
26+
Line width: 80
27+
Attribute Position: Auto
28+
-----
29+
30+
```grit
31+
`var $x = [$numbers]`=>`var firstPrimes = [$numbers]` where {
32+
$numbers <: [`2`, `3`, `5`]
33+
}
34+
35+
`var $x = [$numbers]`=>`var numbersLong = [$numbers]` where {
36+
$numbers <: [
37+
`2`, `3`, `5`, `6`, `7`, `8`, `2`, `3`, `5`, `6`, `7`, `8`, `2`, `3`, `5`,
38+
`6`, `7`, `8`, `2`, `3`, `5`, `6`, `7`, `8`
39+
],
40+
}
41+
```
42+
43+
44+
45+
## Unimplemented nodes/tokens
46+
47+
"`var $x = [$numbers]`=>`var firstPrimes = [$numbers]`" => 0..53
48+
"\t$number" => 62..70
49+
"`2`" => 76..79
50+
" `3" => 80..83
51+
" `5" => 85..88
52+
"`var $x = [$numbers]`=>`var numbersLong = [$numbers]` wh" => 94..150
53+
"\t$number" => 156..164
54+
"\t\t\t" => 171..174
55+
" `3" => 178..181
56+
" `5" => 183..186
57+
" `6" => 188..191
58+
" `7" => 193..196
59+
" `8" => 198..201
60+
" `2" => 203..206
61+
" `3" => 208..211
62+
" `5" => 213..216
63+
" `6" => 218..221
64+
" `7" => 223..226
65+
" `8" => 228..231
66+
" `2" => 233..236
67+
" `3" => 238..241
68+
" `5" => 243..246
69+
"\t\t\t" => 249..252
70+
" `7" => 256..259
71+
" `8" => 261..264
72+
" `2" => 266..269
73+
" `3" => 271..274
74+
" `5" => 276..279
75+
" `6" => 281..284
76+
" `7" => 286..289
77+
" `8" => 291..294

0 commit comments

Comments
 (0)