mirror of
https://github.com/swarm-game/swarm.git
synced 2024-09-11 22:58:21 +03:00
extract doc generator to separate executable (#1671)
Closes #1443. Also added `-Wunused-packages` to clean up dependencies. ## Demo This still works as usual: stack run Output editor keywords: stack run swarm-docs -- editors --emacs
This commit is contained in:
parent
437f70418c
commit
b8d37a9364
46
app/Main.hs
46
app/Main.hs
@ -7,16 +7,13 @@
|
|||||||
module Main where
|
module Main where
|
||||||
|
|
||||||
import Data.Foldable qualified
|
import Data.Foldable qualified
|
||||||
import Data.Maybe (fromMaybe)
|
|
||||||
import Data.Text (Text, pack)
|
import Data.Text (Text, pack)
|
||||||
import Data.Text qualified as T
|
|
||||||
import Data.Text.IO qualified as Text
|
import Data.Text.IO qualified as Text
|
||||||
import GitHash (GitInfo, giBranch, giHash, tGitInfoCwdTry)
|
import GitHash (GitInfo, giBranch, giHash, tGitInfoCwdTry)
|
||||||
import Options.Applicative
|
import Options.Applicative
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
import Prettyprinter.Render.Text qualified as RT
|
import Prettyprinter.Render.Text qualified as RT
|
||||||
import Swarm.App (appMain)
|
import Swarm.App (appMain)
|
||||||
import Swarm.Doc.Gen (EditorType (..), GenerateDocs (..), PageAddress (..), SheetType (..), generateDocs)
|
|
||||||
import Swarm.Game.Scenario.Topography.Area (AreaDimensions (..))
|
import Swarm.Game.Scenario.Topography.Area (AreaDimensions (..))
|
||||||
import Swarm.Game.World.Render (OuputFormat (..), RenderOpts (..), doRenderCmd)
|
import Swarm.Game.World.Render (OuputFormat (..), RenderOpts (..), doRenderCmd)
|
||||||
import Swarm.Language.LSP (lspMain)
|
import Swarm.Language.LSP (lspMain)
|
||||||
@ -45,7 +42,6 @@ type Width = Int
|
|||||||
data CLI
|
data CLI
|
||||||
= Run AppOpts
|
= Run AppOpts
|
||||||
| Format Input (Maybe Width)
|
| Format Input (Maybe Width)
|
||||||
| DocGen GenerateDocs
|
|
||||||
| RenderMap FilePath RenderOpts
|
| RenderMap FilePath RenderOpts
|
||||||
| LSP
|
| LSP
|
||||||
| Version
|
| Version
|
||||||
@ -55,7 +51,6 @@ cliParser =
|
|||||||
subparser
|
subparser
|
||||||
( mconcat
|
( mconcat
|
||||||
[ command "format" (info (Format <$> format <*> optional widthOpt <**> helper) (progDesc "Format a file"))
|
[ command "format" (info (Format <$> format <*> optional widthOpt <**> helper) (progDesc "Format a file"))
|
||||||
, command "generate" (info (DocGen <$> docgen <**> helper) (progDesc "Generate docs"))
|
|
||||||
, command "map" (info (render <**> helper) (progDesc "Render a scenario world map."))
|
, command "map" (info (render <**> helper) (progDesc "Render a scenario world map."))
|
||||||
, command "lsp" (info (pure LSP) (progDesc "Start the LSP"))
|
, command "lsp" (info (pure LSP) (progDesc "Start the LSP"))
|
||||||
, command "version" (info (pure Version) (progDesc "Get current and upstream version."))
|
, command "version" (info (pure Version) (progDesc "Get current and upstream version."))
|
||||||
@ -97,46 +92,6 @@ cliParser =
|
|||||||
widthOpt :: Parser Width
|
widthOpt :: Parser Width
|
||||||
widthOpt = option auto (long "width" <> metavar "COLUMNS" <> help "Use layout with maximum width")
|
widthOpt = option auto (long "width" <> metavar "COLUMNS" <> help "Use layout with maximum width")
|
||||||
|
|
||||||
docgen :: Parser GenerateDocs
|
|
||||||
docgen =
|
|
||||||
subparser . mconcat $
|
|
||||||
[ command "recipes" (info (pure RecipeGraph) $ progDesc "Output graphviz dotfile of entity dependencies based on recipes")
|
|
||||||
, command "editors" (info (EditorKeywords <$> editor <**> helper) $ progDesc "Output editor keywords")
|
|
||||||
, command "keys" (info (pure SpecialKeyNames) $ progDesc "Output list of recognized special key names")
|
|
||||||
, command "cheatsheet" (info (CheatSheet <$> address <*> cheatsheet <**> helper) $ progDesc "Output nice Wiki tables")
|
|
||||||
, command "pedagogy" (info (pure TutorialCoverage) $ progDesc "Output tutorial coverage")
|
|
||||||
, command "endpoints" (info (pure WebAPIEndpoints) $ progDesc "Generate markdown Web API documentation.")
|
|
||||||
]
|
|
||||||
|
|
||||||
editor :: Parser (Maybe EditorType)
|
|
||||||
editor =
|
|
||||||
Data.Foldable.asum
|
|
||||||
[ pure Nothing
|
|
||||||
, Just VSCode <$ switch (long "code" <> help "Generate for the VS Code editor")
|
|
||||||
, Just Emacs <$ switch (long "emacs" <> help "Generate for the Emacs editor")
|
|
||||||
]
|
|
||||||
address :: Parser PageAddress
|
|
||||||
address =
|
|
||||||
let replace a b = T.unpack . T.replace a b . T.pack
|
|
||||||
opt n =
|
|
||||||
fmap (fromMaybe "") . optional $
|
|
||||||
option
|
|
||||||
str
|
|
||||||
( long n
|
|
||||||
<> metavar "ADDRESS"
|
|
||||||
<> help ("Set the address of " <> replace "-" " " n <> ". Default no link.")
|
|
||||||
)
|
|
||||||
in PageAddress <$> opt "entities-page" <*> opt "commands-page" <*> opt "capabilities-page" <*> opt "recipes-page"
|
|
||||||
cheatsheet :: Parser (Maybe SheetType)
|
|
||||||
cheatsheet =
|
|
||||||
Data.Foldable.asum
|
|
||||||
[ pure Nothing
|
|
||||||
, Just Entities <$ switch (long "entities" <> help "Generate entities page (uses data from entities.yaml)")
|
|
||||||
, Just Recipes <$ switch (long "recipes" <> help "Generate recipes page (uses data from recipes.yaml)")
|
|
||||||
, Just Capabilities <$ switch (long "capabilities" <> help "Generate capabilities page (uses entity map)")
|
|
||||||
, Just Commands <$ switch (long "commands" <> help "Generate commands page (uses constInfo, constCaps and inferConst)")
|
|
||||||
, Just Scenario <$ switch (long "scenario" <> help "Generate scenario schema page")
|
|
||||||
]
|
|
||||||
seed :: Parser (Maybe Int)
|
seed :: Parser (Maybe Int)
|
||||||
seed = optional $ option auto (long "seed" <> short 's' <> metavar "INT" <> help "Seed to use for world generation")
|
seed = optional $ option auto (long "seed" <> short 's' <> metavar "INT" <> help "Seed to use for world generation")
|
||||||
webPort :: Parser (Maybe Int)
|
webPort :: Parser (Maybe Int)
|
||||||
@ -218,7 +173,6 @@ main = do
|
|||||||
cli <- execParser cliInfo
|
cli <- execParser cliInfo
|
||||||
case cli of
|
case cli of
|
||||||
Run opts -> appMain opts
|
Run opts -> appMain opts
|
||||||
DocGen g -> generateDocs g
|
|
||||||
Format fo w -> formatFile fo w
|
Format fo w -> formatFile fo w
|
||||||
RenderMap mapPath opts -> doRenderCmd opts mapPath
|
RenderMap mapPath opts -> doRenderCmd opts mapPath
|
||||||
LSP -> lspMain
|
LSP -> lspMain
|
||||||
|
66
app/doc/Main.hs
Normal file
66
app/doc/Main.hs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
-- |
|
||||||
|
-- SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
module Main where
|
||||||
|
|
||||||
|
import Data.Foldable qualified
|
||||||
|
import Data.Maybe (fromMaybe)
|
||||||
|
import Data.Text qualified as T
|
||||||
|
import Options.Applicative
|
||||||
|
import Swarm.Doc.Gen (GenerateDocs (..), PageAddress (..), SheetType (..), generateDocs)
|
||||||
|
import Swarm.Doc.Keyword (EditorType (..))
|
||||||
|
|
||||||
|
cliParser :: Parser GenerateDocs
|
||||||
|
cliParser =
|
||||||
|
subparser $
|
||||||
|
mconcat
|
||||||
|
[ command "recipes" (info (pure RecipeGraph) $ progDesc "Output graphviz dotfile of entity dependencies based on recipes")
|
||||||
|
, command "editors" (info (EditorKeywords <$> editor <**> helper) $ progDesc "Output editor keywords")
|
||||||
|
, command "keys" (info (pure SpecialKeyNames) $ progDesc "Output list of recognized special key names")
|
||||||
|
, command "cheatsheet" (info (CheatSheet <$> address <*> cheatsheet <**> helper) $ progDesc "Output nice Wiki tables")
|
||||||
|
, command "pedagogy" (info (pure TutorialCoverage) $ progDesc "Output tutorial coverage")
|
||||||
|
, command "endpoints" (info (pure WebAPIEndpoints) $ progDesc "Generate markdown Web API documentation.")
|
||||||
|
]
|
||||||
|
where
|
||||||
|
editor :: Parser (Maybe EditorType)
|
||||||
|
editor =
|
||||||
|
Data.Foldable.asum
|
||||||
|
[ pure Nothing
|
||||||
|
, Just VSCode <$ switch (long "code" <> help "Generate for the VS Code editor")
|
||||||
|
, Just Emacs <$ switch (long "emacs" <> help "Generate for the Emacs editor")
|
||||||
|
]
|
||||||
|
address :: Parser PageAddress
|
||||||
|
address =
|
||||||
|
let replace a b = T.unpack . T.replace a b . T.pack
|
||||||
|
opt n =
|
||||||
|
fmap (fromMaybe "") . optional $
|
||||||
|
option
|
||||||
|
str
|
||||||
|
( long n
|
||||||
|
<> metavar "ADDRESS"
|
||||||
|
<> help ("Set the address of " <> replace "-" " " n <> ". Default no link.")
|
||||||
|
)
|
||||||
|
in PageAddress <$> opt "entities-page" <*> opt "commands-page" <*> opt "capabilities-page" <*> opt "recipes-page"
|
||||||
|
cheatsheet :: Parser (Maybe SheetType)
|
||||||
|
cheatsheet =
|
||||||
|
Data.Foldable.asum
|
||||||
|
[ pure Nothing
|
||||||
|
, Just Entities <$ switch (long "entities" <> help "Generate entities page (uses data from entities.yaml)")
|
||||||
|
, Just Recipes <$ switch (long "recipes" <> help "Generate recipes page (uses data from recipes.yaml)")
|
||||||
|
, Just Capabilities <$ switch (long "capabilities" <> help "Generate capabilities page (uses entity map)")
|
||||||
|
, Just Commands <$ switch (long "commands" <> help "Generate commands page (uses constInfo, constCaps and inferConst)")
|
||||||
|
, Just Scenario <$ switch (long "scenario" <> help "Generate scenario schema page")
|
||||||
|
]
|
||||||
|
|
||||||
|
cliInfo :: ParserInfo GenerateDocs
|
||||||
|
cliInfo =
|
||||||
|
info
|
||||||
|
(cliParser <**> helper)
|
||||||
|
( header "Swarm docs"
|
||||||
|
<> progDesc "Generate swarm documentation."
|
||||||
|
<> fullDesc
|
||||||
|
)
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = generateDocs =<< execParser cliInfo
|
@ -1,4 +1,5 @@
|
|||||||
{-# LANGUAGE DataKinds #-}
|
{-# LANGUAGE DataKinds #-}
|
||||||
|
{-# LANGUAGE LambdaCase #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
-- |
|
-- |
|
||||||
@ -9,15 +10,7 @@ module Swarm.Doc.Gen (
|
|||||||
-- ** Main document generation function + types
|
-- ** Main document generation function + types
|
||||||
generateDocs,
|
generateDocs,
|
||||||
GenerateDocs (..),
|
GenerateDocs (..),
|
||||||
EditorType (..),
|
|
||||||
SheetType (..),
|
SheetType (..),
|
||||||
loadStandaloneScenario,
|
|
||||||
|
|
||||||
-- ** Formatted keyword lists
|
|
||||||
keywordsCommands,
|
|
||||||
keywordsDirections,
|
|
||||||
operatorNames,
|
|
||||||
builtinFunctionList,
|
|
||||||
|
|
||||||
-- ** Wiki pages
|
-- ** Wiki pages
|
||||||
PageAddress (..),
|
PageAddress (..),
|
||||||
@ -36,6 +29,7 @@ import Data.Text (Text, unpack)
|
|||||||
import Data.Text qualified as T
|
import Data.Text qualified as T
|
||||||
import Data.Text.IO qualified as T
|
import Data.Text.IO qualified as T
|
||||||
import Data.Tuple (swap)
|
import Data.Tuple (swap)
|
||||||
|
import Swarm.Doc.Keyword
|
||||||
import Swarm.Doc.Pedagogy
|
import Swarm.Doc.Pedagogy
|
||||||
import Swarm.Doc.Util
|
import Swarm.Doc.Util
|
||||||
import Swarm.Doc.Wiki.Cheatsheet
|
import Swarm.Doc.Wiki.Cheatsheet
|
||||||
@ -47,8 +41,7 @@ import Swarm.Game.Scenario (loadStandaloneScenario)
|
|||||||
import Swarm.Game.World.Gen (extractEntities)
|
import Swarm.Game.World.Gen (extractEntities)
|
||||||
import Swarm.Game.World.Typecheck (Some (..), TTerm)
|
import Swarm.Game.World.Typecheck (Some (..), TTerm)
|
||||||
import Swarm.Language.Key (specialKeyNames)
|
import Swarm.Language.Key (specialKeyNames)
|
||||||
import Swarm.Language.Syntax qualified as Syntax
|
import Swarm.Util (both, listEnums)
|
||||||
import Swarm.Util (both, listEnums, quote)
|
|
||||||
import Swarm.Util.Effect (simpleErrorHandle)
|
import Swarm.Util.Effect (simpleErrorHandle)
|
||||||
import Swarm.Web (swarmApiMarkdown)
|
import Swarm.Web (swarmApiMarkdown)
|
||||||
import Text.Dot (Dot, NodeId, (.->.))
|
import Text.Dot (Dot, NodeId, (.->.))
|
||||||
@ -78,11 +71,6 @@ data GenerateDocs where
|
|||||||
WebAPIEndpoints :: GenerateDocs
|
WebAPIEndpoints :: GenerateDocs
|
||||||
deriving (Eq, Show)
|
deriving (Eq, Show)
|
||||||
|
|
||||||
-- | An enumeration of the editors supported by Swarm (currently,
|
|
||||||
-- Emacs and VS Code).
|
|
||||||
data EditorType = Emacs | VSCode | Vim
|
|
||||||
deriving (Eq, Show, Enum, Bounded)
|
|
||||||
|
|
||||||
-- | Generate the requested kind of documentation to stdout.
|
-- | Generate the requested kind of documentation to stdout.
|
||||||
generateDocs :: GenerateDocs -> IO ()
|
generateDocs :: GenerateDocs -> IO ()
|
||||||
generateDocs = \case
|
generateDocs = \case
|
||||||
@ -133,34 +121,6 @@ generateEditorKeywords = \case
|
|||||||
putStr "\nsyn keyword Direction "
|
putStr "\nsyn keyword Direction "
|
||||||
T.putStrLn $ keywordsDirections Vim
|
T.putStrLn $ keywordsDirections Vim
|
||||||
|
|
||||||
builtinFunctionList :: EditorType -> Text
|
|
||||||
builtinFunctionList e = editorList e $ map constSyntax builtinFunctions
|
|
||||||
|
|
||||||
editorList :: EditorType -> [Text] -> Text
|
|
||||||
editorList = \case
|
|
||||||
Emacs -> T.unlines . map ((" " <>) . quote)
|
|
||||||
VSCode -> T.intercalate "|"
|
|
||||||
Vim -> T.intercalate " "
|
|
||||||
|
|
||||||
-- | Get formatted list of basic functions/commands.
|
|
||||||
keywordsCommands :: EditorType -> Text
|
|
||||||
keywordsCommands e = editorList e $ map constSyntax commands
|
|
||||||
|
|
||||||
-- | Get formatted list of directions.
|
|
||||||
keywordsDirections :: EditorType -> Text
|
|
||||||
keywordsDirections e = editorList e $ map Syntax.directionSyntax Syntax.allDirs
|
|
||||||
|
|
||||||
-- | A list of the names of all the operators in the language.
|
|
||||||
operatorNames :: Text
|
|
||||||
operatorNames = T.intercalate "|" $ map (escape . constSyntax) operators
|
|
||||||
where
|
|
||||||
special :: String
|
|
||||||
special = "*+$[]|^"
|
|
||||||
slashNotComment = \case
|
|
||||||
'/' -> "/(?![/|*])"
|
|
||||||
c -> T.singleton c
|
|
||||||
escape = T.concatMap (\c -> if c `elem` special then T.snoc "\\\\" c else slashNotComment c)
|
|
||||||
|
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
-- GENERATE SPECIAL KEY NAMES
|
-- GENERATE SPECIAL KEY NAMES
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
@ -1,3 +1,4 @@
|
|||||||
|
{-# LANGUAGE LambdaCase #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
-- |
|
-- |
|
@ -1,3 +1,4 @@
|
|||||||
|
{-# LANGUAGE LambdaCase #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
-- |
|
-- |
|
@ -26,7 +26,7 @@
|
|||||||
(setq swarm-font-lock-keywords
|
(setq swarm-font-lock-keywords
|
||||||
(let* (
|
(let* (
|
||||||
;; Generate the current keywords with:
|
;; Generate the current keywords with:
|
||||||
;; cabal run swarm:swarm -- generate editors --emacs
|
;; cabal run swarm:swarm-docs -- editors --emacs
|
||||||
(x-keywords '("def" "end" "let" "in" "require"))
|
(x-keywords '("def" "end" "let" "in" "require"))
|
||||||
(x-builtins '(
|
(x-builtins '(
|
||||||
"self"
|
"self"
|
||||||
|
@ -28,11 +28,11 @@
|
|||||||
|
|
||||||
### Updating the syntax highlighting
|
### Updating the syntax highlighting
|
||||||
|
|
||||||
Whenever swarm language adds new features, the highlighing needs to be updated.
|
Whenever swarm language adds new features, the highlighting needs to be updated.
|
||||||
|
|
||||||
To save some time, get the current reserved words by running `swarm generate`:
|
To save some time, get the current reserved words by running `swarm-docs`:
|
||||||
```bash
|
```bash
|
||||||
cabal run swarm:swarm -- generate editors
|
cabal run swarm:swarm-docs -- editors
|
||||||
```
|
```
|
||||||
|
|
||||||
You still have to add for example types manually.
|
You still have to add for example types manually.
|
||||||
|
55
src/Swarm/Doc/Keyword.hs
Normal file
55
src/Swarm/Doc/Keyword.hs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
{-# LANGUAGE DataKinds #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
-- |
|
||||||
|
-- SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
--
|
||||||
|
-- Collect keywords for documentation generation and testing.
|
||||||
|
module Swarm.Doc.Keyword (
|
||||||
|
EditorType (..),
|
||||||
|
|
||||||
|
-- ** Formatted keyword lists
|
||||||
|
keywordsCommands,
|
||||||
|
keywordsDirections,
|
||||||
|
operatorNames,
|
||||||
|
builtinFunctionList,
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Text (Text)
|
||||||
|
import Data.Text qualified as T
|
||||||
|
import Swarm.Doc.Util
|
||||||
|
import Swarm.Language.Syntax qualified as Syntax
|
||||||
|
import Swarm.Util (quote)
|
||||||
|
|
||||||
|
-- | An enumeration of the editors supported by Swarm (currently,
|
||||||
|
-- Emacs and VS Code).
|
||||||
|
data EditorType = Emacs | VSCode | Vim
|
||||||
|
deriving (Eq, Show, Enum, Bounded)
|
||||||
|
|
||||||
|
builtinFunctionList :: EditorType -> Text
|
||||||
|
builtinFunctionList e = editorList e $ map constSyntax builtinFunctions
|
||||||
|
|
||||||
|
editorList :: EditorType -> [Text] -> Text
|
||||||
|
editorList = \case
|
||||||
|
Emacs -> T.unlines . map ((" " <>) . quote)
|
||||||
|
VSCode -> T.intercalate "|"
|
||||||
|
Vim -> T.intercalate " "
|
||||||
|
|
||||||
|
-- | Get formatted list of basic functions/commands.
|
||||||
|
keywordsCommands :: EditorType -> Text
|
||||||
|
keywordsCommands e = editorList e $ map constSyntax commands
|
||||||
|
|
||||||
|
-- | Get formatted list of directions.
|
||||||
|
keywordsDirections :: EditorType -> Text
|
||||||
|
keywordsDirections e = editorList e $ map Syntax.directionSyntax Syntax.allDirs
|
||||||
|
|
||||||
|
-- | A list of the names of all the operators in the language.
|
||||||
|
operatorNames :: Text
|
||||||
|
operatorNames = T.intercalate "|" $ map (escape . constSyntax) operators
|
||||||
|
where
|
||||||
|
special :: String
|
||||||
|
special = "*+$[]|^"
|
||||||
|
slashNotComment = \case
|
||||||
|
'/' -> "/(?![/|*])"
|
||||||
|
c -> T.singleton c
|
||||||
|
escape = T.concatMap (\c -> if c `elem` special then T.snoc "\\\\" c else slashNotComment c)
|
@ -17,13 +17,12 @@ import Data.Tuple.Extra (both)
|
|||||||
import Data.Vector qualified as V
|
import Data.Vector qualified as V
|
||||||
import Graphics.Vty.Attributes.Color240
|
import Graphics.Vty.Attributes.Color240
|
||||||
import Linear (V2 (..))
|
import Linear (V2 (..))
|
||||||
import Swarm.Doc.Gen (loadStandaloneScenario)
|
|
||||||
import Swarm.Game.Display (Attribute (AWorld), defaultChar, displayAttr)
|
import Swarm.Game.Display (Attribute (AWorld), defaultChar, displayAttr)
|
||||||
import Swarm.Game.Entity.Cosmetic
|
import Swarm.Game.Entity.Cosmetic
|
||||||
import Swarm.Game.Entity.Cosmetic.Assignment (terrainAttributes)
|
import Swarm.Game.Entity.Cosmetic.Assignment (terrainAttributes)
|
||||||
import Swarm.Game.Location
|
import Swarm.Game.Location
|
||||||
import Swarm.Game.ResourceLoading (initNameGenerator, readAppData)
|
import Swarm.Game.ResourceLoading (initNameGenerator, readAppData)
|
||||||
import Swarm.Game.Scenario (Scenario, area, scenarioCosmetics, scenarioWorlds, ul, worldName)
|
import Swarm.Game.Scenario (Scenario, area, loadStandaloneScenario, scenarioCosmetics, scenarioWorlds, ul, worldName)
|
||||||
import Swarm.Game.Scenario.Status (seedLaunchParams)
|
import Swarm.Game.Scenario.Status (seedLaunchParams)
|
||||||
import Swarm.Game.Scenario.Topography.Area (AreaDimensions (..), getAreaDimensions, isEmpty, upperLeftToBottomRight)
|
import Swarm.Game.Scenario.Topography.Area (AreaDimensions (..), getAreaDimensions, isEmpty, upperLeftToBottomRight)
|
||||||
import Swarm.Game.Scenario.Topography.Cell
|
import Swarm.Game.Scenario.Topography.Cell
|
||||||
|
61
swarm.cabal
61
swarm.cabal
@ -70,6 +70,7 @@ common stan-config
|
|||||||
-- Harmless extensions from GHC2021
|
-- Harmless extensions from GHC2021
|
||||||
common ghc2021-extensions
|
common ghc2021-extensions
|
||||||
ghc-options: -Wprepositive-qualified-module
|
ghc-options: -Wprepositive-qualified-module
|
||||||
|
-Wunused-packages
|
||||||
default-extensions:
|
default-extensions:
|
||||||
BangPatterns
|
BangPatterns
|
||||||
DeriveAnyClass
|
DeriveAnyClass
|
||||||
@ -100,15 +101,9 @@ library
|
|||||||
Data.BoolExpr.Simplify
|
Data.BoolExpr.Simplify
|
||||||
Swarm.App
|
Swarm.App
|
||||||
Swarm.Constant
|
Swarm.Constant
|
||||||
Swarm.Doc.Gen
|
Swarm.Doc.Keyword
|
||||||
Swarm.Doc.Pedagogy
|
Swarm.Doc.Pedagogy
|
||||||
Swarm.Doc.Schema.Arrangement
|
|
||||||
Swarm.Doc.Schema.Parse
|
|
||||||
Swarm.Doc.Schema.Refined
|
|
||||||
Swarm.Doc.Schema.Render
|
|
||||||
Swarm.Doc.Schema.SchemaType
|
|
||||||
Swarm.Doc.Util
|
Swarm.Doc.Util
|
||||||
Swarm.Doc.Wiki.Cheatsheet
|
|
||||||
Swarm.Game.Failure
|
Swarm.Game.Failure
|
||||||
Swarm.Game.Achievement.Attainment
|
Swarm.Game.Achievement.Attainment
|
||||||
Swarm.Game.Achievement.Definitions
|
Swarm.Game.Achievement.Definitions
|
||||||
@ -269,7 +264,6 @@ library
|
|||||||
aeson >= 2 && < 2.2,
|
aeson >= 2 && < 2.2,
|
||||||
array >= 0.5.4 && < 0.6,
|
array >= 0.5.4 && < 0.6,
|
||||||
astar >= 0.3 && < 0.3.1,
|
astar >= 0.3 && < 0.3.1,
|
||||||
blaze-html >= 0.9.1 && < 0.9.2,
|
|
||||||
boolexpr >= 0.2 && < 0.3,
|
boolexpr >= 0.2 && < 0.3,
|
||||||
brick >= 2.1.1 && < 2.2,
|
brick >= 2.1.1 && < 2.2,
|
||||||
bytestring >= 0.10 && < 0.12,
|
bytestring >= 0.10 && < 0.12,
|
||||||
@ -279,7 +273,6 @@ library
|
|||||||
commonmark-extensions >= 0.2 && < 0.3,
|
commonmark-extensions >= 0.2 && < 0.3,
|
||||||
containers >= 0.6.2 && < 0.7,
|
containers >= 0.6.2 && < 0.7,
|
||||||
directory >= 1.3 && < 1.4,
|
directory >= 1.3 && < 1.4,
|
||||||
dotgen >= 0.4 && < 0.5,
|
|
||||||
either >= 5.0 && < 5.1,
|
either >= 5.0 && < 5.1,
|
||||||
extra >= 1.7 && < 1.8,
|
extra >= 1.7 && < 1.8,
|
||||||
filepath >= 1.4 && < 1.5,
|
filepath >= 1.4 && < 1.5,
|
||||||
@ -300,8 +293,6 @@ library
|
|||||||
minimorph >= 0.3 && < 0.4,
|
minimorph >= 0.3 && < 0.4,
|
||||||
transformers >= 0.5 && < 0.7,
|
transformers >= 0.5 && < 0.7,
|
||||||
mtl >= 2.2.2 && < 2.4,
|
mtl >= 2.2.2 && < 2.4,
|
||||||
pandoc >= 3.0 && < 3.2,
|
|
||||||
pandoc-types >= 1.23 && < 1.24,
|
|
||||||
murmur3 >= 1.0.4 && < 1.1,
|
murmur3 >= 1.0.4 && < 1.1,
|
||||||
natural-sort >= 0.1.2 && < 0.2,
|
natural-sort >= 0.1.2 && < 0.2,
|
||||||
nonempty-containers >= 0.3.4 && < 0.3.5,
|
nonempty-containers >= 0.3.4 && < 0.3.5,
|
||||||
@ -309,15 +300,12 @@ library
|
|||||||
parser-combinators >= 1.2 && < 1.4,
|
parser-combinators >= 1.2 && < 1.4,
|
||||||
prettyprinter >= 1.7.0 && < 1.8,
|
prettyprinter >= 1.7.0 && < 1.8,
|
||||||
random >= 1.2.0 && < 1.3,
|
random >= 1.2.0 && < 1.3,
|
||||||
scientific >= 0.3.6 && < 0.3.8,
|
|
||||||
wai-app-static >= 3.1.8 && < 3.1.9,
|
wai-app-static >= 3.1.8 && < 3.1.9,
|
||||||
servant >= 0.19 && < 0.21,
|
|
||||||
servant-docs >= 0.12 && < 0.14,
|
servant-docs >= 0.12 && < 0.14,
|
||||||
servant-server >= 0.19 && < 0.21,
|
servant-server >= 0.19 && < 0.21,
|
||||||
SHA >= 1.6.4 && < 1.6.5,
|
SHA >= 1.6.4 && < 1.6.5,
|
||||||
simple-enumeration >= 0.2 && < 0.3,
|
simple-enumeration >= 0.2 && < 0.3,
|
||||||
split >= 0.2.3 && < 0.3,
|
split >= 0.2.3 && < 0.3,
|
||||||
stm >= 2.5.0 && < 2.6,
|
|
||||||
syb >= 0.7 && < 0.8,
|
syb >= 0.7 && < 0.8,
|
||||||
tagged >= 0.8 && < 0.9,
|
tagged >= 0.8 && < 0.9,
|
||||||
template-haskell >= 2.16 && < 2.21,
|
template-haskell >= 2.16 && < 2.21,
|
||||||
@ -330,7 +318,6 @@ library
|
|||||||
unordered-containers >= 0.2.14 && < 0.3,
|
unordered-containers >= 0.2.14 && < 0.3,
|
||||||
vector >= 0.12 && < 0.14,
|
vector >= 0.12 && < 0.14,
|
||||||
vty >= 6.0 && < 6.1,
|
vty >= 6.0 && < 6.1,
|
||||||
vty-crossplatform >= 0.2.0.0 && < 0.3,
|
|
||||||
wai >= 3.2 && < 3.3,
|
wai >= 3.2 && < 3.3,
|
||||||
warp >= 3.2 && < 3.4,
|
warp >= 3.2 && < 3.4,
|
||||||
witch >= 1.1.1.0 && < 1.3,
|
witch >= 1.1.1.0 && < 1.3,
|
||||||
@ -354,6 +341,8 @@ executable swarm
|
|||||||
build-depends: optparse-applicative >= 0.16 && < 0.19,
|
build-depends: optparse-applicative >= 0.16 && < 0.19,
|
||||||
githash >= 0.1.6 && < 0.2,
|
githash >= 0.1.6 && < 0.2,
|
||||||
terminal-size >= 0.3 && < 1.0,
|
terminal-size >= 0.3 && < 1.0,
|
||||||
|
blaze-html >= 0.9.1 && < 0.9.2,
|
||||||
|
servant >= 0.19 && < 0.21,
|
||||||
-- Imports shared with the library don't need bounds
|
-- Imports shared with the library don't need bounds
|
||||||
base,
|
base,
|
||||||
text,
|
text,
|
||||||
@ -364,6 +353,40 @@ executable swarm
|
|||||||
ghc-options: -threaded
|
ghc-options: -threaded
|
||||||
default-extensions: ImportQualifiedPost
|
default-extensions: ImportQualifiedPost
|
||||||
|
|
||||||
|
executable swarm-docs
|
||||||
|
import: stan-config, common, ghc2021-extensions
|
||||||
|
main-is: Main.hs
|
||||||
|
other-modules: Swarm.Doc.Gen
|
||||||
|
Swarm.Doc.Schema.Arrangement
|
||||||
|
Swarm.Doc.Schema.Parse
|
||||||
|
Swarm.Doc.Schema.Refined
|
||||||
|
Swarm.Doc.Schema.Render
|
||||||
|
Swarm.Doc.Schema.SchemaType
|
||||||
|
Swarm.Doc.Wiki.Cheatsheet
|
||||||
|
build-depends: optparse-applicative >= 0.16 && < 0.19,
|
||||||
|
dotgen >= 0.4 && < 0.5,
|
||||||
|
pandoc >= 3.0 && < 3.2,
|
||||||
|
pandoc-types >= 1.23 && < 1.24,
|
||||||
|
scientific >= 0.3.6 && < 0.3.8,
|
||||||
|
-- Imports shared with the library don't need bounds
|
||||||
|
base,
|
||||||
|
aeson,
|
||||||
|
containers,
|
||||||
|
directory,
|
||||||
|
extra,
|
||||||
|
filepath,
|
||||||
|
fused-effects,
|
||||||
|
lens,
|
||||||
|
mtl,
|
||||||
|
swarm,
|
||||||
|
text,
|
||||||
|
transformers,
|
||||||
|
vector,
|
||||||
|
hs-source-dirs: app/doc
|
||||||
|
default-language: Haskell2010
|
||||||
|
ghc-options: -threaded
|
||||||
|
default-extensions: ImportQualifiedPost
|
||||||
|
|
||||||
test-suite swarm-unit
|
test-suite swarm-unit
|
||||||
import: stan-config, common, ghc2021-extensions
|
import: stan-config, common, ghc2021-extensions
|
||||||
main-is: Main.hs
|
main-is: Main.hs
|
||||||
@ -394,7 +417,6 @@ test-suite swarm-unit
|
|||||||
filepath,
|
filepath,
|
||||||
hashable,
|
hashable,
|
||||||
lens,
|
lens,
|
||||||
linear,
|
|
||||||
mtl,
|
mtl,
|
||||||
swarm,
|
swarm,
|
||||||
text,
|
text,
|
||||||
@ -412,19 +434,15 @@ test-suite swarm-integration
|
|||||||
|
|
||||||
build-depends: tasty >= 0.10 && < 1.6,
|
build-depends: tasty >= 0.10 && < 1.6,
|
||||||
tasty-hunit >= 0.10 && < 0.11,
|
tasty-hunit >= 0.10 && < 0.11,
|
||||||
tasty-expected-failure >= 0.12 && < 0.13,
|
|
||||||
-- Imports shared with the library don't need bounds
|
-- Imports shared with the library don't need bounds
|
||||||
base,
|
base,
|
||||||
containers,
|
containers,
|
||||||
directory,
|
|
||||||
filepath,
|
filepath,
|
||||||
fused-effects,
|
fused-effects,
|
||||||
lens,
|
lens,
|
||||||
linear,
|
|
||||||
mtl,
|
mtl,
|
||||||
swarm,
|
swarm,
|
||||||
text,
|
text,
|
||||||
transformers,
|
|
||||||
witch,
|
witch,
|
||||||
yaml
|
yaml
|
||||||
hs-source-dirs: test/integration
|
hs-source-dirs: test/integration
|
||||||
@ -439,11 +457,8 @@ benchmark benchmark
|
|||||||
build-depends: tasty-bench >= 0.3.1 && < 0.4,
|
build-depends: tasty-bench >= 0.3.1 && < 0.4,
|
||||||
base,
|
base,
|
||||||
lens,
|
lens,
|
||||||
linear,
|
|
||||||
mtl,
|
mtl,
|
||||||
random,
|
|
||||||
swarm,
|
swarm,
|
||||||
text,
|
|
||||||
containers,
|
containers,
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
ghc-options: -threaded
|
ghc-options: -threaded
|
||||||
|
@ -26,8 +26,8 @@ import Data.Text (Text)
|
|||||||
import Data.Text qualified as T
|
import Data.Text qualified as T
|
||||||
import Data.Text.IO qualified as T
|
import Data.Text.IO qualified as T
|
||||||
import Data.Yaml (ParseException, prettyPrintParseException)
|
import Data.Yaml (ParseException, prettyPrintParseException)
|
||||||
import Swarm.Doc.Gen (EditorType (..))
|
import Swarm.Doc.Keyword (EditorType (..))
|
||||||
import Swarm.Doc.Gen qualified as DocGen
|
import Swarm.Doc.Keyword qualified as Keyword
|
||||||
import Swarm.Effect (runTimeIO)
|
import Swarm.Effect (runTimeIO)
|
||||||
import Swarm.Game.Achievement.Definitions (GameplayAchievement (..))
|
import Swarm.Game.Achievement.Definitions (GameplayAchievement (..))
|
||||||
import Swarm.Game.CESK (emptyStore, getTickNumber, initMachine)
|
import Swarm.Game.CESK (emptyStore, getTickNumber, initMachine)
|
||||||
@ -525,22 +525,22 @@ testEditorFiles =
|
|||||||
"editors"
|
"editors"
|
||||||
[ testGroup
|
[ testGroup
|
||||||
"VS Code"
|
"VS Code"
|
||||||
[ testTextInVSCode "operators" (const DocGen.operatorNames)
|
[ testTextInVSCode "operators" (const Keyword.operatorNames)
|
||||||
, testTextInVSCode "builtin" DocGen.builtinFunctionList
|
, testTextInVSCode "builtin" Keyword.builtinFunctionList
|
||||||
, testTextInVSCode "commands" DocGen.keywordsCommands
|
, testTextInVSCode "commands" Keyword.keywordsCommands
|
||||||
, testTextInVSCode "directions" DocGen.keywordsDirections
|
, testTextInVSCode "directions" Keyword.keywordsDirections
|
||||||
]
|
]
|
||||||
, testGroup
|
, testGroup
|
||||||
"Emacs"
|
"Emacs"
|
||||||
[ testTextInEmacs "builtin" DocGen.builtinFunctionList
|
[ testTextInEmacs "builtin" Keyword.builtinFunctionList
|
||||||
, testTextInEmacs "commands" DocGen.keywordsCommands
|
, testTextInEmacs "commands" Keyword.keywordsCommands
|
||||||
, testTextInEmacs "directions" DocGen.keywordsDirections
|
, testTextInEmacs "directions" Keyword.keywordsDirections
|
||||||
]
|
]
|
||||||
, testGroup
|
, testGroup
|
||||||
"Vim"
|
"Vim"
|
||||||
[ testTextInVim "builtin" DocGen.builtinFunctionList
|
[ testTextInVim "builtin" Keyword.builtinFunctionList
|
||||||
, testTextInVim "commands" DocGen.keywordsCommands
|
, testTextInVim "commands" Keyword.keywordsCommands
|
||||||
, testTextInVim "directions" DocGen.keywordsDirections
|
, testTextInVim "directions" Keyword.keywordsDirections
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
|
Loading…
Reference in New Issue
Block a user