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

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：35 / 35、根拠なし：0
- 優先レビュー（高）
  1. **UT-BSF-001〜010**: transformStatementList関数のテストケース - ソースコード行7-38に直接対応
  2. **UT-BSF-011〜013**: BlockStatementビジターのテストケース - ソースコード行41-51に直接対応
  3. **UT-BSF-014〜019**: SwitchStatementビジターのテストケース - ソースコード行53-80に直接対応

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

- E-01: `packages/babel-plugin-transform-block-scoped-functions/src/index.ts` - メインソースコード（93行）
- E-02: `packages/babel-plugin-transform-block-scoped-functions/package.json` - パッケージ定義
- E-03: `packages/babel-plugin-transform-block-scoped-functions/test/fixtures/block-scoped-functions/basic/input.js` - 基本テストケース入力
- E-04: `packages/babel-plugin-transform-block-scoped-functions/test/fixtures/block-scoped-functions/basic/output.js` - 基本テストケース出力
- E-05: `packages/babel-plugin-transform-block-scoped-functions/test/fixtures/block-scoped-functions/switch/input.js` - switch文テストケース入力
- E-06: `packages/babel-plugin-transform-block-scoped-functions/test/fixtures/block-scoped-functions/switch/output.js` - switch文テストケース出力
- E-07: `packages/babel-plugin-transform-block-scoped-functions/test/fixtures/block-scoped-functions/node-v0.10/input.js` - Node v0.10互換テストケース
- E-08: `packages/babel-plugin-transform-block-scoped-functions/test/fixtures/block-scoped-functions/node-v0.10/output.js` - Node v0.10互換テストケース出力
- E-09: `packages/babel-plugin-transform-block-scoped-functions/test/fixtures/block-scoped-functions/scope-lex-async-generator/input.js` - async generatorテストケース
- E-10: `packages/babel-plugin-transform-block-scoped-functions/test/fixtures/block-scoped-functions/switch-dflt-decl-onlystrict/input.js` - strictモードdefault句テスト

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | strictモードでブロック内の関数宣言がlet宣言に変換される | E-01 (行11-22), E-03, E-04 | ○ |
| C-02 | 非strictモードでブロック内の関数宣言がvar宣言に変換される | E-01 (行16-25), E-07, E-08 | ○ |
| C-03 | async関数がlet宣言に変換される | E-01 (行18) | ○ |
| C-04 | generator関数がlet宣言に変換される | E-01 (行19) | ○ |
| C-05 | async generator関数がlet宣言に変換される | E-01 (行18-19), E-09 | ○ |
| C-06 | _blockHoistプロパティが2に設定される | E-01 (行31) | ○ |
| C-07 | 関数のidがnullに設定される | E-01 (行34) | ○ |
| C-08 | FunctionDeclarationがない場合は何も変換しない | E-01 (行14) | ○ |
| C-09 | 複数の関数宣言が全て変換される | E-01 (行13) | ○ |
| C-10 | plugin-transform-async-generator-functionsのデータがある場合letを使用 | E-01 (行20-22) | ○ |
| C-11 | 通常のBlockStatementで変換が実行される | E-01 (行41-51) | ○ |
| C-12 | 関数本体のBlockStatementでは変換がスキップされる | E-01 (行44) | ○ |
| C-13 | ExportDeclaration直下のBlockStatementでは変換がスキップされる | E-01 (行45) | ○ |
| C-14 | switch文内の関数宣言がblockStatementでラップされる | E-01 (行69-79), E-05, E-06 | ○ |
| C-15 | switch文内の複数の関数宣言が全て抽出される | E-01 (行56-65), E-05 | ○ |
| C-16 | switch文内に関数宣言がない場合は何も変換しない | E-01 (行67) | ○ |
| C-17 | 関数宣言がconsequent配列から削除される | E-01 (行62) | ○ |
| C-18 | default句内の関数宣言も処理される | E-01 (行57-64), E-10 | ○ |
| C-19 | 関数のidがcloneNodeでコピーされる | E-01 (行74) | ○ |
| C-20 | ループ内でvisitorがトラバースされる | E-01 (行88-90) | ○ |
| C-21 | プラグインが正しい名前で登録される | E-01 (行84) | ○ |
| C-22 | api.assertVersionが呼び出される | E-01 (行5) | ○ |
| C-23 | t.toExpressionで関数式に変換される | E-01 (行26) | ○ |
| C-24 | path.replaceWithで置換が実行される | E-01 (行36) | ○ |
| C-25 | ネストされたブロック内の関数も変換される | E-01 (行41-51), E-03, E-04 | ○ |
| C-26 | strictモードでswitch内関数がlet宣言される | E-01 (行71), E-10 | ○ |
| C-27 | 非strictモードでswitch内関数も適切に処理される | E-01 (行69-79), E-05 | ○ |
| C-28 | FunctionDeclaration以外のstatementは無視される | E-01 (行14) | ○ |
| C-29 | forループ内のブロックが処理される | E-01 (行88-90) | ○ |
| C-30 | whileループ内のブロックが処理される | E-01 (行88-90) | ○ |
| C-31 | do-whileループ内のブロックが処理される | E-01 (行88-90) | ○ |
| C-32 | 関数宣言の逆順処理が正しく行われる | E-01 (行59) | ○ |
| C-33 | 関数名が保持される | E-01 (行26) | ○ |
| C-34 | if文内のブロックが処理される | E-01 (行41-51) | ○ |
| C-35 | try-catch内のブロックが処理される | E-01 (行41-51) | ○ |

## 4) 不足情報（Unknown / Missing）
- 該当なし：全てのテストケースはソースコードおよび既存テストフィクスチャから根拠を確認済み

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 本プラグインは比較的シンプルな変換ロジックを持ち、既存のテストフィクスチャが充実している
- 注意点: strictモードと非strictモードの挙動の違いに関するテストケースは実行時の動作確認が推奨される

## 6) レビュアーチェックリスト（最小）
- [ ] transformStatementList関数のlet/var選択ロジック（行16-22）が正しくテストされているか確認
- [ ] BlockStatementビジターの除外条件（行44-46）が適切にカバーされているか確認
- [ ] SwitchStatementビジターの関数抽出ロジック（行56-65）が網羅的にテストされているか確認
- [ ] Loopビジターによるネストされたブロックの処理（行88-90）が検証されているか確認
- [ ] async/generator関数の特殊処理が適切にテストされているか確認

## 7) ソースコード解析詳細

### 主要コンポーネント

#### transformStatementList関数（行7-38）
- **目的**: ブロック内の関数宣言を変数宣言に変換
- **ロジック**:
  1. strictモード、async関数、generator関数の場合は`let`を使用
  2. それ以外は`var`を使用
  3. `_blockHoist = 2`でホイスティング順序を制御
  4. 関数IDをnullに設定して関数式化

#### BlockStatementビジター（行41-51）
- **目的**: ブロック文内の関数宣言を処理
- **除外条件**: 関数本体のブロック、Export宣言直下のブロック

#### SwitchStatementビジター（行53-80）
- **目的**: switch文内の関数宣言を抽出してブロックでラップ
- **ロジック**:
  1. 各caseのconsequentから関数宣言を逆順で抽出
  2. 関数宣言をconsequentから削除
  3. 新しいblockStatementでswitch文をラップ
  4. 抽出した関数をlet宣言として先頭に配置

#### Loopビジター（行88-90）
- **目的**: ループ内のブロックも確実に処理されるようにする
