写作与公文
为 QML 组件或 Qt Quick 应用生成独立…
当有一个或多个 .qml 文件、粘贴的 QML 代码或整个 Qt Quick 项目,需要生成面向开发者的 Markdown 参考文档时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
为 QML 组件或 Qt Quick 应特定
解决思路
- 核心要求:除 Usage Example 部分外,不在 Markdown 代码围栏中放置任何代码片段;用散文和表格描述代码行为、方法签名和属性类型。
- 核心要求:生成文档时理解上下文:应用或模块做什么、每个组件在项目架构中的角色、它依赖什么。
- 核心要求:属性始终用 Markdown 表格记录,不要用项目符号列表。
- 核心要求:从项目文档或代码模式推断并遵循项目的 QML 开发约定。
- 文档结构:为每个 QML 组件生成名为 `<ComponentName>.md` 的 Markdown 文件,并按列出的章节组织;无内容的章节省略。
- 文档结构第 1 节:在 Component Overview 中描述应用或模块做什么以及该组件在项目架构中的位置;再描述该组件做什么、视觉或逻辑角色、开发者何时使用它、解决什么问题;保持简洁,让新开发者一眼理解用途。
- 文档结构第 2 节:在 Project Structure and Dependencies 中说明组件与项目的关系:哪些文件导入或实例化它;它导入哪些 Qt Quick 模块、自定义项目 QML 类型、C++ 注册类型;对自定义 QML 类型说明其提供什么及来源;相关构建或模块要求如 CMake targets、qmldir、qmltypes。
- 文档结构第 3 节:在 Component Hierarchy and Role 中,如果组件继承或组合其他元素,描述层级;解释基类型提供什么以及本组件新增或覆盖什么。
- 文档结构第 4 节:在 Properties 中使用列为 Property | Type | Default | Required | Description 的 Markdown 表格。
- 文档结构第 4 节:列出每个声明的属性,包括 `property alias` 条目。
- 文档结构第 4 节:对 `required` 属性,将 Required 列标记为 **Yes**。
- 文档结构第 4 节:按属性控制或启用的内容描述每个属性。
- 文档结构第 4 节:对接受固定值集合(枚举、字符串字面量)的属性,列出有效值及含义。
- 文档结构第 5 节:在 Signals 中,对每个信号说明名称和参数列表(每个参数的类型和名称)。
- 文档结构第 5 节:对每个信号解释什么条件触发它。
- 文档结构第 5 节:对每个信号描述连接的处理程序预期做什么。
- 文档结构第 5 节:每个信号格式为子章节 `#### signalName(paramType paramName)`。
- 文档结构第 6 节:在 Methods 中,对每个函数说明名称、参数名和类型、返回类型(如有)。
- 文档结构第 6 节:对每个函数解释它做什么以及何时调用。
- 文档结构第 6 节:对每个函数注意副作用,如发出信号、修改状态、重启计时器。
- 文档结构第 6 节:每个方法格式为子章节 `#### methodName(paramType paramName) : returnType`。
- 文档结构第 7 节:在 Inter-Component Interactions 中描述组件如何与应用其他部分通信。
- 文档结构第 7 节:说明哪些属性由外部绑定驱动。
- 文档结构第 7 节:说明哪些信号被父级或兄弟组件消费。
- 文档结构第 7 节:说明哪些函数从该文件外部调用。
- 文档结构第 7 节:说明它读取或写入的共享状态、模型或单例。
- 文档结构第 8 节:仅对可复用组件添加 Usage Example 章节。
- 文档结构第 8 节:可复用组件判断条件:根类型不是 `Window` 或 `ApplicationWindow`。
- 文档结构第 8 节:可复用组件判断条件:声明一个或多个 `property` 条目,尤其是 `required property` 或 `property alias`,供调用者设置。
- 文档结构第 8 节:可复用组件判断条件:其角色是组合进更大 UI 或作为代码库中的构建块。
- 文档结构第 8 节:写简短、自包含片段,展示实例化组件的最小正确方式,设置每个 `required` 属性和常用属性。
- Pre-flight:在读取任何源文件前,先检查要文档的文件是否已有文档。
- Pre-flight 如何检查 1:确定预期输出位置,文档写到源文件旁的 `doc/` 子目录,例如源在 `src/` 时文档在 `src/doc/`;单文件 `Foo.h` 的预期文档是 `src/doc/Foo.md`,`main.cpp` 是 `src/doc/main.md`。
- Pre-flight 如何检查 2:检查 `doc/` 目录和相关 `.md` 文件是否已存在;使用 `Glob` 工具或运行 'ls' shell 命令,不要读取源文件。
- Pre-flight 如何检查 3:如果未发现现有文档,正常继续读取源文件并生成文档。
- Pre-flight 如何检查 3:如果部分或全部文档已存在,不要读取源文件;使用 `AskUserQuestion` 询问用户选择,问题为 “I found existing documentation for [list the files that already have docs]. What would you like me to do?”。
- Pre-flight 如何检查 3:询问选项包括 **Update existing docs**:重新读取源文件并就地重写受影响的 `.md` 文件。
- Pre-flight 如何检查 3:询问选项包括 **Skip files that already have docs**:只为缺少文档的源文件生成文档。
- Pre-flight 如何检查 3:询问选项包括 **Generate fresh docs for everything**:无条件覆盖所有现有文档。
- Pre-flight 如何检查 3:询问选项包括 **Cancel**:停止,不做任何更改。
- Pre-flight 如何检查 3:等待用户选择后再做其他事。
- Pre-flight 如何检查 4:选择 *Update* 或 *Generate fresh* 时,读取所有相关源文件并正常继续,覆盖现有 `.md` 文件。
- Pre-flight 如何检查 4:选择 *Skip* 时,只读取缺少对应 `.md` 的源文件,并只为这些生成文档。
- Pre-flight 如何检查 4:选择 *Cancel* 时,停止并向用户确认未做任何更改。
- Input handling:对单个文件或粘贴代码,只文档该组件;从 imports、属性名和组件结构推断应用上下文。
- Input handling:对文件夹或项目,遍历目录树,查找所有 `.qml` 文件。
- Input handling:对文件夹或项目,还要读取任何 `CMakeLists.txt`、`qmldir` 或 C++ 头文件,以提供模块结构和注册类型上下文。
- Input handling:对文件夹或项目,为每个组件生成一个 `.md` 文件。
- Input handling:如果文档化超过一个文件,还要创建 `doc/index.md`,列出每个组件、一行描述和链接。
- Parsing QML:读取根元素作为基类型,并记录它继承什么。
- Parsing QML:识别 `property <type> <name>: <default>`,记录为带可选默认值的自定义属性。
- Parsing QML:识别 `property alias <name>: <target>`,按目标类型记录为别名。
- Parsing QML:识别 `required property`,说明必须由组件用户显式设置。
- Parsing QML:识别 `signal <name>(<params>)` 为自定义信号。
- Parsing QML:识别 `function <name>(<params>) { }` 为 JS 函数。
- Parsing QML:识别 `readonly property`,记录为只读,不能从外部设置。
- Parsing QML:识别 `component <Name> : BaseType { }` 为内联组件定义,并在同一文件内作为单独组件文档化。
- Parsing QML:跳过以 `_` 前缀的内部辅助,除非它们明确 intended as public API。
- Parsing QML:如果属性缺少清晰描述,用名称、类型和使用上下文推断有意义描述。
- Tone and style:为懂 QML 但没见过该组件的开发者写作。
- Tone and style:类型要精确,如 `string`、`int`、`real`、`color`、`bool`、`var`、`list<Type>` 等。
- Tone and style:使用现在时,例如 “Controls the width…” 而不是 “Will control…”。
- Tone and style:避免填充内容,直接描述。
- Tone and style:描述行为而非实现,解释会发生什么。
- Tone and style:当属性接受固定值集合时,总是在描述中枚举这些值。
- Output location:在源 QML 文件旁的 `doc/` 子目录生成文档。
- Output location:仅当文档化 2 个或更多组件时才创建 `doc/index.md`;单文件文档只创建组件 `.md` 文件。
- Quality check:保存前验证每个属性、信号和函数都已文档化,没有静默跳过。
- Quality check:只要存在可观察绑定或外部调用,就填写 Inter-Component Interactions。
- Quality check:确保文档项目无关,不假设代码或提供上下文未 evident 的细节。
- 在输出中包含 “AI assistance has been used to create this output.”。
适用边界 · 注意事项
- 用户要求 QDoc 格式输出时不要使用。
- 不要用于非 QML 或非 Qt Quick 源文件的文档生成。
- 已有文档且用户选择取消或跳过时,不要覆盖或重写已有 `.md` 文件。