diff --git a/Makefile b/Makefile index f438c45..f518f3a 100644 --- a/Makefile +++ b/Makefile @@ -26,9 +26,10 @@ ineffassign: ineffassign . readmecheck: - cp README.md README.original.md + sed '$ d' README.md > README.original.md autoreadme -f - diff README.md README.original.md + sed '$ d' README.md > README.generated.md + diff README.generated.md README.original.md setup: go get github.com/gordonklaus/ineffassign diff --git a/internal/matcher/option.go b/internal/matcher/option.go index 7ba4ef3..395fead 100644 --- a/internal/matcher/option.go +++ b/internal/matcher/option.go @@ -71,7 +71,7 @@ func (o *opt) Match(args []string, c *ParseContext) (bool, []string) { func (o *opt) matchLongOpt(args []string, idx int, c *ParseContext) (bool, int, []string) { arg := args[idx] - kv := strings.Split(arg, "=") + kv := strings.SplitN(arg, "=", 2) name := kv[0] opt, found := o.index[name] if !found { diff --git a/internal/matcher/option_test.go b/internal/matcher/option_test.go index f89b1fd..a1a1189 100644 --- a/internal/matcher/option_test.go +++ b/internal/matcher/option_test.go @@ -70,12 +70,17 @@ func TestOptMatcher(t *testing.T) { val []string }{ {[]string{"-f", "x"}, []string{}, []string{"x"}}, + {[]string{"-f", "x="}, []string{}, []string{"x="}}, {[]string{"-f=x", "y"}, []string{"y"}, []string{"x"}}, + {[]string{"-f=x=", "y"}, []string{"y"}, []string{"x="}}, {[]string{"-fx", "y"}, []string{"y"}, []string{"x"}}, + {[]string{"-fx=", "y"}, []string{"y"}, []string{"x="}}, {[]string{"-afx", "y"}, []string{"-a", "y"}, []string{"x"}}, {[]string{"-af", "x", "y"}, []string{"-a", "y"}, []string{"x"}}, {[]string{"--force", "x"}, []string{}, []string{"x"}}, + {[]string{"--force", "x="}, []string{}, []string{"x="}}, {[]string{"--force=x", "y"}, []string{"y"}, []string{"x"}}, + {[]string{"--force=x=", "y"}, []string{"y"}, []string{"x="}}, } for _, cas := range cases { diff --git a/internal/matcher/options_test.go b/internal/matcher/options_test.go index 493e2a5..d815c0e 100644 --- a/internal/matcher/options_test.go +++ b/internal/matcher/options_test.go @@ -37,13 +37,18 @@ func TestOptsMatcher(t *testing.T) { {[]string{"--force=false", "y"}, []string{"y"}, [][]string{{"false"}, nil}}, {[]string{"-g", "x"}, []string{}, [][]string{nil, {"x"}}}, + {[]string{"-g", "x="}, []string{}, [][]string{nil, {"x="}}}, {[]string{"-g=x", "y"}, []string{"y"}, [][]string{nil, {"x"}}}, + {[]string{"-g=x=", "y"}, []string{"y"}, [][]string{nil, {"x="}}}, {[]string{"-gx", "y"}, []string{"y"}, [][]string{nil, {"x"}}}, {[]string{"--green", "x"}, []string{}, [][]string{nil, {"x"}}}, + {[]string{"--green", "x="}, []string{}, [][]string{nil, {"x="}}}, {[]string{"--green=x", "y"}, []string{"y"}, [][]string{nil, {"x"}}}, + {[]string{"--green=x=", "y"}, []string{"y"}, [][]string{nil, {"x="}}}, {[]string{"-f", "-g", "x", "y"}, []string{"y"}, [][]string{{"true"}, {"x"}}}, {[]string{"-g", "x", "-f", "y"}, []string{"y"}, [][]string{{"true"}, {"x"}}}, + {[]string{"-g", "x=", "-f", "y"}, []string{"y"}, [][]string{{"true"}, {"x="}}}, {[]string{"-fg", "x", "y"}, []string{"y"}, [][]string{{"true"}, {"x"}}}, {[]string{"-fgxxx", "y"}, []string{"y"}, [][]string{{"true"}, {"xxx"}}}, }