diff options
author | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-06-01 15:07:03 +0200 |
---|---|---|
committer | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-06-01 15:07:03 +0200 |
commit | f53dcf0f60df80b5f5fa7071d1b5d6464055b503 (patch) | |
tree | 2208b71237988d0c0d39fe74e2607a9593fb0c67 /src | |
parent | 73507718f63b7c7dbf04fde7595f6f3f7fdcabb7 (diff) | |
download | stylish-haskell-f53dcf0f60df80b5f5fa7071d1b5d6464055b503.tar.gz |
Remove redundant ViewPatterns
See #4
Diffstat (limited to 'src')
-rw-r--r-- | src/StylishHaskell/Config.hs | 13 | ||||
-rw-r--r-- | src/StylishHaskell/Stylish/LanguagePragmas.hs | 27 |
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]] |