{-# LANGUAGE NoImplicitPrelude #-}

module Stack.Options.Utils
  ( GlobalOptsContext (..)
  , hideMods
  ) where

import           Options.Applicative ( Mod, hidden, idm, internal )
import           Stack.Prelude

-- | If argument is True, hides the option from usage and help

hideMods :: Bool -> Mod f a
hideMods :: forall (f :: * -> *) a. Bool -> Mod f a
hideMods Bool
hide = if Bool
hide then Mod f a
forall (f :: * -> *) a. Mod f a
internal Mod f a -> Mod f a -> Mod f a
forall a. Semigroup a => a -> a -> a
<> Mod f a
forall (f :: * -> *) a. Mod f a
hidden else Mod f a
forall m. Monoid m => m
idm

-- | Allows adjust global options depending on their context

-- Note: This was being used to remove ambiguity between the local and global

-- implementation of stack init --resolver option. Now that stack init has no

-- local --resolver this is not being used anymore but the code is kept for any

-- similar future use cases.

data GlobalOptsContext
  = OuterGlobalOpts -- ^ Global options before subcommand name

  | OtherCmdGlobalOpts -- ^ Global options following any other subcommand

  | BuildCmdGlobalOpts
  | GhciCmdGlobalOpts
  deriving (GlobalOptsContext -> GlobalOptsContext -> Bool
(GlobalOptsContext -> GlobalOptsContext -> Bool)
-> (GlobalOptsContext -> GlobalOptsContext -> Bool)
-> Eq GlobalOptsContext
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GlobalOptsContext -> GlobalOptsContext -> Bool
== :: GlobalOptsContext -> GlobalOptsContext -> Bool
$c/= :: GlobalOptsContext -> GlobalOptsContext -> Bool
/= :: GlobalOptsContext -> GlobalOptsContext -> Bool
Eq, Int -> GlobalOptsContext -> ShowS
[GlobalOptsContext] -> ShowS
GlobalOptsContext -> String
(Int -> GlobalOptsContext -> ShowS)
-> (GlobalOptsContext -> String)
-> ([GlobalOptsContext] -> ShowS)
-> Show GlobalOptsContext
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GlobalOptsContext -> ShowS
showsPrec :: Int -> GlobalOptsContext -> ShowS
$cshow :: GlobalOptsContext -> String
show :: GlobalOptsContext -> String
$cshowList :: [GlobalOptsContext] -> ShowS
showList :: [GlobalOptsContext] -> ShowS
Show)