86 lines
2.0 KiB
Go
86 lines
2.0 KiB
Go
//go:build linux || freebsd
|
||
// +build linux freebsd
|
||
|
||
package cli
|
||
|
||
import (
|
||
"fmt"
|
||
"io"
|
||
"os"
|
||
"strings"
|
||
)
|
||
|
||
// PrintError prints an error with color styling
|
||
func PrintError(w io.Writer, err error) {
|
||
prefix, suffix := "", ""
|
||
if isColorTerminal(w) {
|
||
prefix = ColorRed + ColorBold
|
||
suffix = ColorReset
|
||
}
|
||
fmt.Fprintf(w, "%s✗ Error:%s %v\n", prefix, suffix, err)
|
||
}
|
||
|
||
// PrintWarning prints a warning with color styling
|
||
func PrintWarning(w io.Writer, msg string) {
|
||
prefix, suffix := "", ""
|
||
if isColorTerminal(w) {
|
||
prefix = ColorYellow + ColorBold
|
||
suffix = ColorReset
|
||
}
|
||
fmt.Fprintf(w, "%s⚠ Warning:%s %s\n", prefix, suffix, msg)
|
||
}
|
||
|
||
// PrintSuccess prints a success message with color styling
|
||
func PrintSuccess(w io.Writer, msg string) {
|
||
prefix, suffix := "", ""
|
||
if isColorTerminal(w) {
|
||
prefix = ColorGreen + ColorBold
|
||
suffix = ColorReset
|
||
}
|
||
fmt.Fprintf(w, "%s✓%s %s\n", prefix, suffix, msg)
|
||
}
|
||
|
||
// PrintInfo prints an info message with color styling
|
||
func PrintInfo(w io.Writer, msg string) {
|
||
prefix, suffix := "", ""
|
||
if isColorTerminal(w) {
|
||
prefix = ColorCyan + ColorBold
|
||
suffix = ColorReset
|
||
}
|
||
fmt.Fprintf(w, "%sℹ%s %s\n", prefix, suffix, msg)
|
||
}
|
||
|
||
// FormatError formats an error with context
|
||
func FormatError(err error, context string) error {
|
||
if context == "" {
|
||
return err
|
||
}
|
||
return fmt.Errorf("%s: %w", context, err)
|
||
}
|
||
|
||
// IsTerminal checks if the writer is a terminal
|
||
func IsTerminal(w io.Writer) bool {
|
||
_, ok := w.(*os.File)
|
||
return ok && os.Getenv("TERM") != "dumb"
|
||
}
|
||
|
||
// Colorize wraps text in ANSI color codes if the writer supports it
|
||
func Colorize(w io.Writer, colorCode, text string) string {
|
||
if !isColorTerminal(w) {
|
||
return text
|
||
}
|
||
return colorCode + text + ColorReset
|
||
}
|
||
|
||
// Indent returns text indented by the specified number of spaces
|
||
func Indent(text string, spaces int) string {
|
||
indent := strings.Repeat(" ", spaces)
|
||
lines := strings.Split(text, "\n")
|
||
for i, line := range lines {
|
||
if line != "" {
|
||
lines[i] = indent + line
|
||
}
|
||
}
|
||
return strings.Join(lines, "\n")
|
||
}
|