---
generated_at: 2026-03-01 06:25:00
metrics:
  claims_total: 80
  claims_with_evidence: 80
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：babel-plugin-transform-parameters 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：80 / 80、根拠なし：0
- 優先レビュー（高）
  1. なし（すべてのテストケースにソースコードからの根拠あり）

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `packages/babel-plugin-transform-parameters/src/index.ts` - メインプラグインエントリポイント（53行）
- E-02: `packages/babel-plugin-transform-parameters/src/params.ts` - デフォルトパラメータ変換処理（193行）
- E-03: `packages/babel-plugin-transform-parameters/src/rest.ts` - レストパラメータ変換処理（439行）
- E-04: `packages/babel-plugin-transform-parameters/src/shadow-utils.ts` - シャドウ変数ユーティリティ（89行）
- E-05: `packages/babel-plugin-transform-parameters/package.json` - パッケージ定義

## 3) Claims と根拠の対応（レビューの主戦場）

### index.ts関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | プラグイン初期化でname='transform-parameters'が返される | E-01 L19 `name: "transform-parameters"` | ○ |
| C-02 | looseオプションでignoreFunctionLengthがtrueになる | E-01 L13-14 `ignoreFunctionLength = api.assumption("ignoreFunctionLength") ?? options.loose` | ○ |
| C-03 | ignoreFunctionLength assumptionが優先される | E-01 L13-14 assumptionがnullish coalescingで先に評価 | ○ |
| C-04 | noNewArrows assumptionの設定 | E-01 L16 `noNewArrows = api.assumption("noNewArrows") ?? true` | ○ |
| C-05 | アロー関数でrestパラメータがある場合の変換 | E-01 L24-28 `path.isArrowFunctionExpression()` と `param.isRestElement()` チェック | ○ |
| C-06 | アロー関数でAssignmentPatternがある場合の変換 | E-01 L27 `param.isAssignmentPattern()` チェック | ○ |
| C-07 | 変換後のscope.crawl呼び出し | E-01 L46-48 `if (convertedRest || convertedParams) { path.scope.crawl() }` | ○ |
| C-08 | ラッパー関数生成時の早期リターン | E-01 L37 `if (!path.isFunctionExpression()) return` | ○ |

### params.ts関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-09 | シンプルパラメータでfalseを返す | E-02 L44-45 `if (isSimpleParameterList) return false` | ○ |
| C-10 | AssignmentPatternでデフォルト値処理追加 | E-02 L80-122 `if (paramIsAssignmentPattern)` ブロック | ○ |
| C-11 | looseモードでbuildLooseDefaultParam使用 | E-02 L91-97 `buildLooseDefaultParam` 呼び出し | ○ |
| C-12 | セッターでlooseモード処理 | E-02 L83 `t.isMethod(node, { kind: "set" })` チェック | ○ |
| C-13 | デストラクチャリングで一時変数生成 | E-02 L129-138 `generateUidIdentifier("ref")` と変数宣言 | ○ |
| C-14 | ObjectPatternのlooseモード処理 | E-02 L99-109 `left.isObjectPattern()` チェックと`buildLooseDestructuredDefaultParam` | ○ |
| C-15 | ArrayPatternのlooseモード処理 | E-02 L99 `left.isArrayPattern()` チェック | ○ |
| C-16 | firstOptionalIndex以降のsafe access | E-02 L123-128 `buildSafeArgumentsAccess` 呼び出し | ○ |
| C-17 | パラメータリストの切り詰め | E-02 L149-151 `node.params = node.params.slice(0, firstOptionalIndex)` | ○ |
| C-18 | generatorでIIFEラップ | E-02 L157-159 `if (generator || state.needsOuterBinding || shadowedParams.size > 0)` | ○ |
| C-19 | async関数のtry-catch処理 | E-02 L178-186 `if (async && !generator)` ブロックとPromise.reject | ○ |
| C-20 | shadowedParamsでIIFEラップ | E-02 L158 `shadowedParams.size > 0` チェック | ○ |
| C-21 | needsOuterBindingでIIFEラップ | E-02 L158 `state.needsOuterBinding` チェック | ○ |
| C-22 | shouldTransformParamでスキップ | E-02 L72-74 `if (shouldTransformParam && !shouldTransformParam(i))` | ○ |
| C-23 | replaceRestElementコールバック | E-02 L76-78 `if (replaceRestElement) { replaceRestElement(...) }` | ○ |
| C-24 | typeAnnotationの保持 | E-02 L131 `uid.typeAnnotation = param.node.typeAnnotation` | ○ |

