module Language.Haskell.HLint2(
applyHints,
Idea(..), Severity(..), Note(..),
Classify(..),
getHLintDataDir,
autoSettings, autoSettings', findSettings, readSettings,
Hint(..), builtinHints,
HintRule(..), hintRules,
Scope, scopeCreate, scopeMatch, scopeMove,
parseModuleEx, defaultParseFlags, ParseError(..), ParseFlags(..), CppFlags(..),
Encoding, defaultEncoding, readEncoding, useEncoding
) where
import Settings
import Idea
import Apply
import Hint.Type
import Hint.All
import Util
import CmdLine
import Paths_hlint
import Control.Applicative
import Data.Maybe
import Data.Monoid
import Data.Tuple.Extra
import Data.List.Extra
import System.FilePath
import Prelude
getHLintDataDir :: IO FilePath
getHLintDataDir = getDataDir
resolveBuiltin :: [String] -> [Hint]
resolveBuiltin builtin = map f $ nub $ concat [if x == "All" then map fst builtinHints else [x] | x <- builtin]
where f x = fromMaybe (error $ "Unknown builtin hints: HLint.Builtin." ++ x) $ lookup x builtinHints
autoSettings :: IO (ParseFlags, [Classify], Hint)
autoSettings = getHLintDataDir >>= autoSettings'
autoSettings' :: FilePath -> IO (ParseFlags, [Classify], Hint)
autoSettings' dataDir = do
(builtin, matches) <- first resolveBuiltin <$> findSettings dataDir (dataDir </> "HLint.hs") Nothing
let (classify, rules) = second hintRules $ concatUnzip $ map readSettings matches
let fixities = getFixity =<< moduleDecls =<< matches
return (parseFlagsAddFixities fixities defaultParseFlags, classify, mconcat $ rules : builtin)
_docs :: IO ()
_docs = do
(flags, classify, hint) <- autoSettings
Right m <- parseModuleEx flags "MyFile.hs" Nothing
print $ applyHints classify hint [m]