# Go source analysis report

## Scope

- Directory `.`
- Module `github.com/shimabox/diagoram`
- Build context `union`
- Diagnostics `0`

## Analysis settings

- Public API `disabled`
- Unexported identifiers `included`
- Type aliases `included`
- Fields `included`
- Methods `included`
- Interface implementations `included`
- Constants in diagram `not included`
- Package functions in diagram `not included`
- Function filters `none`
- Method filters `none`
- Receiver filters `none`
- Include files `*.go`
- Exclude files `*_test.go`
- Include directories `none`
- Exclude directories `tmp`
- Generated files `included`
- Relation targets `none`
- Members per diagram category `unlimited`
- Dependency reasons `included`

## Structural summary

```text
diagoram: 9 packages, 42 structs, 3 interfaces, 6 named types, 167 functions

cmd/diagoram/
  package functions count=1

internal/cli/
  Options           (struct) fields=35 methods=0
  package functions count=16

internal/diagram/
  Diagram                (struct) fields=3 methods=1  → Edge [field,method-param], EdgeReasons [field,method-result,map-value], PackageNode [field], edgeKey [field,map-key]
  Edge                   (struct) fields=6 methods=0  → EdgeKind [field]
  EdgeKind               (type)   constants=4  methods=0
  EdgeReasons            (type)   constants=11  methods=0
  Entry                  (struct) fields=9 methods=0  → Kind [field], gocode.Field [field], gocode.Function [field], gocode.Method [field], gocode.NamedType [field], gocode.TypeParam [field]
  Kind                   (type)   constants=4  methods=0
  PackageEdge            (struct) fields=4 methods=0
  PackageGraph           (struct) fields=3 methods=0  → PackageEdge [field], PackageNode [field]
  PackageNode            (struct) fields=5 methods=0  → Entry [field]
  RelTargetNotFoundError (struct) fields=2 methods=1
  SummaryOptions         (struct) fields=8 methods=0
  concreteMethodSets     (struct) fields=2 methods=0  → gocode.Method [field,map-value]
  edgeKey                (struct) fields=3 methods=0  → EdgeKind [field]
  entryKey               (struct) fields=2 methods=0
  entrySummaryMeta       (struct) fields=3 methods=0
  package functions      count=58
  pkgPair                (struct) fields=2 methods=0

internal/gocode/
  BuildContext      (struct) fields=3 methods=0
  Constant          (struct) fields=3 methods=0
  Field             (struct) fields=3 methods=0  → TypeRef [field]
  Function          (struct) fields=5 methods=0  → TypeRef [field]
  GeneratedFileMode (type)   constants=3  methods=0
  Import            (struct) fields=2 methods=0
  Interface         (struct) fields=5 methods=0  → Method [field], TypeParam [field], TypeRef [field]
  Method            (struct) fields=5 methods=0  → TypeRef [field]
  NamedType         (struct) fields=9 methods=0  → Constant [field], Method [field], NamedTypeKind [field], TypeParam [field], TypeRef [field]
  NamedTypeKind     (type)   constants=6  methods=0
  Package           (struct) fields=7 methods=0  → Function [field], Import [field], Interface [field], NamedType [field], Struct [field]
  ParseOptions      (struct) fields=6 methods=0  → BuildContext [field], GeneratedFileMode [field]
  Struct            (struct) fields=6 methods=0  → Field [field], Method [field], TypeParam [field], TypeRef [field]
  TypeParam         (struct) fields=2 methods=0  → TypeRef [field]
  TypeRef           (struct) fields=8 methods=0  → TypeRelation [field]
  TypeRelation      (type)   constants=4  methods=0
  Warning           (struct) fields=3 methods=1
  dirFiles          (struct) fields=3 methods=0
  fileDecls         (struct) fields=7 methods=0  → Constant [field,map-value], Function [field], Interface [field], Method [field,map-value], NamedType [field], Struct [field], pendingConstant [field]
  package functions count=35
  pendingConstant   (struct) fields=2 methods=0  → Constant [field]

internal/portal/
  Artifacts         (struct) fields=6 methods=0
  Meta              (struct) fields=3 methods=0
  Result            (struct) fields=1 methods=0
  indexPageData     (struct) fields=3 methods=0
  mermaidPageData   (struct) fields=5 methods=0
  package functions count=11
  pumlPageData      (struct) fields=3 methods=0
  reportPageData    (struct) fields=3 methods=0
  textPageData      (struct) fields=3 methods=0

internal/render/
  Options              (struct)    fields=11 methods=0
  PackageGraphRenderer (interface) methods=1  → Options [method-param], Renderer [embedding], diagram.PackageGraph [method-param]  ← implements: *mermaid.Renderer, *plantuml.Renderer
  Renderer             (interface) methods=1  → Options [method-param], diagram.Diagram [method-param]  ← implements: *mermaid.Renderer, *plantuml.Renderer

internal/render/mermaid/
  Renderer          (struct) fields=0 methods=2  → diagram.Diagram [method-param], diagram.PackageGraph [method-param], render.Options [method-param]
  package functions count=23

internal/render/plantuml/
  Renderer          (struct) fields=0 methods=2  → diagram.Diagram [method-param], diagram.PackageGraph [method-param], render.Options [method-param]
  package functions count=22

internal/testutil/
  TestingT          (interface) methods=2
  package functions count=1
```

