From db2bd423a00e582dd966d040df70d6994122b7ff Mon Sep 17 00:00:00 2001
From: stuebinm <stuebinm@disroot.org>
Date: Fri, 8 Apr 2022 14:12:00 +0200
Subject: [PATCH] linter: don't fail on missing maps

turns out eitherDecodeFile' doesn't have the semantics I thought it did
(who writes functions returning either that can still fail??)
---
 lib/CheckMap.hs     | 3 +--
 tiled/Data/Tiled.hs | 9 ++++++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/lib/CheckMap.hs b/lib/CheckMap.hs
index 258b6bb..73464a8 100644
--- a/lib/CheckMap.hs
+++ b/lib/CheckMap.hs
@@ -108,8 +108,7 @@ shrinkMapResult !res = res { mapresultAdjusted = () }
 loadAndLintMap :: LintConfig' -> FilePath -> Int -> IO (Maybe (MapResult Full))
 loadAndLintMap config path depth = loadTiledmap path <&> \case
     Left err -> Just (MapResult mempty mempty mempty mempty Nothing mempty mempty mempty
-        [ Hint Fatal . toText $
-          path <> ": Fatal: " <> err
+        [ Hint Fatal . toText $ "Fatal: " <> err
         ])
     Right waMap ->
       Just (runLinter (takeFileName path == "main.json") config waMap depth)
diff --git a/tiled/Data/Tiled.hs b/tiled/Data/Tiled.hs
index d3ccb26..3e6c737 100644
--- a/tiled/Data/Tiled.hs
+++ b/tiled/Data/Tiled.hs
@@ -24,6 +24,7 @@ import           Data.Aeson       hiding (Object)
 import qualified Data.Aeson       as A
 import           Data.Aeson.Types (typeMismatch)
 import           Data.Char        (toLower)
+import           Control.Exception (IOException)
 
 
 -- | options for Aeson's generic encoding and parsing functions
@@ -382,6 +383,8 @@ instance ToJSON Tiledmap where
 
 -- | Load a Tiled map from the given 'FilePath'.
 loadTiledmap :: FilePath -> IO (Either String Tiledmap)
-loadTiledmap path = eitherDecodeFileStrict' path >>= \case
-  Left  err       -> pure $ Left err
-  Right !tiledmap -> evaluateNF tiledmap <&> Right
+loadTiledmap path = catch
+  (eitherDecodeFileStrict' path >>= \case
+    Left  err       -> pure $ Left err
+    Right !tiledmap -> evaluateNF tiledmap <&> Right)
+  (\(_ :: IOException) -> pure (Left $ "Failed to read this file."))
-- 
GitLab