docs: update architecture diagrams
This commit is contained in:
@@ -2,6 +2,11 @@ classDiagram
|
||||
namespace Adapters {
|
||||
class MermaidRenderer
|
||||
class AsciiRenderer
|
||||
class PythonProjectAnalyzer
|
||||
class ProjectSection
|
||||
class PoetrySection
|
||||
class ToolSection
|
||||
class PyprojectToml
|
||||
class WalkdirDiscovery
|
||||
class TreeSitterAnalyzer
|
||||
class LanguageExtractor
|
||||
@@ -10,10 +15,16 @@ classDiagram
|
||||
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
|
||||
@@ -21,33 +32,53 @@ classDiagram
|
||||
class PackageSection
|
||||
}
|
||||
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()
|
||||
AsciiRenderer : +new()
|
||||
AsciiRenderer : -format_kind()
|
||||
WalkdirDiscovery : +new()
|
||||
WalkdirDiscovery : -detect_language()
|
||||
WalkdirDiscovery : -is_excluded()
|
||||
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
|
||||
<<private>> PoetrySection
|
||||
PoetrySection : name: Option
|
||||
PoetrySection : dependencies: HashMap
|
||||
<<private>> ToolSection
|
||||
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()
|
||||
TreeSitterAnalyzer : -extractor_for()
|
||||
TreeSitterAnalyzer : +new() -> Self
|
||||
TreeSitterAnalyzer : -extractor_for(language: Language) -> Option<&dyn LanguageExtractor>
|
||||
FileOutputWriter : output_path: OutputPath
|
||||
FileOutputWriter : +new()
|
||||
FileOutputWriter : +single_file()
|
||||
FileOutputWriter : +new(output_dir: PathBuf) -> Self
|
||||
FileOutputWriter : +single_file(path: PathBuf) -> Self
|
||||
<<private>> OutputPath
|
||||
StdoutOutputWriter : +new()
|
||||
StdoutOutputWriter : +new() -> Self
|
||||
<<private>> RawRules
|
||||
RawRules : allow: Vec
|
||||
RawRules : deny: Vec
|
||||
<<private>> RawConfig
|
||||
RawConfig : analysis: RawAnalysis
|
||||
RawConfig : output: RawOutput
|
||||
RawConfig : modules: HashMap
|
||||
RawConfig : rules: RawRules
|
||||
<<private>> RawAnalysis
|
||||
RawAnalysis : exclude: Vec
|
||||
RawAnalysis : level: Option
|
||||
@@ -56,9 +87,27 @@ classDiagram
|
||||
RawOutput : path: Option
|
||||
RawOutput : split_by_module: bool
|
||||
TomlConfigLoader : raw: RawConfig
|
||||
TomlConfigLoader : +from_path()
|
||||
TomlConfigLoader : -parse_level()
|
||||
CargoWorkspaceAnalyzer : +new()
|
||||
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
|
||||
<<private>> NodeData
|
||||
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
|
||||
<<private>> WorkspaceToml
|
||||
WorkspaceToml : workspace: Option
|
||||
<<private>> WorkspaceSection
|
||||
@@ -68,6 +117,8 @@ classDiagram
|
||||
MemberToml : dependencies: HashMap
|
||||
<<private>> PackageSection
|
||||
PackageSection : name: String
|
||||
ToolSection --> PoetrySection
|
||||
PyprojectToml --> ToolSection
|
||||
TreeSitterAnalyzer --> RustExtractor
|
||||
TreeSitterAnalyzer --> PythonExtractor
|
||||
RustExtractor <|-- LanguageExtractor
|
||||
@@ -75,4 +126,12 @@ classDiagram
|
||||
FileOutputWriter --> OutputPath
|
||||
RawConfig --> RawAnalysis
|
||||
RawConfig --> RawOutput
|
||||
TomlConfigLoader --> RawConfig
|
||||
RawConfig --> RawRules
|
||||
TomlConfigLoader --> RawConfig
|
||||
class adapters_module["Adapters"] {
|
||||
<<module>>
|
||||
}
|
||||
class domain_module["Domain"] {
|
||||
<<module>>
|
||||
}
|
||||
adapters_module --> domain_module : 13 deps
|
||||
@@ -2,29 +2,19 @@ classDiagram
|
||||
namespace Application {
|
||||
class AnalyzeCodebase
|
||||
class AnalyzeCodebaseResult
|
||||
class FakeFileDiscovery
|
||||
class FakeOutputWriter
|
||||
class FakeDiagramRenderer
|
||||
class FakeResponse
|
||||
class FakeSourceAnalyzer
|
||||
}
|
||||
AnalyzeCodebase : file_discovery: F
|
||||
AnalyzeCodebase : source_analyzer: S
|
||||
AnalyzeCodebase : +new()
|
||||
AnalyzeCodebase : +execute()
|
||||
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()
|
||||
AnalyzeCodebaseResult : +warnings()
|
||||
FakeFileDiscovery : files: Vec
|
||||
FakeFileDiscovery : +new()
|
||||
FakeFileDiscovery : +empty()
|
||||
FakeOutputWriter : written: RefCell
|
||||
FakeOutputWriter : +new()
|
||||
FakeOutputWriter : +written_outputs()
|
||||
FakeDiagramRenderer : +new()
|
||||
<<private>> FakeResponse
|
||||
FakeSourceAnalyzer : results: HashMap
|
||||
FakeSourceAnalyzer : +new()
|
||||
FakeSourceAnalyzer : +with_result()
|
||||
FakeSourceAnalyzer : +with_error()
|
||||
AnalyzeCodebaseResult : +graph() -> &CodeGraph
|
||||
AnalyzeCodebaseResult : +warnings() -> &[AnalysisWarning]
|
||||
class application_module["Application"] {
|
||||
<<module>>
|
||||
}
|
||||
class domain_module["Domain"] {
|
||||
<<module>>
|
||||
}
|
||||
application_module --> domain_module : 1 dep
|
||||
@@ -11,6 +11,9 @@ classDiagram
|
||||
class RelationshipKind
|
||||
class Visibility
|
||||
class CodeElementKind
|
||||
class RuleKind
|
||||
class RuleViolation
|
||||
class BoundaryRule
|
||||
class AnalysisConfig
|
||||
class AnalysisResult
|
||||
class AnalysisWarning
|
||||
@@ -27,70 +30,91 @@ classDiagram
|
||||
}
|
||||
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()
|
||||
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()
|
||||
RenderOutput : +single()
|
||||
RenderOutput : +files()
|
||||
RenderOutput : +new(files: Vec<RenderedFile>) -> Self
|
||||
RenderOutput : +single(file: RenderedFile) -> Self
|
||||
RenderOutput : +files() -> &[RenderedFile]
|
||||
RenderedFile : name: String
|
||||
RenderedFile : content: String
|
||||
RenderedFile : +new()
|
||||
RenderedFile : +name()
|
||||
RenderedFile : +content()
|
||||
RenderedFile : +new(name: &str, content: &str) -> Result<Self, DomainError>
|
||||
RenderedFile : +name() -> &str
|
||||
RenderedFile : +content() -> &str
|
||||
SourceFile : path: FilePath
|
||||
SourceFile : language: Language
|
||||
SourceFile : +new()
|
||||
SourceFile : +path()
|
||||
SourceFile : +language()
|
||||
ModuleName : +new()
|
||||
ModuleName : +from_path()
|
||||
ModuleName : +from_directory_group()
|
||||
ModuleName : +capitalize()
|
||||
ModuleName : +as_str()
|
||||
Language : +name()
|
||||
FilePath : +new()
|
||||
FilePath : +as_str()
|
||||
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 : +with_excludes()
|
||||
AnalysisConfig : +with_level()
|
||||
AnalysisConfig : +with_module_mappings()
|
||||
AnalysisConfig : +excludes()
|
||||
AnalysisConfig : +level()
|
||||
AnalysisConfig : +with_scope()
|
||||
AnalysisConfig : +module_mappings()
|
||||
AnalysisConfig : +scope()
|
||||
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()
|
||||
AnalysisResult : +empty()
|
||||
AnalysisResult : +elements()
|
||||
AnalysisResult : +relationships()
|
||||
AnalysisResult : +warnings()
|
||||
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()
|
||||
AnalysisWarning : +file_path()
|
||||
AnalysisWarning : +line()
|
||||
AnalysisWarning : +message()
|
||||
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()
|
||||
Relationship : +with_source_file()
|
||||
Relationship : +source()
|
||||
Relationship : +target()
|
||||
Relationship : +kind()
|
||||
Relationship : +source_file()
|
||||
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
|
||||
@@ -100,37 +124,42 @@ classDiagram
|
||||
CodeElement : attributes: Vec
|
||||
CodeElement : fields: Vec
|
||||
CodeElement : methods: Vec
|
||||
CodeElement : +new()
|
||||
CodeElement : +with_visibility()
|
||||
CodeElement : +with_module()
|
||||
CodeElement : +with_generics()
|
||||
CodeElement : +with_attributes()
|
||||
CodeElement : +name()
|
||||
CodeElement : +kind()
|
||||
CodeElement : +file_path()
|
||||
CodeElement : +line()
|
||||
CodeElement : +visibility()
|
||||
CodeElement : +module()
|
||||
CodeElement : +generics()
|
||||
CodeElement : +attributes()
|
||||
CodeElement : +with_fields()
|
||||
CodeElement : +with_methods()
|
||||
CodeElement : +fields()
|
||||
CodeElement : +methods()
|
||||
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()
|
||||
CodeGraph : +add_element()
|
||||
CodeGraph : +add_relationship()
|
||||
CodeGraph : +elements()
|
||||
CodeGraph : +relationships()
|
||||
CodeGraph : +modules()
|
||||
CodeGraph : +elements_by_module()
|
||||
CodeGraph : +resolve_relationships()
|
||||
CodeGraph : +filter_external_imports()
|
||||
CodeGraph : +subgraph_by_module()
|
||||
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
|
||||
AnalysisConfig --> DiagramLevel
|
||||
AnalysisWarning --> FilePath
|
||||
Relationship --> RelationshipKind
|
||||
|
||||
@@ -1,4 +1,36 @@
|
||||
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
|
||||
@@ -11,6 +43,9 @@ classDiagram
|
||||
class RelationshipKind
|
||||
class Visibility
|
||||
class CodeElementKind
|
||||
class RuleKind
|
||||
class RuleViolation
|
||||
class BoundaryRule
|
||||
class AnalysisConfig
|
||||
class AnalysisResult
|
||||
class AnalysisWarning
|
||||
@@ -28,189 +63,59 @@ classDiagram
|
||||
namespace Application {
|
||||
class AnalyzeCodebase
|
||||
class AnalyzeCodebaseResult
|
||||
class FakeFileDiscovery
|
||||
class FakeOutputWriter
|
||||
class FakeDiagramRenderer
|
||||
class FakeResponse
|
||||
class FakeSourceAnalyzer
|
||||
}
|
||||
namespace Adapters {
|
||||
class MermaidRenderer
|
||||
class AsciiRenderer
|
||||
class WalkdirDiscovery
|
||||
class TreeSitterAnalyzer
|
||||
class LanguageExtractor
|
||||
class RustExtractor
|
||||
class PythonExtractor
|
||||
class FileOutputWriter
|
||||
class OutputPath
|
||||
class StdoutOutputWriter
|
||||
class RawConfig
|
||||
class RawAnalysis
|
||||
class RawOutput
|
||||
class TomlConfigLoader
|
||||
class CargoWorkspaceAnalyzer
|
||||
class WorkspaceToml
|
||||
class WorkspaceSection
|
||||
class MemberToml
|
||||
class PackageSection
|
||||
}
|
||||
namespace Presentation {
|
||||
class Cli
|
||||
class Command
|
||||
}
|
||||
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()
|
||||
RenderOutput : files: Vec
|
||||
RenderOutput : +new()
|
||||
RenderOutput : +single()
|
||||
RenderOutput : +files()
|
||||
RenderedFile : name: String
|
||||
RenderedFile : content: String
|
||||
RenderedFile : +new()
|
||||
RenderedFile : +name()
|
||||
RenderedFile : +content()
|
||||
SourceFile : path: FilePath
|
||||
SourceFile : language: Language
|
||||
SourceFile : +new()
|
||||
SourceFile : +path()
|
||||
SourceFile : +language()
|
||||
ModuleName : +new()
|
||||
ModuleName : +from_path()
|
||||
ModuleName : +from_directory_group()
|
||||
ModuleName : +capitalize()
|
||||
ModuleName : +as_str()
|
||||
Language : +name()
|
||||
FilePath : +new()
|
||||
FilePath : +as_str()
|
||||
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()
|
||||
AnalysisResult : elements: Vec
|
||||
AnalysisResult : relationships: Vec
|
||||
AnalysisResult : warnings: Vec
|
||||
AnalysisResult : +new()
|
||||
AnalysisResult : +empty()
|
||||
AnalysisResult : +elements()
|
||||
AnalysisResult : +relationships()
|
||||
AnalysisResult : +warnings()
|
||||
AnalysisWarning : file_path: FilePath
|
||||
AnalysisWarning : line: usize
|
||||
AnalysisWarning : message: String
|
||||
AnalysisWarning : +new()
|
||||
AnalysisWarning : +file_path()
|
||||
AnalysisWarning : +line()
|
||||
AnalysisWarning : +message()
|
||||
Relationship : source: String
|
||||
Relationship : target: String
|
||||
Relationship : kind: RelationshipKind
|
||||
Relationship : source_file: Option
|
||||
Relationship : +new()
|
||||
Relationship : +with_source_file()
|
||||
Relationship : +source()
|
||||
Relationship : +target()
|
||||
Relationship : +kind()
|
||||
Relationship : +source_file()
|
||||
CodeElement : name: String
|
||||
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()
|
||||
CodeElement : +with_visibility()
|
||||
CodeElement : +with_module()
|
||||
CodeElement : +with_generics()
|
||||
CodeElement : +with_attributes()
|
||||
CodeElement : +name()
|
||||
CodeElement : +kind()
|
||||
CodeElement : +file_path()
|
||||
CodeElement : +line()
|
||||
CodeElement : +visibility()
|
||||
CodeElement : +module()
|
||||
CodeElement : +generics()
|
||||
CodeElement : +attributes()
|
||||
CodeElement : +with_fields()
|
||||
CodeElement : +with_methods()
|
||||
CodeElement : +fields()
|
||||
CodeElement : +methods()
|
||||
CodeGraph : elements: Vec
|
||||
CodeGraph : relationships: Vec
|
||||
CodeGraph : +new()
|
||||
CodeGraph : +add_element()
|
||||
CodeGraph : +add_relationship()
|
||||
CodeGraph : +elements()
|
||||
CodeGraph : +relationships()
|
||||
CodeGraph : +modules()
|
||||
CodeGraph : +elements_by_module()
|
||||
CodeGraph : +resolve_relationships()
|
||||
CodeGraph : +filter_external_imports()
|
||||
CodeGraph : +subgraph_by_module()
|
||||
AnalyzeCodebase : file_discovery: F
|
||||
AnalyzeCodebase : source_analyzer: S
|
||||
AnalyzeCodebase : +new()
|
||||
AnalyzeCodebase : +execute()
|
||||
AnalyzeCodebaseResult : graph: CodeGraph
|
||||
AnalyzeCodebaseResult : warnings: Vec
|
||||
AnalyzeCodebaseResult : +graph()
|
||||
AnalyzeCodebaseResult : +warnings()
|
||||
FakeFileDiscovery : files: Vec
|
||||
FakeFileDiscovery : +new()
|
||||
FakeFileDiscovery : +empty()
|
||||
FakeOutputWriter : written: RefCell
|
||||
FakeOutputWriter : +new()
|
||||
FakeOutputWriter : +written_outputs()
|
||||
FakeDiagramRenderer : +new()
|
||||
<<private>> FakeResponse
|
||||
FakeSourceAnalyzer : results: HashMap
|
||||
FakeSourceAnalyzer : +new()
|
||||
FakeSourceAnalyzer : +with_result()
|
||||
FakeSourceAnalyzer : +with_error()
|
||||
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()
|
||||
AsciiRenderer : +new()
|
||||
AsciiRenderer : -format_kind()
|
||||
WalkdirDiscovery : +new()
|
||||
WalkdirDiscovery : -detect_language()
|
||||
WalkdirDiscovery : -is_excluded()
|
||||
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
|
||||
<<private>> PoetrySection
|
||||
PoetrySection : name: Option
|
||||
PoetrySection : dependencies: HashMap
|
||||
<<private>> ToolSection
|
||||
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()
|
||||
TreeSitterAnalyzer : -extractor_for()
|
||||
TreeSitterAnalyzer : +new() -> Self
|
||||
TreeSitterAnalyzer : -extractor_for(language: Language) -> Option<&dyn LanguageExtractor>
|
||||
FileOutputWriter : output_path: OutputPath
|
||||
FileOutputWriter : +new()
|
||||
FileOutputWriter : +single_file()
|
||||
FileOutputWriter : +new(output_dir: PathBuf) -> Self
|
||||
FileOutputWriter : +single_file(path: PathBuf) -> Self
|
||||
<<private>> OutputPath
|
||||
StdoutOutputWriter : +new()
|
||||
StdoutOutputWriter : +new() -> Self
|
||||
<<private>> RawRules
|
||||
RawRules : allow: Vec
|
||||
RawRules : deny: Vec
|
||||
<<private>> RawConfig
|
||||
RawConfig : analysis: RawAnalysis
|
||||
RawConfig : output: RawOutput
|
||||
RawConfig : modules: HashMap
|
||||
RawConfig : rules: RawRules
|
||||
<<private>> RawAnalysis
|
||||
RawAnalysis : exclude: Vec
|
||||
RawAnalysis : level: Option
|
||||
@@ -219,9 +124,27 @@ classDiagram
|
||||
RawOutput : path: Option
|
||||
RawOutput : split_by_module: bool
|
||||
TomlConfigLoader : raw: RawConfig
|
||||
TomlConfigLoader : +from_path()
|
||||
TomlConfigLoader : -parse_level()
|
||||
CargoWorkspaceAnalyzer : +new()
|
||||
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
|
||||
<<private>> NodeData
|
||||
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
|
||||
<<private>> WorkspaceToml
|
||||
WorkspaceToml : workspace: Option
|
||||
<<private>> WorkspaceSection
|
||||
@@ -231,6 +154,143 @@ classDiagram
|
||||
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
|
||||
@@ -239,12 +299,17 @@ classDiagram
|
||||
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
|
||||
AnalysisConfig --> DiagramLevel
|
||||
AnalysisWarning --> FilePath
|
||||
Relationship --> RelationshipKind
|
||||
@@ -254,6 +319,9 @@ classDiagram
|
||||
MermaidRenderer --> DiagramLevel
|
||||
MermaidRenderer <|-- DiagramRenderer
|
||||
AsciiRenderer <|-- DiagramRenderer
|
||||
ToolSection --> PoetrySection
|
||||
PyprojectToml --> ToolSection
|
||||
PythonProjectAnalyzer <|-- ProjectAnalyzer
|
||||
WalkdirDiscovery <|-- FileDiscovery
|
||||
TreeSitterAnalyzer --> RustExtractor
|
||||
TreeSitterAnalyzer --> PythonExtractor
|
||||
@@ -265,11 +333,11 @@ classDiagram
|
||||
StdoutOutputWriter <|-- OutputWriter
|
||||
RawConfig --> RawAnalysis
|
||||
RawConfig --> RawOutput
|
||||
RawConfig --> RawRules
|
||||
TomlConfigLoader --> RawConfig
|
||||
TomlConfigLoader <|-- ConfigLoader
|
||||
D2Renderer --> DiagramLevel
|
||||
D2Renderer <|-- DiagramRenderer
|
||||
HtmlRenderer <|-- DiagramRenderer
|
||||
CargoWorkspaceAnalyzer <|-- ProjectAnalyzer
|
||||
AnalyzeCodebaseResult --> CodeGraph
|
||||
FakeFileDiscovery <|-- FileDiscovery
|
||||
FakeOutputWriter <|-- OutputWriter
|
||||
FakeDiagramRenderer <|-- DiagramRenderer
|
||||
FakeSourceAnalyzer <|-- SourceAnalyzer
|
||||
AnalyzeCodebaseResult --> CodeGraph
|
||||
@@ -11,6 +11,10 @@ classDiagram
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user