{-# 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 = mapMaybeA
  ( \(desc, name) -> flag Nothing (Just name)
      (  long (T.unpack name)
      <> help desc
      )
  )
  paths
 where
  toDescName (desc, name, _) = (desc, name)
  paths =
       pathsFromRunner
    :  map toDescName pathsFromConfig
    <> map toDescName pathsFromEnvConfig
