Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 37 additions & 10 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ type output struct {
// config defines how tags should be modified
type config struct {
file string
dir string
output string
quiet bool
write bool
Expand Down Expand Up @@ -73,22 +74,37 @@ type config struct {
}

func main() {
if err := realMain(); err != nil {
fmt.Fprintln(os.Stderr, err.Error())
os.Exit(1)
}
}

func realMain() error {
cfg, err := parseConfig(os.Args[1:])
if err != nil {
if err == flag.ErrHelp {
return nil
return
}
logErrAndExit(err)
}

if cfg.dir == "" {
if err := realMain(cfg); err != nil {
logErrAndExit(err)
}
} else {
entries, err := os.ReadDir(cfg.dir)
if err != nil {
logErrAndExit(err)
}
for _, e := range entries {
newCfg := *cfg
newCfg.file = cfg.dir + "/" + e.Name()
newCfg.dir = ""
fmt.Println("executing for file ", newCfg.file)
if err := realMain(&newCfg); err != nil {
logErrAndExit(err)
}
}
return err
}
}

err = cfg.validate()
func realMain(cfg *config) error {
err := cfg.validate()
if err != nil {
return err
}
Expand Down Expand Up @@ -125,6 +141,7 @@ func parseConfig(args []string) (*config, error) {
var (
// file flags
flagFile = flag.String("file", "", "Filename to be parsed")
flagDir = flag.String("dir", "", "dir to be parsed")
flagWrite = flag.Bool("w", false, "Write results to (source) file")
flagQuiet = flag.Bool("quiet", false, "Don't print result to stdout")

Expand Down Expand Up @@ -185,6 +202,7 @@ func parseConfig(args []string) (*config, error) {

cfg := &config{
file: *flagFile,
dir: *flagDir,
line: *flagLine,
structName: *flagStruct,
fieldName: *flagField,
Expand Down Expand Up @@ -799,6 +817,10 @@ func (c *config) validate() error {
return errors.New("no file is passed")
}

if c.dir != "" && c.file != "" {
return errors.New("cannot use -dir and -file together")
}

if c.line == "" && c.offset == 0 && c.structName == "" && !c.all {
return errors.New("-line, -offset, -struct or -all is not passed")
}
Expand Down Expand Up @@ -920,3 +942,8 @@ func deref(x ast.Expr) ast.Expr {
}
return x
}

func logErrAndExit(err error) {
fmt.Fprintln(os.Stderr, err.Error())
os.Exit(1)
}