summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuebinm2022-04-08 14:12:00 +0200
committerstuebinm2022-04-08 14:12:00 +0200
commitdb2bd423a00e582dd966d040df70d6994122b7ff (patch)
tree9123c53c11287c8b4cc6c4efda817f745995e68a
parentbbc5b557838c750e66759602b6a48d23da780c24 (diff)
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??)
Diffstat (limited to '')
-rw-r--r--lib/CheckMap.hs3
-rw-r--r--tiled/Data/Tiled.hs9
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."))