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

# 根拠レポート：babel-helper-replace-supers 単体テストケース一覧

## 本レポートについて

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

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

1. **根拠の有無確認**：各テストケースに対して、ソースコードの該当箇所が存在するか
2. **根拠との整合性**：テストケースの内容がソースコードの実装と矛盾していないか
3. **網羅性**：主要なクラス、メソッド、関数を適切にカバーしているか

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

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

---

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

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

- E-01: `packages/babel-helper-replace-supers/src/index.ts` - ReplaceSupersクラス定義（359-432行目）
- E-02: `packages/babel-helper-replace-supers/src/index.ts` - specHandlersオブジェクト（89-250行目）
- E-03: `packages/babel-helper-replace-supers/src/index.ts` - looseHandlersオブジェクト（252-324行目）
- E-04: `packages/babel-helper-replace-supers/src/index.ts` - visitorオブジェクト（18-26行目）
- E-05: `packages/babel-helper-replace-supers/src/index.ts` - unshadowSuperBindingVisitorオブジェクト（28-38行目）
- E-06: `packages/babel-helper-replace-supers/src/index.ts` - Flags enum（60-63行目）
- E-07: `packages/babel-helper-replace-supers/src/index.ts` - 型定義（40-58行目、65-87行目、326-357行目）

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

### ReplaceSupersクラス - コンストラクタ
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | ClassMethodパスで正しく初期化されること | E-01（360-376行目） | ○ |
| C-02 | 派生クラスコンストラクタが正しく検出されること | E-01（364-365行目）`path.isClassMethod({ kind: "constructor" }) && !!opts.superRef` | ○ |
| C-03 | staticメソッドが正しく検出されること | E-01（366-370行目）`path.node.static` | ○ |
| C-04 | ObjectMethodでisStaticがtrueになること | E-01（367行目）`path.isObjectMethod()` | ○ |
| C-05 | StaticBlockでisStaticがtrueになること | E-01（370行目）`path.isStaticBlock()` | ○ |
| C-06 | プライベートメソッドが正しく検出されること | E-01（371行目）`path.isPrivate() && path.isMethod()` | ○ |
| C-07 | constantSuperオプションが設定されること | E-01（374行目）`this.constantSuper = opts.constantSuper` | ○ |
| C-08 | superRefがundefinedの場合isDerivedConstructorがfalse | E-01（365行目）`!!opts.superRef`が条件に含まれる | ○ |

### ReplaceSupersクラス - getObjectRef/getSuperRef
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-09 | objectRefが設定されている場合にクローンを返すこと | E-01（386-388行目）`cloneNode(this.opts.objectRef || this.opts.getObjectRef!())` | ○ |
| C-10 | getObjectRef関数が設定されている場合に呼び出すこと | E-01（387行目）`this.opts.getObjectRef!()` | ○ |
| C-11 | superRefが設定されている場合にクローンを返すこと | E-01（390-391行目）`return cloneNode(this.opts.superRef)` | ○ |
| C-12 | getSuperRef関数が設定されている場合に呼び出すこと | E-01（392-394行目）`return cloneNode(this.opts.getSuperRef())` | ○ |
| C-13 | superRefとgetSuperRefが両方undefinedの場合undefinedを返す | E-01（390-395行目）条件分岐の結果 | ○ |

### ReplaceSupersクラス - replace
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | refToPreserveが設定されている場合にunshadow処理が実行されること | E-01（399-404行目）`methodPath.traverse(unshadowSuperBindingVisitor, ...)` | ○ |
| C-15 | constantSuper=trueでlooseHandlersが使用されること | E-01（406行目）`this.constantSuper ? looseHandlers : specHandlers` | ○ |
| C-16 | constantSuper=falseでspecHandlersが使用されること | E-01（406行目）同上 | ○ |
| C-17 | decoratorsパスがスキップされること | E-01（413行目）`path.parentKey === "decorators"` | ○ |
| C-18 | keyパスがスキップされること | E-01（413行目）`path.parentKey === "key"` | ○ |

