{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Stack.Options.FlagsParser
( flagsParser
) where
import qualified Data.Map as Map
import Options.Applicative
( Parser, completer, help, long, metavar, option )
import Stack.Options.Completion ( flagCompleter )
import Stack.Options.PackageParser ( readFlag )
import Stack.Prelude
import Stack.Types.BuildOptsCLI ( ApplyCLIFlag )
flagsParser :: Parser (Map.Map ApplyCLIFlag (Map.Map FlagName Bool))
flagsParser :: Parser (Map ApplyCLIFlag (Map FlagName Bool))
flagsParser = (Map FlagName Bool -> Map FlagName Bool -> Map FlagName Bool)
-> [Map ApplyCLIFlag (Map FlagName Bool)]
-> Map ApplyCLIFlag (Map FlagName Bool)
forall (f :: * -> *) k a.
(Foldable f, Ord k) =>
(a -> a -> a) -> f (Map k a) -> Map k a
Map.unionsWith Map FlagName Bool -> Map FlagName Bool -> Map FlagName Bool
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union
([Map ApplyCLIFlag (Map FlagName Bool)]
-> Map ApplyCLIFlag (Map FlagName Bool))
-> Parser [Map ApplyCLIFlag (Map FlagName Bool)]
-> Parser (Map ApplyCLIFlag (Map FlagName Bool))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Map ApplyCLIFlag (Map FlagName Bool))
-> Parser [Map ApplyCLIFlag (Map FlagName Bool)]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (ReadM (Map ApplyCLIFlag (Map FlagName Bool))
-> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
-> Parser (Map ApplyCLIFlag (Map FlagName Bool))
forall a. ReadM a -> Mod OptionFields a -> Parser a
option ReadM (Map ApplyCLIFlag (Map FlagName Bool))
readFlag
( String -> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"flag"
Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
-> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
-> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
forall a. Semigroup a => a -> a -> a
<> Completer
-> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer Completer
flagCompleter
Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
-> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
-> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"PACKAGE:[-]FLAG"
Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
-> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
-> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields (Map ApplyCLIFlag (Map FlagName Bool))
forall (f :: * -> *) a. String -> Mod f a
help String
"Set (or unset) the Cabal flag for the package (or use '*' for \
\all packages) (can be specified multiple times). Applies to \
\project packages, packages included directly in the snapshot, \
\and extra-deps. Takes precedence over any Cabal flags \
\specified for the package in the snapshot or in the \
\project-level configuration file (stack.yaml)."
))