From 8840968e0758f61debd6c765e3b5ae34ac392a6b Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Mon, 21 Oct 2024 17:43:01 +0800 Subject: [PATCH] llcppsigfetch:refine args parse --- chore/_xtool/llcppsigfetch/llcppsigfetch.go | 102 +++++++++----------- 1 file changed, 48 insertions(+), 54 deletions(-) diff --git a/chore/_xtool/llcppsigfetch/llcppsigfetch.go b/chore/_xtool/llcppsigfetch/llcppsigfetch.go index 42a2a41d..0c35c638 100644 --- a/chore/_xtool/llcppsigfetch/llcppsigfetch.go +++ b/chore/_xtool/llcppsigfetch/llcppsigfetch.go @@ -27,32 +27,58 @@ import ( "github.com/goplus/llgo/c" "github.com/goplus/llgo/c/cjson" "github.com/goplus/llgo/chore/_xtool/llcppsigfetch/parse" + "github.com/goplus/llgo/chore/_xtool/llcppsymg/args" "github.com/goplus/llgo/chore/_xtool/llcppsymg/clangutils" "github.com/goplus/llgo/chore/_xtool/llcppsymg/config" ) func main() { - cfgFile := "" - useStdin := false - outputToFile := false - for i := 1; i < len(os.Args); i++ { - arg := os.Args[i] + ags, remainArgs := args.ParseArgs(os.Args[1:], map[string]bool{ + "--extract": true, + }) + + if ags.Help { + printUsage() + return + } + extract := false + out := false + + var extractFile string + isTemp := false + isCpp := true + otherArgs := []string{} + + for i := 0; i < len(remainArgs); i++ { + arg := remainArgs[i] switch { case arg == "--extract": - runExtract() - return - case arg == "--help" || arg == "-h": - printUsage() - return + extract = true + if i+1 < len(remainArgs) && !strings.HasPrefix(remainArgs[i+1], "-") { + extractFile = remainArgs[i+1] + i++ + } else { + fmt.Println("Error: --extract requires a valid file argument") + printUsage() + os.Exit(1) + } case strings.HasPrefix(arg, "-out="): - outputToFile = parseBoolArg(arg, "out", false) - case cfgFile == "" && !strings.HasPrefix(arg, "-"): - cfgFile = arg - case arg == "-": - useStdin = true + out = parseBoolArg(arg, "out", false) + case strings.HasPrefix(arg, "-temp="): + isTemp = parseBoolArg(arg, "temp", false) + case strings.HasPrefix(arg, "-cpp="): + isCpp = parseBoolArg(arg, "cpp", true) + default: + otherArgs = append(otherArgs, arg) } } - runFromConfig(cfgFile, useStdin, outputToFile) + + if extract { + runExtract(extractFile, isTemp, isCpp, out, otherArgs) + } else { + runFromConfig(ags.CfgFile, ags.UseStdin, out) + } + } func printUsage() { @@ -84,10 +110,6 @@ func printUsage() { } func runFromConfig(cfgFile string, useStdin bool, outputToFile bool) { - if cfgFile == "" { - cfgFile = "llcppg.cfg" - } - var data []byte var err error if useStdin { @@ -114,48 +136,20 @@ func runFromConfig(cfgFile string, useStdin bool, outputToFile bool) { outputInfo(context, outputToFile) } -func runExtract() { - if len(os.Args) < 3 { - fmt.Println("Error: Insufficient arguments for --extract") - printUsage() - os.Exit(1) - } - +func runExtract(file string, isTemp bool, isCpp bool, outToFile bool, otherArgs []string) { cfg := &clangutils.Config{ - File: os.Args[2], - Args: []string{}, - IsCpp: true, - Temp: false, + File: file, + Args: otherArgs, + IsCpp: isCpp, + Temp: isTemp, } - - outputToFile := false - for i := 3; i < len(os.Args); i++ { - arg := os.Args[i] - switch { - case strings.HasPrefix(arg, "-temp="): - cfg.Temp = parseBoolArg(arg, "temp", false) - os.Args = append(os.Args[:i], os.Args[i+1:]...) - i-- - case strings.HasPrefix(arg, "-cpp="): - cfg.IsCpp = parseBoolArg(arg, "cpp", true) - os.Args = append(os.Args[:i], os.Args[i+1:]...) - i-- - case strings.HasPrefix(arg, "-out="): - outputToFile = parseBoolArg(arg, "out", false) - os.Args = append(os.Args[:i], os.Args[i+1:]...) - i-- - default: - cfg.Args = append(cfg.Args, arg) - } - } - converter, err := parse.NewConverter(cfg) check(err) _, err = converter.Convert() check(err) result := converter.MarshalOutputASTFiles() cstr := result.Print() - outputResult(cstr, outputToFile) + outputResult(cstr, outToFile) cjson.FreeCStr(cstr) result.Delete() converter.Dispose()