### specHandlers
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | 計算プロパティでメモ化が実行されること | E-02（90-107行目）`if (!computed) return` の後に `memoiser.set` | ○ |
| C-20 | 非計算プロパティではメモ化がスキップされること | E-02（97-98行目）`if (!computed) return` | ○ |
| C-21 | メモ化不要な場合は何もしないこと | E-02（101-104行目）`if (!memo) return` | ○ |
| C-22 | メモ化済みプロパティのクローンを返すこと | E-02（111-113行目）`if (this.memoiser.has(property)) return cloneNode(...)` | ○ |
| C-23 | 計算プロパティのクローンを返すこと | E-02（115-117行目）`if (computed) return cloneNode(property)` | ○ |
| C-24 | 非計算プロパティでStringLiteralを返すこと | E-02（119行目）`return stringLiteral((property as t.Identifier).name)` | ○ |
| C-25 | isStatic=trueでobjectRefのみ使用すること | E-02（133-141行目）`isStatic || isPrivateMethod ? objectRef : memberExpression(objectRef, identifier("prototype"))` | ○ |
| C-26 | isPrivateMethod=trueでobjectRefのみ使用すること | E-02（136行目）`isStatic || isPrivateMethod` | ○ |
| C-27 | インスタンスメソッドでprototype経由で取得すること | E-02（138行目）`memberExpression(objectRef, identifier("prototype"))` | ○ |
| C-28 | 派生コンストラクタでthisを含むシーケンス式が生成されること（get） | E-02（146-148行目）`isDerivedConstructor ? sequenceExpression([thisExpression(), objectRef]) : objectRef` | ○ |
| C-29 | 通常メソッドでobjectRefのみ使用すること（get） | E-02（148行目）`: objectRef` | ○ |
| C-30 | インスタンスメソッドでPrototypeフラグが付くこと | E-02（151-153行目）`isStatic || isPrivateMethod ? [] : [t.numericLiteral(Flags.Prototype)]` | ○ |
| C-31 | 静的メソッドでPrototypeフラグが付かないこと | E-02（151行目）`isStatic ... ? []` | ○ |
| C-32 | 単一のスプレッド引数で配列が直接使用されること | E-02（165-171行目）`args[0].argument`が直接使用 | ○ |
| C-33 | 複数引数でArrayExpressionが生成されること | E-02（173行目）`t.arrayExpression(args as t.Expression[])` | ○ |
| C-34 | optional=trueでOptionalCallExpressionが生成されること | E-02（187-188行目）`if (optional) return t.optionalCallExpression(...)` | ○ |
| C-35 | optional=falseでCallExpressionが生成されること | E-02（190行目）`return callExpression(call, [argsNode])` | ○ |
| C-36 | Callフラグが常に含まれること | E-02（182-185行目）`Flags.Call |` | ○ |
| C-37 | 派生コンストラクタでthisを含むシーケンス式が生成されること（set） | E-02（200-203行目）同様のパターン | ○ |
| C-38 | strictモードで1が設定されること | E-02（207行目）`t.numericLiteral(superMember.isInStrictMode() ? 1 : 0)` | ○ |
| C-39 | 非strictモードで0が設定されること | E-02（207行目）同上 | ○ |
| C-40 | インスタンスメソッドで追加フラグ1が付くこと | E-02（208行目）`isStatic || isPrivateMethod ? [] : [t.numericLiteral(1)]` | ○ |
| C-41 | destructureSetでエラーがスローされること | E-02（212-215行目）`throw superMember.buildCodeFrameError(...)` | ○ |
| C-42 | callで_callがoptional=falseで呼び出されること | E-02（218-224行目）`return this._call!(superMember, args, false)` | ○ |
| C-43 | optionalCallで_callがoptional=trueで呼び出されること | E-02（226-232行目）`return this._call!(superMember, args, true)` | ○ |
| C-44 | 計算プロパティ削除でReferenceErrorがスローされること | E-02（234-243行目）`if (superMember.node.computed)` の分岐 | ○ |
| C-45 | 非計算プロパティ削除でReferenceErrorがスローされること | E-02（244-248行目）`else` の分岐 | ○ |

