module Language.Haskell.Format.Stylish
  ( autoSettings
  , formatter
  ) where

import Language.Haskell.Stylish         as Stylish

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

newtype Settings =
  Settings Stylish.Config

autoSettings :: IO Settings
autoSettings = do
  path <- Stylish.configFilePath verbose Nothing
  config <- Stylish.loadConfig verbose path
  return (Settings config)
  where
    verbose = Stylish.makeVerbose False

formatter :: Settings -> Formatter
formatter = mkFormatter . stylish

stylish :: Settings -> HaskellSource -> Either String HaskellSource
stylish (Settings config) (HaskellSource filepath source) =
  HaskellSource filepath . unlines <$>
  Stylish.runSteps extensions (Just filepath) steps sourceLines
  where
    sourceLines = lines source
    extensions = Stylish.configLanguageExtensions config
    steps = Stylish.configSteps config