packages feed

argon-0.1.0.0: app/Main.hs

{-# LANGUAGE QuasiQuotes #-}
module Main where

import System.Environment (getArgs)
import System.Console.Docopt
import Argon


patterns :: Docopt
patterns = [docoptFile|USAGE.txt|]

getArgOrExit :: Arguments -> Option -> IO String
getArgOrExit = getArgOrExitWith patterns

getOpt :: Arguments -> String -> String -> String
getOpt args def opt = getArgWithDefault args def $ longOption opt

processFile :: String -> IO (FilePath, AnalysisResult)
processFile path = do
    contents <- readFile path
    parseCode (Just path) contents

readConfig :: Arguments -> IO Config
readConfig args = return
    Config {
      minCC      = read $ getOpt args "1" "min"
    , outputMode = if args `isPresent` longOption "json"
                      then JSON
                      else if args `isPresent` longOption "no-color"
                              then BareText
                              else Colored
    }


main :: IO ()
main = do
    args <- parseArgsOrExit patterns =<< getArgs
    res  <- mapM processFile $ args `getAllArgs` argument "paths"
    conf <- readConfig args
    putStr $ export conf $ map (filterResults conf) res