diff --git a/src/Unused/Cache/DirectoryFingerprint.hs b/src/Unused/Cache/DirectoryFingerprint.hs index 908c065..537c082 100644 --- a/src/Unused/Cache/DirectoryFingerprint.hs +++ b/src/Unused/Cache/DirectoryFingerprint.hs @@ -10,7 +10,7 @@ import qualified System.Directory as D import qualified Data.Char as C import Data.Maybe (fromMaybe) import Unused.Cache.FindArgsFromIgnoredPaths -import Unused.Util (safeHead, readIfFileExists) +import Unused.Util (safeHead, safeReadFile) type MD5Config = ReaderT String IO @@ -43,7 +43,7 @@ md5Result r = do liftIO $ readProcess md5exec [] r ignoredPaths :: IO [String] -ignoredPaths = fromMaybe [] <$> (fmap lines <$> readIfFileExists ".gitignore") +ignoredPaths = either (const []) id <$> (fmap lines <$> safeReadFile ".gitignore") md5Executable :: IO (Maybe String) md5Executable = diff --git a/src/Unused/ResultsClassifier/Config.hs b/src/Unused/ResultsClassifier/Config.hs index bd27938..1991572 100644 --- a/src/Unused/ResultsClassifier/Config.hs +++ b/src/Unused/ResultsClassifier/Config.hs @@ -12,7 +12,7 @@ import System.FilePath (()) import System.Directory (getHomeDirectory, doesFileExist) import Paths_unused (getDataFileName) import Unused.ResultsClassifier.Types (LanguageConfiguration, ParseConfigError(..)) -import Unused.Util (readIfFileExists) +import Unused.Util (safeReadFile) loadConfig :: IO (Either String [LanguageConfiguration]) loadConfig = do @@ -39,10 +39,10 @@ loadAllConfigurations = do loadConfigFromFile :: String -> IO (Either ParseConfigError [LanguageConfiguration]) loadConfigFromFile path = do - file <- fmap C.pack <$> readIfFileExists path + file <- fmap C.pack <$> safeReadFile path return $ case file of - Nothing -> Right [] - Just body -> addSourceToLeft path $ Y.decodeEither body + Left _ -> Right [] + Right body -> addSourceToLeft path $ Y.decodeEither body addSourceToLeft :: String -> Either String c -> Either ParseConfigError c addSourceToLeft source = B.first (ParseConfigError source) diff --git a/src/Unused/Util.hs b/src/Unused/Util.hs index 4be70ce..29d71a1 100644 --- a/src/Unused/Util.hs +++ b/src/Unused/Util.hs @@ -2,11 +2,11 @@ module Unused.Util ( groupBy , stringToInt , safeHead - , readIfFileExists + , safeReadFile ) where -import System.Directory (doesFileExist) import Control.Arrow ((&&&)) +import qualified Control.Exception as E import qualified Data.List as L import Data.Function import Data.Char (digitToInt, isDigit) @@ -27,10 +27,5 @@ stringToInt xs where loop = foldl (\acc x -> acc * 10 + digitToInt x) -readIfFileExists :: String -> IO (Maybe String) -readIfFileExists path = do - exists <- doesFileExist path - - if exists - then Just <$> readFile path - else return Nothing +safeReadFile :: FilePath -> IO (Either E.IOException String) +safeReadFile = E.try . readFile