ワンクリックで
generate-readme
自动生成 miniprogram 组件的 README.md,包括
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
自动生成 miniprogram 组件的 README.md,包括
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
为 miniprogram 组件补充或生成单元测试。适用于 `packages/$COMPONENT` 下基于 `miniprogram-simulate` 的组件测试编写、补测、回归修复和快照维护,尤其适合需要 mock 小程序运行时、校验 props/watcher、以及通过真实 DOM 事件触发交互的场景。
为 Doraemon UI 小程序组件补充 rootClassName/rootStyle 与语义化 classNames/styles 自定义能力。适用于需要扫描 packages 组件,并同步更新 index.ts、types.ts 与 WXML 模板的任务,让组件暴露根节点快捷 props 和 classNames/styles props,根据 classes key 推导 SemanticName,并接入 useCSSVarCls、useSemanticClassNames、useSemanticStylesString。
基于 `wux-weapp` 源码生成或重构 `packages/miniprogram.*` 组件,优先对齐 `packages/miniprogram.button` 的目录结构、代码风格、类型定义、文档、测试和 playground。
扫描 packages 下的所有 LESS 文件,将 rpx 单位转换为 px,值除以 2。
根据组件实际定义重构小程序组件,严格按照优先级处理 @Prop/@Component.props、_renderProxy、theme 字段及 LESS 样式
| name | generate-readme |
| description | 自动生成 miniprogram 组件的 README.md,包括 |
| allowed-tools | Bash(npm *), Read, Grep, Write |
为 miniprogram 组件生成 README.md 中的 ## API 和 ## CSS Variables 章节。
参考实现:packages/miniprogram.button/README.md
组件源文件路径模式:packages/miniprogram.$NAME/src/index.ts、src/index.wxml、assets/*.less
用户指定组件路径(如 packages/miniprogram.button)。从目录名提取组件名:
packages/miniprogram.button → Buttonpackages/miniprogram.checkbox → Checkboxpackages/miniprogram. 前缀,剩余部分转为 PascalCase并行读取以下文件:
{组件路径}/src/index.ts — props、事件{组件路径}/src/index.wxml — slots、externalClasses{组件路径}/src/types.ts(如果存在)— props 精确类型、Semantic DOM 名称{组件路径}/assets/ 下所有 .less 文件 — CSS variables当一个包同时导出多个组件时,## API 章节必须按“组件分组”输出,且每个组件内的章节顺序固定:
### Xxx props### Xxx Semantic DOM(如果支持,否则跳过)### Xxx slot### Xxx externalClasses要求:
props、slot、externalClasses 交叉摆放## CSS Variables 必须放在所有组件 API 小节之后,统一作为最后一节slot,不要打乱剩余顺序### Xxx props)在 index.ts 中找到 @Component({ ... }) 块内的 props: { ... } 对象。
每个 prop 的结构为:
propName: {
type: String, // String | Boolean | Number | Object | Array
default: 'xxx', // 默认值
}
提取规则:
name: prop 的 keytype: String → string,Boolean → boolean,Number → number,Object → object,Array → arraydefault: 原始默认值重要:@Component props 的描述和精确类型来自类字段重声明
@Component 中定义的 props 通常会在类体中用 ! 断言重声明,并附带 JSDoc 注释和更精确的类型:
// @Component 中:
formType: { type: String, default: '' }
// 类体中(更精确的类型 + 描述):
/**
* 用于 form 组件,点击后触发的表单事件类型 ← 从这里取描述
*/
formType!: 'submit' | 'reset' | '' ← 用这个更精确的类型覆盖 String→string
处理规则:
@Component.props 中的每个 prop,在类体中搜索同名的 propName!: ... 重声明字段@Component 中的类型(类字段类型更精确)@description 标签 > 无描述)找到类字段上的 @Prop({...}) 装饰器:
/**
* 描述文本
* @type {('solid' | 'outline' | 'clear')}
*/
@Prop({
type: String,
default: 'solid',
})
fill: 'solid' | 'outline' | 'clear'
提取规则:
name: 字段名type: 优先使用字段的 TypeScript 类型注解(如 'solid' | 'outline' | 'clear'),其次用装饰器内的 type 构造函数映射default: 装饰器内的 default 值事件有两种定义方式,两种都要扫描:
方式一:@Emit 装饰器
@Event()
@Emit('getuserinfo')
onGetUserInfo(e: CustomEvent) { ... }
方式二:this.$emit() 调用(无装饰器)
/**
* @fires click
*/
onClick() {
if (!this.disabled && !this.loading) {
this.$emit('click')
}
}
扫描方法体内的 this.$emit('xxx') 调用,提取事件名。
提取规则(两种方式通用):
name: bind: + 事件名(如 bind:getuserinfo、bind:click)type: 优先取方法参数的 TypeScript 类型注解推导的完整签名(如 (event: CustomEvent<ButtonGetUserInfo>) => void),其次用 (event: CustomEvent) => voiddefault: -描述: 取 JSDoc 的第一行文本,或 @fires 标签所在方法的 JSDoc 描述注意:事件名统一用小写(如 @Emit('getUserInfo') → bind:getuserinfo),因为微信小程序事件系统对大小写不敏感。
对每个 prop/事件,从 JSDoc 注释中提取描述:
@ 标签的行)作为描述@type、@default、@memberof、@see 等标签行示例:
/**
* 按钮颜色
*
* @type {PresetColor}
* @memberof Button
*/
→ 描述为 "按钮颜色"
如果 props 中引用了自定义类型(如 PresetColor、NativeButtonOpenType),在 props 表格前插入类型定义代码块。
type / enum 定义(可能在 @doraemon-ui/miniprogram.shared 等包中)src/types.ts 或 node_modules/ 中的声明文件Props 按以下顺序排列:
@Prop 装饰器的)@Component.props 中定义的)bind:xxx 行)| 原始默认值 | 表格显示 |
|---|---|
'' (空字符串) | - |
false | false |
true | true |
| 数字 | 数字原样 |
| 非空字符串 | 去掉引号 |
### Xxx Semantic DOM)当组件支持语义化 classNames/styles 定制时,在 ## API 中补充 ### Xxx Semantic DOM 章节。
生成 3 列表格:| 参数 | 描述 | 示例 |
满足以下任一条件即可认为支持:
src/index.ts 的 @Component.props 中存在 classNames 或 stylessrc/types.ts 中存在 classNames?: Partial<Record<SemanticName, ...>> / styles?: Partial<Record<SemanticName, ...>>src/index.ts 中使用了 useSemanticClassNames、useSemanticStyles、useSemanticStylesString、useMergeSemantic如果不支持,则跳过本节。
优先级如下:
src/types.ts 中的 export type SemanticName = 'root' | 'hover' | ...src/index.ts 中 classNames!: Partial<Record<SemanticName, string>> / styles!: ... 关联到的 SemanticNamesrc/index.ts 中 classNames: { ... }、styles: { ... } 对象字面量的 key提取后按源码定义顺序输出。
描述规则:
src/types.ts 中的注释
SemanticName、classNames、styles 相关的类型定义、接口字段或映射对象上的注释src/types.ts 中为某个语义节点提供了注释说明,直接使用该注释的第一行作为描述src/index.ts 中的注释
root → 根元素,设置容器样式和布局hover → 按压元素,按钮按下去的样式类src/types.ts,其次读取 src/index.ts 中该节点附近的注释 / JSDoc 第一行示例列统一使用 info[wxml]> 语法,供 docs 站点的 popover 插件渲染:
info[wxml]>`<dora-button classNames="{{ { root: 'my-classname' } }}" styles="{{ { root: { color: 'red' } } }}" />`
生成规则:
packages/miniprogram.button → dora-buttonpackages/miniprogram.selector-group → dora-selector-groupclassNames 示例始终包含当前语义节点:
classNames="{{ { root: 'my-classname' } }}"styles 示例始终包含当前语义节点:
styles="{{ { root: { color: 'red' } } }}"### Xxx Semantic DOM 必须放在 ### Xxx props 之后、### Xxx slot 之前。
### Xxx slot)扫描 index.wxml 中的 <slot> 元素:
<slot></slot> → 默认 slot,名称 `-`
<slot name="header"></slot> → 命名 slot,名称 `header`
生成 2 列表格:| 名称 | 描述 |
描述规则:
-)→ 描述为 "自定义内容"### Xxx externalClasses)扫描 index.wxml 中所有 dora- 前缀的 CSS class 属性:
class="dora-class {{ classes.wrap }}"
hover-class="dora-hover-class {{ ... }}"
提取每个 dora-*-class 标识符(在 {{ }} 之前的部分)。
生成 2 列表格:| 名称 | 描述 |
## CSS Variables)在 assets/ 下所有 .less 文件中搜索 // @prop 注释:
// @prop --text-color: Text color of the button
// @prop --background-color: Background color of the button
提取 --var-name 和后面的描述文本。注意:@prop 注释中的英文描述需要翻译为中文。
描述翻译约定:变量名含 z-index 时,统一用 "xxx的z-index" 格式(如 --z-index → "组件的z-index"),而非 "堆叠顺序"。
对每个 CSS 变量,在 assets 的 LESS 文件中搜索 --var-name: <value> 的赋值语句,提取默认值。
查找位置(按优先级):
.button-native() 内的 --opacity: 1;)— 这是组件初始状态的值.button-color() 内的 --text-color: @color;)— 需追踪 Less 变量调用实参&--rounded { --border-radius: var(--height); })Less 变量追踪:当默认值是一个 Less 变量(如 @button-disabled-opacity)时,去 assets/variables.less 中查找该变量的定义,一直追踪到具体值:
--disabled-opacity: @button-disabled-opacity;
→ variables.less: @button-disabled-opacity: var(--dora-button-disabled-opacity, 0.5);
→ 默认值: 0.5
递归解析要求:
assets/variables.less 本身又 @import 了设计 token 文件(如 @doraemon-ui/style/lib/index.less、theme.default.less),必须继续解析这些导入文件中的 Less 变量定义var(--token, @less-var) 这种 fallback 形式,默认值不能停在 @less-var,必须继续追到最终字面值@index-list-item-padding-horizontal: var(--dora-index-list-item-padding-horizontal, @spacing-xl);@spacing-xl: 16px;16px@margin-component-base: 6px、@font-size-sm: 12px、@border-radius-base: var(--dora-border-radius, 8px),应分别解析为:
6px12pxvar(--dora-border-radius, 8px)(如果最终定义本身就是 CSS 变量表达式,则默认值列保留整个 var(...) 原文)16px、6px、12pxvar(...),表格写完整 var(...)var(...) 的 fallback 部分如果仍包含 Less 变量、Less 颜色函数或可安全计算的表达式,必须继续解析为更具体的值var(--dora-color-step-15, mix(@black-value, @white-value, 15%)) 应进一步写成 var(--dora-color-step-15, #d9d9d9)@spacing-xl)或错误的猜测值直接写进 README如果变量有多个赋值,取初始化混入中的第一次赋值作为表格默认值。
在 assets/variables.less 中搜索 var(--dora- 模式,建立映射表:
@button-border-radius: var(--dora-button-border-radius, @border-radius-base);
@button-clear-activated-opacity: var(--dora-button-clear-activated-opacity, 0.4);
提取规则:
var(--dora-xxx, fallback) 中提取 --dora-xxx 作为全局变量名@button-border-radius)与 CSS 变量名(--border-radius)关联匹配步骤:
variables.less,提取所有 var(--dora-*, ...) 模式,记录 { lessVar: '@xxx', globalVar: '--dora-xxx' }--border-radius),在 LESS 源码中搜索设置它的 Less 变量(如 --border-radius: @button-border-radius)var(--dora-*, ...),则提取对应的 --dora-* 作为全局变量-对于直接使用颜色混入参数的变量(如 --text-color: @color),需要追踪混入调用处的实参:
.button-color(#get-color(positive)[], #get-color(positive, active)[], #get-color(positive, contrast)[]);
→ --text-color 对应 @color 参数,实参为 #get-color(positive, contrast)[],无法直接映射到 --dora-* 变量时,检查对应位置是否有全局变量关联。
模式 B:无 @prop 注释(如 input 组件)
当 assets/ 下的 .less 文件中没有 // @prop 注释时,改用此模式:
assets/variables.less,提取所有 var(--dora-*, fallback) 模式var(--dora-xxx, fallback) 生成 CSS Variables 表格的一行:
属性: --dora-xxx(提取 var() 内的第一个参数)描述: 从变量名推导(如 --dora-input-label-width → "输入框标签宽度")默认值: fallback 值,用反引号包裹全局变量: -(这些变量本身就是组件的全局覆盖点)assets/index.less 中也使用了 -- 开头的 CSS 变量(用于组件内部),同样纳入表格,并搜索其赋值来源4 列表格:| 属性 | 描述 | 默认值 | 全局变量 |
描述必须为中文。即使 @prop 注释是英文,也要翻译为中文后填入表格。
变量名含 z-index 时,统一用 "xxx的z-index" 格式,如 --z-index → "组件的z-index"。
默认值格式化:
var(--dora-border-radius, 8px))保持原样,用反引号包裹#fff、1、48px)用反引号包裹var(...),写完整 var(...)将生成的章节写入组件的 README.md,格式如下:
## API
### {ComponentName} props
[可选的类型定义代码块]
| 参数 | 类型 | 描述 | 默认值 |
| ---- | ---- | ---- | ------ |
| ... | ... | ... | ... |
### {ComponentName} Semantic DOM
| 参数 | 描述 | 示例 |
| ---- | ---- | ---- |
| ... | ... | ... |
### {ComponentName} slot
| 名称 | 描述 |
| ---- | ---- |
| ... | ... |
### {ComponentName} externalClasses
| 名称 | 描述 |
| ---- | ---- |
| ... | ... |
## CSS Variables
| 属性 | 描述 | 默认值 | 全局变量 |
| ---- | ---- | ------ | -------- |
| ... | ... | ... | ... |
| ---- | 不是 | :--- |)。`string`、`boolean`)。`'solid' \| 'outline' \| 'clear'`)。- 表示无默认值或默认值为空字符串。info[wxml]> 前缀,不要直接写普通反引号代码片段。dora-{component-name},除非源码或现有 README 明确使用了别名。props → Semantic DOM → slot → externalClasses。--dora-gallery-icon-size → "画廊的操作图标大小")。z-index 时描述统一用 "xxx的z-index"(如 --z-index → "组件的z-index"),不用 "堆叠顺序"。