summaryrefslogtreecommitdiffhomepage
path: root/lib/Language/Haskell/Stylish/Config.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Language/Haskell/Stylish/Config.hs')
-rw-r--r--lib/Language/Haskell/Stylish/Config.hs50
1 files changed, 28 insertions, 22 deletions
diff --git a/lib/Language/Haskell/Stylish/Config.hs b/lib/Language/Haskell/Stylish/Config.hs
index ad30498..8f43131 100644
--- a/lib/Language/Haskell/Stylish/Config.hs
+++ b/lib/Language/Haskell/Stylish/Config.hs
@@ -17,22 +17,22 @@ import qualified Data.Aeson as A
import qualified Data.Aeson.Types as A
import qualified Data.ByteString as B
import qualified Data.FileEmbed as FileEmbed
-import Data.List (inits,
- intercalate)
+import Data.List (intercalate,
+ nub)
import Data.Map (Map)
import qualified Data.Map as M
import Data.Maybe (fromMaybe)
import Data.Yaml (decodeEither',
prettyPrintParseException)
import System.Directory
-import System.FilePath (joinPath,
- splitPath,
- (</>))
+import System.FilePath ((</>))
import qualified System.IO as IO (Newline (..),
nativeNewline)
--------------------------------------------------------------------------------
+import qualified Language.Haskell.Stylish.Config.Cabal as Cabal
+import Language.Haskell.Stylish.Config.Internal
import Language.Haskell.Stylish.Step
import qualified Language.Haskell.Stylish.Step.Imports as Imports
import qualified Language.Haskell.Stylish.Step.LanguagePragmas as LanguagePragmas
@@ -54,6 +54,7 @@ data Config = Config
, configColumns :: Int
, configLanguageExtensions :: [String]
, configNewline :: IO.Newline
+ , configCabal :: Bool
}
@@ -79,24 +80,19 @@ configFilePath verbose Nothing = do
current <- getCurrentDirectory
configPath <- getXdgDirectory XdgConfig "stylish-haskell"
home <- getHomeDirectory
- mbConfig <- search $
+ mbConfig <- search verbose $
[d </> configFileName | d <- ancestors current] ++
[configPath </> "config.yaml", home </> configFileName]
return mbConfig
- where
- -- All ancestors of a dir (including that dir)
- ancestors :: FilePath -> [FilePath]
- ancestors = init . map joinPath . reverse . inits . splitPath
-
- search :: [FilePath] -> IO (Maybe FilePath)
- search [] = return Nothing
- search (f : fs) = do
- -- TODO Maybe catch an error here, dir might be unreadable
- exists <- doesFileExist f
- verbose $ f ++ if exists then " exists" else " does not exist"
- if exists then return (Just f) else search fs
+search :: Verbose -> [FilePath] -> IO (Maybe FilePath)
+search _ [] = return Nothing
+search verbose (f : fs) = do
+ -- TODO Maybe catch an error here, dir might be unreadable
+ exists <- doesFileExist f
+ verbose $ f ++ if exists then " exists" else " does not exist"
+ if exists then return (Just f) else search verbose fs
--------------------------------------------------------------------------------
loadConfig :: Verbose -> Maybe FilePath -> IO Config
@@ -107,7 +103,15 @@ loadConfig verbose userSpecified = do
case decodeEither' bytes of
Left err -> error $
"Language.Haskell.Stylish.Config.loadConfig: " ++ prettyPrintParseException err
- Right config -> return config
+ Right config -> do
+ cabalLanguageExtensions <- if configCabal config
+ then map show <$> Cabal.findLanguageExtensions verbose
+ else pure []
+
+ return $ config
+ { configLanguageExtensions = nub $
+ configLanguageExtensions config ++ cabalLanguageExtensions
+ }
--------------------------------------------------------------------------------
@@ -119,6 +123,7 @@ parseConfig (A.Object o) = do
<*> (o A..:? "columns" A..!= 80)
<*> (o A..:? "language_extensions" A..!= [])
<*> (o A..:? "newline" >>= parseEnum newlines IO.nativeNewline)
+ <*> (o A..:? "cabal" A..!= True)
-- Then fill in the steps based on the partial config we already have
stepValues <- o A..: "steps" :: A.Parser [A.Value]
@@ -209,9 +214,10 @@ parseImports config o = Imports.step
]
listAligns =
- [ ("new_line", Imports.NewLine)
- , ("with_alias", Imports.WithAlias)
- , ("after_alias", Imports.AfterAlias)
+ [ ("new_line", Imports.NewLine)
+ , ("with_module_name", Imports.WithModuleName)
+ , ("with_alias", Imports.WithAlias)
+ , ("after_alias", Imports.AfterAlias)
]
longListAligns =