## Types and relationships

```mermaid
classDiagram
    namespace internal_cli {
        class internal_cli_Options["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
        }
    }
    namespace internal_diagram {
        class internal_diagram_Diagram["Diagram"] {
            +Root *PackageNode
            +Edges Edge[]
            -edgeReasons Map~edgeKey,EdgeReasons~
            +ReasonsFor(Edge) EdgeReasons
        }
        class internal_diagram_Edge["Edge"] {
            +From string
            +To string
            +Kind EdgeKind
            +ToCollection bool
            +Unexported bool
            +PointerOnly bool
        }
        class internal_diagram_EdgeKind["EdgeKind"] {
            <<type>>
            type int
        }
        class internal_diagram_EdgeReasons["EdgeReasons"] {
            <<type>>
            type uint32
        }
        class internal_diagram_Entry["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 internal_diagram_Kind["Kind"] {
            <<type>>
            type int
        }
        class internal_diagram_PackageEdge["PackageEdge"] {
            +From string
            +To string
            +Mutual bool
            +External bool
        }
        class internal_diagram_PackageGraph["PackageGraph"] {
            +Root *PackageNode
            +Edges PackageEdge[]
            +HasRootPackage bool
        }
        class internal_diagram_PackageNode["PackageNode"] {
            +Name string
            +Path string
            +PackageName string
            +Children *PackageNode[]
            +Entries *Entry[]
        }
        class internal_diagram_RelTargetNotFoundError["RelTargetNotFoundError"] {
            +Missing string[]
            +Candidates string[]
            +Error() string
        }
        class internal_diagram_SummaryOptions["SummaryOptions"] {
            +HideUnexported bool
            +DisableFields bool
            +DisableMethods bool
            +DisableImplements bool
            +FunctionPatterns string[]
            +MethodPatterns string[]
            +ReceiverPatterns string[]
            +ShowEdgeReasons bool
        }
        class internal_diagram_concreteMethodSets["concreteMethodSets"] {
            -value Map~string,gocode.Method~
            -pointer Map~string,gocode.Method~
        }
        class internal_diagram_edgeKey["edgeKey"] {
            +From string
            +To string
            +Kind EdgeKind
        }
        class internal_diagram_entryKey["entryKey"] {
            +Dir string
            +Name string
        }
        class internal_diagram_entrySummaryMeta["entrySummaryMeta"] {
            -name string
            -dir string
            -packageName string
        }
        class internal_diagram_pkgPair["pkgPair"] {
            +From string
            +To string
        }
    }
    namespace internal_gocode {
        class internal_gocode_BuildContext["BuildContext"] {
            +GOOS string
            +GOARCH string
            +Tags string[]
        }
        class internal_gocode_Constant["Constant"] {
            +Name string
            +Doc string
            +Exported bool
        }
        class internal_gocode_Field["Field"] {
            +Name string
            +Type TypeRef
            +Exported bool
        }
        class internal_gocode_Function["Function"] {
            +Name string
            +Doc string
            +Params TypeRef[]
            +Results TypeRef[]
            +Exported bool
        }
        class internal_gocode_GeneratedFileMode["GeneratedFileMode"] {
            <<type>>
            type int
        }
        class internal_gocode_Import["Import"] {
            +Alias string
            +Path string
        }
        class internal_gocode_Interface["Interface"] {
            +Name string
            +TypeParams TypeParam[]
            +Doc string
            +Methods Method[]
            +Embeds TypeRef[]
        }
        class internal_gocode_Method["Method"] {
            +Name string
            +Params TypeRef[]
            +Results TypeRef[]
            +Exported bool
            +PointerReceiver bool
        }
        class internal_gocode_NamedType["NamedType"] {
            +Name string
            +Doc string
            +TypeParams TypeParam[]
            +Kind NamedTypeKind
            +Underlying TypeRef
            +Params TypeRef[]
            +Results TypeRef[]
            +Methods Method[]
            +Constants Constant[]
        }
        class internal_gocode_NamedTypeKind["NamedTypeKind"] {
            <<type>>
            type int
        }
        class internal_gocode_Package["Package"] {
            +Dir string
            +Name string
            +Imports Import[]
            +Structs *Struct[]
            +Interfaces *Interface[]
            +NamedTypes *NamedType[]
            +Functions Function[]
        }
        class internal_gocode_ParseOptions["ParseOptions"] {
            +Includes string[]
            +Excludes string[]
            +ExcludeDirs string[]
            +IncludeDirs string[]
            +GeneratedFiles GeneratedFileMode
            +BuildContext *BuildContext
        }
        class internal_gocode_Struct["Struct"] {
            +Name string
            +TypeParams TypeParam[]
            +Doc string
            +Fields Field[]
            +Embeds TypeRef[]
            +Methods Method[]
        }
        class internal_gocode_TypeParam["TypeParam"] {
            +Name string
            +Constraint TypeRef
        }
        class internal_gocode_TypeRef["TypeRef"] {
            +PkgName string
            +Name string
            +IsSlice bool
            +IsMap bool
            +IsPtr bool
            +String string
            +Related TypeRef[]
            +Relation TypeRelation
        }
        class internal_gocode_TypeRelation["TypeRelation"] {
            <<type>>
            type int
        }
        class internal_gocode_Warning["Warning"] {
            +File string
            +Err error
            +BuildExpression string
            +Error() string
        }
        class internal_gocode_dirFiles["dirFiles"] {
            +Dir string
            +AbsDir string
            +Files string[]
        }
        class internal_gocode_fileDecls["fileDecls"] {
            +Structs *Struct[]
            +Interfaces *Interface[]
            +NamedTypes *NamedType[]
            +Methods Map~string,Method[]~
            +Constants Map~string,Constant[]~
            +PendingConstants pendingConstant[]
            +Functions Function[]
        }
        class internal_gocode_pendingConstant["pendingConstant"] {
            +Constant Constant
            +RefName string
        }
    }
    namespace internal_portal {
        class internal_portal_Artifacts["Artifacts"] {
            +ClassMermaid string
            +PackageMermaid string
            +ClassPlantUML string
            +PackagePlantUML string
            +Summary string
            +ReportMarkdown string
        }
        class internal_portal_Meta["Meta"] {
            +Dir string
            +ModulePath string
            +Version string
        }
        class internal_portal_Result["Result"] {
            +IndexPath string
        }
        class internal_portal_indexPageData["indexPageData"] {
            +Dir string
            +ModulePath string
            +Version string
        }
        class internal_portal_mermaidPageData["mermaidPageData"] {
            +Title string
            +SourceFile string
            +Source string
            +Skipped bool
            +SkipReason string
        }
        class internal_portal_pumlPageData["pumlPageData"] {
            +Title string
            +SourceFile string
            +Source string
        }
        class internal_portal_reportPageData["reportPageData"] {
            +Title string
            +SourceFile string
            +Markdown string
        }
        class internal_portal_textPageData["textPageData"] {
            +Title string
            +SourceFile string
            +Content string
        }
    }
    namespace internal_render {
        class internal_render_Options["Options"] {
            +HideUnexported bool
            +ShowConstants bool
            +ShowFunctions bool
            +FunctionPatterns string[]
            +MethodPatterns string[]
            +ReceiverPatterns string[]
            +MaxMembers int
            +ShowEdgeReasons bool
            +DisableFields bool
            +DisableMethods bool
            +DisableImplements bool
        }
        class internal_render_PackageGraphRenderer["PackageGraphRenderer"] {
            <<interface>>
            +RenderPackageGraph(*diagram.PackageGraph, Options) string, error
        }
        class internal_render_Renderer["Renderer"] {
            <<interface>>
            +Render(*diagram.Diagram, Options) string, error
        }
    }
    namespace internal_render_mermaid {
        class internal_render_mermaid_Renderer["Renderer"] {
            +Render(*diagram.Diagram, render.Options) string, error
            +RenderPackageGraph(*diagram.PackageGraph, render.Options) string, error
        }
    }
    namespace internal_render_plantuml {
        class internal_render_plantuml_Renderer["Renderer"] {
            +RenderPackageGraph(*diagram.PackageGraph, render.Options) string, error
            +Render(*diagram.Diagram, render.Options) string, error
        }
    }
    namespace internal_testutil {
        class internal_testutil_TestingT["TestingT"] {
            <<interface>>
            +Helper()
            +Fatalf(string, ...any)
        }
    }
    internal_diagram_Diagram ..> internal_diagram_Edge : *, field, method-param
    internal_diagram_Diagram ..> internal_diagram_EdgeReasons : *, field, method-result, map-value
    internal_diagram_Diagram ..> internal_diagram_PackageNode : field
    internal_diagram_Diagram ..> internal_diagram_edgeKey : field, map-key
    internal_diagram_Edge ..> internal_diagram_EdgeKind : field
    internal_diagram_Entry ..> internal_diagram_Kind : field
    internal_diagram_Entry ..> internal_gocode_Field : *, field
    internal_diagram_Entry ..> internal_gocode_Function : *, field
    internal_diagram_Entry ..> internal_gocode_Method : *, field
    internal_diagram_Entry ..> internal_gocode_NamedType : field
    internal_diagram_Entry ..> internal_gocode_TypeParam : *, field
    internal_diagram_PackageGraph ..> internal_diagram_PackageEdge : *, field
    internal_diagram_PackageGraph ..> internal_diagram_PackageNode : field
    internal_diagram_PackageNode ..> internal_diagram_Entry : *, field
    internal_diagram_concreteMethodSets ..> internal_gocode_Method : *, field, map-value
    internal_diagram_edgeKey ..> internal_diagram_EdgeKind : field
    internal_gocode_Field ..> internal_gocode_TypeRef : field
    internal_gocode_Function ..> internal_gocode_TypeRef : *, field
    internal_gocode_Interface ..> internal_gocode_Method : *, field
    internal_gocode_Interface ..> internal_gocode_TypeParam : *, field
    internal_gocode_Interface ..> internal_gocode_TypeRef : *, field
    internal_gocode_Method ..> internal_gocode_TypeRef : *, field
    internal_gocode_NamedType ..> internal_gocode_Constant : *, field
    internal_gocode_NamedType ..> internal_gocode_Method : *, field
    internal_gocode_NamedType ..> internal_gocode_NamedTypeKind : field
    internal_gocode_NamedType ..> internal_gocode_TypeParam : *, field
    internal_gocode_NamedType ..> internal_gocode_TypeRef : *, field
    internal_gocode_Package ..> internal_gocode_Function : *, field
    internal_gocode_Package ..> internal_gocode_Import : *, field
    internal_gocode_Package ..> internal_gocode_Interface : *, field
    internal_gocode_Package ..> internal_gocode_NamedType : *, field
    internal_gocode_Package ..> internal_gocode_Struct : *, field
    internal_gocode_ParseOptions ..> internal_gocode_BuildContext : field
    internal_gocode_ParseOptions ..> internal_gocode_GeneratedFileMode : field
    internal_gocode_Struct ..> internal_gocode_Field : *, field
    internal_gocode_Struct ..> internal_gocode_Method : *, field
    internal_gocode_Struct ..> internal_gocode_TypeParam : *, field
    internal_gocode_Struct ..> internal_gocode_TypeRef : *, field
    internal_gocode_TypeParam ..> internal_gocode_TypeRef : field
    internal_gocode_TypeRef ..> internal_gocode_TypeRelation : field
    internal_gocode_fileDecls ..> internal_gocode_Constant : *, field, map-value
    internal_gocode_fileDecls ..> internal_gocode_Function : *, field
    internal_gocode_fileDecls ..> internal_gocode_Interface : *, field
    internal_gocode_fileDecls ..> internal_gocode_Method : *, field, map-value
    internal_gocode_fileDecls ..> internal_gocode_NamedType : *, field
    internal_gocode_fileDecls ..> internal_gocode_Struct : *, field
    internal_gocode_fileDecls ..> internal_gocode_pendingConstant : *, field
    internal_gocode_pendingConstant ..> internal_gocode_Constant : field
    internal_render_PackageGraphRenderer ..> internal_diagram_PackageGraph : method-param
    internal_render_PackageGraphRenderer ..> internal_render_Options : method-param
    internal_render_PackageGraphRenderer --|> internal_render_Renderer : embedding
    internal_render_Renderer ..> internal_diagram_Diagram : method-param
    internal_render_Renderer ..> internal_render_Options : method-param
    internal_render_mermaid_Renderer ..> internal_diagram_Diagram : method-param
    internal_render_mermaid_Renderer ..> internal_diagram_PackageGraph : method-param
    internal_render_mermaid_Renderer ..> internal_render_Options : method-param
    internal_render_mermaid_Renderer ..|> internal_render_PackageGraphRenderer : pointer receiver, method-set
    internal_render_mermaid_Renderer ..|> internal_render_Renderer : pointer receiver, method-set
    internal_render_plantuml_Renderer ..> internal_diagram_Diagram : method-param
    internal_render_plantuml_Renderer ..> internal_diagram_PackageGraph : method-param
    internal_render_plantuml_Renderer ..> internal_render_Options : method-param
    internal_render_plantuml_Renderer ..|> internal_render_PackageGraphRenderer : pointer receiver, method-set
    internal_render_plantuml_Renderer ..|> internal_render_Renderer : pointer receiver, method-set
```

## Diagnostics

None
