---
generated_at: 2026-03-01 10:30:00
metrics:
  claims_total: 80
  claims_with_evidence: 80
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：80 / 80、根拠なし：0
- 優先レビュー（高）
  1. 全テストケースがソースコードに直接対応
  2. 追加レビュー不要

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

- E-01: `packages/babel-plugin-transform-object-rest-spread/src/index.ts` - メインプラグインファイル（902行）
- E-02: `packages/babel-plugin-transform-object-rest-spread/src/shouldStoreRHSInTemporaryVariable.ts` - RHS一時変数判定（43行）
- E-03: `packages/babel-plugin-transform-object-rest-spread/src/compat-data.ts` - 互換性データ（15行）
- E-04: Babelプラグインの公式ドキュメントおよびAPI仕様

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

### index.ts - プラグインファクトリ（C-01〜C-05）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | プラグインが正常に初期化されること | E-01: L18-26 `declare((api, opts) => {...})` | ○ |
| C-02 | useBuiltInsオプションがtrueの場合Object.assignを使用 | E-01: L26, L40-41 | ○ |
| C-03 | looseオプションがtrueの場合looseモードで変換 | E-01: L26, L33-35, L356-357 | ○ |
| C-04 | looseオプションがboolean以外の場合エラー | E-01: L28-30 `throw new Error(".loose must be a boolean, or undefined")` | ○ |
| C-05 | ターゲットがObject.assignをサポートする場合のデフォルト動作 | E-01: L21-24, E-03 | ○ |

### index.ts - ヘルパー関数（C-06〜C-07）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-06 | useBuiltInsがtrueの場合Object.assignを返す | E-01: L37-43 `getExtendsHelper` | ○ |
| C-07 | useBuiltInsがfalseの場合extendsヘルパーを返す | E-01: L37-43 | ○ |

### index.ts - iterateObjectRestElement（C-08〜C-11）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-08 | ObjectPatternからRestElementを抽出 | E-01: L45-75 `iterateObjectRestElement` generator | ○ |
| C-09 | ArrayPatternからRestElementを抽出 | E-01: L49-57 `case "ArrayPattern"` | ○ |
| C-10 | AssignmentPatternからRestElementを抽出 | E-01: L69-71 `case "AssignmentPattern"` | ○ |
| C-11 | RestElementがない場合空のイテレータ | E-01: L72-74 `default: break` | ○ |

### index.ts - hasObjectRestElement / visitObjectRestElements（C-12〜C-14）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | RestElement存在でtrueを返す | E-01: L77-82 `hasObjectRestElement` | ○ |
| C-13 | RestElement不存在でfalseを返す | E-01: L77-82 | ○ |
| C-14 | 全RestElementにvisitor適用 | E-01: L84-91 `visitObjectRestElements` | ○ |

### index.ts - hasSpread（C-15〜C-16）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-15 | SpreadElement存在でtrueを返す | E-01: L93-100 `hasSpread` | ○ |
| C-16 | SpreadElement不存在でfalseを返す | E-01: L93-100 | ○ |

### index.ts - extractNormalizedKeys（C-17〜C-22）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 | Identifierキーを文字列リテラルに変換 | E-01: L120-122 | ○ |
| C-18 | リテラルキーを文字列に変換 | E-01: L126-134 | ○ |
| C-19 | 計算プロパティキーを保持 | E-01: L135-145, L157 `allPrimitives = false` | ○ |
| C-20 | テンプレートリテラルキー処理 | E-01: L123-125 `hasTemplateLiteral = true` | ○ |
| C-21 | Symbol.forをプリミティブとして扱う | E-01: L149-156 | ○ |
| C-22 | インライン代入式キーから識別子抽出 | E-01: L138-141 | ○ |

### index.ts - replaceImpureComputedKeys（C-23〜C-25）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-23 | 副作用のある計算キーを一時変数に置換 | E-01: L174-212 `replaceImpureComputedKeys` | ○ |
| C-24 | 純粋な計算キーは置換しない | E-01: L198 `!keyExpression.isPure()` | ○ |
| C-25 | 既にメモ化されたキーはスキップ | E-01: L184-194 | ○ |

