imp: cli: Allow general optional argument flags (--pretty and
--forecast) to be moved after the subcommand name.
This commit is contained in:
		
							parent
							
								
									6547624e5d
								
							
						
					
					
						commit
						465a5cf917
					
				| @ -36,6 +36,8 @@ etc. | |||||||
| 
 | 
 | ||||||
| -} | -} | ||||||
| 
 | 
 | ||||||
|  | {-# LANGUAGE LambdaCase #-} | ||||||
|  | 
 | ||||||
| module Hledger.Cli.Main where | module Hledger.Cli.Main where | ||||||
| 
 | 
 | ||||||
| import Data.Char (isDigit) | import Data.Char (isDigit) | ||||||
| @ -234,28 +236,29 @@ moveFlagsAfterCommand args = moveArgs $ ensureDebugHasArg args | |||||||
| 
 | 
 | ||||||
|     moveArgs args = insertFlagsAfterCommand $ moveArgs' (args, []) |     moveArgs args = insertFlagsAfterCommand $ moveArgs' (args, []) | ||||||
|       where |       where | ||||||
|         -- -h ..., --version ... |  | ||||||
|         moveArgs' ((f:a:as), flags)   | isMovableNoArgFlag f                   = moveArgs' (a:as, flags ++ [f]) |  | ||||||
|         -- -f FILE ..., --alias ALIAS ... |         -- -f FILE ..., --alias ALIAS ... | ||||||
|         moveArgs' ((f:v:a:as), flags) | isMovableReqArgFlag f, isValue v       = moveArgs' (a:as, flags ++ [f,v]) |         moveArgs' ((f:v:a:as), flags) | isMovableReqArgFlag f, isValue v       = moveArgs' (a:as, flags ++ [f,v]) | ||||||
|         -- -fFILE ..., --alias=ALIAS ... |         -- -fFILE ..., --alias=ALIAS ... | ||||||
|         moveArgs' ((fv:a:as), flags)  | isMovableReqArgFlagAndValue fv         = moveArgs' (a:as, flags ++ [fv]) |         moveArgs' ((fv:a:as), flags)  | isMovableArgFlagAndValue fv            = moveArgs' (a:as, flags ++ [fv]) | ||||||
|         -- -f(missing arg) |         -- -f(missing arg) | ||||||
|         moveArgs' ((f:a:as), flags)   | isMovableReqArgFlag f, not (isValue a) = moveArgs' (a:as, flags ++ [f]) |         moveArgs' ((f:a:as), flags)   | isMovableReqArgFlag f, not (isValue a) = moveArgs' (a:as, flags ++ [f]) | ||||||
|  |         -- -h ..., --version ... | ||||||
|  |         moveArgs' ((f:a:as), flags)   | isMovableNoArgFlag f                   = moveArgs' (a:as, flags ++ [f]) | ||||||
|         -- anything else |         -- anything else | ||||||
|         moveArgs' (as, flags) = (as, flags) |         moveArgs' (as, flags) = (as, flags) | ||||||
| 
 | 
 | ||||||
|         insertFlagsAfterCommand ([],           flags) = flags |         insertFlagsAfterCommand ([],           flags) = flags | ||||||
|         insertFlagsAfterCommand (command:args, flags) = [command] ++ flags ++ args |         insertFlagsAfterCommand (command:args, flags) = [command] ++ flags ++ args | ||||||
| 
 | 
 | ||||||
| isMovableNoArgFlag a  = "-" `isPrefixOf` a && dropWhile (=='-') a `elem` noargflagstomove | isMovableNoArgFlag a  = "-" `isPrefixOf` a && dropWhile (=='-') a `elem` optargflagstomove ++ noargflagstomove | ||||||
| 
 | 
 | ||||||
| isMovableReqArgFlag a = "-" `isPrefixOf` a && dropWhile (=='-') a `elem` reqargflagstomove | isMovableReqArgFlag a = "-" `isPrefixOf` a && dropWhile (=='-') a `elem` reqargflagstomove | ||||||
| 
 | 
 | ||||||
| isMovableReqArgFlagAndValue ('-':'-':a:as) = case break (== '=') (a:as) of (f:fs,_:_) -> (f:fs) `elem` reqargflagstomove | isMovableArgFlagAndValue ('-':'-':a:as) = case break (== '=') (a:as) of | ||||||
|  |     (f:fs,_:_) -> (f:fs) `elem` optargflagstomove ++ reqargflagstomove | ||||||
|     _          -> False |     _          -> False | ||||||
| isMovableReqArgFlagAndValue ('-':shortflag:_:_) = [shortflag] `elem` reqargflagstomove | isMovableArgFlagAndValue ('-':shortflag:_:_) = [shortflag] `elem` reqargflagstomove | ||||||
| isMovableReqArgFlagAndValue _ = False | isMovableArgFlagAndValue _ = False | ||||||
| 
 | 
 | ||||||
| isValue "-"     = True | isValue "-"     = True | ||||||
| isValue ('-':_) = False | isValue ('-':_) = False | ||||||
| @ -265,3 +268,9 @@ flagstomove = inputflags ++ reportflags ++ helpflags | |||||||
| noargflagstomove  = concatMap flagNames $ filter ((==FlagNone).flagInfo) flagstomove | noargflagstomove  = concatMap flagNames $ filter ((==FlagNone).flagInfo) flagstomove | ||||||
| reqargflagstomove = -- filter (/= "debug") $ | reqargflagstomove = -- filter (/= "debug") $ | ||||||
|                     concatMap flagNames $ filter ((==FlagReq ).flagInfo) flagstomove |                     concatMap flagNames $ filter ((==FlagReq ).flagInfo) flagstomove | ||||||
|  | optargflagstomove = concatMap flagNames $ filter (isFlagOpt   .flagInfo) flagstomove | ||||||
|  |   where | ||||||
|  |     isFlagOpt = \case | ||||||
|  |       FlagOpt     _ -> True | ||||||
|  |       FlagOptRare _ -> True | ||||||
|  |       _             -> False | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user