--------------------------------------------------------------------------------
{-# LANGUAGE DeriveDataTypeable #-}
module Main
( main
) where
--------------------------------------------------------------------------------
import Control.Monad (forM_)
import Data.List (intercalate)
import Data.Maybe (listToMaybe)
import Data.Version (Version(..))
import System.Console.CmdArgs
--------------------------------------------------------------------------------
import Paths_stylish_haskell (version)
import StylishHaskell
import StylishHaskell.Config
import StylishHaskell.Step
import StylishHaskell.Verbose
--------------------------------------------------------------------------------
data StylishArgs = StylishArgs
{ config :: Maybe FilePath
, verbose :: Bool
, defaults :: Bool
, files :: [FilePath]
} deriving (Data, Show, Typeable)
--------------------------------------------------------------------------------
stylishArgs :: StylishArgs
stylishArgs = StylishArgs
{ config = Nothing &= typFile &= help "Configuration file"
, verbose = False &= help "Run in verbose mode"
, defaults = False &= help "Dump default config and exit"
, files = [] &= typFile &= args
} &= summary ("stylish-haskell-" ++ versionString version)
where
versionString = intercalate "." . map show . versionBranch
--------------------------------------------------------------------------------
main :: IO ()
main = cmdArgs stylishArgs >>= stylishHaskell
--------------------------------------------------------------------------------
stylishHaskell :: StylishArgs -> IO ()
stylishHaskell sa
| defaults sa = do
fileName <- defaultConfigFilePath
verbose' $ "Dumping config from " ++ fileName
readFile fileName >>= putStr
| otherwise = do
conf <- loadConfig verbose' (config sa)
let steps = configSteps conf
forM_ steps $ \s -> verbose' $ "Enabled " ++ stepName s ++ " step"
contents <- maybe getContents readFile filePath
putStr $ unlines $ runSteps filePath steps $ lines contents
where
verbose' = makeVerbose (verbose sa)
filePath = listToMaybe $ files sa