module Config.Read(readFilesConfig) where

import Config.Type
import Control.Monad
import Control.Exception.Extra
import Config.Yaml
import Data.List.Extra
import System.FilePath


readFilesConfig :: [(FilePath, Maybe String)] -> IO [Setting]
readFilesConfig :: [(FilePath, Maybe FilePath)] -> IO [Setting]
readFilesConfig [(FilePath, Maybe FilePath)]
files = do
    let ([(FilePath, Maybe FilePath)]
yaml, [(FilePath, Maybe FilePath)]
haskell) = forall a. (a -> Bool) -> [a] -> ([a], [a])
partition (\(FilePath
x,Maybe FilePath
_) -> FilePath -> FilePath
lower (FilePath -> FilePath
takeExtension FilePath
x) forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [FilePath
".yml",FilePath
".yaml"]) [(FilePath, Maybe FilePath)]
files
    forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(FilePath, Maybe FilePath)]
haskell) forall a b. (a -> b) -> a -> b
$
        forall a. Partial => FilePath -> IO a
errorIO forall a b. (a -> b) -> a -> b
$ FilePath
"HLint 2.3 and beyond cannot use Haskell configuration files.\n" forall a. [a] -> [a] -> [a]
++
                  FilePath
"Tried to use: " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> FilePath
show [(FilePath, Maybe FilePath)]
haskell forall a. [a] -> [a] -> [a]
++ FilePath
"\n" forall a. [a] -> [a] -> [a]
++
                  FilePath
"Convert it to .yaml file format, following the example at\n" forall a. [a] -> [a] -> [a]
++
                  FilePath
"  <https://github.com/ndmitchell/hlint/blob/master/data/hlint.yaml>"
    [ConfigYaml]
yaml <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry FilePath -> Maybe FilePath -> IO ConfigYaml
readFileConfigYaml) [(FilePath, Maybe FilePath)]
yaml
    forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ [ConfigYaml] -> [Setting]
settingsFromConfigYaml [ConfigYaml]
yaml