{-# LANGUAGE NoImplicitPrelude #-}

-- | Functions to parse command line arguments for Stack's @path@ command.

module Stack.Options.PathParser
  ( pathParser
  ) where

import qualified Data.Text as T
import           Options.Applicative ( Parser, flag, help, long )
import           Stack.Path
                   ( pathsFromConfig, pathsFromEnvConfig, pathsFromRunner )
import           Stack.Prelude

-- | Parse command line arguments for Stack's @path@ command.

pathParser :: Parser [Text]
pathParser :: Parser [Text]
pathParser = ((String, Text) -> Parser (Maybe Text))
-> [(String, Text)] -> Parser [Text]
forall (f :: * -> *) a b.
Applicative f =>
(a -> f (Maybe b)) -> [a] -> f [b]
mapMaybeA
  ( \(String
desc, Text
name) -> Maybe Text
-> Maybe Text -> Mod FlagFields (Maybe Text) -> Parser (Maybe Text)
forall a. a -> a -> Mod FlagFields a -> Parser a
flag Maybe Text
forall a. Maybe a
Nothing (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
name)
      (  String -> Mod FlagFields (Maybe Text)
forall (f :: * -> *) a. HasName f => String -> Mod f a
long (Text -> String
T.unpack Text
name)
      Mod FlagFields (Maybe Text)
-> Mod FlagFields (Maybe Text) -> Mod FlagFields (Maybe Text)
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields (Maybe Text)
forall (f :: * -> *) a. String -> Mod f a
help String
desc
      )
  )
  [(String, Text)]
paths
 where
  toDescName :: (a, b, c) -> (a, b)
toDescName (a
desc, b
name, c
_) = (a
desc, b
name)
  paths :: [(String, Text)]
paths =
       (String, Text)
pathsFromRunner
    (String, Text) -> [(String, Text)] -> [(String, Text)]
forall a. a -> [a] -> [a]
:  ((String, Text, Config -> Text) -> (String, Text))
-> [(String, Text, Config -> Text)] -> [(String, Text)]
forall a b. (a -> b) -> [a] -> [b]
map (String, Text, Config -> Text) -> (String, Text)
forall {a} {b} {c}. (a, b, c) -> (a, b)
toDescName [(String, Text, Config -> Text)]
pathsFromConfig
    [(String, Text)] -> [(String, Text)] -> [(String, Text)]
forall a. Semigroup a => a -> a -> a
<> ((String, Text, UseHaddocks (EnvConfigPathInfo -> Text))
 -> (String, Text))
-> [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
-> [(String, Text)]
forall a b. (a -> b) -> [a] -> [b]
map (String, Text, UseHaddocks (EnvConfigPathInfo -> Text))
-> (String, Text)
forall {a} {b} {c}. (a, b, c) -> (a, b)
toDescName [(String, Text, UseHaddocks (EnvConfigPathInfo -> Text))]
pathsFromEnvConfig