diff options
author | Jasper Van der Jeugt <jaspervdj@gmail.com> | 2013-12-18 01:54:56 -0800 |
---|---|---|
committer | Jasper Van der Jeugt <jaspervdj@gmail.com> | 2013-12-18 01:54:56 -0800 |
commit | 062d78eaf4ad1bc78ff03fc5d6831df26b558691 (patch) | |
tree | 5186e125bf61cf981872a7c45e1a8bb90c8f4fee | |
parent | 2188b248a37157ba1f5c35a8674890ed80d0a3ef (diff) | |
parent | d2773448c20fef4439080f61c5262588be3992cb (diff) | |
download | stylish-haskell-062d78eaf4ad1bc78ff03fc5d6831df26b558691.tar.gz |
Merge pull request #34 from konn/master
Added new pragma style `line'
-rw-r--r-- | data/stylish-haskell.yaml | 1 | ||||
-rw-r--r-- | src/Language/Haskell/Stylish/Config.hs | 6 | ||||
-rw-r--r-- | src/Language/Haskell/Stylish/Step/LanguagePragmas.hs | 29 | ||||
-rw-r--r-- | tests/Language/Haskell/Stylish/Step/LanguagePragmas/Tests.hs | 24 |
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 #-}" + ] |