From 42df3cf0eb0c5877ac3320994cadec07619bcd6b Mon Sep 17 00:00:00 2001 From: stuebinm Date: Mon, 20 Sep 2021 22:30:22 +0200 Subject: typechecking for path depths! This now checks if relative paths are still inside the repository, as a general safety mechanism to stop the linter from accidentally reading other things, as well as a nice hint for users. --- lib/CheckMap.hs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'lib/CheckMap.hs') diff --git a/lib/CheckMap.hs b/lib/CheckMap.hs index b32bad6..3966988 100644 --- a/lib/CheckMap.hs +++ b/lib/CheckMap.hs @@ -16,7 +16,7 @@ import qualified Data.Text as T import qualified Data.Vector as V import GHC.Generics (Generic) -import LintWriter (LayerContext (..), LintResult (..), LintWriter, +import LintWriter (LintResult (..), LintWriter, askContext, lintToDep, resultToDeps, resultToLints, runLintWriter) import Properties (checkLayerProperty, checkMap) @@ -29,7 +29,7 @@ import Util (PrettyPrint (prettyprint), prettyprint) -- | What this linter produces: lints for a single map data MapResult a = MapResult - { mapresultLayer :: Maybe (Map Text (LintResult LayerContext)) + { mapresultLayer :: Maybe (Map Text (LintResult Layer)) , mapresultGeneral :: [Lint] , mapresultDepends :: [Dep] } deriving (Generic, ToJSON) @@ -59,20 +59,21 @@ runLinter tiledmap = MapResult <> mapMaybe lintToDep generalLints } where - layerMap :: Map Text (LintResult LayerContext) + layerMap :: Map Text (LintResult Layer) layerMap = fromList layer layer = V.toList . V.map runCheck $ tiledmapLayers tiledmap - where runCheck l = (layerName l, runLintWriter (LayerContext ()) (checkLayer l)) + where runCheck l = (layerName l, runLintWriter l 0 checkLayer) -- lints collected from properties generalLints = - resultToLints $ runLintWriter () (checkMap tiledmap) + resultToLints $ runLintWriter tiledmap 0 checkMap -- | collect lints on a single map layer -checkLayer :: Layer -> LintWriter LayerContext -checkLayer layer = - mapM_ (checkLayerProperty layer) (layerProperties layer) +checkLayer :: LintWriter Layer +checkLayer = do + layer <- askContext + mapM_ checkLayerProperty (layerProperties layer) -- human-readable lint output, e.g. for consoles instance PrettyPrint a => PrettyPrint (MapResult a) where -- cgit v1.2.3