content: {-# LANGUAGE DeriveDataTypeable #-}
  {-# OPTIONS_GHC -fno-warn-missing-fields -fno-cse -O0 #-}
  
  module CmdLine(
      Cmd(..), getCmd
      ) where
  
  import System.Console.CmdArgs.Implicit
  import Paths_weeder
  import Data.Version
  import Data.Functor
  import System.Environment
  import Prelude
  
  
  data Cmd = Cmd
      {cmdProjects :: [FilePath]
      ,cmdBuild :: Bool
      ,cmdTest :: Bool
      ,cmdMatch :: Bool
      ,cmdJson :: Bool
      ,cmdYaml :: Bool
      ,cmdShowAll :: Bool
      ,cmdDistDir :: Maybe String
      } deriving (Show, Data, Typeable)
  
  getCmd :: [String] -> IO Cmd
  getCmd args = withArgs args $ automatic <$> cmdArgsRun mode
  
  automatic :: Cmd -> Cmd
  automatic cmd
      | cmdTest cmd = cmd{cmdTest=False,cmdProjects=["test"],cmdBuild=True,cmdMatch=True}
      | null $ cmdProjects cmd = cmd{cmdProjects=["."]}
      | otherwise = cmd
  
  mode :: Mode (CmdArgs Cmd)
  mode = cmdArgsMode $ Cmd
      {cmdProjects = def &= args &= typ "DIR OR stack.yaml"
      ,cmdBuild = nam "build" &= help "Build the project first"
      ,cmdTest = nam "test" &= help "Run the test suite"
      ,cmdMatch = nam "match" &= help "Make the .weeder.yaml perfectly match"
      ,cmdJson = nam "json" &= help "Output JSON"
      ,cmdYaml = nam "yaml" &= help "Output YAML"
      ,cmdShowAll = nam "show-all" &= help "Show even ignored warnings"
      ,cmdDistDir = nam "dist-dir" &= typDir &= help "Stack dist-dir, defaults to 'stack path --dist-dir'"
      } &= explicit &= verbosity
      &= name "weeder" &= program "weeder" &= summary ("Weeder v" ++ showVersion version ++ ", (C) Neil Mitchell 2017-2020")
      where
          nam xs = def &= explicit &= name xs &= name [head xs]
  