summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorJasper Van der Jeugt <m@jaspervdj.be>2016-08-23 12:33:29 +0200
committerJasper Van der Jeugt <m@jaspervdj.be>2016-08-23 12:33:29 +0200
commitd5d03ca67c26960b53dd625493004c2df1a84125 (patch)
tree9174e9a41112be4159f0947207878ec40f7ce6b4 /lib
parenta6cb91f45079e9a96d5ed81dbc941ba8de6d3949 (diff)
downloadstylish-haskell-d5d03ca67c26960b53dd625493004c2df1a84125.tar.gz
Export Import options & add default
Diffstat (limited to 'lib')
-rw-r--r--lib/Language/Haskell/Stylish.hs5
-rw-r--r--lib/Language/Haskell/Stylish/Config.hs16
-rw-r--r--lib/Language/Haskell/Stylish/Step/Imports.hs26
3 files changed, 28 insertions, 19 deletions
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