CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/hackage-purescript

A strongly typed functional programming language compiler that compiles to JavaScript with advanced type system features and IDE integration

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

docs.mddocs/

Documentation Generation

Comprehensive documentation extraction and generation from PureScript source code in multiple formats including HTML and Markdown with cross-references and type information.

Capabilities

Documentation Collection

Extract documentation from PureScript source code with comment processing and type information.

-- | Collect documentation from modules
collectDocs :: [Module] -> Either MultipleErrors [DocModule]

-- | Collect documentation with environment context
collectDocsWithEnv :: Environment -> [Module] -> Either MultipleErrors [DocModule]

-- | Documentation module representation
data DocModule = DocModule
  { dmName :: ModuleName
  , dmComments :: Maybe Text
  , dmDeclarations :: [DocDeclaration]
  , dmReExports :: [(InPackage ModuleName, [DocDeclaration])]
  }

-- | Documentation declaration
data DocDeclaration = DocDeclaration
  { declTitle :: Text
  , declComments :: Maybe Text
  , declSourceSpan :: Maybe SourceSpan
  , declChildren :: [ChildDeclaration]
  , declInfo :: DeclarationInfo
  , declKindInfo :: Maybe KindInfo
  }

HTML Documentation Generation

Generate comprehensive HTML documentation with navigation and cross-references.

-- | Generate HTML documentation
writeDocHtml :: DocModule -> Text

-- | Generate HTML documentation with options
writeDocHtmlWithOptions :: HtmlOptions -> DocModule -> Text

-- | HTML generation options
data HtmlOptions = HtmlOptions
  { htmlTitle :: Text
  , htmlCssUrl :: Maybe Text
  , htmlJsUrl :: Maybe Text
  , htmlHierarchyImages :: Bool
  , htmlUsePursuitLinks :: Bool
  , htmlSourceLinks :: Bool
  }

-- | Default HTML options
defaultHtmlOptions :: HtmlOptions

-- | Generate HTML index page
generateHtmlIndex :: [DocModule] -> Text

-- | Generate navigation HTML
generateNavigation :: [DocModule] -> Text

Markdown Documentation Generation

Generate GitHub-compatible Markdown documentation with proper formatting.

-- | Generate Markdown documentation
writeDocMarkdown :: DocModule -> Text

-- | Generate Markdown with options
writeDocMarkdownWithOptions :: MarkdownOptions -> DocModule -> Text

-- | Markdown generation options
data MarkdownOptions = MarkdownOptions
  { markdownTitle :: Text
  , markdownGithubSourceLinks :: Bool
  , markdownPursuitLinks :: Bool
  , markdownTableOfContents :: Bool
  }

-- | Default Markdown options
defaultMarkdownOptions :: MarkdownOptions

-- | Generate Markdown table of contents
generateTOC :: DocModule -> Text

-- | Generate Markdown for declaration
declToMarkdown :: DocDeclaration -> Text

Documentation Rendering

Render PureScript types and values for documentation output.

-- | Render type for documentation
renderDocType :: SourceType -> RenderedCode

-- | Render constraint for documentation
renderDocConstraint :: SourceConstraint -> RenderedCode

-- | Render value signature
renderDocValue :: Ident -> SourceType -> RenderedCode

-- | Rendered code with syntax highlighting
data RenderedCode = RenderedCode
  { rcodeText :: Text
  , rcodeAnnotations :: [CodeAnnotation]
  }

-- | Code annotations for syntax highlighting
data CodeAnnotation = CodeAnnotation
  { caStart :: Int
  , caEnd :: Int
  , caType :: AnnotationType
  , caData :: Maybe Text
  }

-- | Annotation types
data AnnotationType
  = AnnKeyword | AnnType | AnnConstructor | AnnFunction | AnnComment | AnnString

Comment Processing

Process and attach documentation comments to declarations.

-- | Extract documentation comments
extractDocComments :: [Comment] -> Maybe Text

-- | Process documentation comment text
processDocComment :: Text -> Text

-- | Attach comments to declarations
attachComments :: [Comment] -> [Declaration] -> [Declaration]

