summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJasper Van der Jeugt <m@jaspervdj.be>2012-05-31 23:09:11 +0200
committerJasper Van der Jeugt <m@jaspervdj.be>2012-05-31 23:09:11 +0200
commit32d477dde80515d8de062e5fcda9bc7d05b1ffde (patch)
tree28a6298f7d6ba41ecd6ff300854c7275fc97ec0d
parent8c24008ca7063f9bdd2401ac2aea89cadcb483e6 (diff)
downloadstylish-haskell-32d477dde80515d8de062e5fcda9bc7d05b1ffde.tar.gz
Option to disable import alignment
-rw-r--r--.stylish-haskell.yaml17
-rw-r--r--src/StylishHaskell/Config.hs5
-rw-r--r--src/StylishHaskell/Stylish/Imports.hs24
-rw-r--r--tests/StylishHaskell/Stylish/Imports/Tests.hs41
4 files changed, 62 insertions, 25 deletions
diff --git a/.stylish-haskell.yaml b/.stylish-haskell.yaml
index 6d23a1b..c535164 100644
--- a/.stylish-haskell.yaml
+++ b/.stylish-haskell.yaml
@@ -1,8 +1,17 @@
+# Import cleanup
+imports:
+ # Align import names and import lists
+ align: true
+
+# Language pragmas
+languages_pragmas:
+ enable: true
+
+# Replace tabs by spaces
tabs:
+ # Number of spaces to use for each tab
spaces: 8
-imports:
- enabled: true
-
+# Remove trailing whitespace
trailing_whitespace:
- enabled: true
+ enable: true
diff --git a/src/StylishHaskell/Config.hs b/src/StylishHaskell/Config.hs
index 83518b9..2d9617f 100644
--- a/src/StylishHaskell/Config.hs
+++ b/src/StylishHaskell/Config.hs
@@ -43,7 +43,7 @@ instance FromJSON Config where
--------------------------------------------------------------------------------
defaultConfig :: Config
defaultConfig = Config $
- [ StylishHaskell.Stylish.Imports.stylish
+ [ StylishHaskell.Stylish.Imports.stylish True
, StylishHaskell.Stylish.LanguagePragmas.stylish
, StylishHaskell.Stylish.TrailingWhitespace.stylish
]
@@ -106,7 +106,8 @@ parseConfig _ = mzero
--------------------------------------------------------------------------------
parseImports :: A.Object -> A.Parser Stylish
-parseImports _ = return StylishHaskell.Stylish.Imports.stylish
+parseImports o = StylishHaskell.Stylish.Imports.stylish
+ <$> o A..: "align"
--------------------------------------------------------------------------------
diff --git a/src/StylishHaskell/Stylish/Imports.hs b/src/StylishHaskell/Stylish/Imports.hs
index 5229d48..2adb911 100644
--- a/src/StylishHaskell/Stylish/Imports.hs
+++ b/src/StylishHaskell/Stylish/Imports.hs
@@ -82,27 +82,33 @@ sortImportSpecs imp = imp {H.importSpecs = fmap sort $ H.importSpecs imp}
--------------------------------------------------------------------------------
-prettyImport :: Int -> H.ImportDecl l -> String
-prettyImport longest imp = unwords $ concat
+prettyImport :: Bool -> Int -> H.ImportDecl l -> String
+prettyImport align longest imp = unwords $ concat
[ ["import"]
- , [if H.importQualified imp then "qualified" else " "]
- , [(if hasExtras then padRight longest else id) (importName imp)]
+ , qualified
+ , [(if hasExtras && align then padRight longest else id) (importName imp)]
, ["as " ++ as | H.ModuleName _ as <- maybeToList $ H.importAs imp]
, [H.prettyPrint specs | specs <- maybeToList $ H.importSpecs imp]
]
where
hasExtras = isJust (H.importAs imp) || isJust (H.importSpecs imp)
+ qualified
+ | H.importQualified imp = ["qualified"]
+ | align = [" "]
+ | otherwise = []
+
--------------------------------------------------------------------------------
-prettyImportGroup :: Int -> [H.ImportDecl LineBlock] -> Lines
-prettyImportGroup longest = map (prettyImport longest) . sortBy compareImports
+prettyImportGroup :: Bool -> Int -> [H.ImportDecl LineBlock] -> Lines
+prettyImportGroup align longest =
+ map (prettyImport align longest) . sortBy compareImports
--------------------------------------------------------------------------------
-stylish :: Stylish
-stylish ls (module', _) = flip applyChanges ls
- [ change block (prettyImportGroup longest importGroup)
+stylish :: Bool -> Stylish
+stylish align ls (module', _) = flip applyChanges ls
+ [ change block (prettyImportGroup align longest importGroup)
| (block, importGroup) <- groups
]
where
diff --git a/tests/StylishHaskell/Stylish/Imports/Tests.hs b/tests/StylishHaskell/Stylish/Imports/Tests.hs
index 2a14775..848b403 100644
--- a/tests/StylishHaskell/Stylish/Imports/Tests.hs
+++ b/tests/StylishHaskell/Stylish/Imports/Tests.hs
@@ -19,33 +19,54 @@ import StylishHaskell.Tests.Util
tests :: Test
tests = testGroup "StylishHaskell.Stylish.Imports.Tests"
[ case01
+ , case02
+ ]
+
+
+--------------------------------------------------------------------------------
+input :: String
+input = unlines
+ [ "module Herp where"
+ , ""
+ , "import qualified Data.Map as M"
+ , "import Control.Monad"
+ , "import Data.Map (lookup, (!), insert, Map)"
+ , ""
+ , "import Herp.Derp.Internals"
+ , ""
+ , "herp = putStrLn \"import Hello world\""
]
--------------------------------------------------------------------------------
case01 :: Test
-case01 = testCase "case 01" $ expected @=? testStylish stylish input
+case01 = testCase "case 01" $ expected @=? testStylish (stylish True) input
where
- input = unlines
+ expected = unlines
[ "module Herp where"
, ""
- , "import qualified Data.Map as M"
- , "import Control.Monad"
- , "import Data.Map (lookup, (!), insert, Map)"
+ , "import Control.Monad"
+ , "import Data.Map (Map, insert, lookup, (!))"
+ , "import qualified Data.Map as M"
, ""
- , "import Herp.Derp.Internals"
+ , "import Herp.Derp.Internals"
, ""
, "herp = putStrLn \"import Hello world\""
]
+
+--------------------------------------------------------------------------------
+case02 :: Test
+case02 = testCase "case 02" $ expected @=? testStylish (stylish False) input
+ where
expected = unlines
[ "module Herp where"
, ""
- , "import Control.Monad"
- , "import Data.Map (Map, insert, lookup, (!))"
- , "import qualified Data.Map as M"
+ , "import Control.Monad"
+ , "import Data.Map (Map, insert, lookup, (!))"
+ , "import qualified Data.Map as M"
, ""
- , "import Herp.Derp.Internals"
+ , "import Herp.Derp.Internals"
, ""
, "herp = putStrLn \"import Hello world\""
]