docs: update architecture diagrams

This commit is contained in:
Archlens Bot
2026-06-17 08:27:43 +00:00
parent 84e5cc4f7e
commit f780a66c3a
7 changed files with 495 additions and 495 deletions

View File

@@ -1,10 +1,10 @@
graph TD
Adapters[Adapters]
Presentation[Presentation]
Domain[Domain]
Application[Application]
Application -->|2 deps| Domain
Presentation -->|1 dep| Domain
Presentation -->|11 deps| Adapters
Domain[Domain]
Presentation[Presentation]
Adapters[Adapters]
Presentation -->|1 dep| Application
Presentation -->|11 deps| Adapters
Adapters -->|24 deps| Domain
Presentation -->|1 dep| Domain
Application -->|2 deps| Domain

View File

@@ -16,19 +16,19 @@ graph TD
archlens_html[archlens-html]
end
archlens_application --> archlens_domain
archlens --> archlens_application
archlens --> archlens_toml_config
archlens --> archlens_domain
archlens --> archlens_file_writer
archlens --> archlens_tree_sitter
archlens --> archlens_cargo_workspace
archlens --> archlens_mermaid
archlens --> archlens_stdout_writer
archlens --> archlens_ascii
archlens --> archlens_application
archlens --> archlens_html
archlens --> archlens_domain
archlens --> archlens_tree_sitter
archlens --> archlens_toml_config
archlens --> archlens_d2
archlens --> archlens_walkdir
archlens --> archlens_file_writer
archlens --> archlens_mermaid
archlens --> archlens_cargo_workspace
archlens --> archlens_python_project
archlens --> archlens_walkdir
archlens --> archlens_html
archlens --> archlens_d2
archlens_tree_sitter --> archlens_domain
archlens_walkdir --> archlens_domain
archlens_mermaid --> archlens_domain

View File

@@ -31,92 +31,92 @@ classDiagram
class MemberToml
class PackageSection
}
MermaidRenderer : level: DiagramLevel
MermaidRenderer : show_weights: bool
MermaidRenderer : +new() -> Self
MermaidRenderer : +with_level(level: DiagramLevel) -> Self
MermaidRenderer : +with_weights(show: bool) -> Self
MermaidRenderer : -display_name(qualified: &str) -> &str
MermaidRenderer : -format_element_name(element: &CodeElement) -> String
MermaidRenderer : -format_visibility(visibility: Visibility) -> &'static str
MermaidRenderer : -render_class_diagram(graph: &CodeGraph) -> String
MermaidRenderer : -push_class_lines(lines: &mut Vec<String>, deferred: &mut Vec<String>, element: &CodeElement, indent: &str, in_namespace: bool)
MermaidRenderer : -render_module_flowchart(graph: &CodeGraph) -> String
MermaidRenderer : -render_project_flowchart(graph: &CodeGraph) -> String
MermaidRenderer : -sanitize_id(name: &str) -> String
AsciiRenderer : +new() -> Self
AsciiRenderer : -format_kind(element: &CodeElement) -> &'static str
PythonProjectAnalyzer : +new() -> Self
MermaidRenderer : level DiagramLevel
MermaidRenderer : show_weights bool
MermaidRenderer : +new() -] Self
MermaidRenderer : +with_level(level DiagramLevel) -] Self
MermaidRenderer : +with_weights(show bool) -] Self
MermaidRenderer : -display_name(qualified str) -] str
MermaidRenderer : -format_element_name(element CodeElement) -] String
MermaidRenderer : -format_visibility(visibility Visibility) -] static str
MermaidRenderer : -render_class_diagram(graph CodeGraph) -] String
MermaidRenderer : -push_class_lines(lines mut Vec[String], deferred mut Vec[String], element CodeElement, indent str, in_namespace bool)
MermaidRenderer : -render_module_flowchart(graph CodeGraph) -] String
MermaidRenderer : -render_project_flowchart(graph CodeGraph) -] String
MermaidRenderer : -sanitize_id(name str) -] String
AsciiRenderer : +new() -] Self
AsciiRenderer : -format_kind(element CodeElement) -] static str
PythonProjectAnalyzer : +new() -] Self
<<private>> ProjectSection
ProjectSection : name: Option
ProjectSection : dependencies: Vec
ProjectSection : name Option
ProjectSection : dependencies Vec
<<private>> PoetrySection
PoetrySection : name: Option
PoetrySection : dependencies: HashMap
PoetrySection : name Option
PoetrySection : dependencies HashMap
<<private>> ToolSection
ToolSection : poetry: PoetrySection
ToolSection : poetry PoetrySection
<<private>> PyprojectToml
PyprojectToml : project: Option
PyprojectToml : tool: ToolSection
WalkdirDiscovery : +new() -> Self
WalkdirDiscovery : -detect_language(path: &Path) -> Option<Language>
WalkdirDiscovery : -is_test_file(path: &Path, language: Language) -> bool
WalkdirDiscovery : -is_excluded(path: &Path, root: &Path, excludes: &[String]) -> bool
TreeSitterAnalyzer : rust: RustExtractor
TreeSitterAnalyzer : python: PythonExtractor
TreeSitterAnalyzer : +new() -> Self
TreeSitterAnalyzer : -extractor_for(language: Language) -> Option<&dyn LanguageExtractor>
FileOutputWriter : output_path: OutputPath
FileOutputWriter : +new(output_dir: PathBuf) -> Self
FileOutputWriter : +single_file(path: PathBuf) -> Self
PyprojectToml : project Option
PyprojectToml : tool ToolSection
WalkdirDiscovery : +new() -] Self
WalkdirDiscovery : -detect_language(path Path) -] Option[Language]
WalkdirDiscovery : -is_test_file(path Path, language Language) -] bool
WalkdirDiscovery : -is_excluded(path Path, root Path, excludes [String]) -] bool
TreeSitterAnalyzer : rust RustExtractor
TreeSitterAnalyzer : python PythonExtractor
TreeSitterAnalyzer : +new() -] Self
TreeSitterAnalyzer : -extractor_for(language Language) -] Option[dyn LanguageExtractor]
FileOutputWriter : output_path OutputPath
FileOutputWriter : +new(output_dir PathBuf) -] Self
FileOutputWriter : +single_file(path PathBuf) -] Self
<<private>> OutputPath
StdoutOutputWriter : +new() -> Self
StdoutOutputWriter : +new() -] Self
<<private>> RawRules
RawRules : allow: Vec
RawRules : deny: Vec
RawRules : allow Vec
RawRules : deny Vec
<<private>> RawConfig
RawConfig : analysis: RawAnalysis
RawConfig : output: RawOutput
RawConfig : modules: HashMap
RawConfig : rules: RawRules
RawConfig : analysis RawAnalysis
RawConfig : output RawOutput
RawConfig : modules HashMap
RawConfig : rules RawRules
<<private>> RawAnalysis
RawAnalysis : exclude: Vec
RawAnalysis : level: Option
RawAnalysis : exclude Vec
RawAnalysis : level Option
<<private>> RawOutput
RawOutput : format: Option
RawOutput : path: Option
RawOutput : split_by_module: bool
TomlConfigLoader : raw: RawConfig
TomlConfigLoader : +from_path(path: &Path) -> Result<Self, DomainError>
TomlConfigLoader : -parse_level(level: &Option<String>) -> DiagramLevel
D2Renderer : level: DiagramLevel
D2Renderer : +new() -> Self
D2Renderer : +with_level(level: DiagramLevel) -> Self
HtmlRenderer : +new() -> Self
RawOutput : format Option
RawOutput : path Option
RawOutput : split_by_module bool
TomlConfigLoader : raw RawConfig
TomlConfigLoader : +from_path(path Path) -] Result[Self, DomainError]
TomlConfigLoader : -parse_level(level Option[String]) -] DiagramLevel
D2Renderer : level DiagramLevel
D2Renderer : +new() -] Self
D2Renderer : +with_level(level DiagramLevel) -] Self
HtmlRenderer : +new() -] Self
<<private>> GraphData
GraphData : nodes: Vec
GraphData : edges: Vec
GraphData : nodes Vec
GraphData : edges Vec
<<private>> NodeData
NodeData : id: String
NodeData : label: String
NodeData : module: String
NodeData : kind: String
NodeData : fields: Vec
NodeData : methods: Vec
NodeData : id String
NodeData : label String
NodeData : module String
NodeData : kind String
NodeData : fields Vec
NodeData : methods Vec
<<private>> EdgeData
EdgeData : source: String
EdgeData : target: String
EdgeData : kind: String
CargoWorkspaceAnalyzer : +new() -> Self
EdgeData : source String
EdgeData : target String
EdgeData : kind String
CargoWorkspaceAnalyzer : +new() -] Self
<<private>> WorkspaceToml
WorkspaceToml : workspace: Option
WorkspaceToml : workspace Option
<<private>> WorkspaceSection
WorkspaceSection : members: Vec
WorkspaceSection : members Vec
<<private>> MemberToml
MemberToml : package: Option
MemberToml : dependencies: HashMap
MemberToml : package Option
MemberToml : dependencies HashMap
<<private>> PackageSection
PackageSection : name: String
PackageSection : name String
ToolSection --> PoetrySection
PyprojectToml --> ToolSection
TreeSitterAnalyzer --> RustExtractor

