summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorJasper Van der Jeugt <m@jaspervdj.be>2020-10-07 12:55:32 +0200
committerJasper Van der Jeugt <m@jaspervdj.be>2020-10-07 12:55:32 +0200
commit10ce71bb79cf9f6ab47ac9dfef503529c41bef00 (patch)
tree1be19aae13c6a94313d56312db94229c0cde35ea /lib
parent986cea995f0272f4db470b24bf390ffc8edaeb00 (diff)
downloadstylish-haskell-10ce71bb79cf9f6ab47ac9dfef503529c41bef00.tar.gz
ModuleHeader: Add separate_lists option
See #320
Diffstat (limited to 'lib')
-rw-r--r--lib/Language/Haskell/Stylish/Config.hs7
-rw-r--r--lib/Language/Haskell/Stylish/Step/ModuleHeader.hs18
2 files changed, 15 insertions, 10 deletions
diff --git a/lib/Language/Haskell/Stylish/Config.hs b/lib/Language/Haskell/Stylish/Config.hs
index 68638a6..36688a5 100644
--- a/lib/Language/Haskell/Stylish/Config.hs
+++ b/lib/Language/Haskell/Stylish/Config.hs
@@ -195,8 +195,11 @@ parseEnum strs _ (Just k) = case lookup k strs of
--------------------------------------------------------------------------------
parseModuleHeader :: Config -> A.Object -> A.Parser Step
parseModuleHeader _ o = fmap ModuleHeader.step $ ModuleHeader.Config
- <$> o A..:? "indent" A..!= (ModuleHeader.indent ModuleHeader.defaultConfig)
- <*> o A..:? "sort" A..!= (ModuleHeader.sort ModuleHeader.defaultConfig)
+ <$> o A..:? "indent" A..!= ModuleHeader.indent def
+ <*> o A..:? "sort" A..!= ModuleHeader.sort def
+ <*> o A..:? "separate_lists" A..!= ModuleHeader.separateLists def
+ where
+ def = ModuleHeader.defaultConfig
--------------------------------------------------------------------------------
parseSimpleAlign :: Config -> A.Object -> A.Parser Step
diff --git a/lib/Language/Haskell/Stylish/Step/ModuleHeader.hs b/lib/Language/Haskell/Stylish/Step/ModuleHeader.hs
index 90f3478..0c33298 100644
--- a/lib/Language/Haskell/Stylish/Step/ModuleHeader.hs
+++ b/lib/Language/Haskell/Stylish/Step/ModuleHeader.hs
@@ -40,16 +40,16 @@ import Language.Haskell.Stylish.Step
data Config = Config
- -- TODO(jaspervdj): Use the same sorting as in `Imports`?
- -- TODO: make sorting optional?
- { indent :: Int
- , sort :: Bool
+ { indent :: Int
+ , sort :: Bool
+ , separateLists :: Bool
}
defaultConfig :: Config
defaultConfig = Config
- { indent = 4
- , sort = True
+ { indent = 4
+ , sort = True
+ , separateLists = True
}
step :: Config -> Step
@@ -218,13 +218,15 @@ printExportList conf (L srcLoc exports) = do
printExportsGroupTail (x : xs) = printExportsTail [([], x :| xs)]
printExportsGroupTail [] = pure ()
+ -- NOTE(jaspervdj): This code is almost the same as the import printing
+ -- in 'Imports' and should be merged.
printExport :: GHC.LIE GhcPs -> P ()
printExport (L _ export) = case export of
IEVar _ name -> putOutputable name
IEThingAbs _ name -> putOutputable name
IEThingAll _ name -> do
putOutputable name
- space
+ when (separateLists conf) space
putText "(..)"
IEModuleContents _ (L _ m) -> do
putText "module"
@@ -232,7 +234,7 @@ printExportList conf (L srcLoc exports) = do
putText (showOutputable m)
IEThingWith _ name _wildcard imps _ -> do
putOutputable name
- space
+ when (separateLists conf) space
putText "("
sep (comma >> space) $
fmap putOutputable $ L.sortBy (compareWrappedName `on` unLoc) imps