11--------------------------------------------------------------------------------
22{-# LANGUAGE OverloadedStrings #-}
3+ {-# LANGUAGE TemplateHaskell #-}
34module Language.Haskell.Stylish.Config
45 ( Extensions
56 , Config (.. )
6- , defaultConfigFilePath
7+ , defaultConfigBytes
78 , configFilePath
89 , loadConfig
910 ) where
@@ -14,12 +15,13 @@ import Control.Monad (forM, mzero)
1415import Data.Aeson (FromJSON (.. ))
1516import qualified Data.Aeson as A
1617import qualified Data.Aeson.Types as A
17- import Data.Maybe (fromMaybe )
1818import qualified Data.ByteString as B
19+ import qualified Data.FileEmbed as FileEmbed
1920import Data.List (inits ,
2021 intercalate )
2122import Data.Map (Map )
2223import qualified Data.Map as M
24+ import Data.Maybe (fromMaybe )
2325import Data.Yaml (decodeEither )
2426import System.Directory
2527import System.FilePath (joinPath ,
@@ -38,7 +40,6 @@ import qualified Language.Haskell.Stylish.Step.Tabs as Tabs
3840import qualified Language.Haskell.Stylish.Step.TrailingWhitespace as TrailingWhitespace
3941import qualified Language.Haskell.Stylish.Step.UnicodeSyntax as UnicodeSyntax
4042import Language.Haskell.Stylish.Verbose
41- import Paths_stylish_haskell (getDataFileName )
4243
4344
4445--------------------------------------------------------------------------------
@@ -65,27 +66,22 @@ configFileName = ".stylish-haskell.yaml"
6566
6667
6768--------------------------------------------------------------------------------
68- defaultConfigFilePath :: IO FilePath
69- defaultConfigFilePath = getDataFileName " data/stylish-haskell.yaml"
69+ defaultConfigBytes :: B. ByteString
70+ defaultConfigBytes = $ ( FileEmbed. embedFile " data/stylish-haskell.yaml" )
7071
7172
7273--------------------------------------------------------------------------------
73- configFilePath :: Verbose -> Maybe FilePath -> IO FilePath
74- configFilePath _ (Just userSpecified) = return userSpecified
74+ configFilePath :: Verbose -> Maybe FilePath -> IO ( Maybe FilePath )
75+ configFilePath _ (Just userSpecified) = return ( Just userSpecified)
7576configFilePath verbose Nothing = do
76- current <- getCurrentDirectory
77- configPath <- getXdgDirectory XdgConfig " stylish-haskell"
78- home <- getHomeDirectory
79- def <- defaultConfigFilePath
80- mbConfig <- search $
77+ current <- getCurrentDirectory
78+ configPath <- getXdgDirectory XdgConfig " stylish-haskell"
79+ home <- getHomeDirectory
80+ mbConfig <- search $
8181 [d </> configFileName | d <- ancestors current] ++
82- [configPath </> " config.yaml" , home </> configFileName, def ]
82+ [configPath </> " config.yaml" , home </> configFileName]
8383
84- case mbConfig of
85- Just config -> return config
86- Nothing -> fail $
87- " Language.Haskell.Stylish.Config.configFilePath: " ++
88- " could not load default configuration at: " ++ def
84+ return mbConfig
8985 where
9086 -- All ancestors of a dir (including that dir)
9187 ancestors :: FilePath -> [FilePath ]
@@ -102,11 +98,11 @@ configFilePath verbose Nothing = do
10298
10399--------------------------------------------------------------------------------
104100loadConfig :: Verbose -> Maybe FilePath -> IO Config
105- loadConfig verbose mfp = do
106- fp <- configFilePath verbose mfp
107- verbose $ " Loading configuration at " ++ fp
108- bs <- B. readFile fp
109- case decodeEither bs of
101+ loadConfig verbose userSpecified = do
102+ mbFp <- configFilePath verbose userSpecified
103+ verbose $ " Loading configuration at " ++ fromMaybe " <embedded> " mbFp
104+ bytes <- maybe ( return defaultConfigBytes) B. readFile mbFp
105+ case decodeEither bytes of
110106 Left err -> error $
111107 " Language.Haskell.Stylish.Config.loadConfig: " ++ err
112108 Right config -> return config
0 commit comments