---
generated_at: 2026-03-01 05:45:00
metrics:
  claims_total: 68
  claims_with_evidence: 68
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：babel-helper-create-regexp-features-plugin 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

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

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

- E-01: `packages/babel-helper-create-regexp-features-plugin/src/features.ts` - FEATURES定数、enableFeature関数、hasFeature関数の定義
- E-02: `packages/babel-helper-create-regexp-features-plugin/src/util.ts` - generateRegexpuOptions関数、canSkipRegexpu関数、transformFlags関数の定義
- E-03: `packages/babel-helper-create-regexp-features-plugin/src/index.ts` - createRegExpFeaturePlugin関数、Options型、isRegExpTest関数の定義

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

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

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | FEATURES定数が正しいビットフラグ値を持つ | E-01 L1-11: `FEATURES = Object.freeze({unicodeFlag: 1 << 0, ...})` | ○ |
| C-02 | FEATURES定数がfreezeされている | E-01 L1: `Object.freeze({...})` | ○ |
| C-03 | enableFeatureで単一機能を有効化できる | E-01 L25-27: `return features \| feature` | ○ |
| C-04 | enableFeatureで複数機能を有効化できる | E-01 L25-27: ビットOR演算による実装 | ○ |
| C-05 | enableFeatureは冪等である | E-01 L25-27: `features \| feature` は冪等性を持つ | ○ |
| C-06 | enableFeatureでfeatures=0から有効化できる | E-01 L25-27: 0とのOR演算 | ○ |
| C-07 | enableFeatureで全機能有効時も正常動作 | E-01 L25-27: ビット演算の特性 | ○ |
| C-08 | hasFeatureで有効な機能がtrueを返す | E-01 L29-31: `return !!(features & feature)` | ○ |
| C-09 | hasFeatureで無効な機能がfalseを返す | E-01 L29-31: AND演算で0ならfalse | ○ |
| C-10 | hasFeatureで複数機能有効時に個別判定できる | E-01 L29-31: ビットAND演算 | ○ |
| C-11 | hasFeatureでfeatures=0時すべてfalse | E-01 L29-31: 0とのAND演算は0 | ○ |
| C-12 | hasFeatureでfeatures=255時すべてtrue | E-01 L29-31: 全ビット1とのAND | ○ |

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

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-13 | generateRegexpuOptionsでunicodeFlag有効時のオプション生成 | E-02 L6-43: `feat('unicodeFlag')` の呼び出し | ○ |
| C-14 | generateRegexpuOptionsでdotAllFlag有効時のオプション生成 | E-02 L37: `dotAllFlag: feat("dotAllFlag")` | ○ |
| C-15 | generateRegexpuOptionsでunicodePropertyEscape有効時のオプション生成 | E-02 L38: `unicodePropertyEscapes: feat("unicodePropertyEscape")` | ○ |
| C-16 | generateRegexpuOptionsでnamedCaptureGroups有効時のオプション生成 | E-02 L39: `namedGroups: feat("namedCaptureGroups") \|\| featDuplicateNamedGroups()` | ○ |
| C-17 | generateRegexpuOptionsでunicodeSetsFlag有効時のオプション生成 | E-02 L36: `unicodeSetsFlag: feat("unicodeSetsFlag")` | ○ |
| C-18 | generateRegexpuOptionsでmodifiers有効時のオプション生成 | E-02 L41: `modifiers: feat("modifiers")` | ○ |
| C-19 | generateRegexpuOptionsで重複名前付きグループ検出 | E-02 L14-32: `featDuplicateNamedGroups()` の実装 | ○ |
| C-20 | generateRegexpuOptionsで重複なしの場合falseを返す | E-02 L31: `return false` | ○ |
| C-21 | generateRegexpuOptionsで複数機能有効時の複合オプション | E-02 L34-43: 各機能を個別に評価 | ○ |
| C-22 | generateRegexpuOptionsでtoTransform=0時すべてfalse | E-02 L10-11: `hasFeature` が全てfalseを返す | ○ |
| C-23 | generateRegexpuOptionsで空パターン対応 | E-02 L6-43: patternは直接参照せず（重複検出除く） | ○ |
| C-24 | generateRegexpuOptionsで悪意のある入力対策 | E-02 L21-22: `match[2]` チェックで早期終了 | ○ |
| C-25 | canSkipRegexpuでvフラグ+unicodeSetsFlag変換時false | E-02 L51-53: `flags.includes("v")` チェック | ○ |
| C-26 | canSkipRegexpuでuフラグ+unicodeFlag変換時false | E-02 L55-56: `flags.includes("u")` チェック | ○ |
| C-27 | canSkipRegexpuでuフラグ+unicodePropertyEscapes+\\p{あり時false | E-02 L57-62: `/\\p\{/i.test(pattern)` チェック | ○ |
| C-28 | canSkipRegexpuでuフラグ+unicodePropertyEscapes+\\p{なし時true | E-02 L57-62: パターンチェック通過でスキップ | ○ |
| C-29 | canSkipRegexpuでsフラグ+dotAllFlag変換時false | E-02 L65-67: `flags.includes("s")` チェック | ○ |
| C-30 | canSkipRegexpuでnamedGroups変換+名前付きグループあり時false | E-02 L69-71: `/\(\?<(?![=!])/` チェック | ○ |
| C-31 | canSkipRegexpuでnamedGroups変換+名前付きグループなし時true | E-02 L69-71: パターンマッチせずスキップ | ○ |
| C-32 | canSkipRegexpuでmodifiers変換+modifier構文あり時false | E-02 L73-75: `/\(\?[\w-]+:/` チェック | ○ |
| C-33 | canSkipRegexpuでmodifiers変換+modifier構文なし時true | E-02 L73-75: パターンマッチせずスキップ | ○ |
| C-34 | canSkipRegexpuで変換不要時trueを返す | E-02 L77: `return true` | ○ |
| C-35 | canSkipRegexpuでlookahead/lookbehind除外 | E-02 L69: `(?![=!])` でlookaround除外 | ○ |
| C-36 | transformFlagsでvをuに変換 | E-02 L81-83: `flags.replace("v", "u")` | ○ |
| C-37 | transformFlagsでuを削除 | E-02 L84-86: `flags.replace("u", "")` | ○ |
| C-38 | transformFlagsでsを削除 | E-02 L87-89: `flags.replace("s", "")` | ○ |
| C-39 | transformFlagsで複数フラグを同時変換 | E-02 L81-89: 順次replaceを適用 | ○ |
| C-40 | transformFlagsで空フラグ対応 | E-02 L80-90: replaceは空文字でも動作 | ○ |
| C-41 | transformFlagsで変換対象フラグなしの場合 | E-02 L81-89: replaceは対象なしで変更なし | ○ |

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

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 | createRegExpFeaturePluginでプラグインオブジェクト返却 | E-03 L31-129: 関数定義全体 | ○ |
| C-43 | createRegExpFeaturePluginでname設定 | E-03 L38: `name,` | ○ |
| C-44 | createRegExpFeaturePluginでmanipulateOptions設定 | E-03 L40: `manipulateOptions,` | ○ |
| C-45 | createRegExpFeaturePluginでoptions省略可能 | E-03 L34: `options = {}` デフォルト値 | ○ |
| C-46 | pre関数でfeaturesKey設定 | E-03 L44-52: `file.set(featuresKey, newFeatures)` | ○ |
| C-47 | pre関数で既存featuresに機能追加 | E-03 L44-45: `enableFeature(features, FEATURES[feature])` | ○ |
| C-48 | useUnicodeFlag=falseでunicodeFlag有効化 | E-03 L48-50: `enableFeature(newFeatures, FEATURES.unicodeFlag)` | ○ |
| C-49 | runtimeオプション設定 | E-03 L64: `file.set(runtimeKey, runtime)` | ○ |
| C-50 | runtimeオプション競合時エラー | E-03 L56-62: `throw new Error(...)` | ○ |
| C-51 | 同じruntimeオプションは競合しない | E-03 L56: `file.get(runtimeKey) !== runtime` | ○ |
| C-52 | versionKey設定 | E-03 L67-72: `file.set(versionKey, PACKAGE_JSON.version)` | ○ |
| C-53 | 古いバージョンを新しいバージョンで上書き | E-03 L67-69: `semver.lt()` チェック | ○ |
| C-54 | 変換不要な正規表現はスキップ | E-03 L82-84: `if (canSkipRegexpu(node, regexpuOptions)) return` | ○ |
| C-55 | unicodeFlag有効時パターン変換 | E-03 L108: `rewritePattern(...)` | ○ |
| C-56 | フラグが変換される | E-03 L125: `transformFlags(regexpuOptions, newFlags ?? node.flags)` | ○ |
| C-57 | 名前付きグループがwrapRegExpでラップ | E-03 L110-123: `path.replaceWith(call)` | ○ |
| C-58 | runtime=false時ラップされない | E-03 L113: `runtime &&` 条件 | ○ |
| C-59 | RegExp.test()呼び出し時ラップされない | E-03 L114: `!isRegExpTest(path)` 条件 | ○ |
| C-60 | 重複名前付きグループ収集 | E-03 L91-94: 配列にpush | ○ |
| C-61 | 単一名前付きグループは数値収集 | E-03 L96: `namedCaptureGroups[name] = index` | ○ |
| C-62 | modifiers変換時newFlags適用 | E-03 L102-106: `onNewFlags` コールバック | ○ |
| C-63 | wrapRegExpにpureアノテーション | E-03 L120: `annotateAsPure(call)` | ○ |
| C-64 | isRegExpTestで.test()形式判定 | E-03 L131-138: `isIdentifier({ name: "test" })` | ○ |
| C-65 | isRegExpTestで.exec()形式除外 | E-03 L137: `name: "test"` 限定 | ○ |
| C-66 | isRegExpTestでオブジェクト不一致時false | E-03 L134: `object: path.node` 条件 | ○ |
| C-67 | isRegExpTestでcomputed property除外 | E-03 L135: `computed: false` 条件 | ○ |
| C-68 | isRegExpTestで非MemberExpression時false | E-03 L133: `isMemberExpression` チェック | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - 全てのテストケースはソースコードから直接導出されています

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースに明確な根拠があります
- 注意点：
  - rewritePattern関数（regexpu-core）の内部動作はモックが必要
  - semverライブラリの動作確認が必要
  - Babelのfile APIのモックが必要

## 6) レビュアーチェックリスト（最小）
- [ ] ビットフラグ演算のテストケースが全機能をカバーしているか確認
- [ ] canSkipRegexpu関数の各フラグ条件分岐が網羅されているか確認
- [ ] 名前付きキャプチャグループの重複検出ロジックのエッジケースを確認
- [ ] runtimeオプション競合時のエラーメッセージが適切か確認
- [ ] isRegExpTest関数のMemberExpression判定条件を確認
