summaryrefslogtreecommitdiff
path: root/lib/CheckMap.hs
diff options
context:
space:
mode:
authorstuebinm2021-10-17 21:27:50 +0200
committerstuebinm2021-10-30 15:44:25 +0200
commita74cc87b085fa15213f8901f091db2631fee10db (patch)
tree333d8eb8d85e3e65d5410824fdc2a54f33e99957 /lib/CheckMap.hs
parent216c2b6cfcef0038823f45c2bc43d297dcff43be (diff)
add tileset property linting
this reorganised the whole linting for tilesets somewhat; it's now very similar to that linting layers, and it may be possible to abstract some of the code away ...
Diffstat (limited to 'lib/CheckMap.hs')
-rw-r--r--lib/CheckMap.hs25
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/CheckMap.hs b/lib/CheckMap.hs
index 8b4dca8..036f4e8 100644
--- a/lib/CheckMap.hs
+++ b/lib/CheckMap.hs
@@ -22,10 +22,11 @@ import Data.Aeson.Types ((.=))
import LintWriter (LintResult (..), LintWriter, askContext,
filterLintLevel, lintToDep, resultToDeps,
resultToLints, resultToOffers, runLintWriter)
-import Properties (checkLayerProperty, checkMap)
+import Properties (checkLayerProperty, checkMap, checkTileset)
import Tiled2 (Layer (layerName, layerProperties),
- LoadResult (..), Tiledmap (tiledmapLayers),
- loadTiledmap)
+ LoadResult (..),
+ Tiledmap (tiledmapLayers, tiledmapTilesets),
+ Tileset (tilesetName), loadTiledmap)
import Types (Dep, Level (..), Lint (..), hint)
import Util (PrettyPrint (prettyprint), prettyprint)
@@ -34,6 +35,7 @@ import Util (PrettyPrint (prettyprint), prettyprint)
-- | What this linter produces: lints for a single map
data MapResult = MapResult
{ mapresultLayer :: Map Text (LintResult Layer)
+ , mapresultTileset :: Map Text (LintResult Tileset)
, mapresultGeneral :: [Lint]
, mapresultDepends :: [Dep]
, mapresultProvides :: [Text]
@@ -42,6 +44,7 @@ data MapResult = MapResult
instance ToJSON MapResult where
toJSON res = A.object
[ "layer" .= mapresultLayer res
+ , "tileset" .= mapresultTileset res
, "general" .= mapresultGeneral res
-- TODO: not sure if these are necessary of even useful
, "depends" .= mapresultDepends res
@@ -55,6 +58,7 @@ loadAndLintMap :: FilePath -> Int -> IO (Maybe MapResult)
loadAndLintMap path depth = loadTiledmap path >>= pure . \case
DecodeErr err -> Just $ MapResult
{ mapresultLayer = mempty
+ , mapresultTileset = mempty
, mapresultDepends = []
, mapresultProvides = []
, mapresultGeneral =
@@ -69,17 +73,19 @@ loadAndLintMap path depth = loadTiledmap path >>= pure . \case
-- | lint a loaded map
runLinter :: Tiledmap -> Int -> MapResult
runLinter tiledmap depth = MapResult
- { mapresultLayer = layerMap
- , mapresultGeneral = generalLints -- no general lints for now
+ { mapresultLayer = fromList layer
+ , mapresultTileset = fromList tileset
+ , mapresultGeneral = generalLints
, mapresultDepends = concatMap (resultToDeps . snd) layer
<> mapMaybe lintToDep generalLints
+ <> concatMap (resultToDeps . snd) tileset
, mapresultProvides = concatMap (resultToOffers . snd) layer
}
where
- layerMap :: Map Text (LintResult Layer)
- layerMap = fromList layer
layer = V.toList . V.map runCheck $ tiledmapLayers tiledmap
where runCheck l = (layerName l, runLintWriter l depth checkLayer)
+ tileset = V.toList . V.map runCheck $ tiledmapTilesets tiledmap
+ where runCheck l = (tilesetName l, runLintWriter l depth (checkTileset l))
-- lints collected from properties
generalLints =
@@ -98,11 +104,16 @@ instance PrettyPrint (Level, MapResult) where
then " all good!\n" else prettyLints
where
prettyLints = T.concat $ prettyGeneral <> prettyLayer
+ <> prettyTileset
-- TODO: this can be simplified further
prettyLayer :: [Text]
prettyLayer = mapMaybe
(\(_,l) -> Just $ prettyprint (level, l))
(toList . mapresultLayer $ mapResult)
+ prettyTileset :: [Text]
+ prettyTileset = mapMaybe
+ (\(_,t) -> Just $ prettyprint (level, t))
+ (toList . mapresultTileset $ mapResult)
prettyGeneral :: [Text]
prettyGeneral = map
((<> "\n") . prettyprint)