docs: update architecture diagrams

This commit is contained in:
Archlens Bot
2026-06-16 14:46:17 +00:00
parent 55a723d192
commit 39a87520a1
6 changed files with 329 additions and 326 deletions

View File

@@ -1,7 +1,10 @@
graph TD
Adapters[Adapters]
Domain[Domain]
Presentation[Presentation]
Adapters[Adapters]
Application[Application]
Application --> Domain
Adapters --> Domain
Application --> Domain
Presentation --> Domain
Presentation --> Adapters
Presentation --> Application

View File

@@ -13,16 +13,16 @@ graph TD
archlens_cargo_workspace[archlens-cargo-workspace]
end
archlens_application --> archlens_domain
archlens --> archlens_ascii
archlens --> archlens_toml_config
archlens --> archlens_file_writer
archlens --> archlens_tree_sitter
archlens --> archlens_cargo_workspace
archlens --> archlens_stdout_writer
archlens --> archlens_ascii
archlens --> archlens_domain
archlens --> archlens_application
archlens --> archlens_mermaid
archlens --> archlens_tree_sitter
archlens --> archlens_file_writer
archlens --> archlens_stdout_writer
archlens --> archlens_walkdir
archlens --> archlens_mermaid
archlens_tree_sitter --> archlens_domain
archlens_walkdir --> archlens_domain
archlens_mermaid --> archlens_domain

View File

@@ -1,31 +1,5 @@
classDiagram
namespace Adapters {
class AsciiRenderer
AsciiRenderer : +new()
AsciiRenderer : -format_kind()
class CargoWorkspaceAnalyzer
CargoWorkspaceAnalyzer : +new()
class WorkspaceToml
<<private>> WorkspaceToml
WorkspaceToml : workspace: Option
class WorkspaceSection
<<private>> WorkspaceSection
WorkspaceSection : members: Vec
class MemberToml
<<private>> MemberToml
MemberToml : package: Option
MemberToml : dependencies: HashMap
class PackageSection
<<private>> PackageSection
PackageSection : name: String
class StdoutOutputWriter
StdoutOutputWriter : +new()
class FileOutputWriter
FileOutputWriter : output_path: OutputPath
FileOutputWriter : +new()
FileOutputWriter : +single_file()
class OutputPath
<<private>> OutputPath
class MermaidRenderer
MermaidRenderer : level: DiagramLevel
MermaidRenderer : +new()
@@ -37,18 +11,29 @@ classDiagram
MermaidRenderer : -render_module_flowchart()
MermaidRenderer : -render_project_flowchart()
MermaidRenderer : -sanitize_id()
class LanguageExtractor
class AsciiRenderer
AsciiRenderer : +new()
AsciiRenderer : -format_kind()
class WalkdirDiscovery
WalkdirDiscovery : +new()
WalkdirDiscovery : -detect_language()
WalkdirDiscovery : -is_excluded()
class TreeSitterAnalyzer
TreeSitterAnalyzer : rust: RustExtractor
TreeSitterAnalyzer : python: PythonExtractor
TreeSitterAnalyzer : +new()
TreeSitterAnalyzer : -extractor_for()
class LanguageExtractor
class RustExtractor
class PythonExtractor
class WalkdirDiscovery
WalkdirDiscovery : +new()
WalkdirDiscovery : -detect_language()
WalkdirDiscovery : -is_excluded()
class FileOutputWriter
FileOutputWriter : output_path: OutputPath
FileOutputWriter : +new()
FileOutputWriter : +single_file()
class OutputPath
<<private>> OutputPath
class StdoutOutputWriter
StdoutOutputWriter : +new()
class RawConfig
<<private>> RawConfig
RawConfig : analysis: RawAnalysis
@@ -67,12 +52,27 @@ classDiagram
TomlConfigLoader : raw: RawConfig
TomlConfigLoader : +from_path()
TomlConfigLoader : -parse_level()
class CargoWorkspaceAnalyzer
CargoWorkspaceAnalyzer : +new()
class WorkspaceToml
<<private>> WorkspaceToml
WorkspaceToml : workspace: Option
class WorkspaceSection
<<private>> WorkspaceSection
WorkspaceSection : members: Vec
class MemberToml
<<private>> MemberToml
MemberToml : package: Option
MemberToml : dependencies: HashMap
class PackageSection
<<private>> PackageSection
PackageSection : name: String
}
FileOutputWriter --> OutputPath
TreeSitterAnalyzer --> RustExtractor
TreeSitterAnalyzer --> PythonExtractor
RustExtractor <|-- LanguageExtractor
PythonExtractor <|-- LanguageExtractor
FileOutputWriter --> OutputPath
RawConfig --> RawAnalysis
RawConfig --> RawOutput
TomlConfigLoader --> RawConfig

