diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2019-11-01 20:12:37 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2019-11-01 20:12:37 -0700 |
commit | dd0c17ac6c5c34b09b4e79a0fa753745bacfe122 (patch) | |
tree | 0d8bf06c82c718504b1398471d9adbbd7dd45aa1 /lib/Language/Haskell/Stylish/Config.hs | |
parent | 15eafc587c41e041194d1c4c84b2b94410a06756 (diff) | |
parent | b67a6ae12f8107b2d1714659f8a121274d5833f9 (diff) | |
download | stylish-haskell-dd0c17ac6c5c34b09b4e79a0fa753745bacfe122.tar.gz |
Merge tag 'v0.9.4.3'
v0.9.4.3
Diffstat (limited to 'lib/Language/Haskell/Stylish/Config.hs')
-rw-r--r-- | lib/Language/Haskell/Stylish/Config.hs | 50 |
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 = |