From 0f8707a47deb28593d320f15fd1c881986ea85b5 Mon Sep 17 00:00:00 2001 From: feedmeapples Date: Thu, 10 Nov 2022 21:47:37 -0500 Subject: [PATCH 1/4] Allow disabling SliceFlag separator altogether --- app.go | 4 ++++ flag.go | 9 ++++++++- flag_test.go | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app.go b/app.go index e7f79c5130..10198f4332 100644 --- a/app.go +++ b/app.go @@ -107,6 +107,8 @@ type App struct { CustomAppHelpTemplate string // SliceFlagSeparator is used to customize the separator for SliceFlag, the default is "," SliceFlagSeparator string + // DisableSliceFlagSeparator is used to disable SliceFlagSeparator, the default is false + DisableSliceFlagSeparator bool // Boolean to enable short-option handling so user can combine several // single-character bool arguments into one // i.e. foobar -o -v -> foobar -ov @@ -264,6 +266,8 @@ func (a *App) Setup() { if len(a.SliceFlagSeparator) != 0 { defaultSliceFlagSeparator = a.SliceFlagSeparator } + + disableSliceFlagSeparator = a.DisableSliceFlagSeparator } func (a *App) newRootCommand() *Command { diff --git a/flag.go b/flag.go index b66a75da5e..5c0a8b7328 100644 --- a/flag.go +++ b/flag.go @@ -15,7 +15,10 @@ import ( const defaultPlaceholder = "value" -var defaultSliceFlagSeparator = "," +var ( + defaultSliceFlagSeparator = "," + disableSliceFlagSeparator = false +) var ( slPfx = fmt.Sprintf("sl:::%d:::", time.Now().UTC().UnixNano()) @@ -380,5 +383,9 @@ func flagFromEnvOrFile(envVars []string, filePath string) (value string, fromWhe } func flagSplitMultiValues(val string) []string { + if disableSliceFlagSeparator { + return []string{val} + } + return strings.Split(val, defaultSliceFlagSeparator) } diff --git a/flag_test.go b/flag_test.go index 3a2bc2b67e..82f1ee34a0 100644 --- a/flag_test.go +++ b/flag_test.go @@ -3402,3 +3402,19 @@ func TestCustomizedSliceFlagSeparator(t *testing.T) { } } } + +func TestFlagSplitMultiValues_Disabled(t *testing.T) { + disableSliceFlagSeparator = true + defer func() { + disableSliceFlagSeparator = false + }() + opts := []string{"opt1", "opt2", "opt3,op", "opt4"} + ret := flagSplitMultiValues(strings.Join(opts, ",")) + if len(ret) != 1 { + t.Fatalf("failed to disable split slice flag, want: 1, but got: %d", len(ret)) + } + + if ret[0] != strings.Join(opts, ",") { + t.Fatalf("failed to disable split slice flag, want: %s, but got: %s", strings.Join(opts, ","), ret[0]) + } +} From 377947fbebabd1c20f744574af1a10f88c80d18a Mon Sep 17 00:00:00 2001 From: feedmeapples Date: Thu, 10 Nov 2022 21:51:59 -0500 Subject: [PATCH 2/4] replace test hardcode with defaultSliceFlagSeparator --- flag_test.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/flag_test.go b/flag_test.go index 82f1ee34a0..f8205085a3 100644 --- a/flag_test.go +++ b/flag_test.go @@ -3408,13 +3408,14 @@ func TestFlagSplitMultiValues_Disabled(t *testing.T) { defer func() { disableSliceFlagSeparator = false }() + opts := []string{"opt1", "opt2", "opt3,op", "opt4"} - ret := flagSplitMultiValues(strings.Join(opts, ",")) + ret := flagSplitMultiValues(strings.Join(opts, defaultSliceFlagSeparator)) if len(ret) != 1 { t.Fatalf("failed to disable split slice flag, want: 1, but got: %d", len(ret)) } - if ret[0] != strings.Join(opts, ",") { - t.Fatalf("failed to disable split slice flag, want: %s, but got: %s", strings.Join(opts, ","), ret[0]) + if ret[0] != strings.Join(opts, defaultSliceFlagSeparator) { + t.Fatalf("failed to disable split slice flag, want: %s, but got: %s", strings.Join(opts, defaultSliceFlagSeparator), ret[0]) } } From ceb75a15631f10010c4d3a083b62bb9e3b8555af Mon Sep 17 00:00:00 2001 From: feedmeapples Date: Thu, 10 Nov 2022 22:11:22 -0500 Subject: [PATCH 3/4] godoc --- godoc-current.txt | 2 ++ testdata/godoc-v2.x.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/godoc-current.txt b/godoc-current.txt index b8dbf6ad0a..6afd244f25 100644 --- a/godoc-current.txt +++ b/godoc-current.txt @@ -318,6 +318,8 @@ type App struct { CustomAppHelpTemplate string // SliceFlagSeparator is used to customize the separator for SliceFlag, the default is "," SliceFlagSeparator string + // DisableSliceFlagSeparator is used to disable SliceFlagSeparator, the default is false + DisableSliceFlagSeparator bool // Boolean to enable short-option handling so user can combine several // single-character bool arguments into one // i.e. foobar -o -v -> foobar -ov diff --git a/testdata/godoc-v2.x.txt b/testdata/godoc-v2.x.txt index b8dbf6ad0a..74dd360949 100644 --- a/testdata/godoc-v2.x.txt +++ b/testdata/godoc-v2.x.txt @@ -318,6 +318,8 @@ type App struct { CustomAppHelpTemplate string // SliceFlagSeparator is used to customize the separator for SliceFlag, the default is "," SliceFlagSeparator string + // DisableSliceFlagSeparator is used to disable SliceFlagSeparator, the default is false + DisableSliceFlagSeparator bool // Boolean to enable short-option handling so user can combine several // single-character bool arguments into one // i.e. foobar -o -v -> foobar -ov From 9b0812c7b4a7a456105dbdfe2d9d38514cb7a668 Mon Sep 17 00:00:00 2001 From: feedmeapples Date: Wed, 16 Nov 2022 18:12:07 -0500 Subject: [PATCH 4/4] Update godoc v2 spacing --- testdata/godoc-v2.x.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testdata/godoc-v2.x.txt b/testdata/godoc-v2.x.txt index 74dd360949..6afd244f25 100644 --- a/testdata/godoc-v2.x.txt +++ b/testdata/godoc-v2.x.txt @@ -318,7 +318,7 @@ type App struct { CustomAppHelpTemplate string // SliceFlagSeparator is used to customize the separator for SliceFlag, the default is "," SliceFlagSeparator string - // DisableSliceFlagSeparator is used to disable SliceFlagSeparator, the default is false + // DisableSliceFlagSeparator is used to disable SliceFlagSeparator, the default is false DisableSliceFlagSeparator bool // Boolean to enable short-option handling so user can combine several // single-character bool arguments into one