mirror of
https://github.com/danielmiessler/Fabric.git
synced 2026-01-09 14:28:01 -05:00
feat: add Windows-style forward slash flag support to CLI argument parser
- Add runtime OS detection for Windows platform - Support `/flag` syntax for Windows command line - Handle Windows colon delimiter `/flag:value` format - Maintain backward compatibility with Unix-style flags - Add comprehensive test coverage for flag extraction - Support both `:` and `=` delimiters on Windows - Preserve existing dash-based flag parsing logic
This commit is contained in:
@@ -455,3 +455,30 @@ func TestBuildChatOptionsWithImageParameters(t *testing.T) {
|
||||
assert.Contains(t, err.Error(), "can only be used with --image-file")
|
||||
})
|
||||
}
|
||||
|
||||
func TestExtractFlag(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
arg string
|
||||
expected string
|
||||
}{
|
||||
// Unix-style flags
|
||||
{"long flag", "--help", "help"},
|
||||
{"long flag with value", "--pattern=analyze", "pattern"},
|
||||
{"short flag", "-h", "h"},
|
||||
{"short flag with value", "-p=test", "p"},
|
||||
{"single dash", "-", ""},
|
||||
{"double dash only", "--", ""},
|
||||
|
||||
// Non-flags
|
||||
{"regular arg", "analyze", ""},
|
||||
{"path arg", "./file.txt", ""},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := extractFlag(tt.arg)
|
||||
assert.Equal(t, tt.expected, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"io"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/danielmiessler/fabric/internal/i18n"
|
||||
@@ -179,7 +180,7 @@ func ensureI18nInitialized() {
|
||||
func detectLanguageFromArgs() string {
|
||||
args := os.Args[1:]
|
||||
for i, arg := range args {
|
||||
if arg == "--language" || arg == "-g" {
|
||||
if arg == "--language" || arg == "-g" || (runtime.GOOS == "windows" && arg == "/g") {
|
||||
if i+1 < len(args) {
|
||||
return args[i+1]
|
||||
}
|
||||
@@ -187,6 +188,10 @@ func detectLanguageFromArgs() string {
|
||||
return strings.TrimPrefix(arg, "--language=")
|
||||
} else if strings.HasPrefix(arg, "-g=") {
|
||||
return strings.TrimPrefix(arg, "-g=")
|
||||
} else if runtime.GOOS == "windows" && strings.HasPrefix(arg, "/g:") {
|
||||
return strings.TrimPrefix(arg, "/g:")
|
||||
} else if runtime.GOOS == "windows" && strings.HasPrefix(arg, "/g=") {
|
||||
return strings.TrimPrefix(arg, "/g=")
|
||||
}
|
||||
}
|
||||
return ""
|
||||
|
||||
Reference in New Issue
Block a user