llcppsymg & llcppsigfetch parse args
This commit is contained in:
63
chore/_xtool/llcppsymg/_cmptest/args_test/args.go
Normal file
63
chore/_xtool/llcppsymg/_cmptest/args_test/args.go
Normal file
@@ -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()
|
||||
}
|
||||
}
|
||||
54
chore/_xtool/llcppsymg/_cmptest/args_test/llgo.expect
Normal file
54
chore/_xtool/llcppsymg/_cmptest/args_test/llgo.expect
Normal file
@@ -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
|
||||
51
chore/_xtool/llcppsymg/args/args.go
Normal file
51
chore/_xtool/llcppsymg/args/args.go
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user