jedib0t / go-pretty

Table-writer and more in golang!
MIT License
3.02k stars 119 forks source link

column auto merge have minor wrong behavior #279

Closed naughtyGitCat closed 1 year ago

naughtyGitCat commented 1 year ago

Describe the bug wrong merge upper non-empty with downside empty content

To Reproduce

func RenderResources(serviceName string) table.Writer {
    resources, err := service.GetServiceResources(serviceName)
    if err != nil {
        log.Fatal(err)
    }
    t := table.NewWriter()
    t.SetOutputMirror(os.Stdout)
    rowConfigAutoMerge := table.RowConfig{AutoMerge: true}
    tableHeader := table.Row{"环境", "拓补", "地址", "物理IP", "备注"}
    t.AppendHeader(tableHeader)
    for _, resource := range resources {
        t.AppendRow(table.Row{resource.EntranceEnvironment, resource.DBTopologyType, generateUri(resource), resource.EntranceIP, generateComment(resource)},
            rowConfigAutoMerge)
    }
    var columnConfigs []table.ColumnConfig
    for i, _ := range tableHeader {
        columnConfigs = append(columnConfigs, table.ColumnConfig{
            Number:      i + 1,
            AutoMerge:   true,
            VAlign:      text.VAlignMiddle,
            Align:       text.AlignCenter,
            AlignHeader: text.AlignCenter,
        })
    }
    t.SetAutoIndex(true)
    t.SetColumnConfigs(columnConfigs)
    t.SetStyle(table.StyleLight)
    t.Style().Options.SeparateRows = true
    return t
}

Expected behavior upper non-empty separate from downside empty content when column auto merge enabled

Screenshots image

Software (please complete the following information):

Additional context Add any other context about the problem here.

jedib0t commented 1 year ago

I was able to reproduce the bug with this:

package main

import (
    "os"

    "github.com/jedib0t/go-pretty/v6/table"
    "github.com/jedib0t/go-pretty/v6/text"
)

func main() {
    t := table.NewWriter()
    t.SetOutputMirror(os.Stdout)
    rowConfigAutoMerge := table.RowConfig{AutoMerge: true}
    tableHeader := table.Row{"Col #1", "Col #2", "Col #3", "Col #4", "Col #5"}
    t.AppendHeader(tableHeader)
    t.AppendRow(table.Row{"Product", "Standalone", "foo bar", "1.1.1.1", ""}, rowConfigAutoMerge)
    t.AppendRow(table.Row{"Test", "Standalone", "bar baz", "2.2.2.2", ""}, rowConfigAutoMerge)
    t.AppendRow(table.Row{"Product", "RedisCluster", "foo baz", "", "Cluster #1"}, rowConfigAutoMerge)
    t.AppendRow(table.Row{"Product", "RedisCluster", "bar baz", "", "Cluster #2"}, rowConfigAutoMerge)

    var columnConfigs []table.ColumnConfig
    for i, _ := range tableHeader {
        columnConfigs = append(columnConfigs, table.ColumnConfig{
            Number:      i + 1,
            AutoMerge:   true,
            VAlign:      text.VAlignMiddle,
            Align:       text.AlignCenter,
            AlignHeader: text.AlignCenter,
        })
    }
    t.SetAutoIndex(true)
    t.SetColumnConfigs(columnConfigs)
    t.SetStyle(table.StyleLight)
    t.Style().Options.SeparateRows = true
    t.Render()
}

Output:

┌───┬─────────┬──────────────┬─────────┬─────────┬────────────┐
│   │  COL #1 │    COL #2    │  COL #3 │  COL #4 │   COL #5   │
├───┼─────────┼──────────────┼─────────┼─────────┼────────────┤
│ 1 │ Product │  Standalone  │ foo bar │ 1.1.1.1 │            │
├───┼─────────┤              ├─────────┼─────────┤            │
│ 2 │   Test  │              │ bar baz │ 2.2.2.2 │            │
├───┼─────────┼──────────────┼─────────┤         ├────────────┤
│ 3 │ Product │ RedisCluster │ foo baz │         │ Cluster #1 │
├───┤         │              ├─────────┤         ├────────────┤
│ 4 │         │              │ bar baz │         │ Cluster #2 │
└───┴─────────┴──────────────┴─────────┴─────────┴────────────┘

Will work on a solution for this soon.

jedib0t commented 1 year ago

@naughtyGitCat try https://github.com/jedib0t/go-pretty/releases/tag/v6.4.9 - this should fix your issue.

naughtyGitCat commented 1 year ago

thanks, it fixed