-- | Comment attachment rules
data CommentRule
  = AttachToNext        -- Attach to following declaration
  | AttachToPrevious    -- Attach to previous declaration
  | StandaloneComment   -- Keep as standalone

-- | Determine comment attachment
determineAttachment :: Comment -> [Declaration] -> CommentRule

Cross-Reference Generation

Generate cross-references and links between documentation elements.

-- | Generate cross-reference links
generateCrossRefs :: [DocModule] -> [DocModule]

-- | Cross-reference information
data CrossRef = CrossRef
  { crSource :: SourceSpan
  , crTarget :: Qualified Ident
  , crKind :: CrossRefKind
  }

-- | Cross-reference kinds
data CrossRefKind
  = LinkToValue | LinkToType | LinkToConstructor | LinkToClass | LinkToModule

-- | Resolve cross-reference
resolveCrossRef :: Environment -> CrossRef -> Maybe DocLink

-- | Documentation link
data DocLink = DocLink
  { dlText :: Text
  , dlUrl :: Text
  , dlTitle :: Maybe Text
  }

Type Class Hierarchy

Generate type class hierarchy documentation and diagrams.

-- | Generate type class hierarchy
generateHierarchy :: [DocModule] -> HierarchyGraph

-- | Type class hierarchy graph
data HierarchyGraph = HierarchyGraph
  { hgNodes :: [HierarchyNode]
  , hgEdges :: [HierarchyEdge]
  }

