fix: sanitize mermaid member syntax (colons, angle brackets, refs)
This commit is contained in:
@@ -136,10 +136,10 @@ impl MermaidRenderer {
|
||||
}
|
||||
let name = element.name();
|
||||
for field in element.fields() {
|
||||
member_target.push(format!(" {name} : {field}"));
|
||||
member_target.push(format!(" {name} : {}", sanitize_member(field)));
|
||||
}
|
||||
for method in element.methods() {
|
||||
member_target.push(format!(" {name} : {method}"));
|
||||
member_target.push(format!(" {name} : {}", sanitize_member(method)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -274,6 +274,20 @@ impl MermaidRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
// Sanitize a field/method string for Mermaid classDiagram member syntax.
|
||||
// Mermaid uses `ClassName : member` — it cannot handle colons inside the
|
||||
// member (Rust's `field: Type`), nor reference/lifetime syntax (`&`, `'`),
|
||||
// nor angle-bracket generics (`<`, `>`).
|
||||
fn sanitize_member(s: &str) -> String {
|
||||
// Convert `name: Type` → `name Type` (drop the colon)
|
||||
let no_colon = s.replace(": ", " ").replace(':', " ");
|
||||
// Strip chars that break the Mermaid grammar
|
||||
no_colon
|
||||
.replace(['&', '\''], "")
|
||||
.replace('<', "[")
|
||||
.replace('>', "]")
|
||||
}
|
||||
|
||||
impl DiagramRenderer for MermaidRenderer {
|
||||
fn render(&self, graph: &CodeGraph) -> Result<RenderOutput, DomainError> {
|
||||
let content = match self.level {
|
||||
|
||||
Reference in New Issue
Block a user