From 82ec3e1c458f01206c0230d4db1855c4fb6c64d8 Mon Sep 17 00:00:00 2001 From: Ondřej Janošík Date: Mon, 21 Sep 2015 01:12:29 +0200 Subject: New import list option new line-multiline: Import list will start on new line when it's short enough to fit to single line. Otherwise it'll be multiline. --- src/Language/Haskell/Stylish/Config.hs | 7 ++++--- src/Language/Haskell/Stylish/Step/Imports.hs | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Language/Haskell/Stylish/Config.hs b/src/Language/Haskell/Stylish/Config.hs index b8ae588..271a461 100644 --- a/src/Language/Haskell/Stylish/Config.hs +++ b/src/Language/Haskell/Stylish/Config.hs @@ -187,9 +187,10 @@ parseImports config o = Imports.step ] longListAligns = - [ ("inline", Imports.Inline) - , ("new line", Imports.InlineWithBreak) - , ("multiline", Imports.Multiline) + [ ("inline", Imports.Inline) + , ("new line", Imports.InlineWithBreak) + , ("new line-multiline", Imports.InlineToMultiline) + , ("multiline", Imports.Multiline) ] diff --git a/src/Language/Haskell/Stylish/Step/Imports.hs b/src/Language/Haskell/Stylish/Step/Imports.hs index db4e63e..2cd8e6c 100644 --- a/src/Language/Haskell/Stylish/Step/Imports.hs +++ b/src/Language/Haskell/Stylish/Step/Imports.hs @@ -52,6 +52,7 @@ data ListAlign data LongListAlign = Inline | InlineWithBreak + | InlineToMultiline | Multiline deriving (Eq, Show) @@ -141,6 +142,7 @@ prettyImport columns Align{..} padQualified padName longest imp = case longListAlign of Inline -> inlineWrap InlineWithBreak -> longListWrapper inlineWrap inlineWithBreakWrap + InlineToMultiline -> longListWrapper inlineWrap inlineToMultilineWrap Multiline -> longListWrapper inlineWrap multilineWrap where longListWrapper shortWrap longWrap @@ -169,6 +171,12 @@ prettyImport columns Align{..} padQualified padName longest imp = . withHead ("(" ++) . withLast (++ ")")) + inlineToMultilineWrap + | length inlineWithBreakWrap > 2 + || any ((> columns) . length) (tail inlineWithBreakWrap) + = multilineWrap + | otherwise = inlineWithBreakWrap + -- 'wrapRest 0' ensures that every item of spec list is on new line. multilineWrap = paddedNoSpecBase : wrapRest 0 listPadding ( mapSpecs -- cgit v1.2.3