From 90e43ed1639992f9e90302985ee3b91713bba309 Mon Sep 17 00:00:00 2001 From: Hau Nguyen Date: Thu, 24 Nov 2022 23:11:15 +0700 Subject: [PATCH] feat: flags from gofmt --- cmd/gofimports/main.go | 7 ++++ go.mod | 15 +++++++++ go.sum | 21 ++++++++++++ internal/cli/action.go | 38 ++++++++++++++++++++++ internal/cli/app.go | 72 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100644 cmd/gofimports/main.go create mode 100644 go.sum create mode 100644 internal/cli/action.go create mode 100644 internal/cli/app.go diff --git a/cmd/gofimports/main.go b/cmd/gofimports/main.go new file mode 100644 index 0000000..ec9f31b --- /dev/null +++ b/cmd/gofimports/main.go @@ -0,0 +1,7 @@ +package main + +import "github.com/haunt98/gofimports/internal/cli" + +func main() { + cli.NewApp().Run() +} diff --git a/go.mod b/go.mod index 25162d7..a42a881 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,18 @@ module github.com/haunt98/gofimports go 1.19 + +require ( + github.com/make-go-great/color-go v0.4.1 + github.com/urfave/cli/v2 v2.23.5 +) + +require ( + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/mattn/go-colorable v0.1.9 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..982c58a --- /dev/null +++ b/go.sum @@ -0,0 +1,21 @@ +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/make-go-great/color-go v0.4.1 h1:4HIat5r1oQneu5BSDUjHKN/9x4Ay2qEEkswdOgk/VRY= +github.com/make-go-great/color-go v0.4.1/go.mod h1:G5G8IJ3PUo+vSQ+UvnfaswF8O/piVIhFJKv1mQjBGpI= +github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/urfave/cli/v2 v2.23.5 h1:xbrU7tAYviSpqeR3X4nEFWUdB/uDZ6DE+HxmRU7Xtyw= +github.com/urfave/cli/v2 v2.23.5/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/internal/cli/action.go b/internal/cli/action.go new file mode 100644 index 0000000..3397cbd --- /dev/null +++ b/internal/cli/action.go @@ -0,0 +1,38 @@ +package cli + +import ( + "fmt" + + "github.com/urfave/cli/v2" +) + +type action struct { + flags struct { + list bool + write bool + diff bool + } +} + +func (a *action) RunHelp(c *cli.Context) error { + return cli.ShowAppHelp(c) +} + +func (a *action) getFlags(c *cli.Context) { + a.flags.list = c.Bool(flagListName) + a.flags.write = c.Bool(flagWriteName) + a.flags.diff = c.Bool(flagDiffName) +} + +func (a *action) Run(c *cli.Context) error { + a.getFlags(c) + + if !a.flags.write && + !a.flags.diff { + a.RunHelp(c) + fmt.Println("Error: -w or -d must required one") + return nil + } + + return nil +} diff --git a/internal/cli/app.go b/internal/cli/app.go new file mode 100644 index 0000000..46106e7 --- /dev/null +++ b/internal/cli/app.go @@ -0,0 +1,72 @@ +package cli + +import ( + "os" + + "github.com/make-go-great/color-go" + "github.com/urfave/cli/v2" +) + +const ( + name = "gofimports" + usage = "goimports with my opinionated preferences" + + // Inspiration from gofmt flags + flagListName = "list" + flagListUsage = "list files will be changed" + + flagWriteName = "write" + flagWriteUsage = "actually write changes to (source) files" + + // If both write and diff is exist + // Choose diff + flagDiffName = "diff" + flagDiffUsage = "show diff instead of writing changes" +) + +var ( + flagListAliases = []string{"l"} + flagWriteAliases = []string{"w"} + flagDiffAliases = []string{"d"} +) + +type App struct { + cliApp *cli.App +} + +func NewApp() *App { + a := &action{} + + cliApp := &cli.App{ + Name: name, + Usage: usage, + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: flagListName, + Usage: flagListUsage, + Aliases: flagListAliases, + }, + &cli.BoolFlag{ + Name: flagWriteName, + Usage: flagWriteUsage, + Aliases: flagWriteAliases, + }, + &cli.BoolFlag{ + Name: flagDiffName, + Usage: flagDiffUsage, + Aliases: flagDiffAliases, + }, + }, + Action: a.Run, + } + + return &App{ + cliApp: cliApp, + } +} + +func (a *App) Run() { + if err := a.cliApp.Run(os.Args); err != nil { + color.PrintAppError(name, err.Error()) + } +}