From d5d03ca67c26960b53dd625493004c2df1a84125 Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Tue, 23 Aug 2016 12:33:29 +0200 Subject: Export Import options & add default --- lib/Language/Haskell/Stylish.hs | 5 +---- lib/Language/Haskell/Stylish/Config.hs | 16 +++++++++------- lib/Language/Haskell/Stylish/Step/Imports.hs | 26 ++++++++++++++++++-------- 3 files changed, 28 insertions(+), 19 deletions(-) (limited to 'lib') diff --git a/lib/Language/Haskell/Stylish.hs b/lib/Language/Haskell/Stylish.hs index 5b1e918..46543ec 100644 --- a/lib/Language/Haskell/Stylish.hs +++ b/lib/Language/Haskell/Stylish.hs @@ -9,9 +9,6 @@ module Language.Haskell.Stylish , tabs , trailingWhitespace , unicodeSyntax - -- ** Data types - , Imports.Align (..) - , LanguagePragmas.Style (..) -- ** Helpers , stepName -- * Config @@ -51,7 +48,7 @@ simpleAlign = SimpleAlign.step -------------------------------------------------------------------------------- imports :: Int -- ^ columns - -> Imports.Align + -> Imports.Options -> Step imports = Imports.step diff --git a/lib/Language/Haskell/Stylish/Config.hs b/lib/Language/Haskell/Stylish/Config.hs index 5092ed9..b83cf3a 100644 --- a/lib/Language/Haskell/Stylish/Config.hs +++ b/lib/Language/Haskell/Stylish/Config.hs @@ -181,17 +181,19 @@ parseSimpleAlign c o = SimpleAlign.step parseImports :: Config -> A.Object -> A.Parser Step parseImports config o = Imports.step <$> pure (configColumns config) - <*> (Imports.Align - <$> (o A..:? "align" >>= parseEnum aligns Imports.Global) - <*> (o A..:? "list_align" >>= parseEnum listAligns Imports.AfterAlias) + <*> (Imports.Options + <$> (o A..:? "align" >>= parseEnum aligns (def Imports.importAlign)) + <*> (o A..:? "list_align" >>= parseEnum listAligns (def Imports.listAlign)) <*> (o A..:? "long_list_align" - >>= parseEnum longListAligns Imports.Inline) + >>= parseEnum longListAligns (def Imports.longListAlign)) -- Note that padding has to be at least 1. Default is 4. <*> (o A..:? "empty_list_align" - >>= parseEnum emptyListAligns Imports.Inherit) - <*> o A..:? "list_padding" A..!= Imports.LPConstant 4 - <*> o A..:? "separate_lists" A..!= True) + >>= parseEnum emptyListAligns (def Imports.emptyListAlign)) + <*> o A..:? "list_padding" A..!= (def Imports.listPadding) + <*> o A..:? "separate_lists" A..!= (def Imports.separateLists)) where + def f = f Imports.defaultOptions + aligns = [ ("global", Imports.Global) , ("file", Imports.File) diff --git a/lib/Language/Haskell/Stylish/Step/Imports.hs b/lib/Language/Haskell/Stylish/Step/Imports.hs index d0519ef..334fa15 100644 --- a/lib/Language/Haskell/Stylish/Step/Imports.hs +++ b/lib/Language/Haskell/Stylish/Step/Imports.hs @@ -2,7 +2,8 @@ {-# LANGUAGE OverloadedStrings #-} -------------------------------------------------------------------------------- module Language.Haskell.Stylish.Step.Imports - ( Align (..) + ( Options (..) + , defaultOptions , ImportAlign (..) , ListAlign (..) , LongListAlign (..) @@ -31,15 +32,24 @@ import Language.Haskell.Stylish.Step import Language.Haskell.Stylish.Util -------------------------------------------------------------------------------- -data Align = Align +data Options = Options { importAlign :: ImportAlign , listAlign :: ListAlign , longListAlign :: LongListAlign , emptyListAlign :: EmptyListAlign , listPadding :: ListPadding , separateLists :: Bool + } deriving (Eq, Show) + +defaultOptions :: Options +defaultOptions = Options + { importAlign = Global + , listAlign = AfterAlias + , longListAlign = Inline + , emptyListAlign = Inherit + , listPadding = LPConstant 4 + , separateLists = True } - deriving (Eq, Show) data ListPadding = LPConstant Int @@ -152,8 +162,8 @@ prettyImportSpec separate = prettyImportSpec' -------------------------------------------------------------------------------- prettyImport :: (Ord l, Show l) => - Int -> Align -> Bool -> Bool -> Int -> H.ImportDecl l -> [String] -prettyImport columns Align{..} padQualified padName longest imp + Int -> Options -> Bool -> Bool -> Int -> H.ImportDecl l -> [String] +prettyImport columns Options{..} padQualified padName longest imp | (void `fmap` H.importSpecs imp) == emptyImportSpec = emptyWrap | otherwise = case longListAlign of Inline -> inlineWrap @@ -259,7 +269,7 @@ prettyImport columns Align{..} padQualified padName longest imp -------------------------------------------------------------------------------- -prettyImportGroup :: Int -> Align -> Bool -> Int +prettyImportGroup :: Int -> Options -> Bool -> Int -> [H.ImportDecl LineBlock] -> Lines prettyImportGroup columns align fileAlign longest imps = @@ -282,12 +292,12 @@ prettyImportGroup columns align fileAlign longest imps = -------------------------------------------------------------------------------- -step :: Int -> Align -> Step +step :: Int -> Options -> Step step columns = makeStep "Imports" . step' columns -------------------------------------------------------------------------------- -step' :: Int -> Align -> Lines -> Module -> Lines +step' :: Int -> Options -> Lines -> Module -> Lines step' columns align ls (module', _) = applyChanges [ change block $ const $ prettyImportGroup columns align fileAlign longest importGroup -- cgit v1.2.3