Skip to content

Commit c87155d

Browse files
authored
Merge pull request #209 from per1234/format-output
Format output text for rule results to improve readability
2 parents 24d0055 + 8889464 commit c87155d

File tree

4 files changed

+29
-6
lines changed

4 files changed

+29
-6
lines changed

Diff for: go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ require (
2828
github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect
2929
github.com/magiconair/properties v1.8.4 // indirect
3030
github.com/mitchellh/mapstructure v1.4.0 // indirect
31+
github.com/olekukonko/tablewriter v0.0.5
3132
github.com/ory/go-acc v0.2.6 // indirect
3233
github.com/ory/herodot v0.9.1 // indirect
3334
github.com/ory/jsonschema/v3 v3.0.1

Diff for: go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,8 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn
813813
github.com/oleiade/reflections v1.0.0/go.mod h1:RbATFBbKYkVdqmSFtx13Bb/tVhR0lgOBXunWTZKeL4w=
814814
github.com/oleksandr/bonjour v0.0.0-20160508152359-5dcf00d8b228 h1:Cvfd2dOlXIPTeEkOT/h8PyK4phBngOM4at9/jlgy7d4=
815815
github.com/oleksandr/bonjour v0.0.0-20160508152359-5dcf00d8b228/go.mod h1:MGuVJ1+5TX1SCoO2Sx0eAnjpdRytYla2uC1YIZfkC9c=
816+
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
817+
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
816818
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
817819
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
818820
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=

Diff for: internal/result/result.go

+22-4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"encoding/json"
2222
"fmt"
2323
"io"
24+
"strings"
2425
"text/template"
2526

2627
"github.com/arduino/arduino-lint/internal/configuration"
@@ -30,6 +31,7 @@ import (
3031
"github.com/arduino/arduino-lint/internal/rule/rulelevel"
3132
"github.com/arduino/arduino-lint/internal/rule/ruleresult"
3233
"github.com/arduino/go-paths-helper"
34+
"github.com/olekukonko/tablewriter"
3335
)
3436

3537
// Results is the global instance of the rule results result.Type struct
@@ -111,16 +113,32 @@ func (results *Type) Record(lintedProject project.Type, ruleConfiguration ruleco
111113
}
112114

113115
summaryText := ""
116+
117+
formatRuleText := func(level rulelevel.Type, message string) string {
118+
width := 120 // Wrap text to this width
119+
prefix := fmt.Sprintf("%s: ", level)
120+
121+
formattedOutput := &strings.Builder{}
122+
table := tablewriter.NewWriter(formattedOutput)
123+
table.SetBorder(false)
124+
table.SetColumnSeparator("")
125+
table.SetNoWhiteSpace(true)
126+
table.SetColWidth(width - len(prefix))
127+
table.Append([]string{prefix, message})
128+
table.Render()
129+
130+
return formattedOutput.String()
131+
}
132+
114133
if configuration.Verbose() {
115-
summaryText = fmt.Sprintf("Rule %s result: %s", ruleConfiguration.ID, ruleResult)
134+
summaryText = fmt.Sprintf("Rule %s result: %s\n", ruleConfiguration.ID, ruleResult)
116135
// Add explanation of rule result if present.
117136
if ruleMessage != "" {
118-
summaryText += fmt.Sprintf("\n%s: %s", ruleLevel, ruleMessage)
137+
summaryText += formatRuleText(ruleLevel, ruleMessage)
119138
}
120-
summaryText += "\n"
121139
} else {
122140
if ruleResult == ruleresult.Fail {
123-
summaryText = fmt.Sprintf("%s: %s (Rule %s)\n", ruleLevel, ruleMessage, ruleConfiguration.ID)
141+
summaryText = formatRuleText(ruleLevel, fmt.Sprintf("%s (Rule %s)", ruleMessage, ruleConfiguration.ID))
124142
}
125143
}
126144

Diff for: internal/result/result_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,17 @@ func TestRecord(t *testing.T) {
7777
flags.Set("verbose", "true")
7878
require.Nil(t, configuration.Initialize(flags, projectPaths))
7979
summaryText := results.Record(lintedProject, ruleConfiguration, ruleresult.Fail, ruleOutput)
80-
assert.Equal(t, fmt.Sprintf("Rule %s result: %s\n%s: %s\n", ruleConfiguration.ID, ruleresult.Fail, rulelevel.Error, message(ruleConfiguration.MessageTemplate, ruleOutput)), summaryText)
80+
outputAssertion := "Rule LS001 result: fail\nERROR: Path does not contain a valid Arduino library. See: \n https://arduino.github.io/arduino-cli/latest/library-specification \n"
81+
assert.Equal(t, outputAssertion, summaryText)
8182
summaryText = results.Record(lintedProject, ruleConfiguration, ruleresult.NotRun, ruleOutput)
8283
assert.Equal(t, fmt.Sprintf("Rule %s result: %s\n%s: %s\n", ruleConfiguration.ID, ruleresult.NotRun, rulelevel.Notice, ruleOutput), summaryText, "Non-fail result should not use message")
8384
summaryText = results.Record(lintedProject, ruleConfiguration, ruleresult.Pass, "")
8485
assert.Equal(t, fmt.Sprintf("Rule %s result: %s\n", ruleConfiguration.ID, ruleresult.Pass), summaryText, "Non-failure result with no rule function output should only use preface")
8586
flags.Set("verbose", "false")
8687
require.Nil(t, configuration.Initialize(flags, projectPaths))
8788
summaryText = results.Record(lintedProject, ruleConfiguration, ruleresult.Fail, ruleOutput)
88-
assert.Equal(t, fmt.Sprintf("%s: %s (Rule %s)\n", rulelevel.Error, message(ruleConfiguration.MessageTemplate, ruleOutput), ruleConfiguration.ID), summaryText)
89+
outputAssertion = "ERROR: Path does not contain a valid Arduino library. See: \n https://arduino.github.io/arduino-cli/latest/library-specification (Rule LS001) \n"
90+
assert.Equal(t, outputAssertion, summaryText)
8991
summaryText = results.Record(lintedProject, ruleConfiguration, ruleresult.NotRun, ruleOutput)
9092
assert.Equal(t, "", summaryText, "Non-fail result should not result in output in non-verbose mode")
9193
summaryText = results.Record(lintedProject, ruleConfiguration, ruleresult.Pass, "")

0 commit comments

Comments
 (0)