🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Doxygen 注释助手 FantastyQAQ/dsh-doxygen

DeepSeek Harness
FantastyQAQ9 天前有提交已提供中文文档扫描:含敏感能力

为 C/C++ 源码生成并维护 Doxygen 注释

30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/28 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add FantastyQAQ/dsh-doxygen
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
L4 · 真实安装等级说明 →
数据截至 2026/10/28·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 9 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 3 处,展示前 3 条)
  • 读取本地文件
    index.js:48
    if (!existsSync(skillFile)) {
  • 读取本地文件
    index.js:53
    const { meta, body } = parseFrontmatter(readFileSync(skillFile, 'utf8'))
  • 执行外部命令来自配置/变量
    scripts/lib/env.mjs:80
    const result = spawnSync(command, [...args, '-c', PROBE_SOURCE], {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-skill
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

给 C/C++(含 Qt)源码写 Doxygen 注释的工作流:文件头、函数、模块分组、行尾与短注释,外加一次扫描,标出签名指纹已过期的注释。可作为 DSH 插件(技能)安装。

README

由 DeepSeek 最新模型翻译生成
doxygen-comment 一个智能体技能,用于在 C/C++(含 Qt)源码中生成和维护 Doxygen 注释。它不是片段合集,而是一条 AI 编码助手能端到端驱动的工作流:读取函数签名 → 生成或补全注释 → 代码变更时把注释标记为过期。 特性 - 按行号或函数名定位函数。 parse_function.py 用 tree-sitter 解析 C/C++ 签名,输出 JSON(函数名、返回类型、参数及其方向、起始行、签名指纹、可选函数体片段)。只读,无副作用。 - 六套模板。 文件头 / 函数 / 模块头 / 模块尾 / 行尾 /< / / 简短 @brief,对应编辑器片段前缀 doxygen_source、doxygen_fun、doxygen_module_head、doxygen_module_end、doxygen_rear、doxygen_nom。 - 只补全,不重写。 函数上方已有 Doxygen 块时,只补缺失字段并刷新指纹;原有措辞和行序保持不变。已带 @file 块的文件直接跳过。 - 签名指纹。 每个函数块末尾带 @doxygen_sig_fp <16 hex digits>;--scan 拿当前签名与它比对,把「签名已变、注释过期」的函数标为 stale,全仓库维护才成为可能。纯格式变更(空白、/& 位置)不改变指纹。 - 默认不写文件。
展开完整文档(README 剩余 1 节)
doxygen-comment

一个智能体技能,用于在 C/C++(含 Qt)源码中生成和维护 Doxygen 注释。它不是片段合集,而是一条 AI 编码助手能端到端驱动的工作流:读取函数签名 → 生成或补全注释 → 代码变更时把注释标记为过期。

特性

- 按行号或函数名定位函数。 parse_function.py 用 tree-sitter 解析 C/C++ 签名,输出 JSON(函数名、返回类型、参数及其方向、起始行、签名指纹、可选函数体片段)。只读,无副作用。
- 六套模板。 文件头 / 函数 / 模块头 / 模块尾 / 行尾 /< / / 简短 @brief,对应编辑器片段前缀 doxygen_source、doxygen_fun、doxygen_module_head、doxygen_module_end、doxygen_rear、doxygen_nom。
- 只补全,不重写。 函数上方已有 Doxygen 块时,只补缺失字段并刷新指纹;原有措辞和行序保持不变。已带 @file 块的文件直接跳过。
- 签名指纹。 每个函数块末尾带 @doxygen_sig_fp <16 hex digits>;--scan 拿当前签名与它比对,把「签名已变、注释过期」的函数标为 stale,全仓库维护才成为可能。纯格式变更(空白、/& 位置)不改变指纹。
- 默认不写文件。 先打印 diff;--write 才落盘,并保留目标文件的 CRLF/LF 风格与 UTF-8 / UTF-8-BOM / GBK 编码。
- 机器上没有 Python 时快速失败。 插件在注册时探测 Python 3.10+ 和 tree-sitter,把结论放在技能正文顶部;解释器缺失或损坏时,技能会指示智能体停下来、交出安装步骤,而不是让 shell 报错变成假的「函数未找到」。node scripts/check_env.mjs 可按需跑同一套探测——它是纯 Node,Python 跑不了的地方它也能跑。
- 对中文文本友好。 脚本强制 UTF-8 输出,避免 GBK Windows 控制台常见的乱码。

仓库结构

doxygen-comment/
├── SKILL.md # skill body: workflow, script contract, template list
├── README.md # this file
├── LICENSE # MIT
├── requirements.txt # Python dependencies
├── package.json # DSH plugin manifest — declares dsh.bundle ├── cordis.patch.yml # plugin insert row (id: doxygen-comment, name: dsh-doxygen) ├── index.js # registers the bundled skill when installed as a plugin ├── assets/ │ └── cpp.json # the six templates as editor snippets (optional) ├── references/ │ └── examples.md # 改前/改后示例、Qt 案例、常见错误 └── scripts/ ├── parse_function.py # 读:定位函数并解析签名(无副作用) ├── gen_doxygen.py # 写:渲染 / 插入 / 补全 / 指纹 / diff / 扫描 ├── install_snippets.py # 可选:把代码片段合并进 VS Code 风格的 IDE ├── check_env.mjs # 环境预检(Node,无需 Python 也能跑) └── lib/ └── env.mjs # check_env.mjs 背后的探测逻辑;index.js 也会用到

安装

1. 获取源码

git clone https://github.com/FantastyQAQ/dsh-doxygen.git

仓库名叫 dsh-doxygen,技能名叫 doxygen-comment:放进技能目录时,目录名要写成 doxygen-comment。

2. 安装

两种方式:作为 DSH 插件包安装,或把文件夹复制进技能目录。

作为 DSH 插件安装。 仓库根目录声明了 dsh.bundle,所以它能像其他插件一样安装:

dsh plugin --profile desktop add github:FantastyQAQ/dsh-doxygen

desktop 是桌面应用使用的配置档——换成你自己的配置档名(desktop+office 等)。
当前宿主(0.2.1 及更新版本)要求带 --profile 参数;只写 dsh plugin add ... 会报错: required option '--profile <name>' not specified。

index.js 会把 SKILL.md 注册为 doxygen-comment 技能,并替你解析 ${SKILL_DIR},不用猜路径。

复制文件夹安装。 目录自包含,脚本里没有项目相关的路径:

| 宿主 | 技能目录 |
| DeepSeek Harness | ~/.dsh/skills/doxygen-comment/ |
| Claude Code | ~/.claude/skills/doxygen-comment/,或项目的 .claude/skills/ |
| CodeBuddy CN / WorkBuddy | ~/.codebuddy/skills/doxygen-comment/、~/.workbuddy/skills/doxygen-comment/ |

e.g. install for Claude Code at user level
git clone https://github.com/FantastyQAQ/dsh-doxygen.git "$env:USERPROFILE\.claude\skills\doxygen-comment"

3. 依赖

需要 Python 3.10+;用 pip install tree-sitter tree-sitter-cpp 安装 C/C++ 解析器:

pip install tree-sitter tree-sitter-cpp
or the version-constrained install from this repo:
pip install -r requirements.txt

已在 tree-sitter 0.26.0 + tree-sitter-cpp 0.23.4 下测试;脚本同时支持 0.22 前后两套 Language/Parser 构造 API。Windows 上一律敲 python(某些环境里 python3 是别名陷阱)。

没装 Python 时,插件会直接说明,而不是跑到一半才失败。 插件包在注册技能时探测一次机器,把结论放在技能正文顶部;结论为失败时,会提示智能体停下来,把安装步骤交给你。探测逻辑是纯 Node (Node 随 DSH 一起提供),所以哪怕机器上根本没有 Python,它也能报出「没有 Python」:

bash
node scripts/check_env.mjs # 人类可读,退出码 0/2/3
node scripts/check_env.mjs --json # 机器可读

退出码:0 可用,2 完全没有 Python,3 找到 Python 但不可用(版本太旧、缺少模块、解释器损坏)。如果 Python 已安装但不在 PATH 上(venv、conda、便携版),把 DOXYGEN_PYTHON 设为解释器的绝对路径,然后重启会话。

4. 验证 bash
node scripts/check_env.mjs # 环境:Python + tree-sitter
python scripts/parse_function.py --file demo.cpp --list

如果第一条打印 ✅,第二条打印函数数组,说明安装成功。

快速开始

下面的命令都在技能根目录下运行;把 : <path> 换成你的源码路径。

1) 定位函数并解析签名 bash
python scripts/parse_function.py --file src/rtc.cpp --line 42 --body-lines 30
python scripts/parse_function.py --file src/rtc.cpp --name RTC_Init
python scripts/parse_function.py --file src/rtc.cpp --list # 列出全部(不含 body_snippet)

输出为 UTF-8 JSON: json { "name": "RTC_Init", "return_type": "int32_t",
"params": [
{"type": "const RTC_Config_t", "name": "config", "direction": "in"},
{"type": "uint32_t", "name": "status", "direction": "out"}
],
"start_line": 42,
"end_line": 68,
"is_definition": true,
"signature": "int32_t RTC_Init(const RTC_Config_t config, uint32_t status)",
"fingerprint": "ac50cb812857de87",
"file": "…/rtc.cpp" }

direction 由脚本按参数方向判断规则(SKILL.md 的「参数方向判断规则」一节)决定,直接采用即可。

2) 生成函数注释

把上一步得到的签名和函数体片段交给模型,让它产出描述 JSON: json { "brief": "初始化 RTC 外设",
"params": [
{"name": "config", "desc": "RTC 配置参数"}, {"name": "status", "desc": "初始化状态码,非 0 表示失败"} ], "return_desc": "0 成功,非 0 为错误码", "retval": "none", "details": "调用前需保证 32.768kHz 晶振已起振。"
}

然后渲染、预览并应用: bash
python scripts/gen_doxygen.py --file src/rtc.cpp --line 42 --kind fun --doc doc.json --diff
python scripts/gen_doxygen.py --file src/rtc.cpp --line 42 --kind fun --doc doc.json --write

不带 --diff/--write 时打印 JSON(含 status、notes、changed、diff 字段)。

3) 其他模板类型 bash

