Initial upload: TermDiagram v0.1.0
This commit is contained in:
34
src/termdiagram/generators/mermaid_generator.py
Normal file
34
src/termdiagram/generators/mermaid_generator.py
Normal file
@@ -0,0 +1,34 @@
|
||||
from typing import List
|
||||
from ..models import Module, ClassSymbol
|
||||
|
||||
|
||||
class MermaidDiagramGenerator:
|
||||
def generate_class_diagram(self, modules: List[Module]) -> str:
|
||||
lines = ["classDiagram"]
|
||||
lines.append(" direction TB")
|
||||
lines.append("")
|
||||
|
||||
for module in modules:
|
||||
for cls in module.classes:
|
||||
self._render_class(lines, cls)
|
||||
lines.append("")
|
||||
|
||||
for module in modules:
|
||||
for cls in module.classes:
|
||||
self._render_relationships(lines, cls)
|
||||
|
||||
return "\n".join(lines)
|
||||
|
||||
def _render_class(self, lines: List[str], cls: ClassSymbol):
|
||||
class_def = f" class {cls.name} {{"
|
||||
lines.append(class_def)
|
||||
|
||||
for method in cls.methods:
|
||||
sig = f"({', '.join(method.params)})":""
|
||||
lines.append(f" +{method.name}{sig}")
|
||||
|
||||
lines.append(" }")
|
||||
|
||||
def _render_relationships(self, lines: List[str], cls: ClassSymbol):
|
||||
for base in cls.bases:
|
||||
lines.append(f" {base} <|-- {cls.name}")
|
||||
Reference in New Issue
Block a user