From 51d9bef113c82cff90c5929d28934bb241e1b1df Mon Sep 17 00:00:00 2001 From: Alex Flint Date: Mon, 21 Oct 2024 17:08:37 -0400 Subject: [PATCH] passing the no-more-options string "--" twice or more should pass the second and subsequent ones through as positionals --- parse.go | 2 +- parse_test.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/parse.go b/parse.go index 172c7cd..d9c73d0 100644 --- a/parse.go +++ b/parse.go @@ -615,7 +615,7 @@ func (p *Parser) process(args []string) error { // must use explicit for loop, not range, because we manipulate i inside the loop for i := 0; i < len(args); i++ { arg := args[i] - if arg == "--" { + if arg == "--" && !allpositional { allpositional = true continue } diff --git a/parse_test.go b/parse_test.go index 5bc781c..7e9cbf9 100644 --- a/parse_test.go +++ b/parse_test.go @@ -609,6 +609,15 @@ func TestNoMoreOptionsBeforeHelp(t *testing.T) { assert.NotEqual(t, ErrHelp, err) } +func TestNoMoreOptionsTwice(t *testing.T) { + var args struct { + X []string `arg:"positional"` + } + err := parse("-- --", &args) + require.NoError(t, err) + assert.Equal(t, []string{"--"}, args.X) +} + func TestHelpFlag(t *testing.T) { var args struct { Foo string