packages feed

import-style-plugin-0.1.0.0: src/ImportStylePlugin/Yaml.hs

{-# LANGUAGE LambdaCase #-}

module ImportStylePlugin.Yaml where

import Control.Monad.IO.Class (MonadIO (..))
import Data.Functor (($>))
import Data.String (IsString (..))
import Data.Yaml (decodeFileEither, prettyPrintParseException)
import qualified GHC.Plugins as Ghc
import ImportStylePlugin (importPlugin)
import ImportStylePlugin.Compat (report)
import ImportStylePlugin.Config (Severity (..))

plugin :: Ghc.Plugin
plugin =
  Ghc.defaultPlugin
    { Ghc.typeCheckResultAction = \opts _ a -> do
        case opts of
          [filepath] -> do
            liftIO (decodeFileEither filepath) >>= \case
              Right style -> importPlugin style a
              Left err -> report Warning (fromString $ prettyPrintParseException err) Nothing $> a
          _ -> pure a
    }