summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuebinm2021-09-18 02:09:27 +0200
committerstuebinm2021-09-18 02:09:27 +0200
commit0bd2e836d96fe864b00d2085f29e932130722cc3 (patch)
tree672cc7c3abd645d0fccd0d7a2061ad96bf9c9cb0
parent1c82540aeea7636a6cfd25acfdd28c1029f5669f (diff)
moved types into Types.hs
it's almost as if there's some structure to this code!
-rw-r--r--lib/CheckMap.hs7
-rw-r--r--lib/LintWriter.hs48
-rw-r--r--lib/Types.hs60
-rw-r--r--lib/Util.hs2
-rw-r--r--tiled-hs.cabal1
5 files changed, 67 insertions, 51 deletions
diff --git a/lib/CheckMap.hs b/lib/CheckMap.hs
index 36cbf9d..9402170 100644
--- a/lib/CheckMap.hs
+++ b/lib/CheckMap.hs
@@ -16,16 +16,17 @@ import qualified Data.Text as T
import qualified Data.Vector as V
import GHC.Generics (Generic)
-import LintWriter (Level (..), Lint (..),
- LintResult (..), LintWriter, hint,
- lintLevel)
+import LintWriter (LintResult (..), LintWriter)
import Properties (checkProperty)
import Tiled2 (Layer (layerName, layerProperties),
Tiledmap (tiledmapLayers),
loadTiledmap)
+import Types (Level (..), Lint (..), hint,
+ lintLevel)
import Util (PrettyPrint (prettyprint),
prettyprint)
+
-- | What this linter produces: lints for a single map
data MapResult a = MapResult
{ mapresultLayer :: Maybe (Map Text (LintResult a))
diff --git a/lib/LintWriter.hs b/lib/LintWriter.hs
index bfe543e..66f16f1 100644
--- a/lib/LintWriter.hs
+++ b/lib/LintWriter.hs
@@ -9,54 +9,10 @@ module LintWriter where
import Control.Monad.Trans.Maybe ()
import Control.Monad.Writer (MonadTrans (lift),
MonadWriter (tell), WriterT)
-import Data.Aeson (ToJSON (toJSON), (.=))
+import Data.Aeson (ToJSON (toJSON))
import Data.Text (Text)
-import GHC.Generics (Generic)
-import qualified Data.Aeson as A
-import Util (PrettyPrint (..), showText)
-
--- | Levels of errors and warnings, collectively called
--- "Hints" until I can think of some better name
-data Level = Warning | Suggestion | Info | Forbidden | Error | Fatal
- deriving (Show, Generic, ToJSON)
-
--- | a hint comes with an explanation (and a level), or is a dependency
--- (in which case it'll be otherwise treated as an info hint)
-data Lint = Depends Dep | Lint Hint
-
-data Hint = Hint
- { hintLevel :: Level
- , hintMsg :: Text
- } deriving (Generic, ToJSON)
-
-lintLevel :: Lint -> Level
-lintLevel (Lint h) = hintLevel h
-lintLevel (Depends dep) = Info
-
-instance PrettyPrint Lint where
- prettyprint (Lint Hint { hintMsg, hintLevel } ) =
- showText hintLevel <> ": " <> hintMsg
- prettyprint (Depends dep) =
- "Info: found dependency: " <> prettyprint dep
-
-instance ToJSON Lint where
- toJSON (Lint l) = toJSON l
- toJSON (Depends dep) = A.object
- [ "hintMsg" .= prettyprint dep
- , "hintLevel" .= A.String "Dependency Info" ]
-
-
--- shorter constructor
-hint :: Level -> Text -> Lint
-hint level msg = Lint Hint { hintLevel = level, hintMsg = msg }
-
--- | TODO: add a reasonable representation of possible urls
-newtype Dep = Dep Text
- deriving (Generic, ToJSON)
-
-instance PrettyPrint Dep where
- prettyprint (Dep txt) = txt
+import Types
-- | a monad to collect hints. If it yields Left, then the
-- map is flawed in some fundamental way which prevented us
diff --git a/lib/Types.hs b/lib/Types.hs
index 082b30e..79bbfab 100644
--- a/lib/Types.hs
+++ b/lib/Types.hs
@@ -1,3 +1,61 @@
--- | basic types for workadventure maps
+{-# LANGUAGE DeriveAnyClass #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | basic types for the linter to eat and produce
+-- The dark magic making thse useful is in LintWriter
module Types where
+
+import Control.Monad.Trans.Maybe ()
+import Data.Aeson (ToJSON (toJSON), (.=))
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+import qualified Data.Aeson as A
+import Util (PrettyPrint (..), showText)
+
+
+-- | Levels of errors and warnings, collectively called
+-- "Hints" until I can think of some better name
+data Level = Warning | Suggestion | Info | Forbidden | Error | Fatal
+ deriving (Show, Generic, ToJSON)
+
+-- | a hint comes with an explanation (and a level), or is a dependency
+-- (in which case it'll be otherwise treated as an info hint)
+data Lint = Depends Dep | Lint Hint
+
+-- | TODO: add a reasonable representation of possible urls
+newtype Dep = Dep Text
+ deriving (Generic, ToJSON)
+
+data Hint = Hint
+ { hintLevel :: Level
+ , hintMsg :: Text
+ } deriving (Generic, ToJSON)
+
+-- | shorter constructor (called lint because (a) older name and
+-- (b) lint also exists and is monadic)
+hint :: Level -> Text -> Lint
+hint level msg = Lint Hint { hintLevel = level, hintMsg = msg }
+
+-- | dependencies just have level Info
+lintLevel :: Lint -> Level
+lintLevel (Lint h) = hintLevel h
+lintLevel (Depends dep) = Info
+
+instance PrettyPrint Lint where
+ prettyprint (Lint Hint { hintMsg, hintLevel } ) =
+ showText hintLevel <> ": " <> hintMsg
+ prettyprint (Depends dep) =
+ "Info: found dependency: " <> prettyprint dep
+
+instance ToJSON Lint where
+ toJSON (Lint l) = toJSON l
+ toJSON (Depends dep) = A.object
+ [ "hintMsg" .= prettyprint dep
+ , "hintLevel" .= A.String "Dependency Info" ]
+
+instance PrettyPrint Dep where
+ prettyprint (Dep txt) = txt
diff --git a/lib/Util.hs b/lib/Util.hs
index 3a0e1d4..42ba960 100644
--- a/lib/Util.hs
+++ b/lib/Util.hs
@@ -8,7 +8,7 @@ module Util where
import Data.Aeson as Aeson
import Data.Text (Text)
-import Data.Text as T
+import qualified Data.Text as T
-- | haskell's many string types are FUN …
showText :: Show a => a -> Text
diff --git a/tiled-hs.cabal b/tiled-hs.cabal
index 9b7b171..4da4a45 100644
--- a/tiled-hs.cabal
+++ b/tiled-hs.cabal
@@ -31,6 +31,7 @@ library
Properties
Tiled2
Util
+ Types
build-depends: base ^>=4.14.1.0,
aeson,
bytestring,