View File

@@ -3,14 +3,14 @@ classDiagram
class AnalyzeCodebase
class AnalyzeCodebaseResult
}
AnalyzeCodebase : file_discovery: F
AnalyzeCodebase : source_analyzer: S
AnalyzeCodebase : +new(file_discovery: F, source_analyzer: S) -> Self
AnalyzeCodebase : +execute(root: &Path, config: &AnalysisConfig) -> Result<AnalyzeCodebaseResult, DomainError>
AnalyzeCodebaseResult : graph: CodeGraph
AnalyzeCodebaseResult : warnings: Vec
AnalyzeCodebaseResult : +graph() -> &CodeGraph
AnalyzeCodebaseResult : +warnings() -> &[AnalysisWarning]
AnalyzeCodebase : file_discovery F
AnalyzeCodebase : source_analyzer S
AnalyzeCodebase : +new(file_discovery F, source_analyzer S) -] Self
AnalyzeCodebase : +execute(root Path, config AnalysisConfig) -] Result[AnalyzeCodebaseResult, DomainError]
AnalyzeCodebaseResult : graph CodeGraph
AnalyzeCodebaseResult : warnings Vec
AnalyzeCodebaseResult : +graph() -] CodeGraph
AnalyzeCodebaseResult : +warnings() -] [AnalysisWarning]
class application_module["Application"] {
<<module>>
}

View File

