fix: move class members outside mermaid namespace blocks (parse error fix)
This commit is contained in:
@@ -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}"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user