summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorOleg Grenrus <oleg.grenrus@iki.fi>2016-07-31 16:56:16 +0300
committerOleg Grenrus <oleg.grenrus@iki.fi>2016-08-01 17:15:15 +0300
commit85e582b7fdfcb257c26594cf4ec08fdef2dbfbdb (patch)
treeb0d0bfc207266a248bb2f629b0ba1bc4d8955b77 /lib
parentf344a0fbbe2431b138bec61eaa2d2280b962ee0e (diff)
downloadstylish-haskell-85e582b7fdfcb257c26594cf4ec08fdef2dbfbdb.tar.gz
Special setting for empty import lists
Diffstat (limited to 'lib')
-rw-r--r--lib/Language/Haskell/Stylish/Config.hs7
-rw-r--r--lib/Language/Haskell/Stylish/Step/Imports.hs29
2 files changed, 29 insertions, 7 deletions
diff --git a/lib/Language/Haskell/Stylish/Config.hs b/lib/Language/Haskell/Stylish/Config.hs
index d14e1be..e551d71 100644
--- a/lib/Language/Haskell/Stylish/Config.hs
+++ b/lib/Language/Haskell/Stylish/Config.hs
@@ -187,6 +187,8 @@ parseImports config o = Imports.step
<*> (o A..:? "long_list_align"
>>= parseEnum longListAligns Imports.Inline)
-- Note that padding has to be at least 1. Default is 4.
+ <*> (o A..:? "empty_list_align"
+ >>= parseEnum emptyListAligns Imports.Inherit)
<*> (maybe 4 (max 1) <$> o A..:? "list_padding")
<*> o A..:? "separate_lists" A..!= True)
where
@@ -210,6 +212,11 @@ parseImports config o = Imports.step
, ("multiline", Imports.Multiline)
]
+ emptyListAligns =
+ [ ("inherit", Imports.Inherit)
+ , ("right_after", Imports.RightAfter)
+ ]
+
--------------------------------------------------------------------------------
parseLanguagePragmas :: Config -> A.Object -> A.Parser Step
diff --git a/lib/Language/Haskell/Stylish/Step/Imports.hs b/lib/Language/Haskell/Stylish/Step/Imports.hs
index ac84933..00ca9b7 100644
--- a/lib/Language/Haskell/Stylish/Step/Imports.hs
+++ b/lib/Language/Haskell/Stylish/Step/Imports.hs
@@ -5,12 +5,14 @@ module Language.Haskell.Stylish.Step.Imports
, ImportAlign (..)
, ListAlign (..)
, LongListAlign (..)
+ , EmptyListAlign (..)
, step
) where
--------------------------------------------------------------------------------
import Control.Arrow ((&&&))
+import Control.Monad (void)
import Data.Char (toLower)
import Data.List (intercalate, sortBy)
import Data.Maybe (isJust, maybeToList)
@@ -26,11 +28,12 @@ import Language.Haskell.Stylish.Util
--------------------------------------------------------------------------------
data Align = Align
- { importAlign :: ImportAlign
- , listAlign :: ListAlign
- , longListAlign :: LongListAlign
- , listPadding :: Int
- , separateLists :: Bool
+ { importAlign :: ImportAlign
+ , listAlign :: ListAlign
+ , longListAlign :: LongListAlign
+ , emptyListAlign :: EmptyListAlign
+ , listPadding :: Int
+ , separateLists :: Bool
}
deriving (Eq, Show)
@@ -47,6 +50,11 @@ data ListAlign
| AfterAlias
deriving (Eq, Show)
+data EmptyListAlign
+ = Inherit
+ | RightAfter
+ deriving (Eq, Show)
+
data LongListAlign
= Inline
| InlineWithBreak
@@ -136,13 +144,16 @@ prettyImportSpec separate = prettyImportSpec'
--------------------------------------------------------------------------------
prettyImport :: (Ord l, Show l) =>
Int -> Align -> Bool -> Bool -> Int -> H.ImportDecl l -> [String]
-prettyImport columns Align{..} padQualified padName longest imp =
- case longListAlign of
+prettyImport columns Align{..} padQualified padName longest imp
+ | (void `fmap` H.importSpecs imp) == emptyImportSpec = emptyWrap
+ | otherwise = case longListAlign of
Inline -> inlineWrap
InlineWithBreak -> longListWrapper inlineWrap inlineWithBreakWrap
InlineToMultiline -> longListWrapper inlineWrap inlineToMultilineWrap
Multiline -> longListWrapper inlineWrap multilineWrap
where
+ emptyImportSpec = Just (H.ImportSpecList () False [])
+
longListWrapper shortWrap longWrap
| listAlign == NewLine
|| length shortWrap > 1
@@ -150,6 +161,10 @@ prettyImport columns Align{..} padQualified padName longest imp =
= longWrap
| otherwise = shortWrap
+ emptyWrap = case emptyListAlign of
+ Inherit -> inlineWrap
+ RightAfter -> [paddedNoSpecBase ++ " ()"]
+
inlineWrap = inlineWrapper
$ mapSpecs
$ withInit (++ ",")