cli: fix opts parsing regressions from feb
Since commit 7aab544, "-f -" before the command broke command
detection, causing spurious "no such option" errors (and breaking
about 70 functional tests which neither I nor travis noticed).
This commit is contained in:
parent
c6f1371251
commit
25cd65442a
@ -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") $
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user