From 6a67d3e41fc49e09ed6c1c02fec2946c6db9bc1f Mon Sep 17 00:00:00 2001 From: stuebinm Date: Sat, 4 Dec 2021 13:06:27 +0100 Subject: lints for names that are used more than twice (previously it would just lint "can't use name twice" multiple times, which looks kind of silly) --- lib/Properties.hs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/Properties.hs b/lib/Properties.hs index ba78fca..07b4397 100644 --- a/lib/Properties.hs +++ b/lib/Properties.hs @@ -14,7 +14,8 @@ import Control.Monad (forM_, unless, when) import Data.Text (Text, isPrefixOf) import qualified Data.Vector as V import Tiled (Layer (..), Object (..), Property (..), - PropertyValue (..), Tiledmap (..), Tileset (..)) + PropertyValue (..), Tile (..), Tiledmap (..), + Tileset (..)) import TiledAbstract (HasName (..), HasProperties (..), HasTypeName (..), IsProperty (..)) import Util (layerIsEmpty, mkProxy, naiveEscapeHTML, @@ -368,13 +369,18 @@ refuseDoubledNames => (Foldable t, Functor t) => t a -> LintWriter b -refuseDoubledNames things = foldr folding base things mempty +refuseDoubledNames things = foldr folding base things (mempty,mempty) where - -- this accumulates a function that complains about things it's already seen - folding thing cont seen = do - when (name `elem` seen) - $ complain $ "cannot use " <> typeName (mkProxy thing) <> " name \"" <> name <> "\" twice" - cont (S.insert name seen) + -- this accumulates a function that complains about things it's + -- already seen, except if they've already occured twice and then + -- occur again … + folding thing cont (seen, twice) + | name `elem` seen && name `notElem` twice = do + complain $ "cannot use " <> typeName (mkProxy thing) + <> " name \"" <> name <> "\" multiple times." + cont (seen, S.insert name twice) + | otherwise = + cont (S.insert name seen, twice) where name = getName thing base _ = pure () -- cgit v1.2.3