@@ -28,135 +28,135 @@ classDiagram
class CodeGraph
class DomainError
}
OutputConfig : split_by_module: bool
OutputConfig : output_path: Option
OutputConfig : +with_split_by_module(split: bool) -> Self
OutputConfig : +with_output_path(path: String) -> Self
OutputConfig : +split_by_module() -> bool
OutputConfig : +output_path() -> Option<&str>
RenderOutput : files: Vec
RenderOutput : +new(files: Vec<RenderedFile>) -> Self
RenderOutput : +single(file: RenderedFile) -> Self
RenderOutput : +files() -> &[RenderedFile]
RenderedFile : name: String
RenderedFile : content: String
RenderedFile : +new(name: &str, content: &str) -> Result<Self, DomainError>
RenderedFile : +name() -> &str
RenderedFile : +content() -> &str
SourceFile : path: FilePath
SourceFile : language: Language
SourceFile : +new(path: FilePath, language: Language) -> Self
SourceFile : +path() -> &FilePath
SourceFile : +language() -> Language
ModuleName : +new(value: &str) -> Result<Self, DomainError>
ModuleName : +from_path(file_path: &str, root: &Path, module_mappings: &HashMap<String, String>) -> Option<Self>
ModuleName : +from_directory_group(member_path: &str) -> Option<Self>
ModuleName : +capitalize(s: &str) -> String
ModuleName : +as_str() -> &str
Language : +name() -> &'static str
FilePath : +new(value: &str) -> Result<Self, DomainError>
FilePath : +as_str() -> &str
RuleViolation : source_module: String
RuleViolation : target_module: String
RuleViolation : kind: RuleKind
RuleViolation : +new(source_module: &str, target_module: &str, kind: RuleKind) -> Self
RuleViolation : +source_module() -> &str
RuleViolation : +target_module() -> &str
RuleViolation : +kind() -> &RuleKind
RuleViolation : +message() -> String
BoundaryRule : source: String
BoundaryRule : target: String
BoundaryRule : +parse(s: &str) -> Option<Self>
BoundaryRule : +source() -> &str
BoundaryRule : +target() -> &str
BoundaryRule : +matches(src_module: &str, tgt_module: &str) -> bool
AnalysisConfig : excludes: Vec
AnalysisConfig : level: DiagramLevel
AnalysisConfig : module_mappings: HashMap
AnalysisConfig : scope: Option
AnalysisConfig : include_tests: bool
AnalysisConfig : changed_files: Option
AnalysisConfig : +with_excludes(excludes: Vec<String>) -> Self
AnalysisConfig : +with_level(level: DiagramLevel) -> Self
AnalysisConfig : +with_module_mappings(mappings: HashMap<String, String>) -> Self
AnalysisConfig : +excludes() -> &[String]
AnalysisConfig : +level() -> DiagramLevel
AnalysisConfig : +with_scope(scope: String) -> Self
AnalysisConfig : +module_mappings() -> &HashMap<String, String>
AnalysisConfig : +scope() -> Option<&str>
AnalysisConfig : +with_include_tests(include: bool) -> Self
AnalysisConfig : +include_tests() -> bool
AnalysisConfig : +with_changed_files(files: HashSet<String>) -> Self
AnalysisConfig : +changed_files() -> Option<&HashSet<String>>
AnalysisResult : elements: Vec
AnalysisResult : relationships: Vec
AnalysisResult : warnings: Vec
AnalysisResult : +new(elements: Vec<CodeElement>, relationships: Vec<Relationship>, warnings: Vec<AnalysisWarning>) -> Self
AnalysisResult : +empty() -> Self
AnalysisResult : +elements() -> &[CodeElement]
AnalysisResult : +relationships() -> &[Relationship]
AnalysisResult : +warnings() -> &[AnalysisWarning]
AnalysisWarning : file_path: FilePath
AnalysisWarning : line: usize
AnalysisWarning : message: String
AnalysisWarning : +new(file_path: FilePath, line: usize, message: &str) -> Result<Self, DomainError>
AnalysisWarning : +file_path() -> &FilePath
AnalysisWarning : +line() -> usize
AnalysisWarning : +message() -> &str
Relationship : source: String
Relationship : target: String
Relationship : kind: RelationshipKind
Relationship : source_file: Option
Relationship : +new(source: &str, target: &str, kind: RelationshipKind) -> Result<Self, DomainError>
Relationship : +with_source_file(file: FilePath) -> Self
Relationship : +source() -> &str
Relationship : +target() -> &str
Relationship : +kind() -> RelationshipKind
Relationship : +source_file() -> Option<&FilePath>
CodeElement : name: String
CodeElement : qualified_name: Option
CodeElement : kind: CodeElementKind
CodeElement : file_path: FilePath
CodeElement : line: usize
CodeElement : visibility: Visibility
CodeElement : module: Option
CodeElement : generics: Vec
CodeElement : attributes: Vec
CodeElement : fields: Vec
CodeElement : methods: Vec
CodeElement : +new(name: &str, kind: CodeElementKind, file_path: FilePath, line: usize) -> Result<Self, DomainError>
CodeElement : +with_visibility(visibility: Visibility) -> Self
CodeElement : +with_module(module: ModuleName) -> Self
CodeElement : +with_generics(generics: Vec<String>) -> Self
CodeElement : +with_attributes(attributes: Vec<String>) -> Self
CodeElement : +with_qualified_name(qn: String) -> Self
CodeElement : +name() -> &str
CodeElement : +qualified_name() -> &str
CodeElement : +kind() -> CodeElementKind
CodeElement : +file_path() -> &FilePath
CodeElement : +line() -> usize
CodeElement : +visibility() -> Visibility
CodeElement : +module() -> Option<&ModuleName>
CodeElement : +generics() -> &[String]
CodeElement : +attributes() -> &[String]
CodeElement : +with_fields(fields: Vec<String>) -> Self
CodeElement : +with_methods(methods: Vec<String>) -> Self
CodeElement : +fields() -> &[String]
CodeElement : +methods() -> &[String]
CodeGraph : elements: Vec
CodeGraph : relationships: Vec
CodeGraph : +new() -> Self
CodeGraph : +add_element(element: CodeElement)
CodeGraph : +add_relationship(relationship: Relationship)
CodeGraph : +elements() -> &[CodeElement]
CodeGraph : +relationships() -> &[Relationship]
CodeGraph : +modules() -> Vec<ModuleName>
CodeGraph : +elements_by_module() -> (HashMap<String, Vec<&CodeElement>>, Vec<&CodeElement>)
CodeGraph : +resolve_relationships() -> CodeGraph
CodeGraph : +filter_external_imports(known_modules: &HashSet<String>) -> CodeGraph
CodeGraph : +qualify() -> CodeGraph
CodeGraph : +cross_module_deps_for(module: &ModuleName) -> Vec<(ModuleName, usize)>
CodeGraph : +subgraph_by_module(module: &ModuleName) -> CodeGraph
OutputConfig : split_by_module bool
OutputConfig : output_path Option
OutputConfig : +with_split_by_module(split bool) -] Self
OutputConfig : +with_output_path(path String) -] Self
OutputConfig : +split_by_module() -] bool
OutputConfig : +output_path() -] Option[str]
RenderOutput : files Vec
RenderOutput : +new(files Vec[RenderedFile]) -] Self
RenderOutput : +single(file RenderedFile) -] Self
RenderOutput : +files() -] [RenderedFile]
RenderedFile : name String
RenderedFile : content String
RenderedFile : +new(name str, content str) -] Result[Self, DomainError]
RenderedFile : +name() -] str
RenderedFile : +content() -] str
SourceFile : path FilePath
SourceFile : language Language
SourceFile : +new(path FilePath, language Language) -] Self
SourceFile : +path() -] FilePath
SourceFile : +language() -] Language
ModuleName : +new(value str) -] Result[Self, DomainError]
ModuleName : +from_path(file_path str, root Path, module_mappings HashMap[String, String]) -] Option[Self]
ModuleName : +from_directory_group(member_path str) -] Option[Self]
ModuleName : +capitalize(s str) -] String
ModuleName : +as_str() -] str
Language : +name() -] static str
FilePath : +new(value str) -] Result[Self, DomainError]
FilePath : +as_str() -] str
RuleViolation : source_module String
RuleViolation : target_module String
RuleViolation : kind RuleKind
RuleViolation : +new(source_module str, target_module str, kind RuleKind) -] Self
RuleViolation : +source_module() -] str
RuleViolation : +target_module() -] str
RuleViolation : +kind() -] RuleKind
RuleViolation : +message() -] String
BoundaryRule : source String
BoundaryRule : target String
BoundaryRule : +parse(s str) -] Option[Self]
BoundaryRule : +source() -] str
BoundaryRule : +target() -] str
BoundaryRule : +matches(src_module str, tgt_module str) -] bool
AnalysisConfig : excludes Vec
AnalysisConfig : level DiagramLevel
AnalysisConfig : module_mappings HashMap
AnalysisConfig : scope Option
AnalysisConfig : include_tests bool
AnalysisConfig : changed_files Option
AnalysisConfig : +with_excludes(excludes Vec[String]) -] Self
AnalysisConfig : +with_level(level DiagramLevel) -] Self
AnalysisConfig : +with_module_mappings(mappings HashMap[String, String]) -] Self
AnalysisConfig : +excludes() -] [String]
AnalysisConfig : +level() -] DiagramLevel
AnalysisConfig : +with_scope(scope String) -] Self
AnalysisConfig : +module_mappings() -] HashMap[String, String]
AnalysisConfig : +scope() -] Option[str]
AnalysisConfig : +with_include_tests(include bool) -] Self
AnalysisConfig : +include_tests() -] bool
AnalysisConfig : +with_changed_files(files HashSet[String]) -] Self
AnalysisConfig : +changed_files() -] Option[HashSet[String]]
AnalysisResult : elements Vec
AnalysisResult : relationships Vec
AnalysisResult : warnings Vec
AnalysisResult : +new(elements Vec[CodeElement], relationships Vec[Relationship], warnings Vec[AnalysisWarning]) -] Self
AnalysisResult : +empty() -] Self
AnalysisResult : +elements() -] [CodeElement]
AnalysisResult : +relationships() -] [Relationship]
AnalysisResult : +warnings() -] [AnalysisWarning]
AnalysisWarning : file_path FilePath
AnalysisWarning : line usize
AnalysisWarning : message String
AnalysisWarning : +new(file_path FilePath, line usize, message str) -] Result[Self, DomainError]
AnalysisWarning : +file_path() -] FilePath
AnalysisWarning : +line() -] usize
AnalysisWarning : +message() -] str
Relationship : source String
Relationship : target String
Relationship : kind RelationshipKind
Relationship : source_file Option
Relationship : +new(source str, target str, kind RelationshipKind) -] Result[Self, DomainError]
Relationship : +with_source_file(file FilePath) -] Self
Relationship : +source() -] str
Relationship : +target() -] str
Relationship : +kind() -] RelationshipKind
Relationship : +source_file() -] Option[FilePath]
CodeElement : name String
CodeElement : qualified_name Option
CodeElement : kind CodeElementKind
CodeElement : file_path FilePath
CodeElement : line usize
CodeElement : visibility Visibility
CodeElement : module Option
CodeElement : generics Vec
CodeElement : attributes Vec
CodeElement : fields Vec
CodeElement : methods Vec
CodeElement : +new(name str, kind CodeElementKind, file_path FilePath, line usize) -] Result[Self, DomainError]
CodeElement : +with_visibility(visibility Visibility) -] Self
CodeElement : +with_module(module ModuleName) -] Self
CodeElement : +with_generics(generics Vec[String]) -] Self
CodeElement : +with_attributes(attributes Vec[String]) -] Self
CodeElement : +with_qualified_name(qn String) -] Self
CodeElement : +name() -] str
CodeElement : +qualified_name() -] str
CodeElement : +kind() -] CodeElementKind
CodeElement : +file_path() -] FilePath
CodeElement : +line() -] usize
CodeElement : +visibility() -] Visibility
CodeElement : +module() -] Option[ModuleName]
CodeElement : +generics() -] [String]
CodeElement : +attributes() -] [String]
CodeElement : +with_fields(fields Vec[String]) -] Self
CodeElement : +with_methods(methods Vec[String]) -] Self
CodeElement : +fields() -] [String]
CodeElement : +methods() -] [String]
CodeGraph : elements Vec
CodeGraph : relationships Vec
CodeGraph : +new() -] Self
CodeGraph : +add_element(element CodeElement)
CodeGraph : +add_relationship(relationship Relationship)
CodeGraph : +elements() -] [CodeElement]
CodeGraph : +relationships() -] [Relationship]
CodeGraph : +modules() -] Vec[ModuleName]
CodeGraph : +elements_by_module() -] (HashMap[String, Vec[CodeElement]], Vec[CodeElement])
CodeGraph : +resolve_relationships() -] CodeGraph
CodeGraph : +filter_external_imports(known_modules HashSet[String]) -] CodeGraph
CodeGraph : +qualify() -] CodeGraph
CodeGraph : +cross_module_deps_for(module ModuleName) -] Vec[(ModuleName, usize)]
CodeGraph : +subgraph_by_module(module ModuleName) -] CodeGraph
SourceFile --> FilePath
SourceFile --> Language
RuleViolation --> RuleKind

