Skip to content

ファイル分割リファクタ: 責務ごとにモジュール分離 (挙動変更なし) - #20

Merged
mrmt merged 9 commits into
mainfrom
refactor/split-files
Jul 25, 2026
Merged

ファイル分割リファクタ: 責務ごとにモジュール分離 (挙動変更なし)#20
mrmt merged 9 commits into
mainfrom
refactor/split-files

Conversation

@mrmt

@mrmt mrmt commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

デグレ防止シリーズ PR 4/5。1ファイルに複数の責務が同居していた構造を分割する。挙動変更なし (特性テスト75件が全コミットでグリーン維持)。

変更内容 (1コミット = 1抽出)

新ファイル 抽出元 内容
DiffCalculator.swift ContentView.swift 末尾 貼り付けられていた差分計算を独立
Input/KeyBindingHandler.swift ContentView.swift KeyCode / KeyBinding / KeyBindingHandler
Input/DefaultKeyBindings.swift ContentView.swift 78行のクロージャ登録の羅列をテーブル駆動
Rendering/HTMLFormatter.swift MarkdownWebView.swift 最大の論理単位 (約250行)
Rendering/FrontmatterRenderer.swift MarkdownWebView.swift frontmatter 分離処理
Rendering/MarkdownStylesheet.swift MarkdownWebView.swift CSS / JS / HTMLテンプレート
Rendering/String+HTMLEscaping.swift MarkdownWebView.swift htmlEscaped
LaunchArgumentParser.swift MarkdownViewerApp.swift 引数パースを純関数化 + テスト6件追加
  • MarkdownWebView.swift: 745行 → 約270行 / ContentView.swift: 429行 → 210行
  • 連結されていたテストファイル (5スイート同居・import重複) もスイートごとに分割
  • 未使用だった HTMLFormatter.format(_:) を削除
  • SwiftLint 厳格化: trailing_whitespace 有効化、file_length 400。警告は17件 → 1件 (テストの force_try のみ)

検証

  • 各コミットで swift test グリーン (最終 81件)
  • xcodebuild build -configuration Release: 成功
  • swiftlint: exit 0

Base: #19 (chore/xcodegen)

🤖 Generated with Claude Code

https://claude.ai/code/session_01YAgg3ad7Muz4ed4EYTgKU2

mrmt and others added 8 commits July 26, 2026 05:35
- HTMLFormatter の基本要素出力を固定する特性テスト20件
- 変更行ハイライト (changedLines) の挙動固定テスト9件 (DiffCalculator統合含む)
- KeyBindingHandler のディスパッチ/パススルー契約テスト10件 (Command-C/A のコピー保護)
- String.htmlEscaped テスト3件
- テーブルヘッダの th/td 誤判定バグを XCTExpectFailure で記録 (修正PRで反転予定)
- FileWatcher に監視間隔の引数注入を追加 (デフォルト0.5秒で挙動不変) し、テストの Thread.sleep 依存を短縮してフレーク対策

Co-authored-by: Claude Code <claude@anthropic.com>
- project.yml を単一情報源として pbxproj を生成 (生成物もコミット)
- Xcode側にユニットテストターゲットを新設 (従来 xcodebuild test 不可だった)
- バージョンを project.yml の MARKETING_VERSION/CURRENT_PROJECT_VERSION に一元化
  (Info.plist はビルド設定変数を参照。1.5/1.7 の二重管理不整合を解消)
- CI に xcodegen 整合性チェックと xcodebuild test を追加
- README の古い手動セットアップ手順を XcodeGen ベースに更新
- プロジェクト名/スキーム名/構成は維持し make build/install の互換性を保持

Co-authored-by: Claude Code <claude@anthropic.com>
Co-authored-by: Claude Code <claude@anthropic.com>
…eet/String拡張)

MarkdownWebView.swift は745行から258行に。未使用だった HTMLFormatter.format(_:) は削除。

Co-authored-by: Claude Code <claude@anthropic.com>
MarkdownViewerTests.swift に5スイートが連結され import が重複していたのを解消。

Co-authored-by: Claude Code <claude@anthropic.com>
@mrmt
mrmt changed the base branch from chore/xcodegen to main July 25, 2026 21:49
@mrmt
mrmt merged commit 0ad4a27 into main Jul 25, 2026
3 checks passed
@mrmt
mrmt deleted the refactor/split-files branch July 25, 2026 21:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant