module Hhp.Flag where

import GHC.Driver.Session (flagSpecName, fFlags, wWarningFlags, fLangFlags)

import Hhp.Types

-- | Listing GHC flags. (e.g -Wno-orphans)

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