From bd7a3979899d168355d6647e803190b6da5d7e30 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Tue, 23 May 2023 11:25:07 +0000 Subject: [PATCH] Put span fields on their own lines in line rendering mode --- examples/basic.stdout | 66 ++++++++++++++++++--------- examples/quiet.stdout | 18 +++++--- src/format.rs | 101 ++++++++++++++++++++++++++++++++++++------ src/lib.rs | 2 +- 4 files changed, 145 insertions(+), 42 deletions(-) diff --git a/examples/basic.stdout b/examples/basic.stdout index 972af50..ce3b828 100644 --- a/examples/basic.stdout +++ b/examples/basic.stdout @@ -1,46 +1,68 @@ 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│└┬─┬─ basic::server host="localhost" +1:main│ │ └─ port=8080 1:main│ ├─ Xms INFO basic starting 1:main│ ├─ Xs INFO basic listening -1:main│ ├┐basic::server host="localhost", port=8080 -1:main│ │└┐basic::conn peer_addr="82.9.9.9", port=42381 +1:main│ ├┬─┬─ basic::server host="localhost" +1:main│ ││ └─ port=8080 +1:main│ │└┬─┬─ basic::conn peer_addr="82.9.9.9" +1:main│ │ │ └─ port=42381 1:main│ │ ├─ Xms DEBUG basic connected 1:main│ │ ├─┬─ Xms DEBUG basic message received 1:main│ │ │ └─ length=2 -1:main│ │┌┘basic::conn peer_addr="82.9.9.9", port=42381 -1:main│ ├┘basic::server host="localhost", port=8080 -1:main│ ├┐basic::server host="localhost", port=8080 -1:main│ │└┐basic::conn peer_addr="8.8.8.8", port=18230 +1:main│ │┌┴┬─ basic::conn peer_addr="82.9.9.9" +1:main│ ││ └─ port=42381 +1:main│ ├┴┬─ basic::server host="localhost" +1:main│ │ └─ port=8080 +1:main│ ├┬─┬─ basic::server host="localhost" +1:main│ ││ └─ port=8080 +1:main│ │└┬─┬─ basic::conn peer_addr="8.8.8.8" +1:main│ │ │ └─ port=18230 1:main│ │ ├─ Xms DEBUG basic connected -1:main│ │┌┘basic::conn peer_addr="8.8.8.8", port=18230 -1:main│ ├┘basic::server host="localhost", port=8080 -1:main│ ├┐basic::server host="localhost", port=8080 -1:main│ │└┐basic::foomp 42 <- format string, normal_var=43 +1:main│ │┌┴┬─ basic::conn peer_addr="8.8.8.8" +1:main│ ││ └─ port=18230 +1:main│ ├┴┬─ basic::server host="localhost" +1:main│ │ └─ port=8080 +1:main│ ├┬─┬─ basic::server host="localhost" +1:main│ ││ └─ port=8080 +1:main│ │└┬─┬─ basic::foomp 42 <- format string +1:main│ │ │ └─ normal_var=43 1:main│ │ ├─ Xms ERROR basic hello -1:main│ │┌┘basic::foomp 42 <- format string, normal_var=43 -1:main│ ├┘basic::server host="localhost", port=8080 -1:main│ ├┐basic::server host="localhost", port=8080 -1:main│ │└┐basic::conn peer_addr="82.9.9.9", port=42381 +1:main│ │┌┴┬─ basic::foomp 42 <- format string +1:main│ ││ └─ normal_var=43 +1:main│ ├┴┬─ basic::server host="localhost" +1:main│ │ └─ port=8080 +1:main│ ├┬─┬─ basic::server host="localhost" +1:main│ ││ └─ port=8080 +1:main│ │└┬─┬─ basic::conn peer_addr="82.9.9.9" +1:main│ │ │ └─ port=42381 1:main│ │ ├─┬─ Xms WARN basic weak encryption requested 1:main│ │ │ └─ algo="xor" 1:main│ │ ├─┬─ Xms DEBUG basic response sent 1:main│ │ │ └─ length=8 1:main│ │ ├─ Xms DEBUG basic disconnected -1:main│ │┌┘basic::conn peer_addr="82.9.9.9", port=42381 -1:main│ ├┘basic::server host="localhost", port=8080 -1:main│ ├┐basic::server host="localhost", port=8080 -1:main│ │└┐basic::conn peer_addr="8.8.8.8", port=18230 +1:main│ │┌┴┬─ basic::conn peer_addr="82.9.9.9" +1:main│ ││ └─ port=42381 +1:main│ ├┴┬─ basic::server host="localhost" +1:main│ │ └─ port=8080 +1:main│ ├┬─┬─ basic::server host="localhost" +1:main│ ││ └─ port=8080 +1:main│ │└┬─┬─ basic::conn peer_addr="8.8.8.8" +1:main│ │ │ └─ port=18230 1:main│ │ ├─┬─ Xms DEBUG basic message received 1:main│ │ │ └─ length=5 1:main│ │ ├─┬─ Xms DEBUG basic response sent 1:main│ │ │ └─ length=8 1:main│ │ ├─ Xms DEBUG basic disconnected -1:main│ │┌┘basic::conn peer_addr="8.8.8.8", port=18230 -1:main│ ├┘basic::server host="localhost", port=8080 +1:main│ │┌┴┬─ basic::conn peer_addr="8.8.8.8" +1:main│ ││ └─ port=18230 +1:main│ ├┴┬─ basic::server host="localhost" +1:main│ │ └─ port=8080 1:main│ ├─ Xs WARN basic internal error 1:main│ ├─ Xs ERROR basic this is a log message 1:main│ ├─ Xs INFO basic exit -1:main│┌┘basic::server host="localhost", port=8080 +1:main│┌┴┬─ basic::server host="localhost" +1:main││ └─ port=8080 1:main├┘basic::hierarchical-example version=0.1 1:main┘basic::hierarchical-example version=0.1 diff --git a/examples/quiet.stdout b/examples/quiet.stdout index 501871e..152e1be 100644 --- a/examples/quiet.stdout +++ b/examples/quiet.stdout @@ -1,26 +1,32 @@ 1:main┐quiet::hierarchical-example version=0.1 -1:main├─┐quiet::server host="localhost", port=8080 +1:main├─┬─┬─ quiet::server host="localhost" +1:main│ │ └─ port=8080 1:main│ ├─ Xms INFO quiet starting 1:main│ ├─ Xms INFO quiet listening -1:main│ ├─┐quiet::conn peer_addr="82.9.9.9", port=42381 +1:main│ ├─┬─┬─ quiet::conn peer_addr="82.9.9.9" +1:main│ │ │ └─ port=42381 1:main│ │ ├─ Xms DEBUG quiet connected 1:main│ │ ├─┬─ Xms DEBUG quiet message received 1:main│ │ │ └─ length=2 1:main│ ├─┘ -1:main│ ├─┐quiet::conn peer_addr="8.8.8.8", port=18230 +1:main│ ├─┬─┬─ quiet::conn peer_addr="8.8.8.8" +1:main│ │ │ └─ port=18230 1:main│ │ ├─ Xms DEBUG quiet connected 1:main│ ├─┘ -1:main│ ├─┐quiet::foomp 42 <- format string, normal_var=43 +1:main│ ├─┬─┬─ quiet::foomp 42 <- format string +1:main│ │ │ └─ normal_var=43 1:main│ │ ├─ Xms ERROR quiet hello 1:main│ ├─┘ -1:main│ ├─┐quiet::conn peer_addr="82.9.9.9", port=42381 +1:main│ ├─┬─┬─ quiet::conn peer_addr="82.9.9.9" +1:main│ │ │ └─ port=42381 1:main│ │ ├─┬─ Xms WARN quiet weak encryption requested 1:main│ │ │ └─ algo="xor" 1:main│ │ ├─┬─ Xms DEBUG quiet response sent 1:main│ │ │ └─ length=8 1:main│ │ ├─ Xms DEBUG quiet disconnected 1:main│ ├─┘ -1:main│ ├─┐quiet::conn peer_addr="8.8.8.8", port=18230 +1:main│ ├─┬─┬─ quiet::conn peer_addr="8.8.8.8" +1:main│ │ │ └─ port=18230 1:main│ │ ├─┬─ Xms DEBUG quiet message received 1:main│ │ │ └─ length=5 1:main│ │ ├─┬─ Xms DEBUG quiet response sent diff --git a/src/format.rs b/src/format.rs index 1ef99a9..0ab263c 100644 --- a/src/format.rs +++ b/src/format.rs @@ -291,14 +291,18 @@ fn indent_block_with_lines( let mut s = String::with_capacity(indent_spaces + prefix.len()); s.push_str(prefix); - // instead of using all spaces to indent, draw a vertical line at every indent level - // up until the last indent - for i in 0..(indent_spaces - indent_amount) { + let indent = |s: &mut String, i| { if i % indent_amount == 0 { s.push_str(LINE_VERT); } else { s.push(' '); } + }; + + // instead of using all spaces to indent, draw a vertical line at every indent level + // up until the last indent + for i in 0..(indent_spaces - indent_amount) { + indent(&mut s, i) } // draw branch @@ -310,14 +314,44 @@ fn indent_block_with_lines( for _ in 1..(indent_amount / 2) { buf.push_str(LINE_HORIZ); } - buf.push_str(LINE_OPEN); + if lines.len() > 1 { + buf.push_str(ARGS_BRANCH); + for _ in 1..indent_amount { + buf.push_str(LINE_HORIZ); + } + buf.push_str(ARGS_BRANCH); + for _ in 1..indent_amount { + buf.push_str(LINE_HORIZ); + } + buf.push_str(" "); + for i in 0..(indent_amount - 1) { + indent(&mut s, i) + } + } else { + buf.push_str(LINE_OPEN); + } } SpanMode::Open { verbose: false } => { buf.push_str(LINE_BRANCH); for _ in 1..indent_amount { buf.push_str(LINE_HORIZ); } - buf.push_str(LINE_OPEN); + if lines.len() > 1 { + buf.push_str(ARGS_BRANCH); + for _ in 1..indent_amount { + buf.push_str(LINE_HORIZ); + } + buf.push_str(ARGS_BRANCH); + for _ in 1..indent_amount { + buf.push_str(LINE_HORIZ); + } + buf.push_str(" "); + for i in 0..indent_amount { + indent(&mut s, i) + } + } else { + buf.push_str(LINE_OPEN); + } } SpanMode::Open { verbose: true } => { buf.push_str(LINE_VERT); @@ -333,7 +367,22 @@ fn indent_block_with_lines( } // We don't have the space for fancy rendering at single space indent. if indent_amount > 1 { - buf.push_str(LINE_OPEN); + if lines.len() > 1 { + buf.push_str(ARGS_BRANCH); + for _ in 1..indent_amount { + buf.push_str(LINE_HORIZ); + } + buf.push_str(ARGS_BRANCH); + for _ in 1..indent_amount { + buf.push_str(LINE_HORIZ); + } + buf.push_str(" "); + for i in 0..indent_amount { + indent(&mut s, i) + } + } else { + buf.push_str(LINE_OPEN); + } } else { buf.push_str(LINE_VERT); } @@ -359,7 +408,22 @@ fn indent_block_with_lines( } // We don't have the space for fancy rendering at single space indent. if indent_amount > 1 { - buf.push_str(LINE_CLOSE); + if lines.len() > 1 { + buf.push_str("┴"); + for _ in 1..indent_amount - 1 { + buf.push_str(LINE_HORIZ); + } + buf.push_str("┬"); + for _ in 1..indent_amount { + buf.push_str(LINE_HORIZ); + } + buf.push_str(" "); + for i in 0..indent_amount - 1 { + indent(&mut s, i) + } + } else { + buf.push_str(LINE_CLOSE); + } } else { buf.push_str(LINE_VERT); } @@ -369,7 +433,22 @@ fn indent_block_with_lines( for _ in 1..(indent_amount / 2) { buf.push_str(LINE_HORIZ); } - buf.push_str(LINE_CLOSE); + if lines.len() > 1 { + buf.push_str("┴"); + for _ in 1..indent_amount - 1 { + buf.push_str(LINE_HORIZ); + } + buf.push_str("┬"); + for _ in 1..indent_amount { + buf.push_str(LINE_HORIZ); + } + buf.push_str(" "); + for i in 0..indent_amount - 2 { + indent(&mut s, i) + } + } else { + buf.push_str(LINE_CLOSE); + } } SpanMode::Event => { buf.push_str(LINE_BRANCH); @@ -392,11 +471,7 @@ fn indent_block_with_lines( // add the rest of the indentation, since we don't want to draw horizontal lines // for subsequent lines for i in 0..indent_amount { - if i % indent_amount == 0 { - s.push_str(LINE_VERT); - } else { - s.push(' '); - } + indent(&mut s, i) } // add all of the actual content, with each line preceded by the indent string diff --git a/src/lib.rs b/src/lib.rs index d171c76..99bf6e6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -220,7 +220,7 @@ where } } for (k, v) in kvs { - write!(buf, ", {}={}", k, v)?; + write!(buf, "\n {}={}", k, v)?; } Ok(()) }