summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Language/Haskell/Stylish/Config.hs6
-rw-r--r--src/Language/Haskell/Stylish/Step/LanguagePragmas.hs29
2 files changed, 26 insertions, 9 deletions
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