文件头(插入到文件第一行)

python scripts/gen_doxygen.py --file src/rtc.cpp --kind source \
--brief "RTC 驱动" --note "依赖 32.768kHz 晶振" --log-desc "创建" --diff

模块组头 / 组尾(成对使用)

python scripts/gen_doxygen.py --file src/rtc.cpp --kind module --line 30 \
--group rtc_api --title "RTC API" --brief "RTC 对外接口" --desc "全部函数可重入" --diff
python scripts/gen_doxygen.py --file src/rtc.cpp --kind module-end --line 120 --diff

尾随注释 / 短注释(无需解析签名)

python scripts/gen_doxygen.py --file src/rtc.h --kind rear --line 18 --text "已发送帧数" --diff
python scripts/gen_doxygen.py --file src/rtc.h --kind nom --line 25 --brief "RTC 状态枚举" --diff

4) 全仓库扫描(只读)

python scripts/gen_doxygen.py --scan src

返回 {"summary": {...}, "items": [...]},其中每个函数都带一个 status:

| 扫描状态 | 含义 | 该怎么做 |
| missing | 上方没有 Doxygen 注释块 | 按函数注释流程补一个 |
| stale | 注释块存在,但指纹已不匹配(代码改过了) | 先看描述,再刷新 |
| partial | 注释块存在,但字段不全(比如没有 @param) | 只补缺的部分 |
| ok | 完整,且指纹匹配 | 不用动 |

