summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorOndřej Janošík <j.ondra14@gmail.com>2015-07-09 15:06:32 +0200
committerOndřej Janošík <j.ondra14@gmail.com>2015-07-09 15:06:32 +0200
commit184591eda03be2de00613d1ddcc9234f2da95562 (patch)
tree3427691550cfda01267ad432587022e2ffd4c65f /src
parent729c0cf4d315133e92b4e5c5b92bdc5f2fab7ef8 (diff)
downloadstylish-haskell-184591eda03be2de00613d1ddcc9234f2da95562.tar.gz
Added option to break line with inline style only when import is too long
Diffstat (limited to 'src')
-rw-r--r--src/Language/Haskell/Stylish/Config.hs5
-rw-r--r--src/Language/Haskell/Stylish/Step/Imports.hs18
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 ("( " ++)