{-# LANGUAGE NoImplicitPrelude #-}
module Stack.Options.CleanParser
( cleanOptsParser
) where
import Options.Applicative ( Parser, flag', help, long, metavar )
import Stack.Clean ( CleanCommand (..), CleanOpts (..) )
import Stack.Prelude
import Stack.Types.PackageName ( packageNameArgument )
cleanOptsParser :: CleanCommand -> Parser CleanOpts
cleanOptsParser :: CleanCommand -> Parser CleanOpts
cleanOptsParser CleanCommand
Clean = [PackageName] -> CleanOpts
CleanShallow
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser [PackageName]
packages
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser CleanOpts
doFullClean
where
packages :: Parser [PackageName]
packages = forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Mod ArgumentFields PackageName -> Parser PackageName
packageNameArgument
( forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"PACKAGE"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. String -> Mod f a
help String
"If none specified, clean all project packages."
))
doFullClean :: Parser CleanOpts
doFullClean = forall a. a -> Mod FlagFields a -> Parser a
flag' CleanOpts
CleanFull
( forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"full"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. String -> Mod f a
help String
"Delete the project's Stack working directories (.stack-work by \
\default)."
)
cleanOptsParser CleanCommand
Purge = forall (f :: * -> *) a. Applicative f => a -> f a
pure CleanOpts
CleanFull