ast-grep-typescript-react について
TypeScriptとReactのコードでast-grepを使う開発者向けのスキルで、ルール作成やコード変換を扱います。言語選択、ASTノード、JSXのマッチング、@ast-grep/napiによるプログラム利用に重点を置いています。
主な機能
- 01TSXの言語選択
- 02断片に対するcontextとselector
- 03JSXノードと属性のマッチング
- 04TypeScript構文のパターン
- 05JSX書き換えの指針
- 06@ast-grep/napiの利用
活用シーン
- 01TSXコード向けルールの作成
- 02Reactコンポーネントやフックの検索
- 03TypeScriptコード変換の作成
- 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 要素、props、React フック、インポート、または 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 属性、props、型注釈に対する context/selector |
| 3 | JSX ノードの種類 | jsx | 自己終了要素と対になる要素、属性値のメタ変数 |
| 4 | TypeScript の構文 | ts | 型のみのインポート、as キャスト、React.FC のジェネリクス |
| 5 | 書き換えと codemod | fix | 子要素や props が削除されないよう、JSX のメタ変数を再出力する |
| 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— 断片(属性、props、型注釈)を context/selector でラップします
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 対応