### rest.ts関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-25 | restパラメータなしでfalse | E-03 L296 `if (!hasRest(node)) return false` | ○ |
| C-26 | restパラメータありでtrue | E-03 L296 と L375, L438 `return true` | ○ |
| C-27 | Identifierでforループ生成 | E-03 L407-415 `buildRest` テンプレート呼び出し | ○ |
| C-28 | Patternで一時変数とデストラクチャリング生成 | E-03 L331-339 `if (t.isPattern(rest))` ブロック | ○ |
| C-29 | arguments名のリネーム | E-03 L340-342 `if (rest.name === "arguments") { scope.rename(rest.name) }` | ○ |
| C-30 | TypeScriptのthisパラメータoffset調整 | E-03 L203-209 `getParamsCount` 関数 | ○ |
| C-31 | 最適化可能参照のみでforループなし | E-03 L361-375 `if (!state.deopted && !state.references.length)` | ○ |
| C-32 | deoptedでforループ先頭挿入 | E-03 L417-418 `if (state.deopted) { body.unshift(loop) }` | ○ |
| C-33 | offset=0でarrKey=key | E-03 L402-404 `if (!paramsCount) { arrKey = t.identifier(key.name) }` | ○ |
| C-34 | offsetありでarrKey=key-offset | E-03 L385-389 `arrKey = t.binaryExpression("-", ...)` | ○ |
| C-35 | restPatternでshadowedParamsのIIFE | E-03 L304-325 `if (needsIIFE)` ブロック | ○ |
| C-36 | hasRestでRestElement検出 | E-03 L212-215 `hasRest` 関数 | ○ |
| C-37 | 空パラメータでhasRest=false | E-03 L213 `length > 0` チェック | ○ |
| C-38 | 非RestElementでhasRest=false | E-03 L214 `t.isRestElement` チェック | ○ |
| C-39 | パラメータカウント | E-03 L203-210 `getParamsCount` 関数 | ○ |
| C-40 | thisパラメータでcount-1 | E-03 L206-208 `if (t.isIdentifier(node.params[0], { name: "this" })) { count -= 1 }` | ○ |
| C-41 | 空パラメータでcount=0 | E-03 L204 `node.params.length` | ○ |
| C-42 | referencesRestで一致検出 | E-03 L32-42 `referencesRest` 関数 | ○ |
| C-43 | 名前不一致でfalse | E-03 L36 `if (path.node.name === state.name)` | ○ |
| C-44 | シャドウでfalse | E-03 L38 `bindingIdentifierEquals` | ○ |
| C-45 | 数値リテラルインデックス最適化 | E-03 L226-227 `if (t.isNumericLiteral(parent.property))` | ○ |
| C-46 | offset=0でインデックス直接使用 | E-03 L228-230 `if (offset === 0)` | ○ |
| C-47 | 動的インデックスのoffset加算 | E-03 L232-236 `t.binaryExpression("+", ...)` | ○ |
| C-48 | 不純インデックスで一時変数 | E-03 L240-250 `if (!scope.isPure(index))` | ○ |
| C-49 | 静的評価でundefined最適化 | E-03 L267-269 `if (valRes.value === true) { replaceWith(scope.buildUndefinedNode()) }` | ○ |
| C-50 | length最適化(offset>0) | E-03 L277-289 `optimiseLengthGetter` 関数 | ○ |
| C-51 | length最適化(offset=0) | E-03 L289-291 `if (offset === 0) { path.replaceWith(argsId) }` | ○ |
| C-52 | Scopeでシャドウスキップ | E-03 L79-84 `memberExpressionOptimisationVisitor.Scope` | ○ |
| C-53 | Flow型スキップ | E-03 L86-91 `memberExpressionOptimisationVisitor.Flow` | ○ |
| C-54 | ネスト関数でdeopt | E-03 L93-104 `memberExpressionOptimisationVisitor.Function` | ○ |
| C-55 | arguments参照でdeopt | E-03 L110-112 `if (node.name === "arguments") { state.deopted = true }` | ○ |
| C-56 | indexGetter候補 | E-03 L156-161 `state.candidates.push({ cause: "indexGetter", path })` | ○ |
| C-57 | lengthGetter候補 | E-03 L163-169 `state.candidates.push({ cause: "lengthGetter", path })` | ○ |
| C-58 | argSpread候補 | E-03 L178-183 `state.candidates.push({ cause: "argSpread", path })` | ○ |
| C-59 | 代入で非最適化 | E-03 L140-141 `grandparentPath.isAssignmentExpression()` | ○ |
| C-60 | 呼び出しで非最適化 | E-03 L150-152 `grandparentPath.isCallExpression()` | ○ |
| C-61 | deleteで非最適化 | E-03 L147 `grandparentPath.isUnaryExpression({ operator: "delete" })` | ○ |
| C-62 | 更新式で非最適化 | E-03 L146 `grandparentPath.isUpdateExpression()` | ○ |
| C-63 | BindingIdentifierでdeopt | E-03 L196-200 `memberExpressionOptimisationVisitor.BindingIdentifier` | ○ |