扫描会跳过 .git、build、libs、node_modules 这类目录。不要一次重写几百个文件:按状态分组,先让用户挑范围。

命令与退出码

| 脚本 | 用途 |
| parse_function.py --file --line/--name/--list [--body-lines N] | 解析函数签名 |
| gen_doxygen.py --file … --kind <fun\|nom\|source\|module\|module-end\|rear> | 生成一条注释 |
| gen_doxygen.py --scan <dir> | 扫描整棵目录树的注释状态 |

两个脚本共用同一套退出码:

| 退出码 | 含义 |
| 0 | 成功(包括 status=ok/skipped,即「无需改动」) |
| 1 | 找不到目标函数 / 参数不够 |
| 2 | 参数或文件错误(路径不存在、JSON 无效) |
| 3 | 缺少 tree-sitter 依赖 |

失败时原因写到 stderr,stdout 绝不会输出半截 JSON 文档。

作者与版权

文件头里的作者和版权没有通用默认值:不指定时,脚本写入占位符 <author> 和
Copyright (c) <current year> by <copyright holder>, All Rights Reserved.,由用户自行替换。
有两种指定方式:

python scripts/gen_doxygen.py --file a.cpp --kind source --brief "…" \
--author "Your Name (you@example.com)" --copyright "Copyright (c) 2026 by Your Company, All Rights Reserved."

