packages feed

cabal-hoogle-0.1.0.0: src/Hoogle/Cabal/CmdOptions.hs

module Hoogle.Cabal.CmdOptions
  ( CmdOptions (..),
    readCmdOptions,
    Command (..),
  )
where

import Data.Text (Text)
import Options.Applicative

data CmdOptions = CmdOptions
  { cmdOptions_compiler :: Maybe Text,
    cmdOptions_platform :: Maybe Text,
    cmdOptions_builddir :: FilePath,
    cmdOptions_command :: Command
  }
  deriving (Show, Eq)

data Command
  = CommandGenerate
  | CommandRun [String]
  deriving (Show, Eq)

parser :: Parser CmdOptions
parser =
  CmdOptions
    <$> (optional . strOption)
      ( long "compiler"
          <> help "compiler name and version, for example 'ghc-9.2.3'"
      )
    <*> (optional . strOption)
      ( long "platform"
          <> help "platform, for example x86_64-linux"
      )
    <*> strOption
      ( long "builddir"
          <> value "dist-newstyle"
          <> help "cabal project build dir"
      )
    <*> hsubparser
      ( command "generate" (info (pure CommandGenerate) (progDesc "generate hoogle database"))
          <> command "run" (info commandRunParser (progDesc "run hoogle, with arbitrary arguments"))
      )

commandRunParser :: Parser Command
commandRunParser = CommandRun <$> (many . strArgument) (metavar "ARGS")

readCmdOptions :: IO CmdOptions
readCmdOptions = execParser parserInfo
  where
    parserInfo =
      info
        (parser <**> helper)
        ( fullDesc
            <> progDesc
              ( "Run hoogle on your local packages and dependencies. "
                  <> "See https://github.com/kokobd/cabal-hoogle for more information"
              )
        )