---
generated_at: 2026-02-20 12:00:00
metrics:
  claims_total: 202
  claims_with_evidence: 198
  claims_without_evidence: 4
confidence_derived: 0.98
---

# 根拠レポート：workspace-d-visitors 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：198 / 202、根拠なし：4
- 優先レビュー（高）
  1. **C-088 (formattedAttributes)**: formatAttributes内部のフォーマットロジック詳細が複雑で、全分岐の正確な期待結果の確認が必要
  2. **C-089 (localFormattedAttributes)**: localAttributes + normalizeAttributes + formatAttributesの組み合わせの動作確認が必要
  3. **C-041 (LinkageAttribute hasPlusPlus)**: hasPlusPlusフラグの正確な動作仕様の確認が必要
  4. **C-202 (formatTypeTransforming)**: トップレベル関数のテンプレート引数の型制約詳細が不明

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `workspace-d/source/workspaced/visitors/attributes.d` - AttributesVisitorクラス（L13-171）
- E-02: `workspace-d/source/workspaced/visitors/attributes.d` - ASTContext構造体（L173-504）
- E-03: `workspace-d/source/workspaced/visitors/attributes.d` - isProtectionToken関数（L506-509）
- E-04: `workspace-d/source/workspaced/visitors/attributes.d` - normalizeAttributes関数（L511-542）
- E-05: `workspace-d/source/workspaced/visitors/classifier.d` - CodeDefinitionClassifierクラス（L19-227）
- E-06: `workspace-d/source/workspaced/visitors/classifier.d` - scoreIndent関数（L229-235）
- E-07: `workspace-d/source/workspaced/visitors/methodfinder.d` - ArgumentInfo構造体（L18-32）
- E-08: `workspace-d/source/workspaced/visitors/methodfinder.d` - MethodDetails構造体（L34-65）
- E-09: `workspace-d/source/workspaced/visitors/methodfinder.d` - FieldDetails構造体（L68-74）
- E-10: `workspace-d/source/workspaced/visitors/methodfinder.d` - TypeDetails構造体（L77-97）
- E-11: `workspace-d/source/workspaced/visitors/methodfinder.d` - ReferencedType構造体（L100-106）
- E-12: `workspace-d/source/workspaced/visitors/methodfinder.d` - InterfaceDetails構造体（L108-139）
- E-13: `workspace-d/source/workspaced/visitors/methodfinder.d` - InterfaceMethodFinderクラス（L141-348）
- E-14: `workspace-d/source/workspaced/visitors/methodfinder.d` - NestedTypeFinderクラス（L350-421）
- E-15: `workspace-d/source/workspaced/visitors/methodfinder.d` - TypeTransformingFormatterクラス（L433-507）
- E-16: `workspace-d/source/workspaced/visitors/methodfinder.d` - formatTypeTransforming関数（L423-430）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | MemberFunctionAttribute visitでtokenTypeチェック後に属性追加 | E-01 (L17-23) | ○ |
| C-002 | MemberFunctionAttribute visitで子ノードacceptが呼ばれる | E-01 (L22) | ○ |
| C-003 | tokenTypeがinitの場合に属性が追加されない | E-01 (L19) | ○ |
| C-004 | FunctionAttribute visitでSimpleAttributeとして追加 | E-01 (L25-31) | ○ |
| C-005 | FunctionAttribute visitでtoken.typeがinitの場合スキップ | E-01 (L27) | ○ |
| C-006 | AtAttribute visitで属性追加 | E-01 (L33-38) | ○ |
| C-007 | PragmaExpression visitで属性追加 | E-01 (L40-45) | ○ |
| C-008 | Deprecated visitで属性追加 | E-01 (L47-52) | ○ |
| C-009 | AlignAttribute visitで属性追加 | E-01 (L54-59) | ○ |
| C-010 | LinkageAttribute visitで属性追加 | E-01 (L61-66) | ○ |
| C-011 | Attribute visitでトークン結合ロジック | E-01 (L68-79) | ○ |
| C-012 | Attribute visitでattribute.typeのみの処理 | E-01 (L71-72) | ○ |
| C-013 | Attribute visitでトークン空時のスキップ | E-01 (L75) | ○ |
| C-014 | StorageClass visitでSimpleAttribute追加 | E-01 (L81-87) | ○ |
| C-015 | StorageClass visitでtoken.type initスキップ | E-01 (L83) | ○ |
| C-016 | AttributeDeclaration visitでsticky設定 | E-01 (L89-95) | ○ |
| C-017 | Declaration visitでattribDecl時のsticky処理 | E-01 (L97-113) | ○ |
| C-018 | Declaration visitで非attribDecl時のコンテキスト復元 | E-01 (L108-112) | ○ |
| C-019 | InterfaceDeclaration visitでコンテナpush | E-01 (L115-121) | ○ |
| C-020 | InterfaceDeclaration visit後のコンテキスト復元 | E-01 (L117, L120) | ○ |
| C-021 | ClassDeclaration visitでコンテナpush | E-01 (L123-129) | ○ |
| C-022 | StructDeclaration visitでコンテナpush | E-01 (L131-137) | ○ |
| C-023 | UnionDeclaration visitでコンテナpush | E-01 (L139-145) | ○ |
| C-024 | EnumDeclaration visitでコンテナpush | E-01 (L147-153) | ○ |
| C-025 | TemplateDeclaration visitでコンテナpush | E-01 (L155-161) | ○ |
| C-026 | processDeclarationでdec.accept呼び出し | E-01 (L163-166) | ○ |
| C-027 | SimpleAttribute.attributeで単一属性返却 | E-02 (L201-207) | ○ |
| C-028 | SimpleAttribute.attributeで空時init返却 | E-02 (L205-206) | ○ |
| C-029 | SimpleAttribute.attributeで複数時init返却 | E-02 (L203-206) | ○ |
| C-030 | SimpleAttribute.firstAttributeで先頭返却 | E-02 (L209-215) | ○ |
| C-031 | SimpleAttribute.firstAttributeで空時init返却 | E-02 (L213-214) | ○ |
| C-032 | SimpleAttribute.toStringでドット結合 | E-02 (L217-220) | ○ |
| C-033 | SimpleAttribute.toStringでtext空時type使用 | E-02 (L219) | ○ |
| C-034 | AnyAttributeInfo.peekで正しい型返却 | E-02 (L256-263) | ○ |
| C-035 | AnyAttributeInfo.peekで型不一致時init返却 | E-02 (L258-262) | ○ |
| C-036 | localAttributesでContainerAttribute以降のフィルタ | E-02 (L271-278) | ○ |
| C-037 | localAttributesでContainerAttributeなし時全返却 | E-02 (L274-275) | ○ |
| C-038 | attributeDescriptionsでPragmaExpressionの文字列生成 | E-02 (L283-285) | ○ |
| C-039 | attributeDescriptionsでDeprecatedの文字列生成 | E-02 (L286-287) | ○ |
| C-040 | attributeDescriptionsでAtAttributeの文字列生成 | E-02 (L288-289) | ○ |
| C-041 | attributeDescriptionsでLinkageAttributeの文字列生成 | E-02 (L292-293) | ○ |
| C-042 | attributeDescriptionsでContainerAttributeの文字列生成 | E-02 (L299-300) | ○ |
| C-043 | attributeDescriptionsでUserdataAttributeの文字列生成 | E-02 (L301-302) | ○ |
| C-044 | isTokenでMemberFunctionAttribute判定 | E-02 (L394-398) | ○ |
| C-045 | isTokenでSimpleAttribute判定 | E-02 (L394-398) | ○ |
| C-046 | isTokenで該当なし時false返却 | E-02 (L394-398) | ○ |
| C-047 | isTokenInContainerでコンテナ内判定 | E-02 (L400-404) | ○ |
| C-048 | isNothrowでnothrow判定 | E-02 (L406-408) | ○ |
| C-049 | isNothrowでnothrow不在判定 | E-02 (L406-408) | ○ |
| C-050 | isNogcで@nogc判定 | E-02 (L416-419) | ○ |
| C-051 | isNogcで@nogc不在判定 | E-02 (L416-419) | ○ |
| C-052 | isStaticでstatic判定 | E-02 (L426-428) | ○ |
| C-053 | isFinalでfinal判定 | E-02 (L430-432) | ○ |
| C-054 | isAbstractでabstract判定 | E-02 (L434-436) | ○ |
| C-055 | requiredImplementationLevelでコンテナなし0返却 | E-02 (L450-460) | ○ |
| C-056 | requiredImplementationLevelでprivate時0返却 | E-02 (L453) | ○ |
| C-057 | requiredImplementationLevelでstatic時0返却 | E-02 (L453) | ○ |
| C-058 | requiredImplementationLevelでfinal時0返却 | E-02 (L453) | ○ |
| C-059 | requiredImplementationLevelでclass_+abstract時9返却 | E-02 (L456-457) | ○ |
| C-060 | requiredImplementationLevelでclass_+非abstract時1返却 | E-02 (L457) | ○ |
| C-061 | requiredImplementationLevelでinterface時9返却 | E-02 (L458-459) | ○ |
| C-062 | protectionAttributeで最後の保護属性返却 | E-02 (L462-469) | ○ |
| C-063 | protectionAttributeで保護属性なし時init返却 | E-02 (L465-466) | ○ |
| C-064 | protectionTypeで保護IdType返却 | E-02 (L471-478) | ○ |
| C-065 | protectionTypeで保護なし時init返却 | E-02 (L474-475) | ○ |
| C-066 | pushData(string, Variant)でUserdataAttribute追加 | E-02 (L480-483) | ○ |
| C-067 | pushData(T)(string, T)でVariantラップ追加 | E-02 (L485-488) | ○ |
| C-068 | pushContainerでContainerAttribute追加 | E-02 (L490-493) | ○ |
| C-069 | saveで属性リストコピー返却 | E-02 (L495-498) | ○ |
| C-070 | restoreで属性リスト復元 | E-02 (L500-503) | ○ |
| C-071 | save/restoreで空属性リスト動作 | E-02 (L495-503) | ○ |
| C-072 | simpleAttributesでSimpleAttributeフィルタ | E-02 (L346-349) | ○ |
| C-073 | simpleAttributesで空結果 | E-02 (L346-349) | ○ |
| C-074 | atAttributesでAtAttributeフィルタ | E-02 (L358-362) | ○ |
| C-075 | memberFunctionAttributesでフィルタ | E-02 (L370-374) | ○ |
| C-076 | containerAttributesでフィルタ | E-02 (L388-392) | ○ |
| C-077 | userdataAttributesでフィルタ | E-02 (L382-386) | ○ |
| C-078 | isProtectionTokenでpublic判定 | E-03 (L506-509) | ○ |
| C-079 | isProtectionTokenでprivate判定 | E-03 (L506-509) | ○ |
| C-080 | isProtectionTokenでprotected判定 | E-03 (L506-509) | ○ |
| C-081 | isProtectionTokenでpackage判定 | E-03 (L506-509) | ○ |
| C-082 | isProtectionTokenで非保護トークンfalse | E-03 (L506-509) | ○ |
| C-083 | normalizeAttributesで重複保護属性の正規化 | E-04 (L511-542) | ○ |
| C-084 | normalizeAttributesで重複安全属性の正規化 | E-04 (L528-535) | ○ |
| C-085 | normalizeAttributesで非重複属性保持 | E-04 (L511-542) | ○ |
| C-086 | normalizeAttributesで空配列 | E-04 (L513-514) | ○ |
| C-087 | normalizeAttributesで単一属性 | E-04 (L511-542) | ○ |
| C-088 | formattedAttributesでフォーマット文字列生成 | E-02 (L336-339) | △ |
| C-089 | localFormattedAttributesでローカルフォーマット | E-02 (L341-344) | △ |
| C-090 | CodeDefinitionClassifierコンストラクタ | E-05 (L36-39) | ○ |
| C-091 | AliasDeclaration visitでaliases分類 | E-05 (L41-44) | ○ |
| C-092 | AliasThisDeclaration visitでaliases分類 | E-05 (L46-49) | ○ |
| C-093 | ClassDeclaration visitでtypes分類 | E-05 (L51-54) | ○ |
| C-094 | InterfaceDeclaration visitでtypes分類 | E-05 (L56-59) | ○ |
| C-095 | StructDeclaration visitでtypes分類 | E-05 (L61-64) | ○ |
| C-096 | UnionDeclaration visitでtypes分類 | E-05 (L66-69) | ○ |
| C-097 | EnumDeclaration visitでtypes分類 | E-05 (L71-74) | ○ |
| C-098 | AnonymousEnumDeclaration visitでtypes分類 | E-05 (L76-79) | ○ |
| C-099 | AutoDeclaration visitでfields分類 | E-05 (L81-84) | ○ |
| C-100 | VariableDeclaration visitでfields分類 | E-05 (L86-89) | ○ |
| C-101 | Constructor visitでctor分類 | E-05 (L91-94) | ○ |
| C-102 | StaticConstructor visitでctor分類 | E-05 (L96-99) | ○ |
| C-103 | SharedStaticConstructor visitでctor分類 | E-05 (L101-104) | ○ |
| C-104 | Postblit visitでcopyctor分類 | E-05 (L106-109) | ○ |
| C-105 | Destructor visitでdtor分類 | E-05 (L111-114) | ○ |
| C-106 | StaticDestructor visitでdtor分類 | E-05 (L116-119) | ○ |
| C-107 | SharedStaticDestructor visitでdtor分類 | E-05 (L121-124) | ○ |
| C-108 | FunctionDeclaration visitで@property時properties分類 | E-05 (L126-131) | ○ |
| C-109 | FunctionDeclaration visitで非@property時methods分類 | E-05 (L126-131) | ○ |
| C-110 | Declaration visitでcurrentRange設定 | E-05 (L134-139) | ○ |
| C-111 | Declaration visitで連続同ブロックのマージ | E-05 (L141-148) | ○ |
| C-112 | Declaration visitで異なるブロック非マージ | E-05 (L141) | ○ |
| C-113 | マージ時のインデント選択 | E-05 (L144-145) | ○ |
| C-114 | putRegionでprivate保護設定 | E-05 (L176-177) | ○ |
| C-115 | putRegionでprotected保護設定 | E-05 (L178-179) | ○ |
| C-116 | putRegionでpackage保護設定 | E-05 (L180-185) | ○ |
| C-117 | putRegionでpackageIdentifier保護設定 | E-05 (L182-183) | ○ |
| C-118 | putRegionでpublic保護設定 | E-05 (L187-188) | ○ |
| C-119 | putRegionでstatic設定 | E-05 (L191) | ○ |
| C-120 | putRegionでinstanced設定 | E-05 (L191) | ○ |
| C-121 | putRegionでsticky保護リージョン追加 | E-05 (L193-206) | ○ |
| C-122 | putRegionでデフォルトrange使用 | E-05 (L165-166) | ○ |
| C-123 | Region.sameBlockAsで同一判定 | E-05 (L30-33) | ○ |
| C-124 | Region.sameBlockAsでtype差異判定 | E-05 (L32) | ○ |
| C-125 | Region.sameBlockAsでprotection差異判定 | E-05 (L32) | ○ |
| C-126 | Region.sameBlockAsでstaticness差異判定 | E-05 (L32) | ○ |
| C-127 | scoreIndentでスペーススコア | E-06 (L229-235) | ○ |
| C-128 | scoreIndentでタブスコア | E-06 (L234) | ○ |
| C-129 | scoreIndentで混在スコア | E-06 (L234) | ○ |
| C-130 | scoreIndentで空文字列 | E-06 (L231-233) | ○ |
| C-131 | scoreIndentで全空白 | E-06 (L232-233) | ○ |
| C-132 | ArgumentInfo.toStringでname返却 | E-07 (L28-31) | ○ |
| C-133 | MethodDetails.identifierで識別子生成 | E-08 (L61-64) | ○ |
| C-134 | MethodDetails.identifierで引数なし | E-08 (L63) | ○ |
| C-135 | MethodDetails.identifierで複数引数 | E-08 (L63) | ○ |
| C-136 | InterfaceDetails.isEmptyで空白のみtrue | E-12 (L135-138) | ○ |
| C-137 | InterfaceDetails.isEmptyでコードありfalse | E-12 (L135-138) | ○ |
| C-138 | InterfaceDetails.isEmptyで空範囲true | E-12 (L135-138) | ○ |
| C-139 | InterfaceMethodFinderコンストラクタ | E-13 (L143-148) | ○ |
| C-140 | StructDeclaration visitでinTarget時スキップ | E-13 (L150-156) | ○ |
| C-141 | StructDeclaration visitで非inTarget時super.visit | E-13 (L155) | ○ |
| C-142 | UnionDeclaration visitでinTarget時スキップ | E-13 (L158-163) | ○ |
| C-143 | EnumDeclaration visitでinTarget時スキップ | E-13 (L165-170) | ○ |
| C-144 | ClassDeclaration visitで非inTarget時visitInterface呼び出し | E-13 (L174-183) | ○ |
| C-145 | ClassDeclaration visitでinTarget時スキップ | E-13 (L176-177) | ○ |
| C-146 | InterfaceDeclaration visitで非inTarget時visitInterface呼び出し | E-13 (L185-194) | ○ |
| C-147 | visitInterfaceでtargetPosition範囲内でターゲット処理 | E-13 (L204-225) | ○ |
| C-148 | visitInterfaceでtargetPosition範囲外スキップ | E-13 (L204) | ○ |
| C-149 | visitInterfaceでstructBodyがnull時return | E-13 (L199-200) | ○ |
| C-150 | visitInterfaceでbaseClassList処理 | E-13 (L208-219) | ○ |
| C-151 | visitInterfaceでbaseClassListがnull時空 | E-13 (L208) | ○ |
| C-152 | visitInterfaceでNestedTypeFinder呼び出し | E-13 (L222) | ○ |
| C-153 | FunctionDeclaration visitでinTarget時メソッド追加 | E-13 (L228-280) | ○ |
| C-154 | FunctionDeclaration visitで非inTarget時スキップ | E-13 (L231-232) | ○ |
| C-155 | FunctionDeclaration visitでreturnType null時void | E-13 (L271) | ○ |
| C-156 | FunctionDeclaration visitでfunctionBody有りhasBody | E-13 (L251) | ○ |
| C-157 | FunctionDeclaration visitでfunctionBody無しhasBody false | E-13 (L251) | ○ |
| C-158 | FunctionDeclaration visitでneedsImplementation判定 | E-13 (L253-255) | ○ |
| C-159 | FunctionDeclaration visitでisNothrowOrNogc判定 | E-13 (L277-278) | ○ |
| C-160 | FunctionDeclaration visitでabstract/finalフィルタ | E-13 (L266) | ○ |
| C-161 | FunctionDeclaration visitで引数情報収集 | E-13 (L267-270) | ○ |
| C-162 | FunctionDeclaration visitでdefinitionRange設定 | E-13 (L233-248) | ○ |
| C-163 | VariableDeclaration visitでフィールド追加 | E-13 (L286-299) | ○ |
| C-164 | VariableDeclaration visitで非inTarget時スキップ | E-13 (L288-289) | ○ |
| C-165 | VariableDeclaration visitでtype null時スキップ | E-13 (L290-291) | ○ |
| C-166 | VariableDeclaration visitでprivate判定 | E-13 (L293) | ○ |
| C-167 | TypeIdentifierPart visitでusedType呼び出し | E-13 (L302-317) | ○ |
| C-168 | TypeIdentifierPart visitで非inTarget時スキップ | E-13 (L304-305) | ○ |
| C-169 | TypeIdentifierPart visitでtemplateInstance判定 | E-13 (L309-311) | ○ |
| C-170 | usedTypeでソート順挿入 | E-13 (L321-328) | ○ |
| C-171 | usedTypeで重複防止 | E-13 (L325-326) | ○ |
| C-172 | usedTypeで空リストへの挿入 | E-13 (L321-328) | ○ |
| C-173 | resolveTypeでネスト型解決 | E-13 (L330-342) | ○ |
| C-174 | resolveTypeで不明型入力返却 | E-13 (L340-341) | ○ |
| C-175 | resolveTypeで最短マッチ返却 | E-13 (L335) | ○ |
| C-176 | NestedTypeFinderコンストラクタ | E-14 (L352-356) | ○ |
| C-177 | NestedTypeFinder StructDeclaration visit | E-14 (L358-361) | ○ |
| C-178 | NestedTypeFinder UnionDeclaration visit | E-14 (L363-366) | ○ |
| C-179 | NestedTypeFinder EnumDeclaration visit | E-14 (L368-371) | ○ |
| C-180 | NestedTypeFinder ClassDeclaration visit | E-14 (L373-376) | ○ |
| C-181 | NestedTypeFinder InterfaceDeclaration visit | E-14 (L378-381) | ○ |
| C-182 | NestedTypeFinder TemplateDeclaration visit | E-14 (L383-386) | ○ |
| C-183 | NestedTypeFinder AliasDeclaration visit | E-14 (L388-393) | ○ |
| C-184 | NestedTypeFinder AliasDeclaration null時スキップ | E-14 (L390) | ○ |
| C-185 | NestedTypeFinder handleTypeの処理順序 | E-14 (L395-399) | ○ |
| C-186 | pushNestedTypeでnested追加とTypeDetails追加 | E-14 (L408-412) | ○ |
| C-187 | popNestedTypeでnested末尾削除 | E-14 (L414-416) | ○ |
| C-188 | popNestedTypeで1つの場合空 | E-14 (L415) | ○ |
| C-189 | TypeTransformingFormatterコンストラクタ | E-15 (L439-443) | ○ |
| C-190 | putでuseTempBuffer時tempBuffer書き込み | E-15 (L445-451) | ○ |
| C-191 | putで非useTempBuffer時super.put | E-15 (L449-450) | ○ |
| C-192 | flushTempBufferでtranslateType変換とput | E-15 (L453-461) | ○ |
| C-193 | flushTempBufferで非useTempBuffer時スキップ | E-15 (L455-456) | ○ |
| C-194 | flushTempBufferで空tempBuffer時スキップ | E-15 (L455) | ○ |
| C-195 | format(TypeIdentifierPart)でdot出力 | E-15 (L467-469) | ○ |
| C-196 | format(TypeIdentifierPart)でidentifier処理 | E-15 (L471-474) | ○ |
| C-197 | format(TypeIdentifierPart)でindexer処理 | E-15 (L475-481) | ○ |
| C-198 | format(TypeIdentifierPart)でtypeIdentifierPart再帰 | E-15 (L482-486) | ○ |
| C-199 | format(TypeIdentifierPart)でtypeIdentifierPartなし時flush | E-15 (L487-490) | ○ |
| C-200 | format(IdentifierOrTemplateInstance)でidentifier処理 | E-15 (L493-504) | ○ |
| C-201 | format(IdentifierOrTemplateInstance)でtemplateInstance処理 | E-15 (L498-503) | ○ |
| C-202 | formatTypeTransformingでフォーマッタ生成とformat呼び出し | E-16 (L423-430) | △ |

