{-# LANGUAGE CPP #-}
module Main (main) where
import Language.Haskell.GHC.DumpTree
import Prelude
import Options.Applicative
#if MIN_VERSION_base(4,8,0)
#else
import Data.Monoid (mconcat)
#endif
{-------------------------------------------------------------------------------
Main application
-------------------------------------------------------------------------------}
main :: IO ()
main = do
Options{..} <- execParser opts
trees <- treesForTargetsIO optionsTargets
if optionsDumpJson
then dumpJson trees
else dumpText trees
where
opts = info (helper <*> parseOptions) $ mconcat [
fullDesc
, header "ghc-dump-tree - Dump GHC's ASTs"
]
{-------------------------------------------------------------------------------
Command line arguments
-------------------------------------------------------------------------------}
data Options = Options {
optionsDumpJson :: Bool
, optionsTargets :: [FilePath]
}
parseOptions :: Parser Options
parseOptions = Options
<$> (switch $ mconcat [
long "json"
, help "Output JSON"
])
<*> some (argument str (metavar "TARGETS..."))