llcppsymg & llcppsigfetch parse args

This commit is contained in:
luoliwoshang
2024-10-18 23:35:52 +08:00
parent 5529a1b0b3
commit 01bf7c8c38
3 changed files with 168 additions and 0 deletions

View 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()
}
}

View 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

View 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
}