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:
Kayvan Sylvan
2025-09-09 20:16:40 -07:00
parent 65dae9bb85
commit 78280810f4
2 changed files with 33 additions and 1 deletions

View File

@@ -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)
})
}
}

View File

@@ -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 ""