Skip to content
Snippets Groups Projects
Commit 6a67d3e4 authored by stuebinm's avatar stuebinm
Browse files

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)
parent bbde46e7
No related branches found
No related tags found
No related merge requests found
......@@ -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 ()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment