Skip to content

Instantly share code, notes, and snippets.

@tjx666
Last active July 16, 2025 05:13
Show Gist options
  • Save tjx666/9dd8e1e4ee7d196845bc4312288f1b99 to your computer and use it in GitHub Desktop.
Save tjx666/9dd8e1e4ee7d196845bc4312288f1b99 to your computer and use it in GitHub Desktop.
Mermaid 代码生成:强制性语法检查清单
## Mermaid 代码生成:强制性语法检查清单
在生成任何 Mermaid 图表之前,你 **必须** 将最终代码与以下清单中的每一条规则进行逐一比对,确保 100% 符合规范。**这是一个硬性要求,优先级高于其他风格建议。** 你的行动步骤应该是:
1. 在脑海中草拟 Mermaid 逻辑。
2. 编写实际的 Mermaid 代码。
3. **根据下面的清单,逐行审查你刚写的代码。**
4. 修正所有不符合规范的地方。
5. 最终输出修正后的、可直接复制运行的代码。
6. 输出 mermaid 代码块之后,在下一行紧接着输出:我已检查过 mermaid 语法完全符合检测清单的要求
---
### 清单详情
#### 规则 1:边标签 (Edge Label) - 必须是绝对纯文本
> **核心:** `|...|` 内部严禁出现任何 Markdown 标记、列表标记、括号。这最容易导致渲染失败。
- **✅ Do**: `A -->|处理纯文本数据| B`
- **❌ Don't**: `A -->|1. 有序列表项| B` (禁止数字列表)
- **❌ Don't**: `A -->|- 无序列表项| B` (禁止横杠列表)
- **❌ Don't**: `A -->|转换数据 (重要)| B` (禁止圆括号)
- **❌ Don't**: `A -->|转换数据 [重要]| B` (禁止方括号)
#### 规则 2:节点定义 (Node Definition) - 正确处理特殊字符
> **核心:** 节点文本和子图标题应使用引号包裹以支持特殊字符。`()` `[]` 等括号用于定义节点形状,出现在节点文本中会解析错误。
- **场景:** 节点文本自身包含括号,如 `React (JSX)`。
- **✅ Do**: `I_REACT["<b>React 组件 (JSX)</b>"]` (使用引号包裹文本)
- **❌ Don't**: `I_REACT(<b>React 组件 (JSX)</b>)` (错误用法,括号被解析为形状定义)
- **❌ Don't**: `subgraph 插件增强 (Plugins)` (子图标题也应该使用双号包裹,不然这里圆括号也会导致语法解析错误)
#### 规则 3:文本中的双引号 - 必须转义
> **核心:** 在节点文本内的引号要使用 `&quot;` 来表示双引号。
- **✅ Do**: `A[一个包含 &quot;引号&quot; 的节点]`
- **❌ Don't**: `A[一个包含 "引号" 的节点]`
#### 规则 4:格式化 - 必须使用 HTML 标签
> **核心:** 换行、加粗等所有格式化都应使用 HTML 标签,不要使用 Markdown。
- **✅ Do (高可靠性)**: `A["<b>加粗</b>和<code>代码</code><br>这是新一行"]`
- **❌ Don't (普遍无效)**: `C["# 这是一个标题"]`
- **❌ Don't (普遍无效)**: ``C["`const` 表示常量"]``
- **⚠️ Warn (结果不一致)**: `B["虽然 **Markdown 加粗** 可能碰巧能用,但应避免"]`
#### 规则 5:参与者、消息标签字段禁止使用 HTML 标签(如 `<b>`, `<code>`)
> **新增规则(重点)**
> 在时序图等 Mermaid 语法中,`participant` 的显示名(`as` 后),以及消息描述区域(`:` 后面的内容),**禁止使用 `<b>`, `<code>` 等 HTML 标签**。这些标签在多数环境不会生效,反而会被原样输出或导致解析兼容性问题。
> - **✅ Do**: `participant A as 客户端`
> - **❌ Don't**: `participant A as <b>客户端</b>`
> - **✅ Do**: `A->>B: 1. 请求建立连接`
> - **❌ Don't**: `A->>B: 1. <code>请求建立连接</code>`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment