diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Language/Haskell/Stylish/Config.hs | 5 | ||||
-rw-r--r-- | src/Language/Haskell/Stylish/Step/Imports.hs | 18 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/Language/Haskell/Stylish/Config.hs b/src/Language/Haskell/Stylish/Config.hs index 9dcbb50..72b59ca 100644 --- a/src/Language/Haskell/Stylish/Config.hs +++ b/src/Language/Haskell/Stylish/Config.hs @@ -169,8 +169,8 @@ parseImports config o = Imports.step <*> (o A..:? "list_align" >>= parseEnum listAligns Imports.AfterAlias) <*> (o A..:? "long_list_align" >>= parseEnum longListAligns Imports.Inline) - <*> (o A..:? "list_padding" - >>= (return . maybe 4 (max 1)))) -- Padding have to be at least 1. + <*> (maybe 4 (max 1) <$> o A..:? "list_padding")) + -- ^ Padding have to be at least 1. Default is 4. where aligns = [ ("global", Imports.Global) @@ -187,6 +187,7 @@ parseImports config o = Imports.step longListAligns = [ ("inline", Imports.Inline) + , ("new line", Imports.InlineWithBreak) , ("multiline", Imports.Multiline) ] diff --git a/src/Language/Haskell/Stylish/Step/Imports.hs b/src/Language/Haskell/Stylish/Step/Imports.hs index f8361a8..b1f2bd9 100644 --- a/src/Language/Haskell/Stylish/Step/Imports.hs +++ b/src/Language/Haskell/Stylish/Step/Imports.hs @@ -49,6 +49,7 @@ data ListAlign data LongListAlign = Inline + | InlineWithBreak | Multiline deriving (Eq, Show) @@ -122,10 +123,14 @@ prettyImport :: Int -> Align -> Bool -> Bool -> Int -> H.ImportDecl l prettyImport columns Align{..} padQualified padName longest imp = case longListAlign of Inline -> inlineWrap - Multiline -> if listAlign == NewLine || length inlineWrap > 1 - then multilineWrap - else inlineWrap + InlineWithBreak -> longListWrapper inlineWrap inlineWithBreakWrap + Multiline -> longListWrapper inlineWrap multilineWrap where + longListWrapper shortWrap longWrap = + if listAlign == NewLine || length shortWrap > 1 + then longWrap + else shortWrap + inlineWrap = inlineWrapper $ mapSpecs $ withInit (++ ",") @@ -139,6 +144,13 @@ prettyImport columns Align{..} padQualified padName longest imp = AfterAlias -> withTail (' ' :) . wrap columns paddedBase (afterAliasBaseLength + 1) + inlineWithBreakWrap = paddedNoSpecBase : (wrapRest columns listPadding + $ mapSpecs + $ withInit (++ ",") + . withHead ("(" ++) + . withLast (++ ")")) + + -- 'wrapRest 0' ensures that every item of spec list is on new line. multilineWrap = paddedNoSpecBase : (wrapRest 0 listPadding $ (mapSpecs $ withHead ("( " ++) |