fix: sanitize mermaid member syntax (colons, angle brackets, refs)
This commit is contained in:
@@ -136,10 +136,10 @@ impl MermaidRenderer {
|
|||||||
}
|
}
|
||||||
let name = element.name();
|
let name = element.name();
|
||||||
for field in element.fields() {
|
for field in element.fields() {
|
||||||
member_target.push(format!(" {name} : {field}"));
|
member_target.push(format!(" {name} : {}", sanitize_member(field)));
|
||||||
}
|
}
|
||||||
for method in element.methods() {
|
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 {
|
impl DiagramRenderer for MermaidRenderer {
|
||||||
fn render(&self, graph: &CodeGraph) -> Result<RenderOutput, DomainError> {
|
fn render(&self, graph: &CodeGraph) -> Result<RenderOutput, DomainError> {
|
||||||
let content = match self.level {
|
let content = match self.level {
|
||||||
|
|||||||
Reference in New Issue
Block a user