mcpField
D
diagramming-code

diagramming-code

github.com/trailofbits开发7.9k4.2k 次安装今天更新
代码仓库

关于 diagramming-code

diagramming-code 是一项基于 Trailmark 代码图生成 Mermaid 图表的技能,适用于需要查看代码关系的开发者。它涵盖调用路径、类结构、依赖、复杂度和数据流,并根据版本使用内置脚本或 Trailmark 命令。

主要功能

  1. 01基于 Trailmark 图生成 Mermaid
  2. 02支持六种代码图表类型
  3. 03按版本选择命令或内置脚本
  4. 04可设置焦点、深度、方向和语言

适用场景

  1. 01查看某函数周边的调用关系
  2. 02绘制类继承或成员结构
  3. 03梳理模块依赖
  4. 04追踪入口点到敏感函数的数据流

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trailofbits/skills --skill diagramming-code

安装后在 Claude Code 中输入/diagramming-code确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
assets/
trail-of-bits-mark.svg
references/
diagram-types.md
mermaid-syntax.md
scripts/
diagram.py
test_skill_commands.py

详细介绍

代码图示

根据 Trailmark 的代码图谱生成 Mermaid 图表。预置脚本负责生成 Mermaid 语法;Claude 选择图表类型和参数。Trailmark 0.4.0 内置了 trailmark diagram 命令;仅在检查版本和命令后使用,否则使用此技能捆绑的脚本。

适用场景

  • 可视化函数之间的调用路径
  • 绘制类继承层级
  • 映射模块导入依赖
  • 展示包含成员的类结构
  • 使用颜色编码突出复杂度热点
  • 从入口点追踪到敏感函数的数据流

不适用场景

  • 查询图谱但无需可视化(使用 trailmark 技能)
  • 突变测试分流(使用 genotoxic 技能)
  • 并非从代码推导出的架构图(手动绘制)

前置条件

必须安装 trailmark。如果 uv run trailmark 运行失败,请执行:

uv tool install trailmark
# Python snippets: uv run --with trailmark python -   (a tool env is not importable)

不要退而使用阅读源代码后手动编写 Mermaid。此脚本使用 Trailmark 解析后的图谱,确保准确性。如果安装失败,请向用户报告错误。

版本检查

检查是否支持原生 v0.4 图表功能:

trailmark diagram --help 2>/dev/null || uv run trailmark diagram --help 2>/dev/null

如果成功,可以使用 trailmark diagram。如果失败,请使用 uv run {baseDir}/scripts/diagram.py,以保留旧版技能工作流。不要假设 Trailmark 0.2.x 中存在原生 CLI。


快速入门

uv run {baseDir}/scripts/diagram.py \
    --target {targetDir} --language auto --type call-graph \
    --focus <function> --depth 2

# Trailmark 0.4.0+ equivalent after the Version Gate succeeds
uv run trailmark diagram \
    --target {targetDir} --language auto --type call-graph \
    --focus <function> --depth 2

输出为原始 Mermaid 文本。请用围栏代码块包裹:

```mermaid
flowchart TB
    ...
```

图表类型

├─ "Who calls what?"               → --type call-graph
├─ "Class inheritance?"             → --type class-hierarchy
├─ "Module dependencies?"           → --type module-deps
├─ "Class members and structure?"   → --type containment
├─ "Where is complexity highest?"   → --type complexity
└─ "Path from input to function?"   → --type data-flow

各类型的详细示例请参阅 references/diagram-types.md。


工作流

Diagram Progress:
- [ ] Step 1: Verify trailmark is installed
- [ ] Step 2: Identify diagram type from user request
- [ ] Step 3: Determine focus node and parameters
- [ ] Step 4: Run diagram.py script (or native trailmark diagram on v0.4+)
- [ ] Step 5: Verify output is non-empty and well-formed
- [ ] Step 6: Embed diagram in response

步骤 1: 运行 uv run trailmark analyze --language auto --summary {targetDir}。如果失败,请安装。绘制图表时不要运行 engine.preanalysis():图表命令会自行构建图谱,不使用预分析数据,因此无论是否运行预分析,各种图表类型的结果都相同。data-flow 使用 Trailmark 解析时记录的入口点。

如果自动检测出的目标语言不正确,请使用明确指定的语言或逗号分隔的语言列表(例如 python,rust)重新运行。

步骤 2: 根据上面的决策树,将用户请求对应到 --type。

步骤 3: 对于 call-graph 和 data-flow,确定焦点函数。默认 --depth 2。依赖流请使用 --direction LR。

步骤 4: 运行脚本并捕获标准输出。 如果原生 v0.4 CLI 可用,两种命令均可;若需要与此技能参考内容保持一致的行为,请优先使用捆绑脚本。

步骤 5: 检查输出是否以 flowchart 或 classDiagram 开头,并且至少包含一个节点。如果输出为空或格式错误,请参阅 references/mermaid-syntax.md。

步骤 6: 用 ```mermaid ``` 围栏代码块包裹输出。


脚本参考

uv run {baseDir}/scripts/diagram.py [OPTIONS]
# or, on Trailmark 0.4.0+:
uv run trailmark diagram [OPTIONS]
参数简写默认值描述
--target-t必填要分析的目录
--language-lpython源语言
--type-T必填图表类型(见上文)
--focus-f无将此节点置于图表中心
--depth-d2BFS 遍历深度
--directionTB布局:TB(从上到下)或 LR(从左到右)
--threshold10complexity 类型的最低复杂度
示例
# Call graph centered on a function
uv run {baseDir}/scripts/diagram.py -t src/ -l auto -T call-graph -f parse_file

# Class hierarchy for a Rust project
uv run {baseDir}/scripts/diagram.py -t src/ -l rust -T class-hierarchy

# Module dependency map, left-to-right
uv run {baseDir}/scripts/diagram.py -t src/ -l auto -T module-deps --direction LR

# Class members
uv run {baseDir}/scripts/diagram.py -t src/ -l auto -T containment

# Complexity heatmap (threshold 5)
uv run {baseDir}/scripts/diagram.py -t src/ -l auto -T complexity --threshold 5

# Data flow from entrypoints to a specific function
uv run {baseDir}/scripts/diagram.py -t src/ -l auto -T data-flow -f execute_query

自定义

方向: 层级视图使用 TB(默认值);依赖链等从左到右的流程使用 LR。

深度: 增大 --depth 可查看更多调用图。减小它可减少杂乱。如果图表超过 100 个节点,脚本会发出警告。

焦点: 对于非简单代码库中的 call-graph,始终使用 --focus。对于 data-flow,省略焦点时会自动选择复杂度最高的 10 个热点作为目标。

语言: 对于多语言或不熟悉的仓库,优先使用 --language auto。只有在确定目标为单一语言,或需要排除无关组件时,才明确指定语言。


支持文档

评论

支持 Markdown