diff options
author | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-05-31 23:09:11 +0200 |
---|---|---|
committer | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-05-31 23:09:11 +0200 |
commit | 32d477dde80515d8de062e5fcda9bc7d05b1ffde (patch) | |
tree | 28a6298f7d6ba41ecd6ff300854c7275fc97ec0d | |
parent | 8c24008ca7063f9bdd2401ac2aea89cadcb483e6 (diff) | |
download | stylish-haskell-32d477dde80515d8de062e5fcda9bc7d05b1ffde.tar.gz |
Option to disable import alignment
-rw-r--r-- | .stylish-haskell.yaml | 17 | ||||
-rw-r--r-- | src/StylishHaskell/Config.hs | 5 | ||||
-rw-r--r-- | src/StylishHaskell/Stylish/Imports.hs | 24 | ||||
-rw-r--r-- | tests/StylishHaskell/Stylish/Imports/Tests.hs | 41 |
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\"" ] |