-- | Hierarchy node (type class)
data HierarchyNode = HierarchyNode
  { hnName :: Qualified (ProperName 'ClassName)
  , hnKind :: SourceKind
  , hnFunctionalDependencies :: [FunctionalDependency]
  , hnMembers :: [Ident]
  }

-- | Hierarchy edge (superclass relationship)
data HierarchyEdge = HierarchyEdge
  { heSuperclass :: Qualified (ProperName 'ClassName)
  , heSubclass :: Qualified (ProperName 'ClassName)
  , heConstraint :: SourceConstraint
  }

-- | Generate GraphViz DOT format
hierarchyToDot :: HierarchyGraph -> Text

-- | Generate SVG hierarchy diagram
hierarchyToSvg :: HierarchyGraph -> Text

Search Index Generation

Generate search indices for documentation browsing.

-- | Generate search index
generateSearchIndex :: [DocModule] -> SearchIndex

-- | Search index data
data SearchIndex = SearchIndex
  { siEntries :: [SearchEntry]
  , siMetadata :: SearchMetadata
  }

-- | Search entry
data SearchEntry = SearchEntry
  { seTitle :: Text
  , seType :: Maybe Text
  , seModule :: ModuleName
  , sePackage :: Maybe Text
  , seComments :: Maybe Text
  , seKind :: SearchKind
  }

-- | Search kinds
data SearchKind
  = SearchValue | SearchType | SearchConstructor | SearchClass | SearchModule

-- | Search index metadata
data SearchMetadata = SearchMetadata
  { smVersion :: Text
  , smGenerated :: UTCTime
  , smPackages :: [Text]
  }

-- | Serialize search index to JSON
searchIndexToJson :: SearchIndex -> Value

Tag Generation

Generate ctags and etags for editor integration.

-- | Generate ctags format
generateCtags :: [DocModule] -> Text

-- | Generate etags format  
generateEtags :: [DocModule] -> Text

-- | Tag entry
data TagEntry = TagEntry
  { teTag :: Text
  , teFile :: FilePath
  , teAddress :: TagAddress
  , teKind :: TagKind
  , teFields :: [(Text, Text)]
  }

-- | Tag address (line number or pattern)
data TagAddress = LineNumber Int | SearchPattern Text

-- | Tag kinds
data TagKind = TagFunction | TagType | TagConstructor | TagClass | TagModule

-- | Convert DocDeclaration to tags
declToTags :: FilePath -> DocDeclaration -> [TagEntry]

Documentation Validation

Validate generated documentation for completeness and correctness.

-- | Validate documentation completeness
validateDocs :: [DocModule] -> Either [DocError] ()

-- | Documentation validation errors
data DocError
  = MissingDocumentation Ident
  | InvalidCrossReference Text
  | MalformedComment Text
  | InconsistentTypeSignature Ident SourceType SourceType

-- | Check for missing documentation
checkMissingDocs :: DocModule -> [DocError]

-- | Validate cross-references
validateCrossRefs :: [DocModule] -> [DocError]

-- | Check documentation coverage
calculateCoverage :: DocModule -> DocCoverage

-- | Documentation coverage statistics
data DocCoverage = DocCoverage
  { dcTotal :: Int
  , dcDocumented :: Int
  , dcPercentage :: Double
  }

Multi-Package Documentation

Generate documentation for multiple packages with cross-package references.

-- | Multi-package documentation
data PackageDocs = PackageDocs
  { pdPackage :: PackageInfo
  , pdModules :: [DocModule]
  , pdDependencies :: [PackageInfo]
  }

-- | PackageInfo
data PackageInfo = PackageInfo
  { piName :: Text
  , piVersion :: Text
  , piHomepage :: Maybe Text
  , piRepository :: Maybe Text
  }

-- | Generate multi-package documentation
generatePackageDocs :: [PackageDocs] -> Text

-- | Cross-package reference resolution
resolveCrossPackageRefs :: [PackageDocs] -> [PackageDocs]

-- | Generate package index
generatePackageIndex :: [PackageDocs] -> Text

Types

Documentation Data Structures

-- | Declaration information
data DeclarationInfo
  = ValueDeclaration (Maybe SourceType)
  | DataDeclaration DataDeclType [TypeParameter] [(ProperName 'ConstructorName, [SourceType])]
  | ExternDataDeclaration SourceKind
  | TypeSynonymDeclaration [TypeParameter] SourceType
  | TypeClassDeclaration [TypeParameter] [SourceConstraint] [FunctionalDependency] [Ident]
  | AliasDeclaration Ident
  | ExternKindDeclaration
  | RoleDeclaration [Role]

-- | Kind information
data KindInfo = KindInfo
  { kiKind :: SourceKind
  , kiConstraints :: [SourceConstraint]
  }

-- | Child declaration
data ChildDeclaration = ChildDeclaration
  { cdeclTitle :: Text
  , cdeclComments :: Maybe Text
  , cdeclSourceSpan :: Maybe SourceSpan
  , cdeclInfo :: DeclarationInfo
  }

-- | Type parameter documentation
data TypeParameter = TypeParameter
  { tpName :: Text
  , tpKind :: Maybe SourceKind
  , tpDescription :: Maybe Text
  }

Output Formats

-- | Documentation output format
data DocFormat
  = HtmlFormat HtmlOptions
  | MarkdownFormat MarkdownOptions
  | CtagsFormat
  | EtagsFormat
  | JsonFormat

-- | Generate documentation in specified format
generateDocs :: DocFormat -> [DocModule] -> Text

-- | Multiple format generation
generateMultiFormat :: [DocFormat] -> [DocModule] -> [(DocFormat, Text)]

-- | Documentation generation result
data DocResult = DocResult
  { drFormat :: DocFormat
  , drContent :: Text
  , drFiles :: [(FilePath, Text)]  -- Additional files (CSS, JS, etc.)
  }

Styling and Themes

-- | Documentation theme
data DocTheme = DocTheme
  { dtName :: Text
  , dtCss :: Text
  , dtJs :: Maybe Text
  , dtFavicon :: Maybe Text
  }

-- | Built-in themes
defaultTheme :: DocTheme
darkTheme :: DocTheme  
minimalistTheme :: DocTheme

-- | Apply theme to HTML documentation
applyTheme :: DocTheme -> Text -> Text

-- | Custom CSS injection
injectCustomCss :: Text -> Text -> Text

Install with Tessl CLI

npx tessl i tessl/hackage-purescript

docs

ast.md

build.md

cli.md

codegen.md

corefn.md

docs.md

errors.md

ide.md

index.md

interactive.md

parser.md

sugar.md

types.md

tile.json