View File

@@ -1,36 +1,4 @@
classDiagram
namespace Adapters {
class MermaidRenderer
class AsciiRenderer
class PythonProjectAnalyzer
class ProjectSection
class PoetrySection
class ToolSection
class PyprojectToml
class WalkdirDiscovery
class TreeSitterAnalyzer
class LanguageExtractor
class RustExtractor
class PythonExtractor
class FileOutputWriter
class OutputPath
class StdoutOutputWriter
class RawRules
class RawConfig
class RawAnalysis
class RawOutput
class TomlConfigLoader
class D2Renderer
class HtmlRenderer
class GraphData
class NodeData
class EdgeData
class CargoWorkspaceAnalyzer
class WorkspaceToml
class WorkspaceSection
class MemberToml
class PackageSection
}
namespace Domain {
class OutputConfig
class DiagramLevel
@@ -64,249 +32,281 @@ classDiagram
class AnalyzeCodebase
class AnalyzeCodebaseResult
}
namespace Adapters {
class MermaidRenderer
class AsciiRenderer
class PythonProjectAnalyzer
class ProjectSection
class PoetrySection
class ToolSection
class PyprojectToml
class WalkdirDiscovery
class TreeSitterAnalyzer
class LanguageExtractor
class RustExtractor
class PythonExtractor
class FileOutputWriter
class OutputPath
class StdoutOutputWriter
class RawRules
class RawConfig
class RawAnalysis
class RawOutput
class TomlConfigLoader
class D2Renderer
class HtmlRenderer
class GraphData
class NodeData
class EdgeData
class CargoWorkspaceAnalyzer
class WorkspaceToml
class WorkspaceSection
class MemberToml
class PackageSection
}
namespace Presentation {
class Cli
class Command
}
MermaidRenderer : level: DiagramLevel
MermaidRenderer : show_weights: bool
MermaidRenderer : +new() -> Self
MermaidRenderer : +with_level(level: DiagramLevel) -> Self
MermaidRenderer : +with_weights(show: bool) -> Self
MermaidRenderer : -display_name(qualified: &str) -> &str
MermaidRenderer : -format_element_name(element: &CodeElement) -> String
MermaidRenderer : -format_visibility(visibility: Visibility) -> &'static str
MermaidRenderer : -render_class_diagram(graph: &CodeGraph) -> String
MermaidRenderer : -push_class_lines(lines: &mut Vec<String>, deferred: &mut Vec<String>, element: &CodeElement, indent: &str, in_namespace: bool)
MermaidRenderer : -render_module_flowchart(graph: &CodeGraph) -> String
MermaidRenderer : -render_project_flowchart(graph: &CodeGraph) -> String
MermaidRenderer : -sanitize_id(name: &str) -> String
AsciiRenderer : +new() -> Self
AsciiRenderer : -format_kind(element: &CodeElement) -> &'static str
PythonProjectAnalyzer : +new() -> Self
OutputConfig : split_by_module bool
OutputConfig : output_path Option
OutputConfig : +with_split_by_module(split bool) -] Self
OutputConfig : +with_output_path(path String) -] Self
OutputConfig : +split_by_module() -] bool
OutputConfig : +output_path() -] Option[str]
RenderOutput : files Vec
RenderOutput : +new(files Vec[RenderedFile]) -] Self
RenderOutput : +single(file RenderedFile) -] Self
RenderOutput : +files() -] [RenderedFile]
RenderedFile : name String
RenderedFile : content String
RenderedFile : +new(name str, content str) -] Result[Self, DomainError]
RenderedFile : +name() -] str
RenderedFile : +content() -] str
SourceFile : path FilePath
SourceFile : language Language
SourceFile : +new(path FilePath, language Language) -] Self
SourceFile : +path() -] FilePath
SourceFile : +language() -] Language
ModuleName : +new(value str) -] Result[Self, DomainError]
ModuleName : +from_path(file_path str, root Path, module_mappings HashMap[String, String]) -] Option[Self]
ModuleName : +from_directory_group(member_path str) -] Option[Self]
ModuleName : +capitalize(s str) -] String
ModuleName : +as_str() -] str
Language : +name() -] static str
FilePath : +new(value str) -] Result[Self, DomainError]
FilePath : +as_str() -] str
RuleViolation : source_module String
RuleViolation : target_module String
RuleViolation : kind RuleKind
RuleViolation : +new(source_module str, target_module str, kind RuleKind) -] Self
RuleViolation : +source_module() -] str
RuleViolation : +target_module() -] str
RuleViolation : +kind() -] RuleKind
RuleViolation : +message() -] String
BoundaryRule : source String
BoundaryRule : target String
BoundaryRule : +parse(s str) -] Option[Self]
BoundaryRule : +source() -] str
BoundaryRule : +target() -] str
BoundaryRule : +matches(src_module str, tgt_module str) -] bool
AnalysisConfig : excludes Vec
AnalysisConfig : level DiagramLevel
AnalysisConfig : module_mappings HashMap
AnalysisConfig : scope Option
AnalysisConfig : include_tests bool
AnalysisConfig : changed_files Option
AnalysisConfig : +with_excludes(excludes Vec[String]) -] Self
AnalysisConfig : +with_level(level DiagramLevel) -] Self
AnalysisConfig : +with_module_mappings(mappings HashMap[String, String]) -] Self
AnalysisConfig : +excludes() -] [String]
AnalysisConfig : +level() -] DiagramLevel
AnalysisConfig : +with_scope(scope String) -] Self
AnalysisConfig : +module_mappings() -] HashMap[String, String]
AnalysisConfig : +scope() -] Option[str]
AnalysisConfig : +with_include_tests(include bool) -] Self
AnalysisConfig : +include_tests() -] bool
AnalysisConfig : +with_changed_files(files HashSet[String]) -] Self
AnalysisConfig : +changed_files() -] Option[HashSet[String]]
AnalysisResult : elements Vec
AnalysisResult : relationships Vec
AnalysisResult : warnings Vec
AnalysisResult : +new(elements Vec[CodeElement], relationships Vec[Relationship], warnings Vec[AnalysisWarning]) -] Self
AnalysisResult : +empty() -] Self
AnalysisResult : +elements() -] [CodeElement]
AnalysisResult : +relationships() -] [Relationship]
AnalysisResult : +warnings() -] [AnalysisWarning]
AnalysisWarning : file_path FilePath
AnalysisWarning : line usize
AnalysisWarning : message String
AnalysisWarning : +new(file_path FilePath, line usize, message str) -] Result[Self, DomainError]
AnalysisWarning : +file_path() -] FilePath
AnalysisWarning : +line() -] usize
AnalysisWarning : +message() -] str
Relationship : source String
Relationship : target String
Relationship : kind RelationshipKind
Relationship : source_file Option
Relationship : +new(source str, target str, kind RelationshipKind) -] Result[Self, DomainError]
Relationship : +with_source_file(file FilePath) -] Self
Relationship : +source() -] str
Relationship : +target() -] str
Relationship : +kind() -] RelationshipKind
Relationship : +source_file() -] Option[FilePath]
CodeElement : name String
CodeElement : qualified_name Option
CodeElement : kind CodeElementKind
CodeElement : file_path FilePath
CodeElement : line usize
CodeElement : visibility Visibility
CodeElement : module Option
CodeElement : generics Vec
CodeElement : attributes Vec
CodeElement : fields Vec
CodeElement : methods Vec
CodeElement : +new(name str, kind CodeElementKind, file_path FilePath, line usize) -] Result[Self, DomainError]
CodeElement : +with_visibility(visibility Visibility) -] Self
CodeElement : +with_module(module ModuleName) -] Self
CodeElement : +with_generics(generics Vec[String]) -] Self
CodeElement : +with_attributes(attributes Vec[String]) -] Self
CodeElement : +with_qualified_name(qn String) -] Self
CodeElement : +name() -] str
CodeElement : +qualified_name() -] str
CodeElement : +kind() -] CodeElementKind
CodeElement : +file_path() -] FilePath
CodeElement : +line() -] usize
CodeElement : +visibility() -] Visibility
CodeElement : +module() -] Option[ModuleName]
CodeElement : +generics() -] [String]
CodeElement : +attributes() -] [String]
CodeElement : +with_fields(fields Vec[String]) -] Self
CodeElement : +with_methods(methods Vec[String]) -] Self
CodeElement : +fields() -] [String]
CodeElement : +methods() -] [String]
CodeGraph : elements Vec
CodeGraph : relationships Vec
CodeGraph : +new() -] Self
CodeGraph : +add_element(element CodeElement)
CodeGraph : +add_relationship(relationship Relationship)
CodeGraph : +elements() -] [CodeElement]
CodeGraph : +relationships() -] [Relationship]
CodeGraph : +modules() -] Vec[ModuleName]
CodeGraph : +elements_by_module() -] (HashMap[String, Vec[CodeElement]], Vec[CodeElement])
CodeGraph : +resolve_relationships() -] CodeGraph
CodeGraph : +filter_external_imports(known_modules HashSet[String]) -] CodeGraph
CodeGraph : +qualify() -] CodeGraph
CodeGraph : +cross_module_deps_for(module ModuleName) -] Vec[(ModuleName, usize)]
CodeGraph : +subgraph_by_module(module ModuleName) -] CodeGraph
AnalyzeCodebase : file_discovery F
AnalyzeCodebase : source_analyzer S
AnalyzeCodebase : +new(file_discovery F, source_analyzer S) -] Self
AnalyzeCodebase : +execute(root Path, config AnalysisConfig) -] Result[AnalyzeCodebaseResult, DomainError]
AnalyzeCodebaseResult : graph CodeGraph
AnalyzeCodebaseResult : warnings Vec
AnalyzeCodebaseResult : +graph() -] CodeGraph
AnalyzeCodebaseResult : +warnings() -] [AnalysisWarning]
MermaidRenderer : level DiagramLevel
MermaidRenderer : show_weights bool
MermaidRenderer : +new() -] Self
MermaidRenderer : +with_level(level DiagramLevel) -] Self
MermaidRenderer : +with_weights(show bool) -] Self
MermaidRenderer : -display_name(qualified str) -] str
MermaidRenderer : -format_element_name(element CodeElement) -] String
MermaidRenderer : -format_visibility(visibility Visibility) -] static str
MermaidRenderer : -render_class_diagram(graph CodeGraph) -] String
MermaidRenderer : -push_class_lines(lines mut Vec[String], deferred mut Vec[String], element CodeElement, indent str, in_namespace bool)
MermaidRenderer : -render_module_flowchart(graph CodeGraph) -] String
MermaidRenderer : -render_project_flowchart(graph CodeGraph) -] String
MermaidRenderer : -sanitize_id(name str) -] String
AsciiRenderer : +new() -] Self
AsciiRenderer : -format_kind(element CodeElement) -] static str
PythonProjectAnalyzer : +new() -] Self
<<private>> ProjectSection
ProjectSection : name: Option
ProjectSection : dependencies: Vec
ProjectSection : name Option
ProjectSection : dependencies Vec
<<private>> PoetrySection
PoetrySection : name: Option
PoetrySection : dependencies: HashMap
PoetrySection : name Option
PoetrySection : dependencies HashMap
<<private>> ToolSection
ToolSection : poetry: PoetrySection
ToolSection : poetry PoetrySection
<<private>> PyprojectToml
PyprojectToml : project: Option
PyprojectToml : tool: ToolSection
WalkdirDiscovery : +new() -> Self
WalkdirDiscovery : -detect_language(path: &Path) -> Option<Language>
WalkdirDiscovery : -is_test_file(path: &Path, language: Language) -> bool
WalkdirDiscovery : -is_excluded(path: &Path, root: &Path, excludes: &[String]) -> bool
TreeSitterAnalyzer : rust: RustExtractor
TreeSitterAnalyzer : python: PythonExtractor
TreeSitterAnalyzer : +new() -> Self
TreeSitterAnalyzer : -extractor_for(language: Language) -> Option<&dyn LanguageExtractor>
FileOutputWriter : output_path: OutputPath
FileOutputWriter : +new(output_dir: PathBuf) -> Self
FileOutputWriter : +single_file(path: PathBuf) -> Self
PyprojectToml : project Option
PyprojectToml : tool ToolSection
WalkdirDiscovery : +new() -] Self
WalkdirDiscovery : -detect_language(path Path) -] Option[Language]
WalkdirDiscovery : -is_test_file(path Path, language Language) -] bool
WalkdirDiscovery : -is_excluded(path Path, root Path, excludes [String]) -] bool
TreeSitterAnalyzer : rust RustExtractor
TreeSitterAnalyzer : python PythonExtractor
TreeSitterAnalyzer : +new() -] Self
TreeSitterAnalyzer : -extractor_for(language Language) -] Option[dyn LanguageExtractor]
FileOutputWriter : output_path OutputPath
FileOutputWriter : +new(output_dir PathBuf) -] Self
FileOutputWriter : +single_file(path PathBuf) -] Self
<<private>> OutputPath
StdoutOutputWriter : +new() -> Self
StdoutOutputWriter : +new() -] Self
<<private>> RawRules
RawRules : allow: Vec
RawRules : deny: Vec
RawRules : allow Vec
RawRules : deny Vec
<<private>> RawConfig
RawConfig : analysis: RawAnalysis
RawConfig : output: RawOutput
RawConfig : modules: HashMap
RawConfig : rules: RawRules
RawConfig : analysis RawAnalysis
RawConfig : output RawOutput
RawConfig : modules HashMap
RawConfig : rules RawRules
<<private>> RawAnalysis
RawAnalysis : exclude: Vec
RawAnalysis : level: Option
RawAnalysis : exclude Vec
RawAnalysis : level Option
<<private>> RawOutput
RawOutput : format: Option
RawOutput : path: Option
RawOutput : split_by_module: bool
TomlConfigLoader : raw: RawConfig
TomlConfigLoader : +from_path(path: &Path) -> Result<Self, DomainError>
TomlConfigLoader : -parse_level(level: &Option<String>) -> DiagramLevel
D2Renderer : level: DiagramLevel
D2Renderer : +new() -> Self
D2Renderer : +with_level(level: DiagramLevel) -> Self
HtmlRenderer : +new() -> Self
RawOutput : format Option
RawOutput : path Option
RawOutput : split_by_module bool
TomlConfigLoader : raw RawConfig
TomlConfigLoader : +from_path(path Path) -] Result[Self, DomainError]
TomlConfigLoader : -parse_level(level Option[String]) -] DiagramLevel
D2Renderer : level DiagramLevel
D2Renderer : +new() -] Self
D2Renderer : +with_level(level DiagramLevel) -] Self
HtmlRenderer : +new() -] Self
<<private>> GraphData
GraphData : nodes: Vec
GraphData : edges: Vec
GraphData : nodes Vec
GraphData : edges Vec
<<private>> NodeData
NodeData : id: String
NodeData : label: String
NodeData : module: String
NodeData : kind: String
NodeData : fields: Vec
NodeData : methods: Vec
NodeData : id String
NodeData : label String
NodeData : module String
NodeData : kind String
NodeData : fields Vec
NodeData : methods Vec
<<private>> EdgeData
EdgeData : source: String
EdgeData : target: String
EdgeData : kind: String
CargoWorkspaceAnalyzer : +new() -> Self
EdgeData : source String
EdgeData : target String
EdgeData : kind String
CargoWorkspaceAnalyzer : +new() -] Self
<<private>> WorkspaceToml
WorkspaceToml : workspace: Option
WorkspaceToml : workspace Option
<<private>> WorkspaceSection
WorkspaceSection : members: Vec
WorkspaceSection : members Vec
<<private>> MemberToml
MemberToml : package: Option
MemberToml : dependencies: HashMap
MemberToml : package Option
MemberToml : dependencies HashMap
<<private>> PackageSection
PackageSection : name: String
OutputConfig : split_by_module: bool
OutputConfig : output_path: Option
OutputConfig : +with_split_by_module(split: bool) -> Self
OutputConfig : +with_output_path(path: String) -> Self
OutputConfig : +split_by_module() -> bool
OutputConfig : +output_path() -> Option<&str>
RenderOutput : files: Vec
RenderOutput : +new(files: Vec<RenderedFile>) -> Self
RenderOutput : +single(file: RenderedFile) -> Self
RenderOutput : +files() -> &[RenderedFile]
RenderedFile : name: String
RenderedFile : content: String
RenderedFile : +new(name: &str, content: &str) -> Result<Self, DomainError>
RenderedFile : +name() -> &str
RenderedFile : +content() -> &str
SourceFile : path: FilePath
SourceFile : language: Language
SourceFile : +new(path: FilePath, language: Language) -> Self
SourceFile : +path() -> &FilePath
SourceFile : +language() -> Language
ModuleName : +new(value: &str) -> Result<Self, DomainError>
ModuleName : +from_path(file_path: &str, root: &Path, module_mappings: &HashMap<String, String>) -> Option<Self>
ModuleName : +from_directory_group(member_path: &str) -> Option<Self>
ModuleName : +capitalize(s: &str) -> String
ModuleName : +as_str() -> &str
Language : +name() -> &'static str
FilePath : +new(value: &str) -> Result<Self, DomainError>
FilePath : +as_str() -> &str
RuleViolation : source_module: String
RuleViolation : target_module: String
RuleViolation : kind: RuleKind
RuleViolation : +new(source_module: &str, target_module: &str, kind: RuleKind) -> Self
RuleViolation : +source_module() -> &str
RuleViolation : +target_module() -> &str
RuleViolation : +kind() -> &RuleKind
RuleViolation : +message() -> String
BoundaryRule : source: String
BoundaryRule : target: String
BoundaryRule : +parse(s: &str) -> Option<Self>
BoundaryRule : +source() -> &str
BoundaryRule : +target() -> &str
BoundaryRule : +matches(src_module: &str, tgt_module: &str) -> bool
AnalysisConfig : excludes: Vec
AnalysisConfig : level: DiagramLevel
AnalysisConfig : module_mappings: HashMap
AnalysisConfig : scope: Option
AnalysisConfig : include_tests: bool
AnalysisConfig : changed_files: Option
AnalysisConfig : +with_excludes(excludes: Vec<String>) -> Self
AnalysisConfig : +with_level(level: DiagramLevel) -> Self
AnalysisConfig : +with_module_mappings(mappings: HashMap<String, String>) -> Self
AnalysisConfig : +excludes() -> &[String]
AnalysisConfig : +level() -> DiagramLevel
AnalysisConfig : +with_scope(scope: String) -> Self
AnalysisConfig : +module_mappings() -> &HashMap<String, String>
AnalysisConfig : +scope() -> Option<&str>
AnalysisConfig : +with_include_tests(include: bool) -> Self
AnalysisConfig : +include_tests() -> bool
AnalysisConfig : +with_changed_files(files: HashSet<String>) -> Self
AnalysisConfig : +changed_files() -> Option<&HashSet<String>>
AnalysisResult : elements: Vec
AnalysisResult : relationships: Vec
AnalysisResult : warnings: Vec
AnalysisResult : +new(elements: Vec<CodeElement>, relationships: Vec<Relationship>, warnings: Vec<AnalysisWarning>) -> Self
AnalysisResult : +empty() -> Self
AnalysisResult : +elements() -> &[CodeElement]
AnalysisResult : +relationships() -> &[Relationship]
AnalysisResult : +warnings() -> &[AnalysisWarning]
AnalysisWarning : file_path: FilePath
AnalysisWarning : line: usize
AnalysisWarning : message: String
AnalysisWarning : +new(file_path: FilePath, line: usize, message: &str) -> Result<Self, DomainError>
AnalysisWarning : +file_path() -> &FilePath
AnalysisWarning : +line() -> usize
AnalysisWarning : +message() -> &str
Relationship : source: String
Relationship : target: String
Relationship : kind: RelationshipKind
Relationship : source_file: Option
Relationship : +new(source: &str, target: &str, kind: RelationshipKind) -> Result<Self, DomainError>
Relationship : +with_source_file(file: FilePath) -> Self
Relationship : +source() -> &str
Relationship : +target() -> &str
Relationship : +kind() -> RelationshipKind
Relationship : +source_file() -> Option<&FilePath>
CodeElement : name: String
CodeElement : qualified_name: Option
CodeElement : kind: CodeElementKind
CodeElement : file_path: FilePath
CodeElement : line: usize
CodeElement : visibility: Visibility
CodeElement : module: Option
CodeElement : generics: Vec
CodeElement : attributes: Vec
CodeElement : fields: Vec
CodeElement : methods: Vec
CodeElement : +new(name: &str, kind: CodeElementKind, file_path: FilePath, line: usize) -> Result<Self, DomainError>
CodeElement : +with_visibility(visibility: Visibility) -> Self
CodeElement : +with_module(module: ModuleName) -> Self
CodeElement : +with_generics(generics: Vec<String>) -> Self
CodeElement : +with_attributes(attributes: Vec<String>) -> Self
CodeElement : +with_qualified_name(qn: String) -> Self
CodeElement : +name() -> &str
CodeElement : +qualified_name() -> &str
CodeElement : +kind() -> CodeElementKind
CodeElement : +file_path() -> &FilePath
CodeElement : +line() -> usize
CodeElement : +visibility() -> Visibility
CodeElement : +module() -> Option<&ModuleName>
CodeElement : +generics() -> &[String]
CodeElement : +attributes() -> &[String]
CodeElement : +with_fields(fields: Vec<String>) -> Self
CodeElement : +with_methods(methods: Vec<String>) -> Self
CodeElement : +fields() -> &[String]
CodeElement : +methods() -> &[String]
CodeGraph : elements: Vec
CodeGraph : relationships: Vec
CodeGraph : +new() -> Self
CodeGraph : +add_element(element: CodeElement)
CodeGraph : +add_relationship(relationship: Relationship)
CodeGraph : +elements() -> &[CodeElement]
CodeGraph : +relationships() -> &[Relationship]
CodeGraph : +modules() -> Vec<ModuleName>
CodeGraph : +elements_by_module() -> (HashMap<String, Vec<&CodeElement>>, Vec<&CodeElement>)
CodeGraph : +resolve_relationships() -> CodeGraph
CodeGraph : +filter_external_imports(known_modules: &HashSet<String>) -> CodeGraph
CodeGraph : +qualify() -> CodeGraph
CodeGraph : +cross_module_deps_for(module: &ModuleName) -> Vec<(ModuleName, usize)>
CodeGraph : +subgraph_by_module(module: &ModuleName) -> CodeGraph
AnalyzeCodebase : file_discovery: F
AnalyzeCodebase : source_analyzer: S
AnalyzeCodebase : +new(file_discovery: F, source_analyzer: S) -> Self
AnalyzeCodebase : +execute(root: &Path, config: &AnalysisConfig) -> Result<AnalyzeCodebaseResult, DomainError>
AnalyzeCodebaseResult : graph: CodeGraph
AnalyzeCodebaseResult : warnings: Vec
AnalyzeCodebaseResult : +graph() -> &CodeGraph
AnalyzeCodebaseResult : +warnings() -> &[AnalysisWarning]
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 : include_tests: bool
Cli : no_weights: bool
Cli : watch: bool
Cli : since: Option
Cli : split_by_module: bool
Cli : strict: bool
Cli : check: bool
Cli : verbose: u8
PackageSection : name String
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 : include_tests bool
Cli : no_weights bool
Cli : watch bool
Cli : since Option
Cli : split_by_module bool
Cli : strict bool
Cli : check bool
Cli : verbose u8
SourceFile --> FilePath
SourceFile --> Language
RuleViolation --> RuleKind

View File

@@ -3,19 +3,19 @@ classDiagram
class Cli
class Command
}
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 : include_tests: bool
Cli : no_weights: bool
Cli : watch: bool
Cli : since: Option
Cli : split_by_module: bool
Cli : strict: bool
Cli : check: bool
Cli : verbose: u8
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 : include_tests bool
Cli : no_weights bool
Cli : watch bool
Cli : since Option
Cli : split_by_module bool
Cli : strict bool
Cli : check bool
Cli : verbose u8