From 01bf7c8c388c0cb90f3bee5746884435b285667f Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Fri, 18 Oct 2024 23:35:52 +0800 Subject: [PATCH] llcppsymg & llcppsigfetch parse args --- .../llcppsymg/_cmptest/args_test/args.go | 63 +++++++++++++++++++ .../llcppsymg/_cmptest/args_test/llgo.expect | 54 ++++++++++++++++ chore/_xtool/llcppsymg/args/args.go | 51 +++++++++++++++ 3 files changed, 168 insertions(+) create mode 100644 chore/_xtool/llcppsymg/_cmptest/args_test/args.go create mode 100644 chore/_xtool/llcppsymg/_cmptest/args_test/llgo.expect create mode 100644 chore/_xtool/llcppsymg/args/args.go diff --git a/chore/_xtool/llcppsymg/_cmptest/args_test/args.go b/chore/_xtool/llcppsymg/_cmptest/args_test/args.go new file mode 100644 index 00000000..76dcf7a7 --- /dev/null +++ b/chore/_xtool/llcppsymg/_cmptest/args_test/args.go @@ -0,0 +1,63 @@ +package main + +import ( + "fmt" + + "github.com/goplus/llgo/chore/_xtool/llcppsymg/args" +) + +func main() { + TestParseArgs() +} + +func TestParseArgs() { + fmt.Println("=== Test ParseArgs ===") + + swflags := map[string]bool{ + "--extract": true, + } + + testCases := []struct { + name string + input []string + }{ + { + name: "Basic flags", + input: []string{"-h", "-v", "-"}, + }, + { + name: "Config file", + input: []string{"lua.llcppg.cfg"}, + }, + { + name: "Extract with multiple args", + input: []string{"--extract", "file1.h", "file2.h", "-v"}, + }, + { + name: "Non-skippable flags", + input: []string{"--extract", "file1.h", "file2.h", "-out=true", "-cpp=true", "-v"}, + }, + { + name: "Mixed flags", + input: []string{"-v", "--extract", "file.h", "-out=true", "config.json"}, + }, + { + name: "Empty input", + input: []string{}, + }, + } + + for _, tc := range testCases { + fmt.Printf("Test case: %s\n", tc.name) + fmt.Printf("Input: %v\n", tc.input) + + result, filteredArgs := args.ParseArgs(tc.input, swflags) + + fmt.Printf("Help: %v\n", result.Help) + fmt.Printf("Verbose: %v\n", result.Verbose) + fmt.Printf("UseStdin: %v\n", result.UseStdin) + fmt.Printf("CfgFile: %s\n", result.CfgFile) + fmt.Printf("FilteredArgs: %v\n", filteredArgs) + fmt.Println() + } +} diff --git a/chore/_xtool/llcppsymg/_cmptest/args_test/llgo.expect b/chore/_xtool/llcppsymg/_cmptest/args_test/llgo.expect new file mode 100644 index 00000000..2f1e9416 --- /dev/null +++ b/chore/_xtool/llcppsymg/_cmptest/args_test/llgo.expect @@ -0,0 +1,54 @@ +#stdout +=== Test ParseArgs === +Test case: Basic flags +Input: [-h -v -] +Help: true +Verbose: true +UseStdin: true +CfgFile: llcppg.cfg +FilteredArgs: [] + +Test case: Config file +Input: [lua.llcppg.cfg] +Help: false +Verbose: false +UseStdin: false +CfgFile: lua.llcppg.cfg +FilteredArgs: [] + +Test case: Extract with multiple args +Input: [--extract file1.h file2.h -v] +Help: false +Verbose: true +UseStdin: false +CfgFile: llcppg.cfg +FilteredArgs: [--extract file1.h file2.h] + +Test case: Non-skippable flags +Input: [--extract file1.h file2.h -out=true -cpp=true -v] +Help: false +Verbose: true +UseStdin: false +CfgFile: llcppg.cfg +FilteredArgs: [--extract file1.h file2.h -out=true -cpp=true] + +Test case: Mixed flags +Input: [-v --extract file.h -out=true config.json] +Help: false +Verbose: true +UseStdin: false +CfgFile: config.json +FilteredArgs: [--extract file.h -out=true] + +Test case: Empty input +Input: [] +Help: false +Verbose: false +UseStdin: false +CfgFile: llcppg.cfg +FilteredArgs: [] + + +#stderr + +#exit 0 diff --git a/chore/_xtool/llcppsymg/args/args.go b/chore/_xtool/llcppsymg/args/args.go new file mode 100644 index 00000000..76d1eaa1 --- /dev/null +++ b/chore/_xtool/llcppsymg/args/args.go @@ -0,0 +1,51 @@ +package args + +import "strings" + +type Args struct { + Help bool + Verbose bool + UseStdin bool + CfgFile string +} + +func ParseArgs(args []string, swflags map[string]bool) (*Args, []string) { + result := &Args{} + filteredArgs := []string{} + for i := 0; i < len(args); i++ { + arg := args[i] + if strings.HasPrefix(arg, "-") { + switch arg { + case "-h", "--help": + result.Help = true + continue + case "-v": + result.Verbose = true + continue + case "-": + result.UseStdin = true + continue + default: + if hasArg, ok := swflags[arg]; ok { + if hasArg { + filteredArgs = append(filteredArgs, arg) + for i+1 < len(args) && !strings.HasPrefix(args[i+1], "-") { + filteredArgs = append(filteredArgs, args[i+1]) + i++ + } + continue + } + } + filteredArgs = append(filteredArgs, arg) + } + } else if result.CfgFile == "" { + result.CfgFile = arg + } else { + filteredArgs = append(filteredArgs, arg) + } + } + if result.CfgFile == "" { + result.CfgFile = "llcppg.cfg" + } + return result, filteredArgs +}