packages feed

purescript-0.12.0: tests/TestPrimDocs.hs

module TestPrimDocs where

import Prelude

import Control.Monad
import Data.Monoid ((<>))
import Data.List ((\\))
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Language.PureScript as P
import qualified Language.PureScript.Docs as D
import qualified Language.PureScript.Docs.AsMarkdown as D

main :: IO ()
main = do
  putStrLn "Test that there are no bottoms hiding in primDocsModule"
  seq (D.runDocs (D.modulesAsMarkdown D.primModules)) (return ())

  putStrLn "Test that Prim is fully documented"
  let actualPrimNames =
        -- note that prim type classes are listed in P.primTypes
        (map (P.runProperName . P.disqualify . fst) $ Map.toList
          ( P.primTypes <>
            P.primOrderingTypes <>
            P.primRowTypes <>
            P.primRowListTypes <>
            P.primTypeErrorTypes <>
            P.primSymbolTypes )) ++
        (map (P.runProperName . P.disqualify) $ Set.toList P.allPrimKinds)
  let documentedPrimNames = map D.declTitle (concatMap D.modDeclarations D.primModules)

  let undocumentedNames = actualPrimNames \\ documentedPrimNames
  let extraNames = documentedPrimNames \\ actualPrimNames

  when (not (null undocumentedNames)) $
    error $ "Undocumented Prim names: " ++ show undocumentedNames

  when (not (null extraNames)) $
    error $ "Extra Prim names: " ++ show extraNames