← Portal

Types and relationships (PlantUML source)

This portal does not render PlantUML. Convert this source to an SVG or PNG using the plantuml/plantuml Docker image described in docs/outputs.md in the diagoram repository, or paste it into a PlantUML viewer of your choice.

@startuml class-diagram
    package internal as internal {
        package cli as internal_cli {
            class "Options\n<b>Options holds the parsed command-line options.</b>" as internal_cli_Options {
                +Help : bool
                +Version : bool
                +ClassDiagram : bool
                +PackageDiagram : bool
                +Format : string
                +ShowExternal : bool
                +HideUnexported : bool
                +HideAliases : bool
                +PublicAPI : bool
                +ShowConstants : bool
                +ShowFunctions : bool
                +FunctionPatterns : []string
                +MethodPatterns : []string
                +ReceiverPatterns : []string
                +MaxMembers : int
                +DisableFields : bool
                +DisableMethods : bool
                +DisableImplements : bool
                +ShowEdgeReasons : bool
                +Summary : bool
                +Report : bool
                +HTMLDir : string
                +RelTargets : []string
                +RelTargetDepth : int
                +Include : []string
                +Exclude : []string
                +ExcludeDirs : []string
                +IncludeDirs : []string
                +ExcludeGenerated : bool
                +GeneratedOnly : bool
                +GOOS : string
                +GOARCH : string
                +BuildTags : []string
                +BuildContextMode : string
                +Dir : string
            }
        }
        package diagram as internal_diagram {
            class "Diagram\n<b>Diagram is the fully built intermediate representation: the package</b>" as internal_diagram_Diagram {
                +Root : *PackageNode
                +Edges : []Edge
                -edgeReasons : map[edgeKey]EdgeReasons
                +ReasonsFor(Edge) : EdgeReasons
            }
            class "Edge\n<b>Edge is one directed relationship between two Entries, identified by</b>" as internal_diagram_Edge {
                +From : string
                +To : string
                +Kind : EdgeKind
                +ToCollection : bool
                +Unexported : bool
                +PointerOnly : bool
            }
            class "EdgeKind\n<b>EdgeKind distinguishes the relationships diagoram draws between</b>" as internal_diagram_EdgeKind <<type>> {
                type : int
            }
            class "EdgeReasons\n<b>EdgeReasons is a bit set describing the source constructs behind an edge.</b>" as internal_diagram_EdgeReasons <<type>> {
                type : uint32
            }
            class "Entry\n<b>Entry is one supported named Go type or a synthetic package-function group.</b>" as internal_diagram_Entry {
                +ID : string
                +Name : string
                +TypeParams : []gocode.TypeParam
                +Kind : Kind
                +Doc : string
                +Fields : []gocode.Field
                +Methods : []gocode.Method
                +NamedType : *gocode.NamedType
                +Functions : []gocode.Function
            }
            class "Kind\n<b>Kind distinguishes the two entry shapes diagoram draws.</b>" as internal_diagram_Kind <<type>> {
                type : int
            }
            class "PackageEdge\n<b>PackageEdge is one directed dependency between two packages, derived</b>" as internal_diagram_PackageEdge {
                +From : string
                +To : string
                +Mutual : bool
                +External : bool
            }
            class "PackageGraph\n<b>PackageGraph is the intermediate representation for a package</b>" as internal_diagram_PackageGraph {
                +Root : *PackageNode
                +Edges : []PackageEdge
                +HasRootPackage : bool
            }
            class "PackageNode\n<b>PackageNode is one node of the package tree: a single directory</b>" as internal_diagram_PackageNode {
                +Name : string
                +Path : string
                +PackageName : string
                +Children : []*PackageNode
                +Entries : []*Entry
            }
            class "RelTargetNotFoundError\n<b>RelTargetNotFoundError is returned by FilterByRelTarget when one or</b>" as internal_diagram_RelTargetNotFoundError {
                +Missing : []string
                +Candidates : []string
                +Error() : string
            }
            class "SummaryOptions\n<b>SummaryOptions controls which counts and relationships Summary</b>" as internal_diagram_SummaryOptions {
                +HideUnexported : bool
                +DisableFields : bool
                +DisableMethods : bool
                +DisableImplements : bool
                +FunctionPatterns : []string
                +MethodPatterns : []string
                +ReceiverPatterns : []string
                +ShowEdgeReasons : bool
            }
            class "concreteMethodSets\n<b>effectiveStructMethodSets returns the separate method sets of s and *s.</b>" as internal_diagram_concreteMethodSets {
                -value : map[string]gocode.Method
                -pointer : map[string]gocode.Method
            }
            class "edgeKey\n<b>edgeKey identifies an (From, To, Kind) triple for deduplication.</b>" as internal_diagram_edgeKey {
                +From : string
                +To : string
                +Kind : EdgeKind
            }
            class "entryKey\n<b>entryKey identifies a declared type by the directory it lives in and</b>" as internal_diagram_entryKey {
                +Dir : string
                +Name : string
            }
            class "entrySummaryMeta\n<b>entrySummaryMeta records the facts about an Entry that Summary needs</b>" as internal_diagram_entrySummaryMeta {
                -name : string
                -dir : string
                -packageName : string
            }
            class "pkgPair\n<b>pkgPair identifies an unordered relationship between two package</b>" as internal_diagram_pkgPair {
                +From : string
                +To : string
            }
        }
        package gocode as internal_gocode {
            class "BuildContext\n<b>BuildContext selects files for a target Go build environment.</b>" as internal_gocode_BuildContext {
                +GOOS : string
                +GOARCH : string
                +Tags : []string
            }
            class "Constant\n<b>Constant is a constant associated with a named scalar type.</b>" as internal_gocode_Constant {
                +Name : string
                +Doc : string
                +Exported : bool
            }
            class "Field\n<b>Field is a named struct field.</b>" as internal_gocode_Field {
                +Name : string
                +Type : TypeRef
                +Exported : bool
            }
            class "Function\n<b>Function is a package-level function signature.</b>" as internal_gocode_Function {
                +Name : string
                +Doc : string
                +Params : []TypeRef
                +Results : []TypeRef
                +Exported : bool
            }
            class "GeneratedFileMode\n<b>GeneratedFileMode selects generated and handwritten Go files.</b>" as internal_gocode_GeneratedFileMode <<type>> {
                type : int
            }
            class "Import\n<b>Import is a single import declaration.</b>" as internal_gocode_Import {
                +Alias : string
                +Path : string
            }
            class "Interface\n<b>Interface is a `type X interface{...}` declaration.</b>" as internal_gocode_Interface {
                +Name : string
                +TypeParams : []TypeParam
                +Doc : string
                +Methods : []Method
                +Embeds : []TypeRef
            }
            class "Method\n<b>Method is a function signature: either a struct method (matched to</b>" as internal_gocode_Method {
                +Name : string
                +Params : []TypeRef
                +Results : []TypeRef
                +Exported : bool
                +PointerReceiver : bool
            }
            class "NamedType\n<b>NamedType is a declared non-struct, non-interface type or type alias.</b>" as internal_gocode_NamedType {
                +Name : string
                +Doc : string
                +TypeParams : []TypeParam
                +Kind : NamedTypeKind
                +Underlying : TypeRef
                +Params : []TypeRef
                +Results : []TypeRef
                +Methods : []Method
                +Constants : []Constant
            }
            class "NamedTypeKind\n<b>NamedTypeKind identifies the supported underlying shape of a named type.</b>" as internal_gocode_NamedTypeKind <<type>> {
                type : int
            }
            class "Package\n<b>Package is one analyzed Go package: all the declarations gathered</b>" as internal_gocode_Package {
                +Dir : string
                +Name : string
                +Imports : []Import
                +Structs : []*Struct
                +Interfaces : []*Interface
                +NamedTypes : []*NamedType
                +Functions : []Function
            }
            class "ParseOptions\n<b>ParseOptions controls which files Parse considers.</b>" as internal_gocode_ParseOptions {
                +Includes : []string
                +Excludes : []string
                +ExcludeDirs : []string
                +IncludeDirs : []string
                +GeneratedFiles : GeneratedFileMode
                +BuildContext : *BuildContext
            }
            class "Struct\n<b>Struct is a `type X struct{...}` declaration.</b>" as internal_gocode_Struct {
                +Name : string
                +TypeParams : []TypeParam
                +Doc : string
                +Fields : []Field
                +Embeds : []TypeRef
                +Methods : []Method
            }
            class "TypeParam\n<b>TypeParam is one declared generic type parameter.</b>" as internal_gocode_TypeParam {
                +Name : string
                +Constraint : TypeRef
            }
            class "TypeRef\n<b>TypeRef is a reference to a type, as written at the point of use. It</b>" as internal_gocode_TypeRef {
                +PkgName : string
                +Name : string
                +IsSlice : bool
                +IsMap : bool
                +IsPtr : bool
                +String : string
                +Related : []TypeRef
                +Relation : TypeRelation
            }
            class "TypeRelation\n<b>TypeRelation identifies why a nested type reference is related.</b>" as internal_gocode_TypeRelation <<type>> {
                type : int
            }
            class "Warning\n<b>Warning describes a file that Parse could not analyze, so that</b>" as internal_gocode_Warning {
                +File : string
                +Err : error
                +BuildExpression : string
                +Error() : string
            }
            class "dirFiles\n<b>dirFiles is one directory's set of analyzable Go files, discovered</b>" as internal_gocode_dirFiles {
                +Dir : string
                +AbsDir : string
                +Files : []string
            }
            class "fileDecls\n<b>fileDecls is the intermediate result of scanning a single *.go</b>" as internal_gocode_fileDecls {
                +Structs : []*Struct
                +Interfaces : []*Interface
                +NamedTypes : []*NamedType
                +Methods : map[string][]Method
                +Constants : map[string][]Constant
                +PendingConstants : []pendingConstant
                +Functions : []Function
            }
            class "pendingConstant" as internal_gocode_pendingConstant {
                +Constant : Constant
                +RefName : string
            }
        }
        package portal as internal_portal {
            class "Artifacts\n<b>Artifacts holds every pre-rendered text artifact the portal embeds.</b>" as internal_portal_Artifacts {
                +ClassMermaid : string
                +PackageMermaid : string
                +ClassPlantUML : string
                +PackagePlantUML : string
                +Summary : string
                +ReportMarkdown : string
            }
            class "Meta\n<b>Meta holds portal-wide metadata shown in index.html's header.</b>" as internal_portal_Meta {
                +Dir : string
                +ModulePath : string
                +Version : string
            }
            class "Result\n<b>Result reports where Generate wrote the portal's entry point.</b>" as internal_portal_Result {
                +IndexPath : string
            }
            class "indexPageData\n<b>indexPageData is index.html.tmpl's template data.</b>" as internal_portal_indexPageData {
                +Dir : string
                +ModulePath : string
                +Version : string
            }
            class "mermaidPageData\n<b>mermaidPageData is mermaid.html.tmpl's template data. When Skipped</b>" as internal_portal_mermaidPageData {
                +Title : string
                +SourceFile : string
                +Source : string
                +Skipped : bool
                +SkipReason : string
            }
            class "pumlPageData\n<b>pumlPageData is puml.html.tmpl's template data.</b>" as internal_portal_pumlPageData {
                +Title : string
                +SourceFile : string
                +Source : string
            }
            class "reportPageData\n<b>reportPageData is report.html.tmpl's template data.</b>" as internal_portal_reportPageData {
                +Title : string
                +SourceFile : string
                +Markdown : string
            }
            class "textPageData\n<b>textPageData is text.html.tmpl's template data.</b>" as internal_portal_textPageData {
                +Title : string
                +SourceFile : string
                +Content : string
            }
        }
        package render as internal_render {
            class "Options\n<b>Options controls renderer behavior. It is shared across output</b>" as internal_render_Options {
                +HideUnexported : bool
                +ShowConstants : bool
                +ShowFunctions : bool
                +FunctionPatterns : []string
                +MethodPatterns : []string
                +ReceiverPatterns : []string
                +MaxMembers : int
                +ShowEdgeReasons : bool
                +DisableFields : bool
                +DisableMethods : bool
                +DisableImplements : bool
            }
            interface "PackageGraphRenderer\n<b>PackageGraphRenderer is implemented by every Renderer that can also</b>" as internal_render_PackageGraphRenderer {
                +RenderPackageGraph(*diagram.PackageGraph, Options) : string, error
            }
            interface "Renderer\n<b>Renderer turns a diagram.Diagram into its textual representation in</b>" as internal_render_Renderer {
                +Render(*diagram.Diagram, Options) : string, error
            }
            package mermaid as internal_render_mermaid {
                class "Renderer\n<b>Renderer renders a diagram.Diagram as Mermaid classDiagram text. It</b>" as internal_render_mermaid_Renderer {
                    +Render(*diagram.Diagram, render.Options) : string, error
                    +RenderPackageGraph(*diagram.PackageGraph, render.Options) : string, error
                }
            }
            package plantuml as internal_render_plantuml {
                class "Renderer\n<b>Renderer renders a diagram.Diagram as PlantUML class-diagram script,</b>" as internal_render_plantuml_Renderer {
                    +RenderPackageGraph(*diagram.PackageGraph, render.Options) : string, error
                    +Render(*diagram.Diagram, render.Options) : string, error
                }
            }
        }
        package testutil as internal_testutil {
            interface "TestingT\n<b>TestingT is the subset of *testing.T (or *testing.B) that Golden</b>" as internal_testutil_TestingT {
                +Helper()
                +Fatalf(string, ...any)
            }
        }
    }
    internal_diagram_Diagram "1" ..> "*" internal_diagram_Edge
    internal_diagram_Diagram "1" ..> "*" internal_diagram_EdgeReasons
    internal_diagram_Diagram ..> internal_diagram_PackageNode
    internal_diagram_Diagram ..> internal_diagram_edgeKey
    internal_diagram_Edge ..> internal_diagram_EdgeKind
    internal_diagram_Entry ..> internal_diagram_Kind
    internal_diagram_Entry "1" ..> "*" internal_gocode_Field
    internal_diagram_Entry "1" ..> "*" internal_gocode_Function
    internal_diagram_Entry "1" ..> "*" internal_gocode_Method
    internal_diagram_Entry ..> internal_gocode_NamedType
    internal_diagram_Entry "1" ..> "*" internal_gocode_TypeParam
    internal_diagram_PackageGraph "1" ..> "*" internal_diagram_PackageEdge
    internal_diagram_PackageGraph ..> internal_diagram_PackageNode
    internal_diagram_PackageNode "1" ..> "*" internal_diagram_Entry
    internal_diagram_concreteMethodSets "1" ..> "*" internal_gocode_Method
    internal_diagram_edgeKey ..> internal_diagram_EdgeKind
    internal_gocode_Field ..> internal_gocode_TypeRef
    internal_gocode_Function "1" ..> "*" internal_gocode_TypeRef
    internal_gocode_Interface "1" ..> "*" internal_gocode_Method
    internal_gocode_Interface "1" ..> "*" internal_gocode_TypeParam
    internal_gocode_Interface "1" ..> "*" internal_gocode_TypeRef
    internal_gocode_Method "1" ..> "*" internal_gocode_TypeRef
    internal_gocode_NamedType "1" ..> "*" internal_gocode_Constant
    internal_gocode_NamedType "1" ..> "*" internal_gocode_Method
    internal_gocode_NamedType ..> internal_gocode_NamedTypeKind
    internal_gocode_NamedType "1" ..> "*" internal_gocode_TypeParam
    internal_gocode_NamedType "1" ..> "*" internal_gocode_TypeRef
    internal_gocode_Package "1" ..> "*" internal_gocode_Function
    internal_gocode_Package "1" ..> "*" internal_gocode_Import
    internal_gocode_Package "1" ..> "*" internal_gocode_Interface
    internal_gocode_Package "1" ..> "*" internal_gocode_NamedType
    internal_gocode_Package "1" ..> "*" internal_gocode_Struct
    internal_gocode_ParseOptions ..> internal_gocode_BuildContext
    internal_gocode_ParseOptions ..> internal_gocode_GeneratedFileMode
    internal_gocode_Struct "1" ..> "*" internal_gocode_Field
    internal_gocode_Struct "1" ..> "*" internal_gocode_Method
    internal_gocode_Struct "1" ..> "*" internal_gocode_TypeParam
    internal_gocode_Struct "1" ..> "*" internal_gocode_TypeRef
    internal_gocode_TypeParam ..> internal_gocode_TypeRef
    internal_gocode_TypeRef ..> internal_gocode_TypeRelation
    internal_gocode_fileDecls "1" ..> "*" internal_gocode_Constant
    internal_gocode_fileDecls "1" ..> "*" internal_gocode_Function
    internal_gocode_fileDecls "1" ..> "*" internal_gocode_Interface
    internal_gocode_fileDecls "1" ..> "*" internal_gocode_Method
    internal_gocode_fileDecls "1" ..> "*" internal_gocode_NamedType
    internal_gocode_fileDecls "1" ..> "*" internal_gocode_Struct
    internal_gocode_fileDecls "1" ..> "*" internal_gocode_pendingConstant
    internal_gocode_pendingConstant ..> internal_gocode_Constant
    internal_render_PackageGraphRenderer ..> internal_diagram_PackageGraph
    internal_render_PackageGraphRenderer ..> internal_render_Options
    internal_render_Renderer <|-- internal_render_PackageGraphRenderer
    internal_render_Renderer ..> internal_diagram_Diagram
    internal_render_Renderer ..> internal_render_Options
    internal_render_mermaid_Renderer ..> internal_diagram_Diagram
    internal_render_mermaid_Renderer ..> internal_diagram_PackageGraph
    internal_render_mermaid_Renderer ..> internal_render_Options
    internal_render_mermaid_Renderer ..|> internal_render_PackageGraphRenderer : pointer receiver
    internal_render_mermaid_Renderer ..|> internal_render_Renderer : pointer receiver
    internal_render_plantuml_Renderer ..> internal_diagram_Diagram
    internal_render_plantuml_Renderer ..> internal_diagram_PackageGraph
    internal_render_plantuml_Renderer ..> internal_render_Options
    internal_render_plantuml_Renderer ..|> internal_render_PackageGraphRenderer : pointer receiver
    internal_render_plantuml_Renderer ..|> internal_render_Renderer : pointer receiver
@enduml

Download source (type-diagram.puml)