diff options
Diffstat (limited to 'src/Language/Haskell/Stylish/Config.hs')
-rw-r--r-- | src/Language/Haskell/Stylish/Config.hs | 55 |
1 files changed, 40 insertions, 15 deletions
diff --git a/src/Language/Haskell/Stylish/Config.hs b/src/Language/Haskell/Stylish/Config.hs index 0304ae5..271a461 100644 --- a/src/Language/Haskell/Stylish/Config.hs +++ b/src/Language/Haskell/Stylish/Config.hs @@ -10,23 +10,25 @@ module Language.Haskell.Stylish.Config -------------------------------------------------------------------------------- -import Control.Applicative (pure, (<$>), (<*>)) -import Control.Monad (forM, mzero) -import Data.Aeson (FromJSON (..)) -import qualified Data.Aeson as A -import qualified Data.Aeson.Types as A -import qualified Data.ByteString as B -import Data.List (inits, intercalate) -import Data.Map (Map) -import qualified Data.Map as M -import Data.Yaml (decodeEither) +import Control.Applicative (pure, (<$>), + (<*>)) +import Control.Monad (forM, mzero) +import Data.Aeson (FromJSON (..)) +import qualified Data.Aeson as A +import qualified Data.Aeson.Types as A +import qualified Data.ByteString as B +import Data.List (inits, + intercalate) +import Data.Map (Map) +import qualified Data.Map as M +import Data.Yaml (decodeEither) import System.Directory -import System.FilePath (joinPath, splitPath, - (</>)) +import System.FilePath (joinPath, + splitPath, + (</>)) -------------------------------------------------------------------------------- -import Paths_stylish_haskell (getDataFileName) import Language.Haskell.Stylish.Step import qualified Language.Haskell.Stylish.Step.Imports as Imports import qualified Language.Haskell.Stylish.Step.LanguagePragmas as LanguagePragmas @@ -35,6 +37,7 @@ import qualified Language.Haskell.Stylish.Step.Tabs as Tabs import qualified Language.Haskell.Stylish.Step.TrailingWhitespace as TrailingWhitespace import qualified Language.Haskell.Stylish.Step.UnicodeSyntax as UnicodeSyntax import Language.Haskell.Stylish.Verbose +import Paths_stylish_haskell (getDataFileName) -------------------------------------------------------------------------------- @@ -161,7 +164,14 @@ parseEnum strs _ (Just k) = case lookup k strs of parseImports :: Config -> A.Object -> A.Parser Step parseImports config o = Imports.step <$> pure (configColumns config) - <*> (o A..:? "align" >>= parseEnum aligns Imports.Global) + <*> (Imports.Align + <$> (o A..:? "align" >>= parseEnum aligns Imports.Global) + <*> (o A..:? "list_align" >>= parseEnum listAligns Imports.AfterAlias) + <*> (o A..:? "long_list_align" + >>= parseEnum longListAligns Imports.Inline) + <*> (maybe 4 (max 1) <$> o A..:? "list_padding") + -- ^ Padding have to be at least 1. Default is 4. + <*> o A..:? "separate_lists" A..!= True) where aligns = [ ("global", Imports.Global) @@ -170,18 +180,33 @@ parseImports config o = Imports.step , ("none", Imports.None) ] + listAligns = + [ ("new line", Imports.NewLine) + , ("with alias", Imports.WithAlias) + , ("after alias", Imports.AfterAlias) + ] + + longListAligns = + [ ("inline", Imports.Inline) + , ("new line", Imports.InlineWithBreak) + , ("new line-multiline", Imports.InlineToMultiline) + , ("multiline", Imports.Multiline) + ] + -------------------------------------------------------------------------------- parseLanguagePragmas :: Config -> A.Object -> A.Parser Step parseLanguagePragmas config o = LanguagePragmas.step <$> pure (configColumns config) <*> (o A..:? "style" >>= parseEnum styles LanguagePragmas.Vertical) + <*> o A..:? "align" A..!= True <*> o A..:? "remove_redundant" A..!= True where styles = [ ("vertical", LanguagePragmas.Vertical) , ("compact", LanguagePragmas.Compact) - , ("compact_line", LanguagePragmas.CompactLine)] + , ("compact_line", LanguagePragmas.CompactLine) + ] -------------------------------------------------------------------------------- |