package util import ( "fmt" "github.com/fatih/color" "github.com/goccy/go-yaml/lexer" "github.com/goccy/go-yaml/printer" ) const escape = "\x1b" type PrettyOpts struct { Bytes []byte LineNumbers bool } func PrettyBytes(opts *PrettyOpts) []byte { tokens := lexer.Tokenize(string(opts.Bytes)) var p printer.Printer p.LineNumber = opts.LineNumbers p.LineNumberFormat = func(num int) string { fn := color.New(color.Bold, color.FgHiWhite).SprintFunc() return fn(fmt.Sprintf("%2d | ", num)) } p.Bool = func() *printer.Property { return &printer.Property{ Prefix: format(color.FgHiMagenta), Suffix: format(color.Reset), } } p.Number = func() *printer.Property { return &printer.Property{ Prefix: format(color.FgHiMagenta), Suffix: format(color.Reset), } } p.MapKey = func() *printer.Property { return &printer.Property{ Prefix: format(color.FgHiCyan), Suffix: format(color.Reset), } } p.Anchor = func() *printer.Property { return &printer.Property{ Prefix: format(color.FgHiYellow), Suffix: format(color.Reset), } } p.Alias = func() *printer.Property { return &printer.Property{ Prefix: format(color.FgHiYellow), Suffix: format(color.Reset), } } p.String = func() *printer.Property { return &printer.Property{ Prefix: format(color.FgHiGreen), Suffix: format(color.Reset), } } p.Comment = func() *printer.Property { return &printer.Property{ Prefix: format(color.FgHiBlack), Suffix: format(color.Reset), } } return []byte(p.PrintTokens(tokens)) } func format(attr color.Attribute) string { return fmt.Sprintf("%s[%dm", escape, attr) }