View File

@@ -10,6 +10,14 @@ classDiagram
AnalyzeCodebaseResult : warnings: Vec
AnalyzeCodebaseResult : +graph()
AnalyzeCodebaseResult : +warnings()
class FakeFileDiscovery
FakeFileDiscovery : files: Vec
FakeFileDiscovery : +new()
FakeFileDiscovery : +empty()
class FakeOutputWriter
FakeOutputWriter : written: RefCell
FakeOutputWriter : +new()
FakeOutputWriter : +written_outputs()
class FakeDiagramRenderer
FakeDiagramRenderer : +new()
class FakeResponse
@@ -19,12 +27,4 @@ classDiagram
FakeSourceAnalyzer : +new()
FakeSourceAnalyzer : +with_result()
FakeSourceAnalyzer : +with_error()
class FakeFileDiscovery
FakeFileDiscovery : files: Vec
FakeFileDiscovery : +new()
FakeFileDiscovery : +empty()
class FakeOutputWriter
FakeOutputWriter : written: RefCell
FakeOutputWriter : +new()
FakeOutputWriter : +written_outputs()
}

View File

@@ -1,5 +1,74 @@
classDiagram
namespace Domain {
class OutputConfig
OutputConfig : split_by_module: bool
OutputConfig : output_path: Option
OutputConfig : +with_split_by_module()
OutputConfig : +with_output_path()
OutputConfig : +split_by_module()
OutputConfig : +output_path()
class DiagramLevel
class RenderOutput
RenderOutput : files: Vec
RenderOutput : +new()
RenderOutput : +single()
RenderOutput : +files()
class RenderedFile
RenderedFile : name: String
RenderedFile : content: String
RenderedFile : +new()
RenderedFile : +name()
RenderedFile : +content()
class SourceFile
SourceFile : path: FilePath
SourceFile : language: Language
SourceFile : +new()
SourceFile : +path()
SourceFile : +language()
class ModuleName
ModuleName : +new()
ModuleName : +from_path()
ModuleName : +from_directory_group()
ModuleName : +capitalize()
ModuleName : +as_str()
class Language
Language : +name()
class FilePath
FilePath : +new()
FilePath : +as_str()
class RelationshipKind
class Visibility
class CodeElementKind
class AnalysisConfig
AnalysisConfig : excludes: Vec
AnalysisConfig : level: DiagramLevel
AnalysisConfig : module_mappings: HashMap
AnalysisConfig : scope: Option
AnalysisConfig : +with_excludes()
AnalysisConfig : +with_level()
AnalysisConfig : +with_module_mappings()
AnalysisConfig : +excludes()
AnalysisConfig : +level()
AnalysisConfig : +with_scope()
AnalysisConfig : +module_mappings()
AnalysisConfig : +scope()
class AnalysisResult
AnalysisResult : elements: Vec
AnalysisResult : relationships: Vec
AnalysisResult : warnings: Vec
AnalysisResult : +new()
AnalysisResult : +empty()
AnalysisResult : +elements()
AnalysisResult : +relationships()
AnalysisResult : +warnings()
class AnalysisWarning
AnalysisWarning : file_path: FilePath
AnalysisWarning : line: usize
AnalysisWarning : message: String
AnalysisWarning : +new()
AnalysisWarning : +file_path()
AnalysisWarning : +line()
AnalysisWarning : +message()
class Relationship
Relationship : source: String
Relationship : target: String
@@ -39,82 +108,12 @@ classDiagram
CodeElement : +with_methods()
CodeElement : +fields()
CodeElement : +methods()
class DomainError
class DiagramRenderer
class SourceAnalyzer
class ConfigLoader
class FileDiscovery
class ConfigLoader
class ProjectAnalyzer
class OutputWriter
class AnalysisResult
AnalysisResult : elements: Vec
AnalysisResult : relationships: Vec
AnalysisResult : warnings: Vec
AnalysisResult : +new()
AnalysisResult : +empty()
AnalysisResult : +elements()
AnalysisResult : +relationships()
AnalysisResult : +warnings()
class AnalysisConfig
AnalysisConfig : excludes: Vec
AnalysisConfig : level: DiagramLevel
AnalysisConfig : module_mappings: HashMap
AnalysisConfig : scope: Option
AnalysisConfig : +with_excludes()
AnalysisConfig : +with_level()
AnalysisConfig : +with_module_mappings()
AnalysisConfig : +excludes()
AnalysisConfig : +level()
AnalysisConfig : +with_scope()
AnalysisConfig : +module_mappings()
AnalysisConfig : +scope()
class AnalysisWarning
AnalysisWarning : file_path: FilePath
AnalysisWarning : line: usize
AnalysisWarning : message: String
AnalysisWarning : +new()
AnalysisWarning : +file_path()
AnalysisWarning : +line()
AnalysisWarning : +message()
class CodeElementKind
class RelationshipKind
class Visibility
class DiagramLevel
class OutputConfig
OutputConfig : split_by_module: bool
OutputConfig : output_path: Option
OutputConfig : +with_split_by_module()
OutputConfig : +with_output_path()
OutputConfig : +split_by_module()
OutputConfig : +output_path()
class RenderedFile
RenderedFile : name: String
RenderedFile : content: String
RenderedFile : +new()
RenderedFile : +name()
RenderedFile : +content()
class RenderOutput
RenderOutput : files: Vec
RenderOutput : +new()
RenderOutput : +single()
RenderOutput : +files()
class ModuleName
ModuleName : +new()
ModuleName : +from_path()
ModuleName : +from_directory_group()
ModuleName : +capitalize()
ModuleName : +as_str()
class Language
Language : +name()
class SourceFile
SourceFile : path: FilePath
SourceFile : language: Language
SourceFile : +new()
SourceFile : +path()
SourceFile : +language()
class FilePath
FilePath : +new()
FilePath : +as_str()
class DiagramRenderer
class SourceAnalyzer
class CodeGraph
CodeGraph : elements: Vec
CodeGraph : relationships: Vec
@@ -128,12 +127,13 @@ classDiagram
CodeGraph : +resolve_relationships()
CodeGraph : +filter_external_imports()
CodeGraph : +subgraph_by_module()
class DomainError
}
SourceFile --> FilePath
SourceFile --> Language
AnalysisConfig --> DiagramLevel
AnalysisWarning --> FilePath
Relationship --> RelationshipKind
CodeElement --> CodeElementKind
CodeElement --> FilePath
CodeElement --> Visibility
AnalysisConfig --> DiagramLevel
AnalysisWarning --> FilePath
SourceFile --> FilePath
SourceFile --> Language
CodeElement --> Visibility

