Skip to content

Commit 0f90909

Browse files
authored
adjust column width dynamically by line length (ShiftLeftSecurity#418)
1 parent ad1d1cd commit 0f90909

File tree

3 files changed

+36
-30
lines changed

3 files changed

+36
-30
lines changed

traversal-tests/src/test/scala/overflowdb/traversal/help/TableTests.scala

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ class TableTests extends AnyWordSpec {
1111
Seq("column a", "column b"),
1212
Seq(
1313
Seq("abc 1", "bde 1"),
14-
Seq("abc 2", "bde 2")
14+
Seq("abc 2", "bde 2 - little more content here")
1515
)
1616
)
1717

18-
implicit val availableWidthProvider: AvailableWidthProvider = new Table.ConstantWidth(100)
18+
implicit val availableWidthProvider: AvailableWidthProvider = new Table.ConstantWidth(50)
1919
table.render.trim shouldBe
20-
"""┌─────────────────────────────────────────────────┬────────────────────────────────────────────────┐
21-
|│column a │column b
22-
|├─────────────────────────────────────────────────┼────────────────────────────────────────────────┤
23-
|│abc 1 │bde 1
24-
|│abc 2 │bde 2
25-
|└─────────────────────────────────────────────────┴────────────────────────────────────────────────┘
20+
"""┌────────────────────────────────────────┐
21+
|│column a│column b │
22+
|├────────────────────────────────────────┤
23+
|│abc 1 │bde 1 │
24+
|│abc 2 │bde 2 - little more content here
25+
|└────────────────────────────────────────┘
2626
|""".stripMargin.trim
2727
}
2828

@@ -32,34 +32,34 @@ class TableTests extends AnyWordSpec {
3232
Seq(
3333
Seq(
3434
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et" +
35-
" dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip " +
36-
"ex ea commodo consequat."
35+
" dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip"
3736
)
3837
)
3938
)
4039

41-
var currentTerminalWidth = 80 // think "looking up current value from an actual terminal"
40+
var currentTerminalWidth = 50 // think "looking up current value from an actual terminal"
4241
implicit val availableWidthProvider: AvailableWidthProvider = () => currentTerminalWidth
4342

4443
table.render.trim shouldBe
45-
"""┌──────────────────────────────────────────────────────────────────────────────┐
46-
|│lorem ipsum │
47-
|├──────────────────────────────────────────────────────────────────────────────┤
48-
|│Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor│
49-
|│incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis │
50-
|│nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. │
51-
|└──────────────────────────────────────────────────────────────────────────────┘
44+
"""┌───────────────────────────────────────────────────────┐
45+
|│lorem ipsum │
46+
|├───────────────────────────────────────────────────────┤
47+
|│Lorem ipsum dolor sit amet, consectetur adipiscing │
48+
|│elit, sed do eiusmod tempor incididunt ut labore et │
49+
|│dolore magna aliqua. Ut enim ad minim veniam, quis │
50+
|│nostrud exercitation ullamco laboris nisi ut aliquip │
51+
|└───────────────────────────────────────────────────────┘
5252
|""".stripMargin.trim
5353

5454
currentTerminalWidth = 100 // emulating: terminal size has changed
5555
table.render.trim shouldBe
56-
"""┌──────────────────────────────────────────────────────────────────────────────────────────────────
57-
|│lorem ipsum
58-
|├──────────────────────────────────────────────────────────────────────────────────────────────────
59-
|│Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
60-
|│labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
61-
|│nisi ut aliquip ex ea commodo consequat.
62-
|└──────────────────────────────────────────────────────────────────────────────────────────────────
56+
"""┌───────────────────────────────────────────────────────────────────────────────────────────────┐
57+
|│lorem ipsum │
58+
|├───────────────────────────────────────────────────────────────────────────────────────────────┤
59+
|│Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut │
60+
|│labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
61+
|│laboris nisi ut aliquip
62+
|└───────────────────────────────────────────────────────────────────────────────────────────────┘
6363
|""".stripMargin.trim
6464
}
6565

traversal/src/main/scala/overflowdb/traversal/help/Table.scala

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package overflowdb.traversal.help
22

3-
import de.vandermeer.asciitable.AsciiTable
3+
import de.vandermeer.asciitable.{AsciiTable, CWC_LongestLine}
44
import de.vandermeer.asciithemes.TA_GridThemes
55
import de.vandermeer.skb.interfaces.transformers.textformat.TextAlignment
66
import overflowdb.traversal.help.Table._
77

88
import scala.jdk.CollectionConverters.SeqHasAsJava
99

10-
case class Table(columnNames: Seq[String], rows: Seq[Seq[String]]) {
10+
case class Table(columnNames: Seq[String], rows: Seq[Row]) {
1111

1212
def render(implicit availableWidthProvider: AvailableWidthProvider): String = {
1313
if (columnNames.isEmpty && rows.isEmpty) {
@@ -24,16 +24,22 @@ case class Table(columnNames: Seq[String], rows: Seq[Seq[String]]) {
2424
table.getContext.setGridTheme(TA_GridThemes.FULL)
2525
table.setTextAlignment(TextAlignment.LEFT)
2626

27+
val renderingWidth = math.max(availableWidthProvider.apply(), 60)
28+
val minWidth = 5
29+
val maxWidth = renderingWidth - minWidth
30+
val columnWidthCalculator = new CWC_LongestLine().add(minWidth, maxWidth)
31+
table.getRenderer.setCWC(columnWidthCalculator)
32+
2733
// some terminal emulators (e.g. on github actions CI) report to have a width of 0...
2834
// that doesn't work for rendering a table, so we compensate by using a minimum width
29-
val renderingWidth = math.max(availableWidthProvider.apply(), 60)
3035
table.render(renderingWidth)
3136
}
3237
}
33-
3438
}
3539

3640
object Table {
41+
type Row = Seq[String]
42+
3743
trait AvailableWidthProvider extends (() => Int)
3844

3945
class ConstantWidth(width: Int) extends AvailableWidthProvider {

traversal/src/main/scala/overflowdb/traversal/help/TraversalHelp.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,6 @@ class TraversalHelp(searchPackages: DocSearchPackages) {
119119
}
120120

121121
object TraversalHelp {
122-
private val ColumnNames = Array("step", "description")
122+
private val ColumnNames = Seq("step", "description")
123123
private val ColumnNamesVerbose = ColumnNames :+ "traversal name"
124124
}

0 commit comments

Comments
 (0)