fix: move class members outside mermaid namespace blocks (parse error fix)
All checks were successful
CI / Check / Test (push) Successful in 2m41s
Architecture Docs / Generate diagrams (push) Successful in 3m4s

This commit is contained in:
2026-06-16 16:50:17 +02:00
parent 39a87520a1
commit 4f6fa6feff
2 changed files with 29 additions and 11 deletions

View File

@@ -50,9 +50,11 @@ impl MermaidRenderer {
let has_namespaces = !grouped.is_empty();
let mut seen: HashSet<String> = HashSet::new();
let mut deferred_members: Vec<String> = Vec::new();
for element in &ungrouped {
if seen.insert(element.name().to_string()) {
Self::push_class_lines(&mut lines, element, " ");
Self::push_class_lines(&mut lines, &mut deferred_members, element, " ", false);
}
}
@@ -62,13 +64,21 @@ impl MermaidRenderer {
let mut ns_seen: HashSet<String> = HashSet::new();
for element in elements {
if ns_seen.insert(element.name().to_string()) {
Self::push_class_lines(&mut lines, element, " ");
Self::push_class_lines(
&mut lines,
&mut deferred_members,
element,
" ",
true,
);
}
}
lines.push(" }".to_string());
}
}
lines.extend(deferred_members);
let mut rel_seen: HashSet<String> = HashSet::new();
for rel in graph.relationships() {
if rel.kind() == RelationshipKind::Import {
@@ -88,24 +98,32 @@ impl MermaidRenderer {
lines.join("\n")
}
fn push_class_lines(lines: &mut Vec<String>, element: &CodeElement, indent: &str) {
fn push_class_lines(
lines: &mut Vec<String>,
deferred: &mut Vec<String>,
element: &CodeElement,
indent: &str,
in_namespace: bool,
) {
lines.push(format!(
"{indent}class {}",
Self::format_element_name(element)
));
let member_target = if in_namespace { deferred } else { lines };
if element.visibility() != Visibility::Public {
lines.push(format!(
"{indent}<<{}>> {}",
member_target.push(format!(
" <<{}>> {}",
Self::format_visibility(element.visibility()),
element.name()
));
}
let name = element.name();
for field in element.fields() {
lines.push(format!("{indent}{name} : {field}"));
member_target.push(format!(" {name} : {field}"));
}
for method in element.methods() {
lines.push(format!("{indent}{name} : {method}"));
member_target.push(format!(" {name} : {method}"));
}
}