set once, then every later command reuses it
export DOXYGEN_AUTHOR="Your Name (you@example.com)"
export DOXYGEN_COPYRIGHT="Copyright (c) {year} by Your Company, All Rights Reserved." # {year} becomes the current year

可选:把模板装进你的 IDE

assets/cpp.json 就是这六个模板,做成了编辑器代码片段。输入 doxygen_fun 再按 Tab 即可展开:

python scripts/install_snippets.py # dry run: detect IDEs, show what would be merged (writes nothing)
python scripts/install_snippets.py --apply --create # actually write
python scripts/install_snippets.py --uninstall --apply # remove the snippets this skill installed
- 目标文件是 <IDE user dir>\snippets\cpp.json;对它只做合并,绝不覆盖,原文件会备份为 cpp.json.bak-<timestamp>。
- 片段按语言隔离:cpp.json 只对 .cpp/.cc/.cxx 生效;要在 .c/.h 里用,必须把它们合并到同目录下的 c.json。
- 只改动这一个片段文件,settings.json 保持原样。
- CodeBuddy CN、VS Code、CodeBuddy、Cursor 和 Windsurf 都能自动探测;--target <file> 可显式指定路径。

使用说明

- 已有注释块一律补齐,绝不重写;函数上方的 // 注释会保留,Doxygen 块直接插在函数上方。
- 指纹行只由脚本写入和刷新——不要手写,也不要放在 / 之后。
- 注释一律用 UTF-8;注释里避免 ?、→ 这类非 ASCII 字符,否则源码编码转换时可能悄悄丢字符。
- 缩进跟随目标行:类成员、Qt signals:/slots: 条目的注释会自动对齐。
- 写回前先看 diff;批量改动前先跑 --scan。

兼容性

- Python 3.10+,支持 Windows / Linux / macOS(脚本已处理 Windows 控制台编码)。
- 面向 C/C++ 源码;Qt 项目开箱即用(覆盖 signals:/slots: 区域)。
- 与宿主无关:任何具备 Bash 和文件读写工具的智能体都能驱动它——不绑定特定 IDE 或插件。环境探测(scripts/check_env.mjs)额外需要 Node,DSH 已自带;在其他宿主里手动安装时,可回退到 环境预检 中的表格。

许可证

MIT。

仓库:<https://github.com/FantastyQAQ/dsh-doxygen>

中文说明

给 C/C++(含 Qt)源码生成与维护 Doxygen 注释的 Agent Skill(技能包)。
它不是片段收藏夹,而是一条可被 AI 编程助手直接调用的流水线: 读函数签名 → 生成/补全注释 → 代码改了自动标记注释过期。

特性

