-- | Global options parser. module BNFC.Options.GlobalOptions where import BNFC.Prelude import Options.Applicative -- | Global options. data GlobalOptions = GlobalOptions { optVerbose :: Bool , optDryRun :: Bool , optForce :: Bool , optOutDir :: Maybe FilePath , optMakeFile :: Bool , optInput :: FilePath } deriving Show -- | Global options parser. globalOptionsParser :: Parser GlobalOptions globalOptionsParser = GlobalOptions <$> oVerbose <*> oDryRun <*> oForce <*> oOutDir <*> oMakeFile <*> oInput where oForce = switch $ long "force" <> short 'f' <> help "Continue in spite of errors." oDryRun = switch $ long "dry-run" <> help "Do not write any output files, just explain what would happen." oVerbose = switch $ long "verbose" <> short 'v' <> help "Comment on what is happening." oOutDir = optional $ strOption $ long "outdir" <> short 'o' <> metavar "OUTDIR" <> action "directory" <> help "Name of output directory." oMakeFile = switch $ long "makefile" <> short 'm' <> help "Generate Makefile" oInput :: Parser FilePath oInput = strArgument $ metavar "GRAMMARFILE" <> action "file" <> help "The LBNF grammar file."