summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorJasper Van der Jeugt <m@jaspervdj.be>2012-06-01 15:07:03 +0200
committerJasper Van der Jeugt <m@jaspervdj.be>2012-06-01 15:07:03 +0200
commitf53dcf0f60df80b5f5fa7071d1b5d6464055b503 (patch)
tree2208b71237988d0c0d39fe74e2607a9593fb0c67 /src
parent73507718f63b7c7dbf04fde7595f6f3f7fdcabb7 (diff)
downloadstylish-haskell-f53dcf0f60df80b5f5fa7071d1b5d6464055b503.tar.gz
Remove redundant ViewPatterns
See #4
Diffstat (limited to 'src')
-rw-r--r--src/StylishHaskell/Config.hs13
-rw-r--r--src/StylishHaskell/Stylish/LanguagePragmas.hs27
2 files changed, 30 insertions, 10 deletions
diff --git a/src/StylishHaskell/Config.hs b/src/StylishHaskell/Config.hs
index 18c1d24..4b1add8 100644
--- a/src/StylishHaskell/Config.hs
+++ b/src/StylishHaskell/Config.hs
@@ -14,8 +14,8 @@ import Data.Aeson (FromJSON(..))
import qualified Data.Aeson as A
import qualified Data.Aeson.Types as A
import qualified Data.ByteString as B
-import Data.Map (Map)
-import qualified Data.Map as M
+import Data.Map (Map)
+import qualified Data.Map as M
import Data.Yaml (decodeEither)
import System.Directory
import System.FilePath ((</>))
@@ -45,7 +45,7 @@ instance FromJSON Config where
defaultConfig :: Config
defaultConfig = Config $
[ StylishHaskell.Stylish.Imports.stylish True
- , StylishHaskell.Stylish.LanguagePragmas.stylish
+ , StylishHaskell.Stylish.LanguagePragmas.stylish True
, StylishHaskell.Stylish.TrailingWhitespace.stylish
]
@@ -114,18 +114,19 @@ parseStylish val = do
--------------------------------------------------------------------------------
parseImports :: A.Object -> A.Parser Stylish
parseImports o = StylishHaskell.Stylish.Imports.stylish
- <$> o A..: "align"
+ <$> o A..:? "align" A..!= True
--------------------------------------------------------------------------------
parseLanguagePragmas :: A.Object -> A.Parser Stylish
-parseLanguagePragmas _ = return StylishHaskell.Stylish.LanguagePragmas.stylish
+parseLanguagePragmas o = StylishHaskell.Stylish.LanguagePragmas.stylish
+ <$> o A..:? "remove_redundant" A..!= True
--------------------------------------------------------------------------------
parseTabs :: A.Object -> A.Parser Stylish
parseTabs o = StylishHaskell.Stylish.Tabs.stylish
- <$> o A..: "spaces"
+ <$> o A..:? "spaces" A..!= 8
--------------------------------------------------------------------------------
diff --git a/src/StylishHaskell/Stylish/LanguagePragmas.hs b/src/StylishHaskell/Stylish/LanguagePragmas.hs
index f4da813..60e3187 100644
--- a/src/StylishHaskell/Stylish/LanguagePragmas.hs
+++ b/src/StylishHaskell/Stylish/LanguagePragmas.hs
@@ -44,15 +44,19 @@ prettyPragmas pragmas' =
--------------------------------------------------------------------------------
-stylish :: Stylish
-stylish ls (module', _)
+stylish :: Bool -> Stylish
+stylish removeRedundant ls (module', _)
| null pragmas' = ls
| otherwise = applyChanges changes ls
where
+ filterRedundant
+ | removeRedundant = filter (not . isRedundant module')
+ | otherwise = id
+
pragmas' = pragmas $ fmap linesFromSrcSpan module'
- deletes = map (delete . fst) pragmas'
- uniques = nub $ sort $ concatMap snd pragmas'
+ uniques = filterRedundant $ nub $ sort $ snd =<< pragmas'
loc = firstLocation pragmas'
+ deletes = map (delete . fst) pragmas'
changes = insert loc (prettyPragmas uniques) : deletes
@@ -66,3 +70,18 @@ addLanguagePragma pragma modu
pragmas' = pragmas (fmap linesFromSrcSpan modu)
present = concatMap snd pragmas'
line = if null pragmas' then 1 else firstLocation pragmas'
+
+
+--------------------------------------------------------------------------------
+-- | Check if a language pragma is redundant. We can't do this for all pragmas,
+-- but we do a best effort.
+isRedundant :: H.Module H.SrcSpanInfo -> String -> Bool
+isRedundant m "ViewPatterns" = isRedundantViewPatterns m
+isRedundant _ _ = False
+
+
+--------------------------------------------------------------------------------
+-- | Check if the ViewPatterns language pragma is redundant.
+isRedundantViewPatterns :: H.Module H.SrcSpanInfo -> Bool
+isRedundantViewPatterns m = null
+ [() | H.PViewPat _ _ _ <- everything m :: [H.Pat H.SrcSpanInfo]]