### shadow-utils.ts関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-64 | eval参照でneedsOuterBinding | E-04 L17-18 `if (name === "eval" || ...)` | ○ |
| C-65 | シャドウバインディングでneedsOuterBinding | E-04 L19-20 バインディング比較ロジック | ○ |
| C-66 | 型注釈スキップ | E-04 L27-28 `TypeAnnotation|TSTypeAnnotation` パス | ○ |
| C-67 | constantViolationsなしで追加なし | E-04 L37-38 `if (constantViolations)` | ○ |
| C-68 | 未初期化var削除 | E-04 L47-57 `if (node.init === null)` と `redeclarator.remove()` | ○ |
| C-69 | 初期化ありvarでshadowedParams追加 | E-04 L61 `shadowedParams.add(name)` | ○ |
| C-70 | FunctionDeclarationでshadowedParams追加 | E-04 L64-65 `case "FunctionDeclaration"` | ○ |
| C-71 | for文内varの保持 | E-04 L52-54 `if (!declaration.parentPath.isFor() || ...)` | ○ |
| C-72 | for-in内varの保持 | E-04 L52-54 同上 | ○ |
| C-73 | 空shadowedParamsで引数なしIIFE | E-04 L77-84 `for (const name of shadowedParams)` が空の場合 | ○ |
| C-74 | shadowedParamsで引数付きIIFE | E-04 L80-83 args/params配列構築 | ○ |
| C-75 | returnStatement形式のIIFE | E-04 L86-88 `t.returnStatement(t.callExpression(...))` | ○ |

### 境界値・その他テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-76 | 単一restでoffset=0 | E-03 L345 `paramsCount = getParamsCount(node)` 計算ロジック | ○ |
| C-77 | 全オプショナルでparams空 | E-02 L149-151 slice処理 | ○ |
| C-78 | 空パラメータ関数の非変換 | E-02 L44-45 と E-03 L296 の早期リターン | ○ |
| C-79 | デフォルト値内rest参照のスキップ | E-03 L123-128 `parentPath.listKey === "params"` チェック | ○ |
| C-80 | 空transformedRestNodes | E-02 L141-145 `if (transformedRestNodes)` チェック | ○ |

## 4) 不足情報（Unknown / Missing）
- なし（すべてのテストケースはソースコードから直接確認できる根拠に基づいている）

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - すべてのテストケースに明確なソースコード根拠あり
- 1: 中リスク - 一部のエッジケーステストは実行時の挙動確認が推奨される
  - UT-TPR-049: 静的評価最適化のケース
  - UT-TPR-079: デフォルト値内参照のスキップ

## 6) レビュアーチェックリスト（最小）
- [ ] 各ソースファイルの関数・メソッドが網羅されているか確認
- [ ] 正常系・異常系・境界値の観点が適切にカバーされているか確認
- [ ] テストケース名が具体的で理解しやすいか確認
- [ ] 期待結果が明確に定義されているか確認
- [ ] 優先度の設定が適切か確認（高：コア機能、中：オプション機能、低：エッジケース）
- [ ] 既存のテストフィクスチャ（test/fixtures/）との整合性を確認
