summaryrefslogtreecommitdiffhomepage
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
parent986cea995f0272f4db470b24bf390ffc8edaeb00 (diff)
downloadstylish-haskell-10ce71bb79cf9f6ab47ac9dfef503529c41bef00.tar.gz
ModuleHeader: Add separate_lists option
See #320
-rw-r--r--data/stylish-haskell.yaml3
-rw-r--r--lib/Language/Haskell/Stylish/Config.hs7
-rw-r--r--lib/Language/Haskell/Stylish/Step/ModuleHeader.hs18
-rw-r--r--tests/Language/Haskell/Stylish/Step/ModuleHeader/Tests.hs12
4 files changed, 30 insertions, 10 deletions
diff --git a/data/stylish-haskell.yaml b/data/stylish-haskell.yaml
index 0a2e21a..e0a739c 100644
--- a/data/stylish-haskell.yaml
+++ b/data/stylish-haskell.yaml
@@ -27,6 +27,9 @@ steps:
# # Should export lists be sorted? Sorting is only performed within the
# # export section, as delineated by Haddock comments.
# sort: true
+ #
+ # # See `separate_lists` for the `imports` step.
+ # separate_lists: true
# Format record definitions. This is disabled by default.
#
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
diff --git a/tests/Language/Haskell/Stylish/Step/ModuleHeader/Tests.hs b/tests/Language/Haskell/Stylish/Step/ModuleHeader/Tests.hs
index b6d6b89..002be7c 100644
--- a/tests/Language/Haskell/Stylish/Step/ModuleHeader/Tests.hs
+++ b/tests/Language/Haskell/Stylish/Step/ModuleHeader/Tests.hs
@@ -34,6 +34,7 @@ tests = testGroup "Language.Haskell.Stylish.Printer.ModuleHeader"
, testCase "Indents with 2 spaces" ex14
, testCase "Group doc with 2 spaces" ex15
, testCase "Does not sort" ex16
+ , testCase "Repects separate_lists" ex17
]
--------------------------------------------------------------------------------
@@ -299,3 +300,14 @@ ex16 = assertSnippet (step defaultConfig {sort = False}) input input
, " , no"
, " ) where"
]
+
+ex17 :: Assertion
+ex17 = assertSnippet (step defaultConfig {separateLists = False})
+ [ "module Foo"
+ , " ( Bar (..)"
+ , " ) where"
+ ]
+ [ "module Foo"
+ , " ( Bar(..)"
+ , " ) where"
+ ]