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  }