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 :: (ParseFlags, [Classify], Hint) -> Formatter suggester = (HaskellSource -> Either String [Suggestion]) -> Formatter mkSuggester ((HaskellSource -> Either String [Suggestion]) -> Formatter) -> ((ParseFlags, [Classify], Hint) -> HaskellSource -> Either String [Suggestion]) -> (ParseFlags, [Classify], Hint) -> Formatter forall b c a. (b -> c) -> (a -> b) -> a -> c . (ParseFlags, [Classify], Hint) -> HaskellSource -> Either String [Suggestion] hlint hlint :: (ParseFlags, [Classify], Hint) -> HaskellSource -> Either String [Suggestion] hlint :: (ParseFlags, [Classify], Hint) -> HaskellSource -> Either String [Suggestion] hlint (ParseFlags flags, [Classify] classify, Hint hint) (HaskellSource String filepath String source) = case IO (Either ParseError ModuleEx) -> Either ParseError ModuleEx forall a. IO a -> a unsafePerformIO (ParseFlags -> String -> Maybe String -> IO (Either ParseError ModuleEx) parseModuleEx ParseFlags flags String filepath (String -> Maybe String forall a. a -> Maybe a Just String source)) of Right ModuleEx m -> [Suggestion] -> Either String [Suggestion] forall a b. b -> Either a b Right ([Suggestion] -> Either String [Suggestion]) -> (ModuleEx -> [Suggestion]) -> ModuleEx -> Either String [Suggestion] forall b c a. (b -> c) -> (a -> b) -> a -> c . (Idea -> Suggestion) -> [Idea] -> [Suggestion] forall a b. (a -> b) -> [a] -> [b] map Idea -> Suggestion ideaToSuggestion ([Idea] -> [Suggestion]) -> (ModuleEx -> [Idea]) -> ModuleEx -> [Suggestion] forall b c a. (b -> c) -> (a -> b) -> a -> c . ModuleEx -> [Idea] ideas (ModuleEx -> Either String [Suggestion]) -> ModuleEx -> Either String [Suggestion] forall a b. (a -> b) -> a -> b $ ModuleEx m Left ParseError parseError -> String -> Either String [Suggestion] forall a b. a -> Either a b Left (String -> Either String [Suggestion]) -> (ParseError -> String) -> ParseError -> Either String [Suggestion] forall b c a. (b -> c) -> (a -> b) -> a -> c . ParseError -> String parseErrorMessage (ParseError -> Either String [Suggestion]) -> ParseError -> Either String [Suggestion] forall a b. (a -> b) -> a -> b $ ParseError parseError where ideas :: ModuleEx -> [Idea] ideas ModuleEx m = [Classify] -> Hint -> [ModuleEx] -> [Idea] applyHints [Classify] classify Hint hint [ModuleEx m] autoSettings :: IO (ParseFlags, [Classify], Hint) autoSettings :: IO (ParseFlags, [Classify], Hint) autoSettings = [String] -> IO (ParseFlags, [Classify], Hint) argsSettings [] ideaToSuggestion :: Idea -> Suggestion ideaToSuggestion :: Idea -> Suggestion ideaToSuggestion = String -> Suggestion Suggestion (String -> Suggestion) -> (Idea -> String) -> Idea -> Suggestion forall b c a. (b -> c) -> (a -> b) -> a -> c . Idea -> String forall a. Show a => a -> String show