sensei-0.0.0: src/Options.hs
module Options (splitArgs) where
import Data.List
import System.Console.GetOpt
splitArgs :: [String] -> ([String], [String])
splitArgs args = case break (== "--") $ reverse args of
(xs, "--" : ys) -> (reverse ys, reverse xs)
_ -> case filter isHspecArgs $ tails args of
x : _ -> (dropEnd (length x) args, x)
[] -> (args, [])
where
isHspecArgs xs = case getOpt Permute options xs of
(_, [], []) -> True
_ -> False
dropEnd :: Int -> [a] -> [a]
dropEnd n = reverse . drop n . reverse
options :: [OptDescr ()]
options = map ($ "") [
Option [] ["help"] (NoArg ())
, Option "m" ["match"] (ReqArg (const ()) "PATTERN")
, Option [] ["skip"] (ReqArg (const ()) "PATTERN")
, Option [] ["color"] (NoArg ())
, Option [] ["no-color"] (NoArg ())
, Option "f" ["format"] (ReqArg (const ()) "FORMATTER")
, Option "o" ["out"] (ReqArg (const ()) "FILE")
, Option [] ["depth"] (ReqArg (const ()) "N")
, Option "a" ["qc-max-success"] (ReqArg (const ()) "N")
, Option [] ["qc-max-size"] (ReqArg (const ()) "N")
, Option [] ["qc-max-discard"] (ReqArg (const ()) "N")
, Option [] ["seed"] (ReqArg (const ()) "N")
, Option [] ["print-cpu-time"] (NoArg ())
, Option [] ["dry-run"] (NoArg ())
, Option [] ["fail-fast"] (NoArg ())
, Option "r" ["rerun"] (NoArg ())
]