module Zifter.Hlint where
import Language.Haskell.HLint3 (hlint)
import Path
import Path.IO
import Safe
import qualified System.FilePath as FP
import Zifter.Zift
hlintZift :: Zift ()
hlintZift = do
rd <- getRootDir
fs <- liftIO $ snd <$> listDirRecur rd
let sources = filter (not . hidden) $ filter ((== ".hs") . fileExtension) fs
hints <- liftIO $ hlint ("--quiet" : map toFilePath sources)
case hints of
[] -> printPreprocessingDone "Hlint checks done."
_ -> do
printPreprocessingError $
unlines $ "Hlint has suggestions." : map show hints
fail $ unwords ["Hlint had", show $ length hints, "suggestions."]
hidden :: Path Abs t -> Bool
hidden = any ((Just '.' ==) . headMay) . FP.splitPath . toFilePath