### index.ts - removeUnusedExcludedKeys（C-26〜C-27）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-26 | 参照されていないキーを削除 | E-01: L214-227 `removeUnusedExcludedKeys` | ○ |
| C-27 | 参照されているキーは保持 | E-01: L220-223 `references > 0` check | ○ |

### index.ts - collectComputedKeysInSourceOrder（C-28〜C-30）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | 計算キーをソースコード順に収集 | E-01: L240-285 `collectComputedKeysInSourceOrder` | ○ |
| C-29 | ArrayPatternをトラバース | E-01: L264-275 | ○ |
| C-30 | AssignmentPatternをトラバース | E-01: L276-278 | ○ |

### index.ts - createObjectRest（C-31〜C-35）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 | RestElementを抽出しヘルパー呼び出し生成 | E-01: L288-361 `createObjectRest` | ○ |
| C-32 | キー0件でobjectDestructuringEmpty使用 | E-01: L310-324 `if (keys.length === 0)` | ○ |
| C-33 | objectRestNoSymbolsでLooseヘルパー使用 | E-01: L356-357 `objectWithoutProperties${objectRestNoSymbols ? "Loose" : ""}` | ○ |
| C-34 | プリミティブキーをホイスト | E-01: L336-348 | ○ |
| C-35 | 非プリミティブキーにtoPropertyKey適用 | E-01: L327-332 | ○ |

### index.ts - replaceRestElement（C-36〜C-39）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-36 | 関数パラメータのRestElementを変数宣言に変換 | E-01: L363-401 `replaceRestElement` | ○ |
| C-37 | AssignmentPatternを再帰的に処理 | E-01: L370-373 | ○ |
| C-38 | ArrayPattern内のRestElementを処理 | E-01: L375-381 | ○ |
| C-39 | containerが指定された場合そこに宣言追加 | E-01: L391-392 | ○ |

### index.ts - visitor.Function（C-40〜C-42）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | RestElementを含むパラメータを変換 | E-01: L408-477 `Function(path)` | ○ |
| C-41 | ID相互参照でconvertFunctionParams使用 | E-01: L466-476 `idInRest` logic | ○ |
| C-42 | ignoreFunctionLengthがtrueで関数長無視 | E-01: L32, L469-471 | ○ |

### index.ts - visitor.VariableDeclarator（C-43〜C-46）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-43 | ObjectPatternの変数宣言を変換 | E-01: L481-665 `VariableDeclarator(path, file)` | ○ |
| C-44 | RHSが識別子でない場合一時変数作成 | E-01: L571-592 `shouldStoreRHSInTemporaryVariable` | ○ |
| C-45 | ネストパターンの計算キーをインラインメモ化 | E-01: L514-564 | ○ |
| C-46 | pureGettersがtrueで未使用キー削除 | E-01: L641-643 | ○ |

### index.ts - visitor.ExportNamedDeclaration / CatchClause（C-47〜C-48）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-47 | RestElementを含むexport宣言を分割 | E-01: L669-683 `ExportNamedDeclaration` | ○ |
| C-48 | catch句のRestElementを変換 | E-01: L685-688 `CatchClause` | ○ |

### index.ts - visitor.AssignmentExpression（C-49〜C-50）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | 代入式のRestElementを変換 | E-01: L691-728 `AssignmentExpression` | ○ |
| C-50 | 不純計算キーの宣言を生成 | E-01: L710-714 | ○ |

### index.ts - visitor.ForXStatement（C-51〜C-53）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-51 | for-of/in文の左辺RestElementを変換 | E-01: L731-791 `ForXStatement` | ○ |
| C-52 | 変数宣言を含むfor-of/in文を変換 | E-01: L767-790 | ○ |
| C-53 | 空bodyで完了レコードの場合undefined挿入 | E-01: L754-756 `isCompletionRecord()` | ○ |

