diff options
author | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-07-31 14:54:37 +0200 |
---|---|---|
committer | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-07-31 14:54:37 +0200 |
commit | dafe122baea8c4afb30b7faab399cab080abd5af (patch) | |
tree | 8c4580f80caf73f046868e4ebf810ab30027fdb1 | |
parent | 2fb2c9797442d4a44597488c07c7a27f0e0904b9 (diff) | |
download | stylish-haskell-dafe122baea8c4afb30b7faab399cab080abd5af.tar.gz |
Dump original source code on failure
See #10
-rw-r--r-- | src/Main.hs | 9 | ||||
-rw-r--r-- | src/StylishHaskell.hs | 17 |
2 files changed, 18 insertions, 8 deletions
diff --git a/src/Main.hs b/src/Main.hs index 40c801e..f880f1d 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -11,6 +11,7 @@ import Data.List (intercalate) import Data.Version (Version(..)) import Prelude hiding (readFile) import System.Console.CmdArgs +import System.IO (hPutStrLn, stderr) import System.IO.Strict (readFile) @@ -74,7 +75,11 @@ stylishHaskell sa file :: StylishArgs -> Config -> Maybe FilePath -> IO () file sa conf mfp = do contents <- maybe getContents readFile mfp - write $ unlines $ runSteps (configLanguageExtensions conf) - mfp (configSteps conf) $ lines contents + let result = runSteps (configLanguageExtensions conf) + mfp (configSteps conf) $ lines contents + + case result of + Left err -> hPutStrLn stderr err >> write contents + Right ok -> write $ unlines ok where write = maybe putStr (if inPlace sa then writeFile else const putStr) mfp diff --git a/src/StylishHaskell.hs b/src/StylishHaskell.hs index 7705d3a..e588655 100644 --- a/src/StylishHaskell.hs +++ b/src/StylishHaskell.hs @@ -6,18 +6,23 @@ module StylishHaskell -------------------------------------------------------------------------------- +import Control.Applicative ((<$>)) +import Control.Monad (foldM) + + +-------------------------------------------------------------------------------- import StylishHaskell.Config import StylishHaskell.Parse import StylishHaskell.Step -------------------------------------------------------------------------------- -runStep :: Extensions -> Maybe FilePath -> Step -> Lines -> Lines -runStep exts mfp step ls = case parseModule exts mfp (unlines ls) of - Left err -> error err -- TODO: maybe return original lines? - Right module' -> stepFilter step ls module' +runStep :: Extensions -> Maybe FilePath -> Lines -> Step -> Either String Lines +runStep exts mfp ls step = + stepFilter step ls <$> parseModule exts mfp (unlines ls) -------------------------------------------------------------------------------- -runSteps :: Extensions -> Maybe FilePath -> [Step] -> Lines -> Lines -runSteps exts mfp = foldr (flip (.)) id . map (runStep exts mfp) +runSteps :: Extensions -> Maybe FilePath -> [Step] -> Lines + -> Either String Lines +runSteps exts mfp steps ls = foldM (runStep exts mfp) ls steps |