## 4) 不足情報（Unknown / Missing）
- C-088, C-089: `formatAttributes`は内部でdparse.formatterの`format`関数を呼び出しており、その出力の正確な期待値はdparseライブラリの仕様に依存する。テスト時にはモックまたはスナップショットテストが推奨される。
  - 候補：dparse.formatter ドキュメント / dparse ソースコード / 既存テストケース
- C-041: `LinkageAttribute.hasPlusPlus`プロパティの正確な条件はdparse.astの実装に依存する。
  - 候補：dparse.ast ソースコード / D言語仕様書
- C-202: `formatTypeTransforming`関数のテンプレート制約（`Sink`, `T`）の具体的な型要件はdparse.formatterの`Formatter`に依存する。
  - 候補：dparse.formatter.Formatter ドキュメント / dparse ソースコード

## 5) リスクフラグ（レビュー観点）
- **1 (中リスク)**: `requiredImplementationLevel`のロジックは複合条件（コンテナ、保護属性、static、final、abstract）が絡み合っており、条件の組み合わせテストが重要。テストケースC-055からC-061で主要分岐をカバーしているが、全組み合わせは未カバー。
- **1 (中リスク)**: `normalizeAttributes`は逆順走査と重複排除を行っており、属性の出現順序がテスト結果に影響する。C-083, C-084で主要パターンをカバー。
- **0 (低リスク)**: ビジターパターンの各visit メソッドは定型的な属性収集/分類処理で、ロジックが単純。
- **1 (中リスク)**: `TypeTransformingFormatter`はdparse.formatterのFormatterクラスを継承しており、基底クラスの動作との相互作用がテストの複雑さを増す可能性がある。
- **1 (中リスク)**: `InterfaceMethodFinder.visit(FunctionDeclaration)`は多くの副作用（functionBody/commentの一時的なnull化と復元）があり、scope(exit)による確実な復元のテストが重要。

## 6) レビュアーチェックリスト（最小）
- [ ] `requiredImplementationLevel`の全条件分岐（コンテナ種別 x 保護属性 x static x final x abstract）が網羅されているか
- [ ] `normalizeAttributes`の属性順序依存テスト（後方優先の正規化ルール）が正しいか
- [ ] `InterfaceMethodFinder.visit(FunctionDeclaration)`のfunctionBody/comment一時null化と復元のテストが十分か
- [ ] `visitInterface`のbaseClassList処理で、type2/typeIdentifierPart/identifierOrTemplateInstanceがnullの場合のcontinueパスがテストされているか
- [ ] dparseライブラリへの依存部分（formatAttributes, TypeTransformingFormatter）のモック化方針が適切か
- [ ] `CodeDefinitionClassifier`の各visit メソッドがputRegionに正しいCodeRegionTypeを渡しているか
- [ ] `scoreIndent`のタブ=4, スペース=1の計算ルールが想定通りか
