From 39a87520a14b43990283caea0f8dd3283dbdf959 Mon Sep 17 00:00:00 2001 From: Archlens Bot Date: Tue, 16 Jun 2026 14:46:17 +0000 Subject: [PATCH] docs: update architecture diagrams --- docs/architecture/module.mmd | 7 +- docs/architecture/project.mmd | 10 +- docs/architecture/type/adapters.mmd | 64 ++-- docs/architecture/type/application.mmd | 16 +- docs/architecture/type/domain.mmd | 156 +++++----- docs/architecture/type/overview.mmd | 402 ++++++++++++------------- 6 files changed, 329 insertions(+), 326 deletions(-) diff --git a/docs/architecture/module.mmd b/docs/architecture/module.mmd index 7d6eeff..4c3388e 100644 --- a/docs/architecture/module.mmd +++ b/docs/architecture/module.mmd @@ -1,7 +1,10 @@ graph TD - Adapters[Adapters] Domain[Domain] Presentation[Presentation] + Adapters[Adapters] Application[Application] + Application --> Domain Adapters --> Domain - Application --> Domain \ No newline at end of file + Presentation --> Domain + Presentation --> Adapters + Presentation --> Application \ No newline at end of file diff --git a/docs/architecture/project.mmd b/docs/architecture/project.mmd index c328386..ea5f513 100644 --- a/docs/architecture/project.mmd +++ b/docs/architecture/project.mmd @@ -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 diff --git a/docs/architecture/type/adapters.mmd b/docs/architecture/type/adapters.mmd index 580bfce..ca7c426 100644 --- a/docs/architecture/type/adapters.mmd +++ b/docs/architecture/type/adapters.mmd @@ -1,31 +1,5 @@ classDiagram namespace Adapters { - class AsciiRenderer - AsciiRenderer : +new() - AsciiRenderer : -format_kind() - class CargoWorkspaceAnalyzer - CargoWorkspaceAnalyzer : +new() - class WorkspaceToml - <> WorkspaceToml - WorkspaceToml : workspace: Option - class WorkspaceSection - <> WorkspaceSection - WorkspaceSection : members: Vec - class MemberToml - <> MemberToml - MemberToml : package: Option - MemberToml : dependencies: HashMap - class PackageSection - <> PackageSection - PackageSection : name: String - class StdoutOutputWriter - StdoutOutputWriter : +new() - class FileOutputWriter - FileOutputWriter : output_path: OutputPath - FileOutputWriter : +new() - FileOutputWriter : +single_file() - class OutputPath - <> 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 + <> OutputPath + class StdoutOutputWriter + StdoutOutputWriter : +new() class RawConfig <> RawConfig RawConfig : analysis: RawAnalysis @@ -67,12 +52,27 @@ classDiagram TomlConfigLoader : raw: RawConfig TomlConfigLoader : +from_path() TomlConfigLoader : -parse_level() + class CargoWorkspaceAnalyzer + CargoWorkspaceAnalyzer : +new() + class WorkspaceToml + <> WorkspaceToml + WorkspaceToml : workspace: Option + class WorkspaceSection + <> WorkspaceSection + WorkspaceSection : members: Vec + class MemberToml + <> MemberToml + MemberToml : package: Option + MemberToml : dependencies: HashMap + class PackageSection + <> PackageSection + PackageSection : name: String } - FileOutputWriter --> OutputPath TreeSitterAnalyzer --> RustExtractor TreeSitterAnalyzer --> PythonExtractor RustExtractor <|-- LanguageExtractor PythonExtractor <|-- LanguageExtractor + FileOutputWriter --> OutputPath RawConfig --> RawAnalysis RawConfig --> RawOutput TomlConfigLoader --> RawConfig \ No newline at end of file diff --git a/docs/architecture/type/application.mmd b/docs/architecture/type/application.mmd index 600421e..500f6a0 100644 --- a/docs/architecture/type/application.mmd +++ b/docs/architecture/type/application.mmd @@ -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() } \ No newline at end of file diff --git a/docs/architecture/type/domain.mmd b/docs/architecture/type/domain.mmd index e4e8686..69ee3b3 100644 --- a/docs/architecture/type/domain.mmd +++ b/docs/architecture/type/domain.mmd @@ -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 \ No newline at end of file + CodeElement --> Visibility \ No newline at end of file diff --git a/docs/architecture/type/overview.mmd b/docs/architecture/type/overview.mmd index 9380754..e9e57bf 100644 --- a/docs/architecture/type/overview.mmd +++ b/docs/architecture/type/overview.mmd @@ -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 - <> 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 + <> OutputPath + class StdoutOutputWriter + StdoutOutputWriter : +new() + class RawConfig + <> RawConfig + RawConfig : analysis: RawAnalysis + RawConfig : output: RawOutput + RawConfig : modules: HashMap + class RawAnalysis + <> RawAnalysis + RawAnalysis : exclude: Vec + RawAnalysis : level: Option + class RawOutput + <> 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 + <> WorkspaceToml + WorkspaceToml : workspace: Option + class WorkspaceSection + <> WorkspaceSection + WorkspaceSection : members: Vec + class MemberToml + <> MemberToml + MemberToml : package: Option + MemberToml : dependencies: HashMap + class PackageSection + <> 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 - <> WorkspaceToml - WorkspaceToml : workspace: Option - class WorkspaceSection - <> WorkspaceSection - WorkspaceSection : members: Vec - class MemberToml - <> MemberToml - MemberToml : package: Option - MemberToml : dependencies: HashMap - class PackageSection - <> PackageSection - PackageSection : name: String - class StdoutOutputWriter - StdoutOutputWriter : +new() - class FileOutputWriter - FileOutputWriter : output_path: OutputPath - FileOutputWriter : +new() - FileOutputWriter : +single_file() - class OutputPath - <> 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 - <> RawConfig - RawConfig : analysis: RawAnalysis - RawConfig : output: RawOutput - RawConfig : modules: HashMap - class RawAnalysis - <> RawAnalysis - RawAnalysis : exclude: Vec - RawAnalysis : level: Option - class RawOutput - <> 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 + <> 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 \ No newline at end of file + FakeDiagramRenderer <|-- DiagramRenderer + FakeSourceAnalyzer <|-- SourceAnalyzer \ No newline at end of file