{-# LANGUAGE NoImplicitPrelude #-}
module Stack.Options.CleanParser where

import           Options.Applicative
import           Stack.Clean                       (CleanCommand(..), CleanOpts (..))
import           Stack.Prelude
import           Stack.Types.PackageName

-- | Command-line parser for the clean command.
cleanOptsParser :: CleanCommand -> Parser CleanOpts
cleanOptsParser Clean = CleanShallow <$> packages <|> doFullClean
  where
    packages =
        many
            (packageNameArgument
                 (metavar "PACKAGE" <>
                  help "If none specified, clean all project packages"))
    doFullClean =
        flag'
            CleanFull
            (long "full" <>
             help "Delete the project’s stack working directories (.stack-work by default).")

cleanOptsParser Purge = pure CleanFull