Merge pull request #1782 from aluzzardi/do-help-improvements

dagger do: Improve help message
This commit is contained in:
Andrea Luzzardi 2022-03-14 12:56:43 -07:00 committed by GitHub
commit 21c6af0678
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 30 deletions

View File

@ -3,6 +3,7 @@ package cmd
import ( import (
"context" "context"
"fmt" "fmt"
"io"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -110,34 +111,44 @@ func getTargetPath(args []string) cue.Path {
func doHelpCmd(cmd *cobra.Command, _ []string) { func doHelpCmd(cmd *cobra.Command, _ []string) {
lg := logger.New() lg := logger.New()
fmt.Printf("%s\n\n%s", cmd.Short, cmd.UsageString()) fmt.Println(cmd.Short)
err := printActions(os.Stdout, getTargetPath(cmd.Flags().Args()))
fmt.Printf("\n%s", cmd.UsageString())
p, err := loadPlan()
if err != nil { if err != nil {
lg.Fatal().Err(err).Msg("failed to load plan") lg.Fatal().Err(err).Msg("failed to load plan")
} }
}
func printActions(w io.Writer, target cue.Path) error {
p, err := loadPlan()
if err != nil {
return err
}
target := getTargetPath(cmd.Flags().Args())
action := p.Action().FindByPath(target) action := p.Action().FindByPath(target)
if action == nil { if action == nil {
lg.Fatal().Msg(fmt.Sprintf("action %s not found", target.String())) return fmt.Errorf("action %s not found", target.String())
return
} }
if len(action.Name) < 1 { if len(action.Name) < 1 {
return return nil
} }
fmt.Println("") fmt.Printf("\nAvailable Actions:\n")
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.StripEscape) tw := tabwriter.NewWriter(w, 0, 0, 1, ' ', tabwriter.StripEscape)
defer w.Flush() defer tw.Flush()
for _, a := range action.Children { for _, a := range action.Children {
if !a.Hidden { if !a.Hidden {
lineParts := []string{"", a.Name, strings.TrimSpace(a.Comment)} lineParts := []string{"", a.Name, a.Documentation}
fmt.Fprintln(w, strings.Join(lineParts, "\t")) fmt.Fprintln(tw, strings.Join(lineParts, "\t"))
} }
} }
return nil
} }
func init() { func init() {

View File

@ -6,6 +6,7 @@ import (
"path/filepath" "path/filepath"
"sort" "sort"
"strconv" "strconv"
"strings"
"cuelang.org/go/cue" "cuelang.org/go/cue"
"cuelang.org/go/cue/ast" "cuelang.org/go/cue/ast"
@ -346,3 +347,16 @@ func (v *Value) Default() (*Value, bool) {
func (v *Value) Doc() []*ast.CommentGroup { func (v *Value) Doc() []*ast.CommentGroup {
return v.Cue().Doc() return v.Cue().Doc()
} }
// DocSummary returns the first line of documentation
func (v *Value) DocSummary() string {
doc := ""
for _, c := range v.Doc() {
doc += c.Text()
}
doc = strings.TrimSpace(doc)
doc = strings.SplitN(doc, "\n", 2)[0]
return doc
}

View File

@ -5,12 +5,11 @@ import (
) )
type Action struct { type Action struct {
Name string Name string
Hidden bool Hidden bool
Path cue.Path Path cue.Path
Comment string Documentation string
Children []*Action Children []*Action
// pkg string
} }
func (a *Action) AddChild(c *Action) { func (a *Action) AddChild(c *Action) {

View File

@ -199,9 +199,7 @@ func (p *Plan) fillAction() {
if !actions.Exists() { if !actions.Exists() {
return return
} }
for _, cg := range actions.Doc() { p.action.Documentation = actions.DocSummary()
p.action.Comment += cg.Text()
}
tasks := flow.Tasks() tasks := flow.Tasks()
@ -214,17 +212,12 @@ func (p *Plan) fillAction() {
a := prevAction.FindByPath(path) a := prevAction.FindByPath(path)
if a == nil { if a == nil {
v := p.Source().LookupPath(path) v := p.Source().LookupPath(path)
childComment := ""
for _, cg := range v.Doc() {
childComment += cg.Text()
}
a = &Action{ a = &Action{
Name: s.String(), Name: s.String(),
Hidden: s.PkgPath() != "", Hidden: s.PkgPath() != "",
Path: path, Path: path,
Comment: childComment, Documentation: v.DocSummary(),
Children: []*Action{}, Children: []*Action{},
} }
prevAction.AddChild(a) prevAction.AddChild(a)
} }