ghcup-0.2.6.2: lib-opt/GHCup/OptParse/TUI.hs
{-# LANGUAGE CPP #-}
module GHCup.OptParse.TUI where
import GHCup.Command.List
import GHCup.Types
import GHCup.Input.Parsers (dayParser, toolParserWithGHCup, criteriaParser, revisionShowParser, nightlyShowParser)
import GHCup.OptParse.Common
import Data.Functor
import Data.Maybe
import Data.Time.Calendar ( Day )
import Options.Applicative hiding ( style )
import Prelude hiding ( appendFile )
---------------
--[ Options ]--
---------------
data InteractiveOptions = InteractiveOptions
{ ioTool :: Maybe [Tool]
, ioCriteria :: [ListCriteria]
, ioFrom :: Maybe Day
, ioTo :: Maybe Day
, ioHideOld :: Bool
, ioShowNightly :: ShowNightly
, ioShowRevisions :: ShowRevisions
} deriving (Eq, Show)
---------------
--[ Parsers ]--
---------------
interactiveParser :: Parser InteractiveOptions
interactiveParser =
InteractiveOptions
<$> optional
(some
(option
(eitherReader toolParserWithGHCup)
(short 't' <> long "tool" <> metavar "<ghc|cabal|hls|stack>" <> help
"Tool to list versions for. Default is all"
<> completer toolCompleter
)
)
)
<*> many
(option
(eitherReader criteriaParser)
( short 'c'
<> long "show-criteria"
<> metavar "<installed|set|available|cross|target=...|tag=...>"
<> help "Apply filtering criteria, prefix with + or -"
<> completer (listCompleter
[ "+installed", "+set", "+available", "+cross", "-installed", "-set", "-available", "-cross"])
)
)
<*> optional
(option
(eitherReader dayParser)
(short 's' <> long "since" <> metavar "YYYY-MM-DD" <> help
"List only tools with release date starting at YYYY-MM-DD or later"
<> completer toolCompleter
)
)
<*> optional
(option
(eitherReader dayParser)
(short 'u' <> long "until" <> metavar "YYYY-MM-DD" <> help
"List only tools with release date earlier than YYYY-MM-DD"
<> completer toolCompleter
)
)
<*> switch
(short 'o' <> long "hide-old" <> help "Hide 'old' tool versions (installed ones are always shown)"
)
<*> (option
(eitherReader nightlyShowParser)
(long "show-nightlies" <> help "How to show nightlies (default: latest)"
<> metavar "<latest|all|none>"
<> completer nightlyCompleter
<> value NShowLatest
)
<|> fmap (\_ -> NShowAll) (switch
(short 'n' <> long "show-nightly" <> help "Show nightlies (installed ones are always shown)"
)
)
)
<*> option
(eitherReader revisionShowParser)
(long "show-revisions" <> help "How to show revisions (default: updates)"
<> metavar "<updates|all|none>"
<> completer revisionCompleter
<> value ShowUpdates
)