summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorJasper Van der Jeugt <m@jaspervdj.be>2012-07-31 14:54:37 +0200
committerJasper Van der Jeugt <m@jaspervdj.be>2012-07-31 14:54:37 +0200
commitdafe122baea8c4afb30b7faab399cab080abd5af (patch)
tree8c4580f80caf73f046868e4ebf810ab30027fdb1 /src
parent2fb2c9797442d4a44597488c07c7a27f0e0904b9 (diff)
downloadstylish-haskell-dafe122baea8c4afb30b7faab399cab080abd5af.tar.gz
Dump original source code on failure
See #10
Diffstat (limited to 'src')
-rw-r--r--src/Main.hs9
-rw-r--r--src/StylishHaskell.hs17
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