View File

@@ -1,50 +1,143 @@
classDiagram
namespace Presentation {
class Cli
Cli : command: Option
Cli : path: PathBuf
Cli : level: String
Cli : format: String
Cli : output: Option
Cli : config: Option
Cli : scope: Option
Cli : exclude: Vec
Cli : split_by_module: bool
Cli : strict: bool
Cli : check: bool
Cli : verbose: u8
class Command
}
namespace Application {
class AnalyzeCodebase
AnalyzeCodebase : file_discovery: F
AnalyzeCodebase : source_analyzer: S
AnalyzeCodebase : +new()
AnalyzeCodebase : +execute()
class AnalyzeCodebaseResult
AnalyzeCodebaseResult : graph: CodeGraph
AnalyzeCodebaseResult : warnings: Vec
AnalyzeCodebaseResult : +graph()
AnalyzeCodebaseResult : +warnings()
class FakeDiagramRenderer
FakeDiagramRenderer : +new()
class FakeResponse
<<private>> FakeResponse
class FakeSourceAnalyzer
FakeSourceAnalyzer : results: HashMap
FakeSourceAnalyzer : +new()
FakeSourceAnalyzer : +with_result()
FakeSourceAnalyzer : +with_error()
class FakeFileDiscovery
FakeFileDiscovery : files: Vec
FakeFileDiscovery : +new()
FakeFileDiscovery : +empty()
class FakeOutputWriter
FakeOutputWriter : written: RefCell
FakeOutputWriter : +new()
FakeOutputWriter : +written_outputs()
namespace Adapters {
class MermaidRenderer
MermaidRenderer : level: DiagramLevel
MermaidRenderer : +new()
MermaidRenderer : +with_level()
MermaidRenderer : -format_element_name()
MermaidRenderer : -format_visibility()
MermaidRenderer : -render_class_diagram()
MermaidRenderer : -push_class_lines()
MermaidRenderer : -render_module_flowchart()
MermaidRenderer : -render_project_flowchart()
MermaidRenderer : -sanitize_id()
class AsciiRenderer
AsciiRenderer : +new()
AsciiRenderer : -format_kind()
class WalkdirDiscovery
WalkdirDiscovery : +new()
WalkdirDiscovery : -detect_language()
WalkdirDiscovery : -is_excluded()
class TreeSitterAnalyzer
TreeSitterAnalyzer : rust: RustExtractor
TreeSitterAnalyzer : python: PythonExtractor
TreeSitterAnalyzer : +new()
TreeSitterAnalyzer : -extractor_for()
class LanguageExtractor
class RustExtractor
class PythonExtractor
class FileOutputWriter
FileOutputWriter : output_path: OutputPath
FileOutputWriter : +new()
FileOutputWriter : +single_file()
class OutputPath
<<private>> OutputPath
class StdoutOutputWriter
StdoutOutputWriter : +new()
class RawConfig
<<private>> RawConfig
RawConfig : analysis: RawAnalysis
RawConfig : output: RawOutput
RawConfig : modules: HashMap
class RawAnalysis
<<private>> RawAnalysis
RawAnalysis : exclude: Vec
RawAnalysis : level: Option
class RawOutput
<<private>> RawOutput
RawOutput : format: Option
RawOutput : path: Option
RawOutput : split_by_module: bool
class TomlConfigLoader
TomlConfigLoader : raw: RawConfig
TomlConfigLoader : +from_path()
TomlConfigLoader : -parse_level()
class CargoWorkspaceAnalyzer
CargoWorkspaceAnalyzer : +new()
class WorkspaceToml
<<private>> WorkspaceToml
WorkspaceToml : workspace: Option
class WorkspaceSection
<<private>> WorkspaceSection
WorkspaceSection : members: Vec
class MemberToml
<<private>> MemberToml
MemberToml : package: Option
MemberToml : dependencies: HashMap
class PackageSection
<<private>> PackageSection
PackageSection : name: String
}
namespace Domain {
class OutputConfig
OutputConfig : split_by_module: bool
OutputConfig : output_path: Option
OutputConfig : +with_split_by_module()
OutputConfig : +with_output_path()
OutputConfig : +split_by_module()
OutputConfig : +output_path()
class DiagramLevel
class RenderOutput
RenderOutput : files: Vec
RenderOutput : +new()
RenderOutput : +single()
RenderOutput : +files()
class RenderedFile
RenderedFile : name: String
RenderedFile : content: String
RenderedFile : +new()
RenderedFile : +name()
RenderedFile : +content()
class SourceFile
SourceFile : path: FilePath
SourceFile : language: Language
SourceFile : +new()
SourceFile : +path()
SourceFile : +language()
class ModuleName
ModuleName : +new()
ModuleName : +from_path()
ModuleName : +from_directory_group()
ModuleName : +capitalize()
ModuleName : +as_str()
class Language
Language : +name()
class FilePath
FilePath : +new()
FilePath : +as_str()
class RelationshipKind
class Visibility
class CodeElementKind
class AnalysisConfig
AnalysisConfig : excludes: Vec
AnalysisConfig : level: DiagramLevel
AnalysisConfig : module_mappings: HashMap
AnalysisConfig : scope: Option
AnalysisConfig : +with_excludes()
AnalysisConfig : +with_level()
AnalysisConfig : +with_module_mappings()
AnalysisConfig : +excludes()
AnalysisConfig : +level()
AnalysisConfig : +with_scope()
AnalysisConfig : +module_mappings()
AnalysisConfig : +scope()
class AnalysisResult
AnalysisResult : elements: Vec
AnalysisResult : relationships: Vec
AnalysisResult : warnings: Vec
AnalysisResult : +new()
AnalysisResult : +empty()
AnalysisResult : +elements()
AnalysisResult : +relationships()
AnalysisResult : +warnings()
class AnalysisWarning
AnalysisWarning : file_path: FilePath
AnalysisWarning : line: usize
AnalysisWarning : message: String
AnalysisWarning : +new()
AnalysisWarning : +file_path()
AnalysisWarning : +line()
AnalysisWarning : +message()
class Relationship
Relationship : source: String
Relationship : target: String
@@ -84,82 +177,12 @@ classDiagram
CodeElement : +with_methods()
CodeElement : +fields()
CodeElement : +methods()
class DomainError
class DiagramRenderer
class SourceAnalyzer
class ConfigLoader
class FileDiscovery
class ConfigLoader
class ProjectAnalyzer
class OutputWriter
class AnalysisResult
AnalysisResult : elements: Vec
AnalysisResult : relationships: Vec
AnalysisResult : warnings: Vec
AnalysisResult : +new()
AnalysisResult : +empty()
AnalysisResult : +elements()
AnalysisResult : +relationships()
AnalysisResult : +warnings()
class AnalysisConfig
AnalysisConfig : excludes: Vec
AnalysisConfig : level: DiagramLevel
AnalysisConfig : module_mappings: HashMap
AnalysisConfig : scope: Option
AnalysisConfig : +with_excludes()
AnalysisConfig : +with_level()
AnalysisConfig : +with_module_mappings()
AnalysisConfig : +excludes()
AnalysisConfig : +level()
AnalysisConfig : +with_scope()
AnalysisConfig : +module_mappings()
AnalysisConfig : +scope()
class AnalysisWarning
AnalysisWarning : file_path: FilePath
AnalysisWarning : line: usize
AnalysisWarning : message: String
AnalysisWarning : +new()
AnalysisWarning : +file_path()
AnalysisWarning : +line()
AnalysisWarning : +message()
class CodeElementKind
class RelationshipKind
class Visibility
class DiagramLevel
class OutputConfig
OutputConfig : split_by_module: bool
OutputConfig : output_path: Option
OutputConfig : +with_split_by_module()
OutputConfig : +with_output_path()
OutputConfig : +split_by_module()
OutputConfig : +output_path()
class RenderedFile
RenderedFile : name: String
RenderedFile : content: String
RenderedFile : +new()
RenderedFile : +name()
RenderedFile : +content()
class RenderOutput
RenderOutput : files: Vec
RenderOutput : +new()
RenderOutput : +single()
RenderOutput : +files()
class ModuleName
ModuleName : +new()
ModuleName : +from_path()
ModuleName : +from_directory_group()
ModuleName : +capitalize()
ModuleName : +as_str()
class Language
Language : +name()
class SourceFile
SourceFile : path: FilePath
SourceFile : language: Language
SourceFile : +new()
SourceFile : +path()
SourceFile : +language()
class FilePath
FilePath : +new()
FilePath : +as_str()
class DiagramRenderer
class SourceAnalyzer
class CodeGraph
CodeGraph : elements: Vec
CodeGraph : relationships: Vec
@@ -173,103 +196,80 @@ classDiagram
CodeGraph : +resolve_relationships()
CodeGraph : +filter_external_imports()
CodeGraph : +subgraph_by_module()
class DomainError
}
namespace Adapters {
class AsciiRenderer
AsciiRenderer : +new()
AsciiRenderer : -format_kind()
class CargoWorkspaceAnalyzer
CargoWorkspaceAnalyzer : +new()
class WorkspaceToml
<<private>> WorkspaceToml
WorkspaceToml : workspace: Option
class WorkspaceSection
<<private>> WorkspaceSection
WorkspaceSection : members: Vec
class MemberToml
<<private>> MemberToml
MemberToml : package: Option
MemberToml : dependencies: HashMap
class PackageSection
<<private>> PackageSection
PackageSection : name: String
class StdoutOutputWriter
StdoutOutputWriter : +new()
class FileOutputWriter
FileOutputWriter : output_path: OutputPath
FileOutputWriter : +new()
FileOutputWriter : +single_file()
class OutputPath
<<private>> OutputPath
class MermaidRenderer
MermaidRenderer : level: DiagramLevel
MermaidRenderer : +new()
MermaidRenderer : +with_level()
MermaidRenderer : -format_element_name()
MermaidRenderer : -format_visibility()
MermaidRenderer : -render_class_diagram()
MermaidRenderer : -push_class_lines()
MermaidRenderer : -render_module_flowchart()
MermaidRenderer : -render_project_flowchart()
MermaidRenderer : -sanitize_id()
class LanguageExtractor
class TreeSitterAnalyzer
TreeSitterAnalyzer : rust: RustExtractor
TreeSitterAnalyzer : python: PythonExtractor
TreeSitterAnalyzer : +new()
TreeSitterAnalyzer : -extractor_for()
class RustExtractor
class PythonExtractor
class WalkdirDiscovery
WalkdirDiscovery : +new()
WalkdirDiscovery : -detect_language()
WalkdirDiscovery : -is_excluded()
class RawConfig
<<private>> RawConfig
RawConfig : analysis: RawAnalysis
RawConfig : output: RawOutput
RawConfig : modules: HashMap
class RawAnalysis
<<private>> RawAnalysis
RawAnalysis : exclude: Vec
RawAnalysis : level: Option
class RawOutput
<<private>> RawOutput
RawOutput : format: Option
RawOutput : path: Option
RawOutput : split_by_module: bool
class TomlConfigLoader
TomlConfigLoader : raw: RawConfig
TomlConfigLoader : +from_path()
TomlConfigLoader : -parse_level()
namespace Application {
class AnalyzeCodebase
AnalyzeCodebase : file_discovery: F
AnalyzeCodebase : source_analyzer: S
AnalyzeCodebase : +new()
AnalyzeCodebase : +execute()
class AnalyzeCodebaseResult
AnalyzeCodebaseResult : graph: CodeGraph
AnalyzeCodebaseResult : warnings: Vec
AnalyzeCodebaseResult : +graph()
AnalyzeCodebaseResult : +warnings()
class FakeFileDiscovery
FakeFileDiscovery : files: Vec
FakeFileDiscovery : +new()
FakeFileDiscovery : +empty()
class FakeOutputWriter
FakeOutputWriter : written: RefCell
FakeOutputWriter : +new()
FakeOutputWriter : +written_outputs()
class FakeDiagramRenderer
FakeDiagramRenderer : +new()
class FakeResponse
<<private>> FakeResponse
class FakeSourceAnalyzer
FakeSourceAnalyzer : results: HashMap
FakeSourceAnalyzer : +new()
FakeSourceAnalyzer : +with_result()
FakeSourceAnalyzer : +with_error()
}
AsciiRenderer <|-- DiagramRenderer
CargoWorkspaceAnalyzer <|-- ProjectAnalyzer
StdoutOutputWriter <|-- OutputWriter
FileOutputWriter --> OutputPath
FileOutputWriter <|-- OutputWriter
namespace Presentation {
class Cli
Cli : command: Option
Cli : path: PathBuf
Cli : level: String
Cli : format: String
Cli : output: Option
Cli : config: Option
Cli : scope: Option
Cli : exclude: Vec
Cli : split_by_module: bool
Cli : strict: bool
Cli : check: bool
Cli : verbose: u8
class Command
}
SourceFile --> FilePath
SourceFile --> Language
AnalysisConfig --> DiagramLevel
AnalysisWarning --> FilePath
Relationship --> RelationshipKind
CodeElement --> CodeElementKind
CodeElement --> FilePath
CodeElement --> Visibility
MermaidRenderer --> DiagramLevel
MermaidRenderer <|-- DiagramRenderer
AsciiRenderer <|-- DiagramRenderer
WalkdirDiscovery <|-- FileDiscovery
TreeSitterAnalyzer --> RustExtractor
TreeSitterAnalyzer --> PythonExtractor
TreeSitterAnalyzer <|-- SourceAnalyzer
RustExtractor <|-- LanguageExtractor
PythonExtractor <|-- LanguageExtractor
WalkdirDiscovery <|-- FileDiscovery
FileOutputWriter --> OutputPath
FileOutputWriter <|-- OutputWriter
StdoutOutputWriter <|-- OutputWriter
RawConfig --> RawAnalysis
RawConfig --> RawOutput
TomlConfigLoader --> RawConfig
TomlConfigLoader <|-- ConfigLoader
CargoWorkspaceAnalyzer <|-- ProjectAnalyzer
AnalyzeCodebaseResult --> CodeGraph
FakeDiagramRenderer <|-- DiagramRenderer
FakeSourceAnalyzer <|-- SourceAnalyzer
FakeFileDiscovery <|-- FileDiscovery
FakeOutputWriter <|-- OutputWriter
Relationship --> RelationshipKind
CodeElement --> CodeElementKind
CodeElement --> FilePath
CodeElement --> Visibility
AnalysisConfig --> DiagramLevel
AnalysisWarning --> FilePath
SourceFile --> FilePath
SourceFile --> Language
FakeDiagramRenderer <|-- DiagramRenderer
FakeSourceAnalyzer <|-- SourceAnalyzer