diff --git a/hledger/Hledger/Cli/Main.hs b/hledger/Hledger/Cli/Main.hs index 9db220d6a..878d84cfa 100644 --- a/hledger/Hledger/Cli/Main.hs +++ b/hledger/Hledger/Cli/Main.hs @@ -167,12 +167,13 @@ moveFlagsAfterCommand args = moveArgs $ ensureDebugHasArg args _ -> as -- -h ..., --version ... - moveArgs (f:a:as) | isMovableNoArgFlag f = (moveArgs $ a:as) ++ [f] + moveArgs (f:a:as) | isMovableNoArgFlag f = (moveArgs $ a:as) ++ [f] -- -f FILE ..., --alias ALIAS ... - moveArgs (f:v:a:as) | isMovableReqArgFlag f - , not (take 1 v == "-") = (moveArgs $ a:as) ++ [f,v] + moveArgs (f:v:a:as) | isMovableReqArgFlag f, isValue v = (moveArgs $ a:as) ++ [f,v] -- -fFILE ..., --alias=ALIAS ... - moveArgs (fv:a:as) | isMovableReqArgFlagAndValue fv = (moveArgs $ a:as) ++ [fv] + moveArgs (fv:a:as) | isMovableReqArgFlagAndValue fv = (moveArgs $ a:as) ++ [fv] + -- -f(missing arg) + moveArgs (f:a:as) | isMovableReqArgFlag f, not (isValue a) = (moveArgs $ a:as) ++ [f] -- anything else moveArgs as = as @@ -185,6 +186,10 @@ isMovableReqArgFlagAndValue ('-':'-':a:as) = case break (== '=') (a:as) of (f:fs isMovableReqArgFlagAndValue ('-':shortflag:_:_) = [shortflag] `elem` reqargflagstomove isMovableReqArgFlagAndValue _ = False +isValue "-" = True +isValue ('-':_) = False +isValue _ = True + flagstomove = inputflags ++ helpflags noargflagstomove = concatMap flagNames $ filter ((==FlagNone).flagInfo) flagstomove reqargflagstomove = -- filter (/= "debug") $ diff --git a/tests/cli/cli.test b/tests/cli/cli.test index e988c2547..2736e7675 100644 --- a/tests/cli/cli.test +++ b/tests/cli/cli.test @@ -122,12 +122,12 @@ hledger --daily register >>>=1 # 12. help and input flags can go before command -hledger -f /dev/null --alias somealiases --rules-file -? -h --help --version --debug 1 register --daily +hledger -f /dev/null --alias somealiases --rules-file -h --help --version --debug 1 register --daily >>> /^hledger \[COMMAND\]/ >>>=0 # 13. or after it, and spaces in options are optional -hledger register -f/dev/null --alias=somealiases --rules-file -? -h --help --version --debug 1 --daily +hledger register -f/dev/null --alias=somealiases --rules-file -h --help --version --debug 1 --daily >>> /^register \[OPTIONS\]/ >>>=0