### looseHandlers
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | メモ化済みプロパティのクローンを返すこと | E-03（255-259行目）`if (this.memoiser.has(property)) return cloneNode(...)` | ○ |
| C-47 | プロパティのクローンをそのまま返すこと | E-03（261行目）`return cloneNode(property)` | ○ |
| C-48 | isStatic=trueでgetSuperRefが使用されること | E-03（264-282行目）`if (isStatic)` の分岐 | ○ |
| C-49 | isStatic=trueでgetSuperRefがnullの場合Function.prototypeが使用されること | E-03（271-273行目）`getSuperRef() ?? memberExpression(identifier("Function"), identifier("prototype"))` | ○ |
| C-50 | isStatic=falseでgetSuperRef().prototypeが使用されること | E-03（274-279行目）`memberExpression(getSuperRef() ?? identifier("Object"), identifier("prototype"))` | ○ |
| C-51 | isStatic=falseでgetSuperRefがnullの場合Object.prototypeが使用されること | E-03（276行目）`getSuperRef() ?? identifier("Object")` | ○ |
| C-52 | this[prop]への代入式が生成されること | E-03（284-297行目）`assignmentExpression("=", memberExpression(thisExpression(), prop, computed), value)` | ○ |
| C-53 | 計算プロパティでthis[computed]への代入になること | E-03（294行目）`memberExpression(thisExpression(), prop, computed)` | ○ |
| C-54 | destructureSetでthis[prop]のMemberExpressionが返却されること | E-03（299-307行目）`return memberExpression(thisExpression(), prop, computed)` | ○ |
| C-55 | 計算プロパティでthis[computed]が返却されること | E-03（306行目）同上 | ○ |
| C-56 | callでoptimiseCallが呼び出されること | E-03（309-315行目）`return optimiseCall(this.get(superMember), thisExpression(), args, false)` | ○ |
| C-57 | optionalCallでoptimiseCallがoptional=trueで呼び出されること | E-03（317-323行目）`return optimiseCall(this.get(superMember), thisExpression(), args, true)` | ○ |

### visitor/unshadowSuperBindingVisitor
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | SuperがMemberExpressionのobjectの場合にhandleが呼び出されること | E-04（21-25行目）`if (!parentPath.isMemberExpression({ object: node })) return; state.handle(parentPath)` | ○ |
| C-59 | SuperがMemberExpressionのobjectでない場合は何もしないこと | E-04（23行目）`if (!parentPath.isMemberExpression({ object: node })) return` | ○ |
| C-60 | シャドウイングされた変数がリネームされること | E-05（31-37行目）`path.scope.rename(refName)` | ○ |
| C-61 | バインディングがない場合は何もしないこと | E-05（34-36行目）条件 `binding?.identifier.name === refName` | ○ |

### 境界値/追加ケース
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-62 | 引数が空配列の場合空のArrayExpressionになること | E-02（173行目）`t.arrayExpression(args as t.Expression[])` | ○ |
| C-63 | スプレッドのArrayExpression引数で配列が直接使用されること | E-02（168-169行目）`t.isArrayExpression(args[0].argument)` | ○ |

## 4) 不足情報（Unknown / Missing）
- なし：全てのテストケースがソースコードに基づいて生成されています

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全てのテストケースがソースコードの実装に直接対応しています
- 追加確認推奨：
  - 統合テストで実際のBabel変換パイプラインとの連携を検証すること
  - `@babel/helper-member-expression-to-functions` との連携動作を確認すること

## 6) レビュアーチェックリスト（最小）
- [ ] ReplaceSupersクラスのコンストラクタテストが全てのNodePath種別をカバーしているか
- [ ] specHandlersとlooseHandlersの差異が正しくテストされているか
- [ ] Flags enum（Prototype=0b1, Call=0b10）のビット演算が正しくテストされているか
- [ ] 派生コンストラクタ（isDerivedConstructor）の特殊処理がカバーされているか
- [ ] エラーケース（destructureSet、delete）が適切にテストされているか
- [ ] unshadowSuperBindingVisitorの変数リネーム処理がテストされているか
