github.com/bingoohuang/pkger@v0.0.0-20210127185155-a71b9df4c4c7/cmd/pkger/cmds/parse.go (about) 1 package cmds 2 3 import ( 4 "encoding/json" 5 "flag" 6 "os" 7 8 "github.com/bingoohuang/pkger/here" 9 "github.com/bingoohuang/pkger/parser" 10 ) 11 12 type parseCmd struct { 13 *flag.FlagSet 14 json bool 15 help bool 16 } 17 18 func (s *parseCmd) Name() string { 19 return s.Flags().Name() 20 } 21 22 func (c *parseCmd) Flags() *flag.FlagSet { 23 if c.FlagSet == nil { 24 c.FlagSet = flag.NewFlagSet("parse", flag.ExitOnError) 25 // c.BoolVar(&c.json, "json", false, "outputs as json") 26 c.BoolVar(&c.help, "h", false, "prints help information") 27 } 28 return c.FlagSet 29 } 30 31 func (c *parseCmd) Exec(args []string) error { 32 33 c.Parse(args) 34 35 if c.help { 36 c.Usage() 37 return nil 38 } 39 40 args = c.Args() 41 if len(args) == 0 { 42 args = append(args, ".") 43 } 44 45 m := map[string]parser.Decls{} 46 47 for _, a := range args { 48 var info here.Info 49 var err error 50 51 if a == "." { 52 info, err = here.Dir(a) 53 if err != nil { 54 return err 55 } 56 } else { 57 info, err = here.Package(a) 58 if err != nil { 59 return err 60 } 61 62 } 63 decls, err := parser.Parse(info) 64 if err != nil { 65 return err 66 } 67 m[a] = decls 68 } 69 70 enc := json.NewEncoder(os.Stdout) 71 enc.SetIndent("", " ") 72 return enc.Encode(m) 73 }