- 按行号或函数名定位函数:parse_function.py 用 tree-sitter 解析 C/C++ 签名,输出 JSON (函数名、返回类型、参数及方向、起始行、签名指纹、可选函数体片段),只读、无副作用。
- 六套模板:文件头 / 函数 / 模块头 / 模块尾 / 行尾 /< / / 简短 @brief,与编辑器片段前缀 doxygen_source、doxygen_fun、doxygen_module_head、doxygen_module_end、 doxygen_rear、doxygen_nom 一一对应。
- 只补不重写:函数上方已有 Doxygen 块时,只补齐缺失字段并刷新指纹,不改已有措辞与行序;文件头已有 @file 块则直接跳过。
- 签名指纹:函数注释块末尾写入 @doxygen_sig_fp <16 位十六进制>;--scan 对比当前签名与指纹,把「签名变了、注释过期」的函数标成 stale,从而支持仓库级自动维护。
纯格式化(空格、/& 位置)改动不会导致指纹变化。
- 默认不落盘:先输出 diff,--write 才写回;写回时保持目标文件原有的 CRLF/LF 与 UTF-8 / UTF-8-BOM / GBK 编码。
- 没装 Python 时提前拦下:插件注册技能时就探测 Python 3.10+ 与 tree-sitter,把结论写进技能正文最上方;解释器缺失或损坏时,技能会要求助手立即停止并转告安装步骤,而不是让 shell 报错变成「没找到函数」的假结论。node scripts/check_env.mjs 可随时手动复检——它是纯 Node 脚本,没有 Python 的机器上也能跑。
- 中文友好:脚本强制 UTF-8 输出,规避 Windows 控制台 GBK 造成的中文乱码。

目录结构

doxygen-comment/
├── SKILL.md # 技能正文:工作流、脚本契约、模板列表 ├── README.md # 本文件 ├── LICENSE # MIT ├── requirements.txt # Python 依赖 ├── package.json # DSH 插件清单——声明 dsh.bundle ├── cordis.patch.yml # 插件注册行(id: doxygen-comment,name: dsh-doxygen) ├── index.js # 以插件方式安装时注册本技能 ├── assets/ │ └── cpp.json # 六套模板的编辑器片段(可选安装) ├── references/ │ └── examples.md # 前后对照示例、Qt 场景、常见错误 └── scripts/ ├── parse_function.py # 读:定位函数 + 解析签名(无副作用) ├── gen_doxygen.py # 写:渲染 / 插入 / 补全 / 指纹 / diff / 扫描 ├── install_snippets.py # 可选:把片段合并进 VS Code 系 IDE ├── check_env.mjs # 环境预检(Node 脚本,没装 Python 也能跑) └── lib/ └── env.mjs # 预检实现;index.js 注册技能时也走它

安装

1. 获取源码

git clone https://github.com/FantastyQAQ/dsh-doxygen.git

仓库名是 dsh-doxygen,技能名仍是 doxygen-comment:放进宿主技能目录时目录名请用 doxygen-comment。

2. 安装

两种方式:装成 DSH 插件,或整目录复制进技能目录。

装成 DSH 插件(DeepSeek Harness):仓库根声明了 dsh.bundle,按普通插件安装即可:

dsh plugin --profile desktop add github:FantastyQAQ/dsh-doxygen

desktop 是桌面应用使用的配置档,换成你自己的配置档名即可(如 desktop+office)。
当前宿主(0.2.1 及更新)必须带 --profile:只敲 dsh plugin add ... 会报 required option '--profile <name>' not specified。

index.js 会把 SKILL.md 注册为 doxygen-comment 技能,并自动注入 ${SKILL_DIR},不必自己找路径。

整目录复制:目录自包含,脚本不含任何工程硬编码:

| 宿主 | 技能目录 |
| DeepSeek Harness | ~/.dsh/skills/doxygen-comment/ |
| Claude Code | ~/.claude/skills/doxygen-comment/,或工程的 .claude/skills/ |
| CodeBuddy CN / WorkBuddy | ~/.codebuddy/skills/doxygen-comment/、~/.workbuddy/skills/doxygen-comment/ |

例:装到 Claude Code 用户级技能目录
git clone https://github.com/FantastyQAQ/dsh-doxygen.git "$env:USERPROFILE\.claude\skills\doxygen-comment"

3. 依赖

需要 Python 3.10+,用 pip install tree-sitter tree-sitter-cpp 安装 C/C++ 解析依赖:

pip install tree-sitter tree-sitter-cpp
或使用本仓库的固定下限写法:
pip install -r requirements.txt

实测组合 tree-sitter 0.26.0 + tree-sitter-cpp 0.23.4;脚本对 0.22 前后的 Language/Parser 构造 API 都做了兼容。Windows 下统一写 python(python3 在部分环境是别名陷阱)。

