Skip to content

Commit 169685a

Browse files
authored
Fix missing open/close at first indentation level (#31)
1 parent 40a6827 commit 169685a

File tree

5 files changed

+71
-17
lines changed

5 files changed

+71
-17
lines changed

examples/basic.stdout

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1:mainbasic::hierarchical-example version=0.1
1+
1:main┐basic::hierarchical-example version=0.1
22
1:main├┐basic::hierarchical-example version=0.1
33
1:main│└┐basic::server host="localhost", port=8080
44
1:main│ ├─ms INFO basic starting
@@ -38,4 +38,4 @@
3838
1:main│ ├─ms INFO basic exit
3939
1:main│┌┘basic::server host="localhost", port=8080
4040
1:main├┘basic::hierarchical-example version=0.1
41-
1:mainbasic::hierarchical-example version=0.1
41+
1:main┘basic::hierarchical-example version=0.1

examples/quiet.stdout

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1:mainquiet::hierarchical-example version=0.1
1+
1:main┐quiet::hierarchical-example version=0.1
22
1:main├─┐quiet::server host="localhost", port=8080
33
1:main│ ├─ms INFO quiet starting
44
1:main│ ├─ms INFO quiet listening
@@ -25,4 +25,4 @@
2525
1:main│ ├─ms WARN quiet internal error
2626
1:main│ ├─ms INFO quiet exit
2727
1:main├─┘
28-
1:main
28+
1:main

examples/stderr.stderr

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
fibonacci_seq{to=5}
1+
fibonacci_seq{to=5}
22
├─ms DEBUG Pushing 0 fibonacci
33
├─┐nth_fibonacci{n=0}
44
│ ├─ms DEBUG Base case
@@ -107,5 +107,5 @@ fibonacci_seq{to=5}
107107
│ │ ├─┘
108108
│ ├─┘
109109
├─┘
110-
110+
111111
INFO The first 5 fibonacci numbers are [1, 1, 2, 3, 5, 8]

examples/wraparound.stdout

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1:mainwraparound::recurse i=0
1+
1:main┐wraparound::recurse i=0
22
1:main├─ms WARN wraparound boop
33
1:main├─┐wraparound::recurse i=1
44
1:main│ ├─ms WARN wraparound boop
@@ -7,8 +7,9 @@
77
1:main│ │ ├─┐wraparound::recurse i=3
88
1:main│ │ │ ├─ms WARN wraparound boop
99
1:main│ │ │ ├─┐wraparound::recurse i=4
10+
1:main────────┘
1011
1:mainms WARN wraparound boop
11-
1:mainwraparound::recurse i=5
12+
1:main┐wraparound::recurse i=5
1213
1:main├─ms WARN wraparound boop
1314
1:main├─┐wraparound::recurse i=6
1415
1:main│ ├─ms WARN wraparound boop
@@ -17,8 +18,9 @@
1718
1:main│ │ ├─┐wraparound::recurse i=8
1819
1:main│ │ │ ├─ms WARN wraparound boop
1920
1:main│ │ │ ├─┐wraparound::recurse i=9
21+
1:main────────┘
2022
1:mainms WARN wraparound boop
21-
1:mainwraparound::recurse i=10
23+
1:main┐wraparound::recurse i=10
2224
1:main├─ms WARN wraparound boop
2325
1:main├─┐wraparound::recurse i=11
2426
1:main│ ├─ms WARN wraparound boop
@@ -27,8 +29,9 @@
2729
1:main│ │ ├─┐wraparound::recurse i=13
2830
1:main│ │ │ ├─ms WARN wraparound boop
2931
1:main│ │ │ ├─┐wraparound::recurse i=14
32+
1:main────────┘
3033
1:mainms WARN wraparound boop
31-
1:mainwraparound::recurse i=15
34+
1:main┐wraparound::recurse i=15
3235
1:main├─ms WARN wraparound boop
3336
1:main├─┐wraparound::recurse i=16
3437
1:main│ ├─ms WARN wraparound boop
@@ -37,16 +40,18 @@
3740
1:main│ │ ├─┐wraparound::recurse i=18
3841
1:main│ │ │ ├─ms WARN wraparound boop
3942
1:main│ │ │ ├─┐wraparound::recurse i=19
43+
1:main────────┘
4044
1:mainms WARN wraparound boop
41-
1:mainwraparound::recurse i=20
45+
1:main┐wraparound::recurse i=20
4246
1:main├─ms WARN wraparound boop
4347
1:main├─┐wraparound::recurse i=21
4448
1:main│ ├─ms WARN wraparound boop
4549
1:main│ ├─ms WARN wraparound bop
4650
1:main├─┘
4751
1:main├─ms WARN wraparound bop
48-
1:main
52+
1:main
4953
1:mainms WARN wraparound bop
54+
1:main────────┐
5055
1:main│ │ │ ├─┘
5156
1:main│ │ │ ├─ms WARN wraparound bop
5257
1:main│ │ ├─┘
@@ -55,8 +60,9 @@
5560
1:main│ ├─ms WARN wraparound bop
5661
1:main├─┘
5762
1:main├─ms WARN wraparound bop
58-
1:main
63+
1:main
5964
1:mainms WARN wraparound bop
65+
1:main────────┐
6066
1:main│ │ │ ├─┘
6167
1:main│ │ │ ├─ms WARN wraparound bop
6268
1:main│ │ ├─┘
@@ -65,8 +71,9 @@
6571
1:main│ ├─ms WARN wraparound bop
6672
1:main├─┘
6773
1:main├─ms WARN wraparound bop
68-
1:main
74+
1:main
6975
1:mainms WARN wraparound bop
76+
1:main────────┐
7077
1:main│ │ │ ├─┘
7178
1:main│ │ │ ├─ms WARN wraparound bop
7279
1:main│ │ ├─┘
@@ -75,8 +82,9 @@
7582
1:main│ ├─ms WARN wraparound bop
7683
1:main├─┘
7784
1:main├─ms WARN wraparound bop
78-
1:main
85+
1:main
7986
1:mainms WARN wraparound bop
87+
1:main────────┐
8088
1:main│ │ │ ├─┘
8189
1:main│ │ │ ├─ms WARN wraparound bop
8290
1:main│ │ ├─┘
@@ -85,4 +93,4 @@
8593
1:main│ ├─ms WARN wraparound bop
8694
1:main├─┘
8795
1:main├─ms WARN wraparound bop
88-
1:main
96+
1:main

src/format.rs

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub(crate) const LINE_BRANCH: &str = "├";
1414
pub(crate) const LINE_CLOSE: &str = "┘";
1515
pub(crate) const LINE_OPEN: &str = "┐";
1616

17+
#[derive(Copy, Clone)]
1718
pub(crate) enum SpanMode {
1819
PreOpen,
1920
Open { verbose: bool },
@@ -167,17 +168,53 @@ impl Buffers {
167168

168169
pub(crate) fn indent_current(&mut self, indent: usize, config: &Config, style: SpanMode) {
169170
self.current_buf.push('\n');
171+
let prefix = config.prefix();
172+
173+
// Render something when wraparound occurs so the user is aware of it
174+
if config.indent_lines {
175+
match style {
176+
SpanMode::Close { .. } | SpanMode::PostClose => {
177+
if indent > 0 && (indent + 1) % config.wraparound == 0 {
178+
self.indent_buf.push_str(&prefix);
179+
for _ in 0..(indent % config.wraparound * config.indent_amount) {
180+
self.indent_buf.push_str(LINE_HORIZ);
181+
}
182+
self.indent_buf.push_str(LINE_OPEN);
183+
self.indent_buf.push('\n');
184+
}
185+
}
186+
_ => {}
187+
}
188+
}
189+
170190
indent_block(
171191
&mut self.current_buf,
172192
&mut self.indent_buf,
173193
indent % config.wraparound,
174194
config.indent_amount,
175195
config.indent_lines,
176-
&config.prefix(),
196+
&prefix,
177197
style,
178198
);
179199
self.current_buf.clear();
180200
self.flush_indent_buf();
201+
202+
// Render something when wraparound occurs so the user is aware of it
203+
if config.indent_lines {
204+
match style {
205+
SpanMode::PreOpen | SpanMode::Open { .. } => {
206+
if indent > 0 && (indent + 1) % config.wraparound == 0 {
207+
self.current_buf.push_str(&prefix);
208+
for _ in 0..(indent % config.wraparound * config.indent_amount) {
209+
self.current_buf.push_str(LINE_HORIZ);
210+
}
211+
self.current_buf.push_str(LINE_CLOSE);
212+
self.current_buf.push('\n');
213+
}
214+
}
215+
_ => {}
216+
}
217+
}
181218
}
182219
}
183220

@@ -235,6 +272,15 @@ fn indent_block_with_lines(
235272
} else if indent_spaces == 0 {
236273
for line in lines {
237274
buf.push_str(prefix);
275+
// The first indent is special, we only need to print open/close and nothing else
276+
if indent == 0 {
277+
match style {
278+
SpanMode::Open { .. } => buf.push_str(LINE_OPEN),
279+
SpanMode::Close { .. } => buf.push_str(LINE_CLOSE),
280+
SpanMode::PreOpen | SpanMode::PostClose => {}
281+
SpanMode::Event => {}
282+
}
283+
}
238284
buf.push_str(line);
239285
buf.push('\n');
240286
}

0 commit comments

Comments
 (0)