summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHiromi Ishii <konn.jinro@gmail.com>2013-04-19 12:22:09 +0900
committerHiromi Ishii <konn.jinro@gmail.com>2013-04-19 12:22:09 +0900
commitd2773448c20fef4439080f61c5262588be3992cb (patch)
treeca202b99d5d6c22a1c873733320768961008836f
parent2f312f0648c71ac4b1312855d5cc6506bdd85fa0 (diff)
downloadstylish-haskell-d2773448c20fef4439080f61c5262588be3992cb.tar.gz
* Rewrite function using `compact'.
* Rename `compact' to `compact_line'. * Added the description for new style in .stylish-haskell.yml * Added test case for `compact_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.hs34
-rw-r--r--tests/Language/Haskell/Stylish/Step/LanguagePragmas/Tests.hs24
4 files changed, 40 insertions, 25 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 32eb55d..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)
- , ("line", LanguagePragmas.Line)]
+ [ ("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 c147ade..48db19b 100644
--- a/src/Language/Haskell/Stylish/Step/LanguagePragmas.hs
+++ b/src/Language/Haskell/Stylish/Step/LanguagePragmas.hs
@@ -24,7 +24,7 @@ import Language.Haskell.Stylish.Util
data Style
= Vertical
| Compact
- | Line
+ | CompactLine
deriving (Eq, Show)
@@ -56,27 +56,27 @@ compactPragmas columns pragmas' = wrap columns "{-# LANGUAGE" 13 $
--------------------------------------------------------------------------------
-linePragmas :: Int -> [String] -> Lines
-linePragmas _ [] = []
-linePragmas columns (p:pragmas') =
- let (ls, curr, _) = foldl stp ([], p, length p) pragmas'
- ps = ls ++ [curr]
- longest = maximum $ map length ps
- in map (wrapLANGUAGE . padRight longest) ps
+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
- maxWidth = columns - 17
- stp (ls, curr, width) str
- | width' > maxWidth = (ls ++ [curr], str, len)
- | otherwise = (ls, curr ++ ", " ++ str, width')
- where
- len = length str
- width' = width + 2 + len
- wrapLANGUAGE ps = "{-# LANGUAGE " ++ ps ++ " #-}"
+ 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 _ Line = linePragmas columns
+prettyPragmas columns _ CompactLine = compactLinePragmas columns
--------------------------------------------------------------------------------
-- | Filter redundant (and duplicate) pragmas out of the groups. As a side
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 #-}"
+ ]