{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Test.HLint.Preprocessor (main) where

import Control.Monad ((>>=))
import Data.Function (($), (.))
import Data.List (null)
import Data.Monoid ((<>))
import Data.String (String, unlines)
import System.Environment (getArgs)
import System.Exit (exitFailure)
import System.IO (IO, writeFile)
import Text.Show (show)


main :: IO ()
main = getArgs >>= \case
    _src : _inp : dst : args ->
        writeFile dst . unlines $ mkModule args
    _ ->
        exitFailure

mkModule :: [String] -> [String]
mkModule args =
    [ "{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}"
    , "{-# OPTIONS_GHC -fno-warn-implicit-prelude #-}"
    , "module Main (main) where"
    , ""
    , "import Prelude"
    , "import Test.HLint.Run (run)"
    , ""
    , "main :: IO ()"
    , "main = run " <> show (if null args then ["."] else args)
    ]