目标机器没装 Python 时,插件不会带着半截错误继续跑。 以插件方式安装时,index.js 在注册技能的那一刻就探测一次环境,把结论放在技能正文最上方的「环境自检」提示块里:没装 Python / 版本过低 / 缺 tree_sitter 模块时,提示块会写字面指令,要求助手立即停止调用脚本,并把安装步骤转告用户。
探测本身是纯 Node 脚本(DSH 自带 Node),所以在没有 Python 的机器上照样能跑出结论:

node scripts/check_env.mjs # 人看:✅/❌ + 安装步骤
node scripts/check_env.mjs --json # 机器看

退出码:0 可用、2 完全没装 Python、3 装了但不可用(版本过低 / 缺模块 / 解释器损坏)。
Python 不在 PATH 上(venv、conda、绿色版)时,把 DOXYGEN_PYTHON 设为解释器绝对路径后重启会话即可。

4. 验证

node scripts/check_env.mjs # 环境:Python + tree-sitter
python scripts/parse_function.py --file demo.cpp --list

第一条输出 ✅、第二条打印出函数数组,即安装成功。

快速开始

以下命令都在技能根目录下执行;: <path> 换成你的源码路径。

1) 定位函数并解析签名

python scripts/parse_function.py --file src/rtc.cpp --line 42 --body-lines 30
python scripts/parse_function.py --file src/rtc.cpp --name RTC_Initbash
python scripts/parse_function.py --file src/rtc.cpp --list # 批量列出(无 body_snippet)

输出为 UTF-8 JSON: json { "name": "RTC_Init", "return_type": "int32_t",
"params": [
{"type": "const RTC_Config_t", "name": "config", "direction": "in"},
{"type": "uint32_t", "name": "status", "direction": "out"}
],
"start_line": 42,
"end_line": 68,
"is_definition": true,
"signature": "int32_t RTC_Init(const RTC_Config_t config, uint32_t* status)",
"fingerprint": "ac50cb812857de87",
"file": "…/rtc.cpp" }

direction 由脚本按[参数方向规则](SKILL.md 的「参数方向判断规则」一节)判定,可直接沿用。

2) 生成函数注释

把上一步的签名 + 函数体片段交给模型,产出描述 JSON: json { "brief": "初始化 RTC 外设",
"params": [
{"name": "config", "desc": "RTC 配置参数"}, {"name": "status", "desc": "初始化状态码,非 0 表示失败"} ], "return_desc": "0 成功,非 0 为错误码", "retval": "none", "details": "调用前需保证 32.768kHz 晶振已起振。"
}

再渲染、预演、落盘: bash
python scripts/gen_doxygen.py --file src/rtc.cpp --line 42 --kind fun --doc doc.json --diff
python scripts/gen_doxygen.py --file src/rtc.cpp --line 42 --kind fun --doc doc.json --write

不带 --diff/--write 时输出 JSON(含 status、notes、changed、diff 字段)。

3) 其他类型 bash

文件头(插到文件第一行)

python scripts/gen_doxygen.py --file src/rtc.cpp --kind source \
--brief "RTC 驱动" --note "依赖 32.768kHz 晶振" --log-desc "创建" --diff

模块分组头 / 尾(成对使用)

python scripts/gen_doxygen.py --file src/rtc.cpp --kind module --line 30 \
--group rtc_api --title "RTC API" --brief "RTC 对外接口" --desc "全部函数可重入" --diff
python scripts/gen_doxygen.py --file src/rtc.cpp --kind module-end --line 120 --diff

行尾注释 / 简短注释(不需要解析签名)

python scripts/gen_doxygen.py --file src/rtc.h --kind rear --line 18 --text "已发送帧数" --diff
python scripts/gen_doxygen.py --file src/rtc.h --kind nom --line 25 --brief "RTC 状态枚举" --diff

4) 仓库级扫描(只读) bash
python scripts/gen_doxygen.py --scan src

返回 {"summary": {...}, "items": [...]},每个函数带 status:

