Skip to content
Snippets Groups Projects
Select Git revision
  • 9866e471b21ef482f9ff6f3d33f36db7658c8fb1
  • master default protected
  • style-2021
  • newstyle
  • archive/2020
  • vanion-master-patch-78871
  • deinkoks-master-patch-08946
  • 2020
8 results

maps.en.md

Blame
  • CheckDir.hs 10.68 KiB
    {-# LANGUAGE BangPatterns         #-}
    {-# LANGUAGE DataKinds            #-}
    {-# LANGUAGE DeriveAnyClass       #-}
    {-# LANGUAGE DeriveGeneric        #-}
    {-# LANGUAGE FlexibleContexts     #-}
    {-# LANGUAGE FlexibleInstances    #-}
    {-# LANGUAGE LambdaCase           #-}
    {-# LANGUAGE OverloadedStrings    #-}
    {-# LANGUAGE TupleSections        #-}
    {-# LANGUAGE TypeFamilies         #-}
    {-# LANGUAGE UndecidableInstances #-}
    
    -- | Module that contains high-level checking for an entire directory
    module CheckDir ( maximumLintLevel
                    , recursiveCheckDir
                    , DirResult (..)
                    , MissingAsset(..)
                    , MissingDep(..)
                    , resultIsFatal
                    ,shrinkDirResult)  where
    
    import           Universum              hiding (Set)
    
    import           CheckMap               (MapResult (..), Optional,
                                             ResultKind (..), loadAndLintMap,
                                             shrinkMapResult)
    import           Control.Monad.Extra    (mapMaybeM)
    import           Data.Aeson             (ToJSON, (.=))
    import qualified Data.Aeson             as A
    import           Data.List              (partition)
    import qualified Data.Map               as M
    import           Data.Map.Strict        (mapKeys, mapWithKey, (\\))
    import           Data.Text              (isInfixOf)
    import qualified Data.Text              as T
    import           Data.Tiled             (Tiledmap)
    import           Dirgraph               (graphToDot, invertGraph, resultToGraph,
                                             takeSubGraph, unreachableFrom)
    import           GHC.Generics           (Generic)
    import           LintConfig             (LintConfig', configMaxLintLevel)
    import           Paths                  (normalise, normaliseWithFrag)
    import           System.Directory.Extra (doesFileExist)
    import           System.FilePath        (splitPath, (</>))
    import qualified System.FilePath        as FP
    import           System.FilePath.Posix  (takeDirectory)
    import           Text.Dot               (showDot)
    import           Types                  (Dep (Local, LocalMap), Hint (Hint),
                                             Level (..), hintLevel)
    import           Util                   (PrettyPrint (prettyprint), ellipsis)
    
    
    -- based on the startling observation that Data.Map has lower complexity
    -- for difference than Data.Set, but the same complexity for fromList
    type Set a = Map a ()
    setFromList :: Ord a => [a] -> Set a
    setFromList  = M.fromList . flip zip (repeat ())
    listFromSet :: Set a -> [a]
    listFromSet = map fst . M.toList
    
    -- | Result of linting an entire directory / repository
    data DirResult (complete :: ResultKind) = DirResult
      { dirresultMaps          :: Map FilePath (MapResult complete)
      -- ^ all maps of this respository, by (local) filepath
      , dirresultDeps          :: [MissingDep]
      -- ^ all dependencies to things outside this repository
      , dirresultMissingAssets :: [MissingAsset]
      -- ^ entrypoints of maps which are referred to but missing
      , dirresultGraph         :: Text
      } deriving (Generic)
    
    instance NFData (Optional a (Maybe Tiledmap)) => NFData (DirResult a)