From df9ce0c9a6df31afc93c964ff7465b400377e43c Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Thu, 4 Mar 2021 13:19:52 +0000 Subject: [PATCH 1/2] Fix missing open/close at first indentation level --- examples/basic.stdout | 4 ++-- examples/quiet.stdout | 4 ++-- examples/stderr.stderr | 4 ++-- examples/wraparound.stdout | 20 ++++++++++---------- src/format.rs | 9 +++++++++ 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/examples/basic.stdout b/examples/basic.stdout index 2610ec2..4a2d83f 100644 --- a/examples/basic.stdout +++ b/examples/basic.stdout @@ -1,4 +1,4 @@ -1:mainbasic::hierarchical-example version=0.1 +1:main┐basic::hierarchical-example version=0.1 1:main├┐basic::hierarchical-example version=0.1 1:main│└┐basic::server host="localhost", port=8080 1:main│ ├─ms INFO basic starting @@ -38,4 +38,4 @@ 1:main│ ├─ms INFO basic exit 1:main│┌┘basic::server host="localhost", port=8080 1:main├┘basic::hierarchical-example version=0.1 -1:mainbasic::hierarchical-example version=0.1 +1:main┘basic::hierarchical-example version=0.1 diff --git a/examples/quiet.stdout b/examples/quiet.stdout index 4ee111e..9658965 100644 --- a/examples/quiet.stdout +++ b/examples/quiet.stdout @@ -1,4 +1,4 @@ -1:mainquiet::hierarchical-example version=0.1 +1:main┐quiet::hierarchical-example version=0.1 1:main├─┐quiet::server host="localhost", port=8080 1:main│ ├─ms INFO quiet starting 1:main│ ├─ms INFO quiet listening @@ -25,4 +25,4 @@ 1:main│ ├─ms WARN quiet internal error 1:main│ ├─ms INFO quiet exit 1:main├─┘ -1:main +1:main┘ diff --git a/examples/stderr.stderr b/examples/stderr.stderr index b22aa39..0060f26 100644 --- a/examples/stderr.stderr +++ b/examples/stderr.stderr @@ -1,4 +1,4 @@ -fibonacci_seq{to=5} +┐fibonacci_seq{to=5} ├─ms DEBUG Pushing 0 fibonacci ├─┐nth_fibonacci{n=0} │ ├─ms DEBUG Base case @@ -107,5 +107,5 @@ fibonacci_seq{to=5} │ │ ├─┘ │ ├─┘ ├─┘ - +┘ INFO The first 5 fibonacci numbers are [1, 1, 2, 3, 5, 8] diff --git a/examples/wraparound.stdout b/examples/wraparound.stdout index 81b7bc5..cd99749 100644 --- a/examples/wraparound.stdout +++ b/examples/wraparound.stdout @@ -1,4 +1,4 @@ -1:mainwraparound::recurse i=0 +1:main┐wraparound::recurse i=0 1:main├─ms WARN wraparound boop 1:main├─┐wraparound::recurse i=1 1:main│ ├─ms WARN wraparound boop @@ -8,7 +8,7 @@ 1:main│ │ │ ├─ms WARN wraparound boop 1:main│ │ │ ├─┐wraparound::recurse i=4 1:mainms WARN wraparound boop -1:mainwraparound::recurse i=5 +1:main┐wraparound::recurse i=5 1:main├─ms WARN wraparound boop 1:main├─┐wraparound::recurse i=6 1:main│ ├─ms WARN wraparound boop @@ -18,7 +18,7 @@ 1:main│ │ │ ├─ms WARN wraparound boop 1:main│ │ │ ├─┐wraparound::recurse i=9 1:mainms WARN wraparound boop -1:mainwraparound::recurse i=10 +1:main┐wraparound::recurse i=10 1:main├─ms WARN wraparound boop 1:main├─┐wraparound::recurse i=11 1:main│ ├─ms WARN wraparound boop @@ -28,7 +28,7 @@ 1:main│ │ │ ├─ms WARN wraparound boop 1:main│ │ │ ├─┐wraparound::recurse i=14 1:mainms WARN wraparound boop -1:mainwraparound::recurse i=15 +1:main┐wraparound::recurse i=15 1:main├─ms WARN wraparound boop 1:main├─┐wraparound::recurse i=16 1:main│ ├─ms WARN wraparound boop @@ -38,14 +38,14 @@ 1:main│ │ │ ├─ms WARN wraparound boop 1:main│ │ │ ├─┐wraparound::recurse i=19 1:mainms WARN wraparound boop -1:mainwraparound::recurse i=20 +1:main┐wraparound::recurse i=20 1:main├─ms WARN wraparound boop 1:main├─┐wraparound::recurse i=21 1:main│ ├─ms WARN wraparound boop 1:main│ ├─ms WARN wraparound bop 1:main├─┘ 1:main├─ms WARN wraparound bop -1:main +1:main┘ 1:mainms WARN wraparound bop 1:main│ │ │ ├─┘ 1:main│ │ │ ├─ms WARN wraparound bop @@ -55,7 +55,7 @@ 1:main│ ├─ms WARN wraparound bop 1:main├─┘ 1:main├─ms WARN wraparound bop -1:main +1:main┘ 1:mainms WARN wraparound bop 1:main│ │ │ ├─┘ 1:main│ │ │ ├─ms WARN wraparound bop @@ -65,7 +65,7 @@ 1:main│ ├─ms WARN wraparound bop 1:main├─┘ 1:main├─ms WARN wraparound bop -1:main +1:main┘ 1:mainms WARN wraparound bop 1:main│ │ │ ├─┘ 1:main│ │ │ ├─ms WARN wraparound bop @@ -75,7 +75,7 @@ 1:main│ ├─ms WARN wraparound bop 1:main├─┘ 1:main├─ms WARN wraparound bop -1:main +1:main┘ 1:mainms WARN wraparound bop 1:main│ │ │ ├─┘ 1:main│ │ │ ├─ms WARN wraparound bop @@ -85,4 +85,4 @@ 1:main│ ├─ms WARN wraparound bop 1:main├─┘ 1:main├─ms WARN wraparound bop -1:main +1:main┘ diff --git a/src/format.rs b/src/format.rs index 77202b8..1cf5ae4 100644 --- a/src/format.rs +++ b/src/format.rs @@ -235,6 +235,15 @@ fn indent_block_with_lines( } else if indent_spaces == 0 { for line in lines { buf.push_str(prefix); + // The first indent is special, we only need to print open/close and nothing else + if indent == 0 { + match style { + SpanMode::Open { .. } => buf.push_str(LINE_OPEN), + SpanMode::Close { .. } => buf.push_str(LINE_CLOSE), + SpanMode::PreOpen | SpanMode::PostClose => {} + SpanMode::Event => {} + } + } buf.push_str(line); buf.push('\n'); } From 4756e44249c3114ff3c5d07089ebb6bd60bed3a6 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Thu, 4 Mar 2021 14:01:10 +0000 Subject: [PATCH 2/2] Render lines for wraparound to make it more obvious when it happens --- examples/wraparound.stdout | 8 ++++++++ src/format.rs | 39 +++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/examples/wraparound.stdout b/examples/wraparound.stdout index cd99749..bbf4225 100644 --- a/examples/wraparound.stdout +++ b/examples/wraparound.stdout @@ -7,6 +7,7 @@ 1:main│ │ ├─┐wraparound::recurse i=3 1:main│ │ │ ├─ms WARN wraparound boop 1:main│ │ │ ├─┐wraparound::recurse i=4 +1:main────────┘ 1:mainms WARN wraparound boop 1:main┐wraparound::recurse i=5 1:main├─ms WARN wraparound boop @@ -17,6 +18,7 @@ 1:main│ │ ├─┐wraparound::recurse i=8 1:main│ │ │ ├─ms WARN wraparound boop 1:main│ │ │ ├─┐wraparound::recurse i=9 +1:main────────┘ 1:mainms WARN wraparound boop 1:main┐wraparound::recurse i=10 1:main├─ms WARN wraparound boop @@ -27,6 +29,7 @@ 1:main│ │ ├─┐wraparound::recurse i=13 1:main│ │ │ ├─ms WARN wraparound boop 1:main│ │ │ ├─┐wraparound::recurse i=14 +1:main────────┘ 1:mainms WARN wraparound boop 1:main┐wraparound::recurse i=15 1:main├─ms WARN wraparound boop @@ -37,6 +40,7 @@ 1:main│ │ ├─┐wraparound::recurse i=18 1:main│ │ │ ├─ms WARN wraparound boop 1:main│ │ │ ├─┐wraparound::recurse i=19 +1:main────────┘ 1:mainms WARN wraparound boop 1:main┐wraparound::recurse i=20 1:main├─ms WARN wraparound boop @@ -47,6 +51,7 @@ 1:main├─ms WARN wraparound bop 1:main┘ 1:mainms WARN wraparound bop +1:main────────┐ 1:main│ │ │ ├─┘ 1:main│ │ │ ├─ms WARN wraparound bop 1:main│ │ ├─┘ @@ -57,6 +62,7 @@ 1:main├─ms WARN wraparound bop 1:main┘ 1:mainms WARN wraparound bop +1:main────────┐ 1:main│ │ │ ├─┘ 1:main│ │ │ ├─ms WARN wraparound bop 1:main│ │ ├─┘ @@ -67,6 +73,7 @@ 1:main├─ms WARN wraparound bop 1:main┘ 1:mainms WARN wraparound bop +1:main────────┐ 1:main│ │ │ ├─┘ 1:main│ │ │ ├─ms WARN wraparound bop 1:main│ │ ├─┘ @@ -77,6 +84,7 @@ 1:main├─ms WARN wraparound bop 1:main┘ 1:mainms WARN wraparound bop +1:main────────┐ 1:main│ │ │ ├─┘ 1:main│ │ │ ├─ms WARN wraparound bop 1:main│ │ ├─┘ diff --git a/src/format.rs b/src/format.rs index 1cf5ae4..fd1ffc0 100644 --- a/src/format.rs +++ b/src/format.rs @@ -14,6 +14,7 @@ pub(crate) const LINE_BRANCH: &str = "├"; pub(crate) const LINE_CLOSE: &str = "┘"; pub(crate) const LINE_OPEN: &str = "┐"; +#[derive(Copy, Clone)] pub(crate) enum SpanMode { PreOpen, Open { verbose: bool }, @@ -167,17 +168,53 @@ impl Buffers { pub(crate) fn indent_current(&mut self, indent: usize, config: &Config, style: SpanMode) { self.current_buf.push('\n'); + let prefix = config.prefix(); + + // Render something when wraparound occurs so the user is aware of it + if config.indent_lines { + match style { + SpanMode::Close { .. } | SpanMode::PostClose => { + if indent > 0 && (indent + 1) % config.wraparound == 0 { + self.indent_buf.push_str(&prefix); + for _ in 0..(indent % config.wraparound * config.indent_amount) { + self.indent_buf.push_str(LINE_HORIZ); + } + self.indent_buf.push_str(LINE_OPEN); + self.indent_buf.push('\n'); + } + } + _ => {} + } + } + indent_block( &mut self.current_buf, &mut self.indent_buf, indent % config.wraparound, config.indent_amount, config.indent_lines, - &config.prefix(), + &prefix, style, ); self.current_buf.clear(); self.flush_indent_buf(); + + // Render something when wraparound occurs so the user is aware of it + if config.indent_lines { + match style { + SpanMode::PreOpen | SpanMode::Open { .. } => { + if indent > 0 && (indent + 1) % config.wraparound == 0 { + self.current_buf.push_str(&prefix); + for _ in 0..(indent % config.wraparound * config.indent_amount) { + self.current_buf.push_str(LINE_HORIZ); + } + self.current_buf.push_str(LINE_CLOSE); + self.current_buf.push('\n'); + } + } + _ => {} + } + } } }