关于 ast-grep-typescript-react
面向使用 ast-grep 处理 TypeScript 和 React 代码的开发者技能,涵盖规则与代码转换。重点说明语言选择、AST 节点、JSX 匹配,以及通过 @ast-grep/napi 编程调用。
主要功能
- 01TSX 语言选择
- 02片段的 context 与 selector
- 03JSX 节点和属性匹配
- 04TypeScript 结构模式
- 05JSX 重写指引
- 06@ast-grep/napi 用法
适用场景
- 01为 TSX 代码编写规则
- 02查找 React 组件或 Hook
- 03构建 TypeScript 代码转换
- 04诊断规则无匹配的问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill ast-grep-typescript-react安装后在 Claude Code 中输入/ast-grep-typescript-react确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdctx-fragment-context-selector.mdfix-jsx-rewrite-completeness.mdjsx-attribute-metavars.mdjsx-self-closing-vs-paired.mdlang-scan-ts-and-tsx.mdlang-tsx-for-jsx.mdnapi-lang-tsx-findall.mdts-as-expression-casts.mdts-generic-react-fc.mdts-type-only-imports.md详细介绍
适用于 TypeScript 和 React 的 ast-grep
当能力出色的模型将 ast-grep 用于 .ts/.tsx 代码时,常会遇到错误的默认设置——大多数情况下,规则会悄无声息地匹配不到任何内容,因为猜错了语言或节点类型。本技能假设你已经了解 ast-grep 的规则机制(模式、元变量、all/any/has/inside、约束);本技能只修正 TypeScript 和 React 带来的额外问题。
关于 ast-grep 规则编写机制的一般说明,请使用配套的 ast-grep 技能。
适用场景
- 为
.ts或.tsx代码编写 ast-grep 模式或 YAML 规则 - 搜索 JSX 元素、属性、React hooks、导入或 TS 类型构造
- 构建用于重写 JSX 或 TypeScript 的 codemod(重命名组件、移除
React.FC、迁移导入) - TSX 上的规则“匹配不到任何内容”,且你不知道原因(通常是语言或节点类型不对)
- 通过
@ast-grep/napi从 JS/TS 脚本中以编程方式调用 ast-grep
TS/React 规则异常时的首要检查步骤
- 检查语言。 包含 JSX 的文件必须使用
tsx解析,不能使用typescript。这是静默匹配不到内容最常见的原因。请参阅lang-tsx-for-jsx。 - 调试模式的 AST。 在真实代码片段上运行
ast-grep run --pattern '<your pattern>' --lang tsx --debug-query=ast,即可查看节点类型并发现ERROR节点。请相信这个结果,不要凭猜测判断节点类型名称。 - 包装片段。 如果模式是属性、prop 或类型注解,就需要使用
context+selector。请参阅ctx-fragment-context-selector。
规则类别
| # | 类别 | 前缀 | 涵盖内容 |
|---|---|---|---|
| 1 | 语言选择 | lang | tsx 与 typescript 的区别、扫描 .ts + .tsx、languageGlobs |
| 2 | 片段匹配 | ctx | JSX 属性、prop、类型注解的 context/selector |
| 3 | JSX 节点类型 | jsx | 自闭合与成对元素、属性值元变量 |
| 4 | TypeScript 构造 | ts | 仅类型导入、as 强制类型转换、React.FC 泛型 |
| 5 | 重写与 Codemod | fix | 重新输出 JSX 元变量,避免子项/prop 被丢弃 |
| 6 | 编程式用法 | napi | @ast-grep/napi 的 Lang.Tsx、NapiConfig 结构 |
快速参考
1. 语言选择(lang)
lang-tsx-for-jsx— 对任何 JSX 使用 tsx;typescript 会将 JSX 解析为 ERROR,导致匹配不到任何内容lang-scan-ts-and-tsx— 覆盖.ts和.tsx;使用languageGlobs以便复用(以及<T>强制类型转换的注意事项)
2. 片段匹配(ctx)
ctx-fragment-context-selector— 使用 context/selector 包装片段(属性、prop、类型注解)
3. JSX 节点类型(jsx)
jsx-self-closing-vs-paired—<X/>和<X></X>属于不同类型;使用any同时匹配jsx-attribute-metavars— 元变量必须位于有效的属性值位置
4. TypeScript 构造(ts)
ts-type-only-imports— 区分import type和内联type与值导入ts-as-expression-casts— 将强制类型转换匹配为as_expression,而不是尖括号ts-generic-react-fc— 通过定位类型注解移除React.FC
5. 重写与 Codemod(fix)
fix-jsx-rewrite-completeness— 重新输出$$$PROPS/$$$CHILDREN,否则它们会被删除
6. 编程式用法(napi)
napi-lang-tsx-findall— 使用Lang.Tsx解析;findAll接受NapiConfig
使用方法
针对你要做的决策,阅读相应的参考文件——每个文件都独立成篇,并附有规范示例。references/_sections.md 定义了分类;AGENTS.md 是完整的汇总索引。
相关技能
ast-grep— 通用的 ast-grep 规则编写机制(模式、组合、约束、测试)。此技能在此基础上增加了 TS/React 的特定内容。
评论
支持 Markdown