summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Properties.hs20
1 files 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 ()