module Hhp.Flag where
import GHC.Driver.Session (fFlags, fLangFlags, flagSpecName, wWarningFlags)
import Hhp.Types
listFlags :: Options -> IO String
listFlags :: Options -> IO [Char]
listFlags Options
opt = [Char] -> IO [Char]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([Char] -> IO [Char]) -> [Char] -> IO [Char]
forall a b. (a -> b) -> a -> b
$ Options -> [[Char]] -> [Char]
forall a. ToString a => Options -> a -> [Char]
convert Options
opt [[Char]]
options
where
options :: [[Char]]
options = [Char] -> [[Char]] -> [[Char]]
expand [Char]
"-f" [[Char]]
fOptions [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [Char] -> [[Char]] -> [[Char]]
expand [Char]
"-W" [[Char]]
wOptions
fOptions :: [[Char]]
fOptions = (FlagSpec GeneralFlag -> [Char])
-> [FlagSpec GeneralFlag] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map FlagSpec GeneralFlag -> [Char]
forall flag. FlagSpec flag -> [Char]
flagSpecName [FlagSpec GeneralFlag]
fFlags [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ (FlagSpec Extension -> [Char]) -> [FlagSpec Extension] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map FlagSpec Extension -> [Char]
forall flag. FlagSpec flag -> [Char]
flagSpecName [FlagSpec Extension]
fLangFlags
wOptions :: [[Char]]
wOptions = (FlagSpec WarningFlag -> [Char])
-> [FlagSpec WarningFlag] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map FlagSpec WarningFlag -> [Char]
forall flag. FlagSpec flag -> [Char]
flagSpecName [FlagSpec WarningFlag]
wWarningFlags
expand :: [Char] -> [[Char]] -> [[Char]]
expand [Char]
prefix [[Char]]
lst =
[ [Char]
prefix [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
no [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
option
| [Char]
option <- [[Char]]
lst
, [Char]
no <- [[Char]
"", [Char]
"no-"]
]