diff options
author | Oleg Grenrus <oleg.grenrus@iki.fi> | 2016-07-31 16:56:16 +0300 |
---|---|---|
committer | Oleg Grenrus <oleg.grenrus@iki.fi> | 2016-08-01 17:15:15 +0300 |
commit | 85e582b7fdfcb257c26594cf4ec08fdef2dbfbdb (patch) | |
tree | b0d0bfc207266a248bb2f629b0ba1bc4d8955b77 /lib | |
parent | f344a0fbbe2431b138bec61eaa2d2280b962ee0e (diff) | |
download | stylish-haskell-85e582b7fdfcb257c26594cf4ec08fdef2dbfbdb.tar.gz |
Special setting for empty import lists
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Language/Haskell/Stylish/Config.hs | 7 | ||||
-rw-r--r-- | lib/Language/Haskell/Stylish/Step/Imports.hs | 29 |
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 (++ ",") |