| scan status | 含义 | 处理方式 |
| missing | 上方没有 Doxygen 块 | 按函数注释流程补 |
| stale | 有块但签名指纹对不上(代码改过) | 复核描述后刷新 |
| partial | 有块但缺字段(如缺 @param) | 只补缺失字段 |
| ok | 完整且指纹一致 | 不动 |

扫描会自动跳过 .git、build、libs、node_modules 等目录。不要一次性改上百个文件:先按状态分组汇报,让用户挑范围。

命令与退出码

| 脚本 | 用途 |
| parse_function.py --file --line/--name/--list [--body-lines N] | 解析签名 |
| gen_doxygen.py --file … --kind <fun\|nom\|source\|module\|module-end\|rear> | 生成单处注释 |
| gen_doxygen.py --scan <目录> | 批量扫描注释状态 |

退出码两个脚本一致:

| 码 | 含义 |
| 0 | 成功(含 status=ok/skipped 的「无需改动」) |
| 1 | 未找到目标函数 / 参数不足 |
| 2 | 参数或文件错误(路径不存在、JSON 非法) |
| 3 | 缺少 tree-sitter 依赖 |

失败时原因写入 stderr,stdout 不会输出半截 JSON。

作者与版权

文件头注释里的作者、版权没有通用默认值:不指定时脚本写出 <author>、
Copyright (c) <当年> by <copyright holder>, All Rights Reserved. 这样的占位符,
由使用者替换。指定方式两种: bash
python scripts/gen_doxygen.py --file a.cpp --kind source --brief "…" \
--author "Your Name (you@example.com)" --copyright "Copyright (c) 2026 by Your Company, All Rights Reserved."
一次性预设,之后所有命令沿用
export DOXYGEN_AUTHOR="Your Name (you@example.com)"
export DOXYGEN_COPYRIGHT="Copyright (c) {year} by Your Company, All Rights Reserved." # {year} 会替换成当年

可选:把模板装进 IDE

assets/cpp.json 就是六套模板的编辑器片段。手敲 doxygen_fun + Tab 即可展开:

python scripts/install_snippets.py # 预演:探测 IDE、显示将合并的内容(不写盘)
python scripts/install_snippets.py --apply --create # 实际写入
python scripts/install_snippets.py --uninstall --apply # 撤销

- 目标文件是 <IDE 用户目录>\snippets\cpp.json,合并而非覆盖,写入前自动备份 cpp.json.bak-<时间戳>。
- 片段按语言作用域生效:cpp.json 只对 .cpp/.cc/.cxx 生效,要给 .c/.h 用需另行并入同目录的 c.json。
- 只改这一个片段文件,不动 settings.json。
- 支持探测 CodeBuddy CN、VS Code、CodeBuddy、Cursor、Windsurf;也可用 --target <file> 指定路径。

使用注意

- 已有注释块一律只补不重写;函数上方原有的 // 说明保留,Doxygen 块插在函数正上方。
- 指纹行只由脚本写入/刷新,不要手写,也不要放到 */ 之后。
- 注释统一 UTF-8;不要写 ?、→ 之类的非 ASCII 特殊字形,避免源码转换时丢字。
- 缩进跟随目标行:类内成员、Qt signals:/slots: 下的注释会自动对齐。
- 落盘前先看 diff;批量改动前先 --scan。

兼容性

- Python 3.10+,Windows / Linux / macOS 均可(脚本对 Windows 控制台编码做了处理)。
- C/C++ 源码;Qt 工程可直接用(signals:/slots: 区域已覆盖)。
- 宿主无关:只要有 Bash + 文件读写工具即可驱动,不依赖特定 IDE 或插件。
环境预检脚本 scripts/check_env.mjs 额外需要 Node(DSH 自带);非 DSH 宿主若没有 Node,直接按安装章节的手工方式执行 python -c "import tree_sitter, tree_sitter_cpp" 也能自检。

许可

MIT。
预览分享卡片长什么样 ↓FantastyQAQ/dsh-doxygen
分享 · DeepSeek Harness Hub
FantastyQAQ/dsh-doxygen

为 C/C++ 源码生成并维护 Doxygen 注释

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部