packages feed

hfmt-0.3.0.0: src/Language/Haskell/Format/HLint.hs

module Language.Haskell.Format.HLint
  ( autoSettings
  , suggester
  ) where

import Language.Haskell.Format.Internal
import Language.Haskell.Format.Types

import Language.Haskell.HLint           (Classify, Hint, Idea, ParseError (..),
                                         ParseFlags, applyHints, argsSettings,
                                         parseModuleEx)
import System.IO.Unsafe                 (unsafePerformIO)

suggester :: (ParseFlags, [Classify], Hint) -> Formatter
suggester = mkSuggester . hlint

hlint ::
     (ParseFlags, [Classify], Hint)
  -> HaskellSource
  -> Either String [Suggestion]
hlint (flags, classify, hint) (HaskellSource filepath source) =
  case unsafePerformIO (parseModuleEx flags filepath (Just source)) of
    Right m         -> Right . map ideaToSuggestion . ideas $ m
    Left parseError -> Left . parseErrorMessage $ parseError
  where
    ideas m = applyHints classify hint [m]

autoSettings :: IO (ParseFlags, [Classify], Hint)
autoSettings = argsSettings []

ideaToSuggestion :: Idea -> Suggestion
ideaToSuggestion = Suggestion . show