extract common cmd flags
This commit is contained in:
@@ -22,6 +22,7 @@ import (
|
||||
"os"
|
||||
|
||||
"github.com/goplus/llgo/cmd/internal/base"
|
||||
"github.com/goplus/llgo/cmd/internal/flags"
|
||||
"github.com/goplus/llgo/internal/build"
|
||||
"github.com/goplus/llgo/internal/mockable"
|
||||
)
|
||||
@@ -34,14 +35,22 @@ var Cmd = &base.Command{
|
||||
|
||||
func init() {
|
||||
Cmd.Run = runCmd
|
||||
flags.AddBuildFlags(&Cmd.Flag)
|
||||
flags.AddOutputFlags(&Cmd.Flag)
|
||||
}
|
||||
|
||||
func runCmd(cmd *base.Command, args []string) {
|
||||
conf := build.NewDefaultConf(build.ModeBuild)
|
||||
if len(args) >= 2 && args[0] == "-o" {
|
||||
conf.OutFile = args[1]
|
||||
args = args[2:]
|
||||
if err := cmd.Flag.Parse(args); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
conf := build.NewDefaultConf(build.ModeBuild)
|
||||
conf.Tags = flags.Tags
|
||||
conf.Verbose = flags.Verbose
|
||||
conf.OutFile = flags.OutputFile
|
||||
|
||||
args = cmd.Flag.Args()
|
||||
|
||||
_, err := build.Do(args, conf)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
|
||||
@@ -19,6 +19,7 @@ package clean
|
||||
|
||||
import (
|
||||
"github.com/goplus/llgo/cmd/internal/base"
|
||||
"github.com/goplus/llgo/cmd/internal/flags"
|
||||
"github.com/goplus/llgo/internal/build"
|
||||
)
|
||||
|
||||
@@ -30,9 +31,18 @@ var Cmd = &base.Command{
|
||||
|
||||
func init() {
|
||||
Cmd.Run = runCmd
|
||||
flags.AddBuildFlags(&Cmd.Flag)
|
||||
}
|
||||
|
||||
func runCmd(cmd *base.Command, args []string) {
|
||||
if err := cmd.Flag.Parse(args); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
conf := build.NewDefaultConf(0)
|
||||
conf.Tags = flags.Tags
|
||||
conf.Verbose = flags.Verbose
|
||||
|
||||
args = cmd.Flag.Args()
|
||||
build.Clean(args, conf)
|
||||
}
|
||||
|
||||
27
cmd/internal/flags/flags.go
Normal file
27
cmd/internal/flags/flags.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package flags
|
||||
|
||||
import (
|
||||
"flag"
|
||||
)
|
||||
|
||||
var OutputFile string
|
||||
|
||||
func AddOutputFlags(fs *flag.FlagSet) {
|
||||
fs.StringVar(&OutputFile, "o", "", "Output file")
|
||||
}
|
||||
|
||||
var Verbose bool
|
||||
var BuildEnv string
|
||||
var Tags string
|
||||
|
||||
func AddBuildFlags(fs *flag.FlagSet) {
|
||||
fs.BoolVar(&Verbose, "v", false, "Verbose mode")
|
||||
fs.StringVar(&Tags, "tags", "", "Build tags")
|
||||
fs.StringVar(&BuildEnv, "buildenv", "", "Build environment")
|
||||
}
|
||||
|
||||
var Gen bool
|
||||
|
||||
func AddCmpTestFlags(fs *flag.FlagSet) {
|
||||
fs.BoolVar(&Gen, "gen", false, "Generate llgo.expect file")
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"os"
|
||||
|
||||
"github.com/goplus/llgo/cmd/internal/base"
|
||||
"github.com/goplus/llgo/cmd/internal/flags"
|
||||
"github.com/goplus/llgo/internal/build"
|
||||
"github.com/goplus/llgo/internal/mockable"
|
||||
)
|
||||
@@ -34,10 +35,19 @@ var Cmd = &base.Command{
|
||||
|
||||
func init() {
|
||||
Cmd.Run = runCmd
|
||||
flags.AddBuildFlags(&Cmd.Flag)
|
||||
}
|
||||
|
||||
func runCmd(cmd *base.Command, args []string) {
|
||||
if err := cmd.Flag.Parse(args); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
conf := build.NewDefaultConf(build.ModeInstall)
|
||||
conf.Tags = flags.Tags
|
||||
conf.Verbose = flags.Verbose
|
||||
|
||||
args = cmd.Flag.Args()
|
||||
_, err := build.Do(args, conf)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
|
||||
@@ -21,9 +21,9 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/goplus/llgo/cmd/internal/base"
|
||||
"github.com/goplus/llgo/cmd/internal/flags"
|
||||
"github.com/goplus/llgo/internal/build"
|
||||
"github.com/goplus/llgo/internal/mockable"
|
||||
)
|
||||
@@ -47,6 +47,9 @@ var CmpTestCmd = &base.Command{
|
||||
func init() {
|
||||
Cmd.Run = runCmd
|
||||
CmpTestCmd.Run = runCmpTest
|
||||
flags.AddBuildFlags(&Cmd.Flag)
|
||||
flags.AddBuildFlags(&CmpTestCmd.Flag)
|
||||
flags.AddCmpTestFlags(&CmpTestCmd.Flag)
|
||||
}
|
||||
|
||||
func runCmd(cmd *base.Command, args []string) {
|
||||
@@ -57,12 +60,17 @@ func runCmpTest(cmd *base.Command, args []string) {
|
||||
runCmdEx(cmd, args, build.ModeCmpTest)
|
||||
}
|
||||
|
||||
func runCmdEx(_ *base.Command, args []string, mode build.Mode) {
|
||||
conf := build.NewDefaultConf(mode)
|
||||
if mode == build.ModeCmpTest && len(args) > 0 && args[0] == "-gen" {
|
||||
conf.GenExpect = true
|
||||
args = args[1:]
|
||||
func runCmdEx(cmd *base.Command, args []string, mode build.Mode) {
|
||||
if err := cmd.Flag.Parse(args); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
conf := build.NewDefaultConf(mode)
|
||||
conf.Tags = flags.Tags
|
||||
conf.Verbose = flags.Verbose
|
||||
conf.GenExpect = flags.Gen
|
||||
|
||||
args = cmd.Flag.Args()
|
||||
args, runArgs, err := parseRunArgs(args)
|
||||
check(err)
|
||||
conf.RunArgs = runArgs
|
||||
@@ -74,24 +82,11 @@ func runCmdEx(_ *base.Command, args []string, mode build.Mode) {
|
||||
}
|
||||
|
||||
func parseRunArgs(args []string) ([]string, []string, error) {
|
||||
n := build.SkipFlagArgs(args)
|
||||
if n < 0 {
|
||||
if len(args) == 0 {
|
||||
return nil, nil, errNoProj
|
||||
}
|
||||
|
||||
arg := args[n]
|
||||
if isGoFile(arg) {
|
||||
n++
|
||||
for n < len(args) && isGoFile(args[n]) {
|
||||
n++
|
||||
}
|
||||
return args[:n], args[n:], nil
|
||||
}
|
||||
return args[:n+1], args[n+1:], nil
|
||||
}
|
||||
|
||||
func isGoFile(fname string) bool {
|
||||
return filepath.Ext(fname) == ".go"
|
||||
return args[:1], args[1:], nil
|
||||
}
|
||||
|
||||
func check(err error) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"os"
|
||||
|
||||
"github.com/goplus/llgo/cmd/internal/base"
|
||||
"github.com/goplus/llgo/cmd/internal/flags"
|
||||
"github.com/goplus/llgo/internal/build"
|
||||
)
|
||||
|
||||
@@ -16,15 +17,19 @@ var Cmd = &base.Command{
|
||||
|
||||
func init() {
|
||||
Cmd.Run = runCmd
|
||||
flags.AddBuildFlags(&Cmd.Flag)
|
||||
}
|
||||
|
||||
func runCmd(cmd *base.Command, args []string) {
|
||||
runCmdEx(cmd, args, build.ModeRun)
|
||||
}
|
||||
if err := cmd.Flag.Parse(args); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
func runCmdEx(_ *base.Command, args []string, mode build.Mode) {
|
||||
conf := build.NewDefaultConf(mode)
|
||||
conf.Mode = build.ModeTest
|
||||
conf := build.NewDefaultConf(build.ModeTest)
|
||||
conf.Tags = flags.Tags
|
||||
conf.Verbose = flags.Verbose
|
||||
|
||||
args = cmd.Flag.Args()
|
||||
_, err := build.Do(args, conf)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
|
||||
Reference in New Issue
Block a user