From 887540e3bb4c2cfc63a142a573cc8161c5bc00d8 Mon Sep 17 00:00:00 2001
From: stuebinm <stuebinm@disroot.org>
Date: Sat, 25 Dec 2021 02:56:38 +0100
Subject: [PATCH] don't print doubled lints twice

---
 lib/CheckMap.hs   | 15 +++++++--------
 lib/LintWriter.hs |  7 ++++---
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/lib/CheckMap.hs b/lib/CheckMap.hs
index 51b4496..467fa26 100644
--- a/lib/CheckMap.hs
+++ b/lib/CheckMap.hs
@@ -30,8 +30,7 @@ import           Properties       (checkLayer, checkMap, checkTileset)
 import           Tiled            (Layer (layerLayers, layerName),
                                    LoadResult (..),
                                    Tiledmap (tiledmapLayers, tiledmapTilesets),
-                                   Tileset, loadTiledmap)
-import           TiledAbstract    (HasName (..))
+                                   loadTiledmap)
 import           Types            (Dep, Hint (Hint, hintLevel, hintMsg),
                                    Level (..), lintsToHints)
 import           Util             (PrettyPrint (prettyprint), prettyprint)
@@ -40,9 +39,9 @@ import           Util             (PrettyPrint (prettyprint), prettyprint)
 
 -- | What this linter produces: lints for a single map
 data MapResult = MapResult
-  { mapresultLayer    :: Map Hint [Layer]
+  { mapresultLayer    :: Map Hint [Text]
   -- ^ lints that occurred in one or more layers
-  , mapresultTileset  :: Map Hint [Tileset]
+  , mapresultTileset  :: Map Hint [Text]
   -- ^ lints that occurred in one or more tilesets
   , mapresultDepends  :: [Dep]
   -- ^ (external and local) dependencies of this map
@@ -58,8 +57,8 @@ data MapResult = MapResult
 
 instance ToJSON MapResult where
   toJSON res = A.object
-    [ "layer" .= CollectedLints (fmap getName <$> mapresultLayer res)
-    , "tileset" .= CollectedLints (fmap getName <$> mapresultTileset res)
+    [ "layer" .= CollectedLints (mapresultLayer res)
+    , "tileset" .= CollectedLints (mapresultTileset res)
     , "general" .= mapresultGeneral res
     , "offers" .= mapresultProvides res
     ]
@@ -178,7 +177,7 @@ instance PrettyPrint (Level, MapResult) where
       -- | pretty-prints a collection of Hints, printing each
       --   Hint only once, then a list of its occurences line-wrapped
       --   to fit onto a decent-sized terminal
-      prettyLints :: HasName a => (MapResult -> Map Hint [a]) -> [Text]
+      prettyLints :: (MapResult -> Map Hint [Text]) -> [Text]
       prettyLints getter = fmap
         (\(h, cs) -> prettyprint h
           <> "\n    (in "
@@ -188,7 +187,7 @@ instance PrettyPrint (Level, MapResult) where
                             _ | l < 70 -> (l+2+T.length c, a <> ", " <> c)
                             _ -> (6+T.length c, a <> ",\n        " <> c)
                         )
-             (0, "") (fmap getName cs))
+             (0, "") cs)
           <> ")\n")
         (toList . getter $ mapResult)
 
diff --git a/lib/LintWriter.hs b/lib/LintWriter.hs
index eb7d138..2b891c3 100644
--- a/lib/LintWriter.hs
+++ b/lib/LintWriter.hs
@@ -52,8 +52,9 @@ import           Control.Monad.Writer.Lazy  (lift)
 import           Data.Bifunctor             (Bifunctor (second))
 import           Data.Map                   (Map, fromListWith)
 import           Data.Maybe                 (mapMaybe)
+import qualified Data.Set                   as S
 import           LintConfig                 (LintConfig')
-import           TiledAbstract              (HasName)
+import           TiledAbstract              (HasName (getName))
 import           Types                      (Dep, Hint, Level (..), Lint (..),
                                              hint, lintsToHints)
 
@@ -106,9 +107,9 @@ zoom embed extract operation = do
 
 
 -- | "invert" a linter's result, grouping lints by their messages
-invertLintResult :: HasName ctxt => LintResult ctxt -> Map Hint [ctxt]
+invertLintResult :: HasName ctxt => LintResult ctxt -> Map Hint [Text]
 invertLintResult (LinterState (lints, ctxt)) =
-  fromListWith (<>) $ (, [ctxt]) <$> lintsToHints lints
+  fmap (S.toList . S.fromList . fmap getName) . fromListWith (<>) $ (, [ctxt]) <$> lintsToHints lints
 
 resultToDeps :: LintResult a -> [Dep]
 resultToDeps (LinterState (lints,_)) = mapMaybe lintToDep lints
-- 
GitLab