summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJasper Van der Jeugt <jaspervdj@gmail.com>2013-12-18 01:54:56 -0800
committerJasper Van der Jeugt <jaspervdj@gmail.com>2013-12-18 01:54:56 -0800
commit062d78eaf4ad1bc78ff03fc5d6831df26b558691 (patch)
tree5186e125bf61cf981872a7c45e1a8bb90c8f4fee
parent2188b248a37157ba1f5c35a8674890ed80d0a3ef (diff)
parentd2773448c20fef4439080f61c5262588be3992cb (diff)
downloadstylish-haskell-062d78eaf4ad1bc78ff03fc5d6831df26b558691.tar.gz
Merge pull request #34 from konn/master
Added new pragma style `line'
-rw-r--r--data/stylish-haskell.yaml1
-rw-r--r--src/Language/Haskell/Stylish/Config.hs6
-rw-r--r--src/Language/Haskell/Stylish/Step/LanguagePragmas.hs29
-rw-r--r--tests/Language/Haskell/Stylish/Step/LanguagePragmas/Tests.hs24
4 files changed, 46 insertions, 14 deletions
diff --git a/data/stylish-haskell.yaml b/data/stylish-haskell.yaml
index 080c2f9..cc117e5 100644
--- a/data/stylish-haskell.yaml
+++ b/data/stylish-haskell.yaml
@@ -41,6 +41,7 @@ steps:
#
# - compact: A more compact style.
#
+ # - compact_line: Similar to compact, but wrap each line by `{-#LANGUAGE #-}'.
# Default: vertical.
style: vertical
diff --git a/src/Language/Haskell/Stylish/Config.hs b/src/Language/Haskell/Stylish/Config.hs
index 6c05e0a..2dd79a8 100644
--- a/src/Language/Haskell/Stylish/Config.hs
+++ b/src/Language/Haskell/Stylish/Config.hs
@@ -178,9 +178,9 @@ parseLanguagePragmas config o = LanguagePragmas.step
<*> o A..:? "remove_redundant" A..!= True
where
styles =
- [ ("vertical", LanguagePragmas.Vertical)
- , ("compact", LanguagePragmas.Compact)
- ]
+ [ ("vertical", LanguagePragmas.Vertical)
+ , ("compact", LanguagePragmas.Compact)
+ , ("compact_line", LanguagePragmas.CompactLine)]
--------------------------------------------------------------------------------
diff --git a/src/Language/Haskell/Stylish/Step/LanguagePragmas.hs b/src/Language/Haskell/Stylish/Step/LanguagePragmas.hs
index a39e88d..48db19b 100644
--- a/src/Language/Haskell/Stylish/Step/LanguagePragmas.hs
+++ b/src/Language/Haskell/Stylish/Step/LanguagePragmas.hs
@@ -14,16 +14,17 @@ import qualified Language.Haskell.Exts.Annotated as H
--------------------------------------------------------------------------------
-import Language.Haskell.Stylish.Block
-import Language.Haskell.Stylish.Editor
-import Language.Haskell.Stylish.Step
-import Language.Haskell.Stylish.Util
+import Language.Haskell.Stylish.Block
+import Language.Haskell.Stylish.Editor
+import Language.Haskell.Stylish.Step
+import Language.Haskell.Stylish.Util
--------------------------------------------------------------------------------
data Style
= Vertical
| Compact
+ | CompactLine
deriving (Eq, Show)
@@ -55,10 +56,27 @@ compactPragmas columns pragmas' = wrap columns "{-# LANGUAGE" 13 $
--------------------------------------------------------------------------------
+compactLinePragmas :: Int -> [String] -> Lines
+compactLinePragmas _ [] = []
+compactLinePragmas columns pragmas' =
+ let maxWidth = columns - 14
+ prags = map truncateComma $ wrap maxWidth "" 1 $
+ map (++ ",") (init pragmas') ++ [last pragmas']
+ longest = maximum $ map length prags
+ in map (wrapLANGUAGE . padRight longest) prags
+ where
+ wrapLANGUAGE ps = "{-# LANGUAGE" ++ ps ++ " #-}"
+
+truncateComma :: String -> String
+truncateComma "" = ""
+truncateComma xs
+ | last xs == ',' = init xs
+ | otherwise = xs
+
prettyPragmas :: Int -> Int -> Style -> [String] -> Lines
prettyPragmas _ longest Vertical = verticalPragmas longest
prettyPragmas columns _ Compact = compactPragmas columns
-
+prettyPragmas columns _ CompactLine = compactLinePragmas columns
--------------------------------------------------------------------------------
-- | Filter redundant (and duplicate) pragmas out of the groups. As a side
@@ -76,7 +94,6 @@ filterRedundant isRedundant' = snd . foldr filterRedundant' (S.empty, [])
xs' = S.fromList fxs `S.difference` known
known' = xs' `S.union` known
-
--------------------------------------------------------------------------------
step :: Int -> Style -> Bool -> Step
step columns style = makeStep "LanguagePragmas" . step' columns style
diff --git a/tests/Language/Haskell/Stylish/Step/LanguagePragmas/Tests.hs b/tests/Language/Haskell/Stylish/Step/LanguagePragmas/Tests.hs
index d26c6a4..b4f06b6 100644
--- a/tests/Language/Haskell/Stylish/Step/LanguagePragmas/Tests.hs
+++ b/tests/Language/Haskell/Stylish/Step/LanguagePragmas/Tests.hs
@@ -5,14 +5,14 @@ module Language.Haskell.Stylish.Step.LanguagePragmas.Tests
--------------------------------------------------------------------------------
-import Test.Framework (Test, testGroup)
-import Test.Framework.Providers.HUnit (testCase)
-import Test.HUnit (Assertion, (@=?))
+import Test.Framework (Test, testGroup)
+import Test.Framework.Providers.HUnit (testCase)
+import Test.HUnit (Assertion, (@=?))
--------------------------------------------------------------------------------
-import Language.Haskell.Stylish.Step.LanguagePragmas
-import Language.Haskell.Stylish.Tests.Util
+import Language.Haskell.Stylish.Step.LanguagePragmas
+import Language.Haskell.Stylish.Tests.Util
--------------------------------------------------------------------------------
@@ -113,3 +113,17 @@ case05 = expected @=? testStep (step 80 Vertical False) input
, "{-# LANGUAGE Trustworthy #-}"
, "#endif"
]
+
+case06 :: Assertion
+case06 = expected @=? testStep (step 80 CompactLine True) input
+ where
+ input = unlines
+ [ "{-# LANGUAGE TypeOperators, StandaloneDeriving, DeriveDataTypeable,"
+ , " TemplateHaskell #-}"
+ , "{-# LANGUAGE TemplateHaskell, ViewPatterns #-}"
+ ]
+ expected = unlines
+ [ "{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving, " ++
+ "TemplateHaskell #-}"
+ , "{-# LANGUAGE TypeOperators, ViewPatterns #-}"
+ ]