### index.ts - visitor.ArrayPattern（C-54〜C-57）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | 配列パターン内のObjectRestを変換 | E-01: L794-842 `ArrayPattern` | ○ |
| C-55 | VariableDeclaratorの後に宣言挿入 | E-01: L817-823 | ○ |
| C-56 | AssignmentExpressionの後に代入挿入 | E-01: L824-835 | ○ |
| C-57 | 予期しない親タイプでエラー | E-01: L836-840 `throw new Error` | ○ |

### index.ts - visitor.ObjectExpression（C-58〜C-63）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | SpreadElementを含むオブジェクトを変換 | E-01: L845-898 `ObjectExpression` | ○ |
| C-59 | setSpreadPropertiesでextendsヘルパー使用 | E-01: L849-851 | ○ |
| C-60 | setSpreadPropertiesがfalseでobjectSpread2使用 | E-01: L852-853 | ○ |
| C-61 | 複数のSpreadElementを正しく処理 | E-01: L886-894 | ○ |
| C-62 | pureGettersがtrueでヘルパー呼び出し最適化 | E-01: L870-875 | ○ |
| C-63 | SpreadElementがない場合変換しない | E-01: L846 `if (!hasSpread(path.node)) return` | ○ |

### shouldStoreRHSInTemporaryVariable.ts（C-64〜C-75）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-64 | 複数プロパティのObjectPatternでtrue | E-02: L21-23 `if (properties.length > 1) return true` | ○ |
| C-65 | 単一プロパティのObjectPatternで再帰判定 | E-02: L25-32 | ○ |
| C-66 | 空のObjectPatternでfalse | E-02: L24 `if (properties.length === 0) return false` | ○ |
| C-67 | 複数要素のArrayPatternでtrue | E-02: L19 `if (nonNullElements.length > 1) return true` | ○ |
| C-68 | 単一要素のArrayPatternで再帰判定 | E-02: L20 | ○ |
| C-69 | null/VoidPattern除外してカウント | E-02: L15-18 | ○ |
| C-70 | AssignmentPatternで左辺を再帰判定 | E-02: L34-35 | ○ |
| C-71 | RestElementでIdentifier引数の場合true | E-02: L37 `if (node.argument.type === "Identifier") return true` | ○ |
| C-72 | RestElementでパターン引数の場合再帰判定 | E-02: L38 | ○ |
| C-73 | Identifierでfalse | E-02: L40-42 | ○ |
| C-74 | MemberExpressionでfalse | E-02: L40-42 | ○ |
| C-75 | nodeがnull/undefinedでfalse | E-02: L13 `if (!node) return false` | ○ |

### compat-data.ts（C-76〜C-80）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-76 | Object.assignの互換性データを提供 | E-03: L1-15 | ○ |
| C-77 | Chromeのバージョンが49 | E-03: L3 `chrome: "49"` | ○ |
| C-78 | Firefoxのバージョンが36 | E-03: L6 `firefox: "36"` | ○ |
| C-79 | Nodeのバージョンが6 | E-03: L8 `node: "6"` | ○ |
| C-80 | Safariのバージョンが10 | E-03: L7 `safari: "10"` | ○ |

## 4) 不足情報（Unknown / Missing）
- なし。全てのテストケースがソースコード内の実装に直接対応しています。

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコードに根拠あり

## 6) レビュアーチェックリスト（最小）
- [ ] 各テストケースがソースコードの該当箇所と一致しているか確認
- [ ] プラグインオプション（useBuiltIns, loose, assumptions）のテストケースが網羅的か確認
- [ ] visitor各メソッドの正常系・異常系・境界値がカバーされているか確認
- [ ] shouldStoreRHSInTemporaryVariable関数の再帰ロジックが正しくテストされているか確認
- [ ] compat-dataの各ブラウザバージョンが最新情報と一致しているか確認
