| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- package pretty
- import (
- "fmt"
- "io"
- "sigs.k8s.io/controller-tools/pkg/genall/help"
- "github.com/fatih/color"
- )
- var (
- headingStyle = Decoration(*color.New(color.Bold, color.Underline))
- markerNameStyle = Decoration(*color.New(color.Bold))
- fieldSummaryStyle = Decoration(*color.New(color.FgGreen, color.Italic))
- markerTargetStyle = Decoration(*color.New(color.Faint))
- fieldDetailStyle = Decoration(*color.New(color.Italic, color.FgGreen))
- deprecatedStyle = Decoration(*color.New(color.CrossedOut))
- )
- // MarkersSummary returns a condensed summary of help for the given markers.
- func MarkersSummary(groupName string, markers []help.MarkerDoc) Span {
- out := new(SpanWriter)
- out.Print(Text("\n"))
- out.Print(headingStyle.Containing(Text(groupName)))
- out.Print(Text("\n\n"))
- table := &Table{Sizing: &TableCalculator{Padding: 2}}
- for _, marker := range markers {
- table.StartRow()
- table.Column(MarkerSyntaxHelp(marker))
- table.Column(markerTargetStyle.Containing(Text(marker.Target)))
- summary := new(SpanWriter)
- if marker.DeprecatedInFavorOf != nil && len(*marker.DeprecatedInFavorOf) > 0 {
- summary.Print(markerNameStyle.Containing(Text("(use ")))
- summary.Print(markerNameStyle.Containing(Text(*marker.DeprecatedInFavorOf)))
- summary.Print(markerNameStyle.Containing(Text(") ")))
- }
- summary.Print(Text(marker.Summary))
- table.Column(summary)
- table.EndRow()
- }
- out.Print(table)
- out.Print(Text("\n"))
- return out
- }
- // MarkersDetails returns detailed help for the given markers, including detailed field help.
- func MarkersDetails(fullDetail bool, groupName string, markers []help.MarkerDoc) Span {
- out := new(SpanWriter)
- out.Print(Line(headingStyle.Containing(Text(groupName))))
- out.Print(Newlines(2))
- for _, marker := range markers {
- out.Print(Line(markerName(marker)))
- out.Print(Text(" "))
- out.Print(markerTargetStyle.Containing(Text(marker.Target)))
- summary := new(SpanWriter)
- if marker.DeprecatedInFavorOf != nil && len(*marker.DeprecatedInFavorOf) > 0 {
- summary.Print(markerNameStyle.Containing(Text("(use ")))
- summary.Print(markerNameStyle.Containing(Text(*marker.DeprecatedInFavorOf)))
- summary.Print(markerNameStyle.Containing(Text(") ")))
- }
- summary.Print(Text(marker.Summary))
- if !marker.AnonymousField() {
- out.Print(Indented(1, Line(summary)))
- if len(marker.Details) > 0 && fullDetail {
- out.Print(Indented(1, Line(Text(marker.Details))))
- }
- }
- if marker.AnonymousField() {
- out.Print(Indented(1, Line(fieldDetailStyle.Containing(FieldSyntaxHelp(marker.Fields[0])))))
- out.Print(Text(" "))
- out.Print(summary)
- if len(marker.Details) > 0 && fullDetail {
- out.Print(Indented(2, Line(Text(marker.Details))))
- }
- out.Print(Newlines(1))
- } else if !marker.Empty() {
- out.Print(Newlines(1))
- if fullDetail {
- for _, arg := range marker.Fields {
- out.Print(Indented(1, Line(fieldDetailStyle.Containing(FieldSyntaxHelp(arg)))))
- out.Print(Indented(2, Line(Text(arg.Summary))))
- if len(arg.Details) > 0 && fullDetail {
- out.Print(Indented(2, Line(Text(arg.Details))))
- out.Print(Newlines(1))
- }
- }
- out.Print(Newlines(1))
- } else {
- table := &Table{Sizing: &TableCalculator{Padding: 2}}
- for _, arg := range marker.Fields {
- table.StartRow()
- table.Column(fieldDetailStyle.Containing(FieldSyntaxHelp(arg)))
- table.Column(Text(arg.Summary))
- table.EndRow()
- }
- out.Print(Indented(1, table))
- }
- } else {
- out.Print(Newlines(1))
- }
- }
- return out
- }
- func FieldSyntaxHelp(arg help.FieldHelp) Span {
- return fieldSyntaxHelp(arg, "")
- }
- // fieldSyntaxHelp prints the syntax help for a particular marker argument.
- func fieldSyntaxHelp(arg help.FieldHelp, sep string) Span {
- if arg.Optional {
- return FromWriter(func(out io.Writer) error {
- _, err := fmt.Fprintf(out, "[%s%s=<%s>]", sep, arg.Name, arg.TypeString())
- return err
- })
- }
- return FromWriter(func(out io.Writer) error {
- _, err := fmt.Fprintf(out, "%s%s=<%s>", sep, arg.Name, arg.TypeString())
- return err
- })
- }
- // markerName returns a span containing just the appropriately-formatted marker name.
- func markerName(def help.MarkerDoc) Span {
- if def.DeprecatedInFavorOf != nil {
- return deprecatedStyle.Containing(Text("+" + def.Name))
- }
- return markerNameStyle.Containing(Text("+" + def.Name))
- }
- // MarkerSyntaxHelp assembles syntax help for a given marker.
- func MarkerSyntaxHelp(def help.MarkerDoc) Span {
- out := new(SpanWriter)
- out.Print(markerName(def))
- if def.Empty() {
- return out
- }
- sep := ":"
- if def.AnonymousField() {
- sep = ""
- }
- fieldStyle := fieldSummaryStyle
- if def.DeprecatedInFavorOf != nil {
- fieldStyle = deprecatedStyle
- }
- for _, arg := range def.Fields {
- out.Print(fieldStyle.Containing(fieldSyntaxHelp(arg, sep)))
- sep = ","
- }
- return out
- }
|