packages feed

cabal-hoogle-3.10.0.0: src/Hoogle/Cabal/Command.hs

{-# LANGUAGE RecordWildCards #-}

module Hoogle.Cabal.Command where

import qualified Hoogle.Cabal.Command.ActAsSetup as ActAsSetup
import Hoogle.Cabal.Command.Common
import qualified Hoogle.Cabal.Command.Generate as Generate
import qualified Hoogle.Cabal.Command.Run as Run
import qualified Hoogle.Cabal.Command.Version as Version
import Hoogle.Cabal.Logger
import Options.Applicative

data CmdOptions = CmdOptions
  { _cmdOptions_global :: GlobalOptions,
    _cmdOptions_command :: Maybe Command
  }
  deriving (Show, Eq)

data Command
  = CommandGenerate Generate.Command
  | CommandRun Run.Command
  | CommandActAsSetup ActAsSetup.Command
  | CommandVersion Version.Command
  deriving (Show, Eq)

data Log
  = LogGenerate Generate.Log
  | LogRun Run.Log

instance Show Log where
  show (LogGenerate l) = show l
  show (LogRun l) = show l

executeCommand :: Logger Log -> IO ()
executeCommand logger = do
  CmdOptions {..} <- readCmdOptions
  if _globalOptions_version _cmdOptions_global
    then Version.action Version.Command
    else case _cmdOptions_command of
      Nothing -> pure ()
      Just cmd' -> case cmd' of
        CommandGenerate cmd -> Generate.action (cmapLogger LogGenerate logger) _cmdOptions_global cmd
        CommandActAsSetup cmd -> ActAsSetup.action cmd
        CommandRun cmd -> Run.action (cmapLogger LogRun logger) _cmdOptions_global cmd
        CommandVersion cmd -> Version.action cmd

parser :: Parser CmdOptions
parser =
  CmdOptions
    <$> globalOptionsParser
    <*> optional
      ( hsubparser
          ( Generate.command CommandGenerate
              <> Run.command CommandRun
              <> Version.command CommandVersion
              <> ActAsSetup.command CommandActAsSetup
          )
      )

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"
              )
        )