mirror of
https://github.com/replicatedhq/troubleshoot.git
synced 2026-04-15 07:16:34 +00:00
* moved linter to new branch * reads each yaml file separately when given multiple * split monolith lint file into more reasonably sized files * github action linter fix * lint error codes follow the rest of the codebase's standard
104 lines
3.0 KiB
Go
104 lines
3.0 KiB
Go
package lint
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// FormatResults formats lint results for output
|
|
func FormatResults(results []LintResult, format string) string {
|
|
if format == "json" {
|
|
return formatJSON(results)
|
|
}
|
|
return formatText(results)
|
|
}
|
|
|
|
func formatText(results []LintResult) string {
|
|
var output strings.Builder
|
|
totalErrors := 0
|
|
totalWarnings := 0
|
|
|
|
for _, result := range results {
|
|
if len(result.Errors) == 0 && len(result.Warnings) == 0 {
|
|
output.WriteString(fmt.Sprintf("✓ %s: No issues found\n", result.FilePath))
|
|
continue
|
|
}
|
|
|
|
output.WriteString(fmt.Sprintf("\n%s:\n", result.FilePath))
|
|
|
|
for _, err := range result.Errors {
|
|
output.WriteString(fmt.Sprintf(" ✗ Error (line %d): %s\n", err.Line, err.Message))
|
|
if err.Field != "" {
|
|
output.WriteString(fmt.Sprintf(" Field: %s\n", err.Field))
|
|
}
|
|
totalErrors++
|
|
}
|
|
|
|
for _, warn := range result.Warnings {
|
|
output.WriteString(fmt.Sprintf(" ⚠ Warning (line %d): %s\n", warn.Line, warn.Message))
|
|
if warn.Field != "" {
|
|
output.WriteString(fmt.Sprintf(" Field: %s\n", warn.Field))
|
|
}
|
|
totalWarnings++
|
|
}
|
|
}
|
|
|
|
output.WriteString(fmt.Sprintf("\nSummary: %d error(s), %d warning(s) across %d file(s)\n", totalErrors, totalWarnings, len(results)))
|
|
|
|
return output.String()
|
|
}
|
|
|
|
func formatJSON(results []LintResult) string {
|
|
// Simple JSON formatting without importing encoding/json
|
|
var output strings.Builder
|
|
output.WriteString("{\n")
|
|
output.WriteString(" \"results\": [\n")
|
|
|
|
for i, result := range results {
|
|
output.WriteString(" {\n")
|
|
output.WriteString(fmt.Sprintf(" \"filePath\": %q,\n", result.FilePath))
|
|
output.WriteString(" \"errors\": [\n")
|
|
|
|
for j, err := range result.Errors {
|
|
output.WriteString(" {\n")
|
|
output.WriteString(fmt.Sprintf(" \"line\": %d,\n", err.Line))
|
|
output.WriteString(fmt.Sprintf(" \"column\": %d,\n", err.Column))
|
|
output.WriteString(fmt.Sprintf(" \"message\": %q,\n", err.Message))
|
|
output.WriteString(fmt.Sprintf(" \"field\": %q\n", err.Field))
|
|
output.WriteString(" }")
|
|
if j < len(result.Errors)-1 {
|
|
output.WriteString(",")
|
|
}
|
|
output.WriteString("\n")
|
|
}
|
|
|
|
output.WriteString(" ],\n")
|
|
output.WriteString(" \"warnings\": [\n")
|
|
|
|
for j, warn := range result.Warnings {
|
|
output.WriteString(" {\n")
|
|
output.WriteString(fmt.Sprintf(" \"line\": %d,\n", warn.Line))
|
|
output.WriteString(fmt.Sprintf(" \"column\": %d,\n", warn.Column))
|
|
output.WriteString(fmt.Sprintf(" \"message\": %q,\n", warn.Message))
|
|
output.WriteString(fmt.Sprintf(" \"field\": %q\n", warn.Field))
|
|
output.WriteString(" }")
|
|
if j < len(result.Warnings)-1 {
|
|
output.WriteString(",")
|
|
}
|
|
output.WriteString("\n")
|
|
}
|
|
|
|
output.WriteString(" ]\n")
|
|
output.WriteString(" }")
|
|
if i < len(results)-1 {
|
|
output.WriteString(",")
|
|
}
|
|
output.WriteString("\n")
|
|
}
|
|
|
|
output.WriteString(" ]\n")
|
|
output.WriteString("}\n")
|
|
|
|
return output.String()
|
|
}
|