feat: 空白差分の表示/非表示を切り替える FudeReviewToggleWhitespace コマンドの追加#116
feat: 空白差分の表示/非表示を切り替える FudeReviewToggleWhitespace コマンドの追加#116
Conversation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
レビュー中に diffopt の iwhite(空白差分無視)をオン/オフできるコマンドを追加し、空白変更が多い差分のノイズを減らせるようにするPRです。レビューセッション停止時に設定が元へ戻ることを前提に、セッション状態 (config.state) にフラグを追加しています。
Changes:
:FudeReviewToggleWhitespaceコマンドを追加し、iwhiteを on/off できるようにした- セッション状態に
iwhiteフラグを追加してトグル状態を保持 - README /
:help/ 開発者向けドキュメントにコマンドと状態フィールドを追記
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | コマンド一覧に :FudeReviewToggleWhitespace を追加 |
| plugin/fude.lua | FudeReviewToggleWhitespace ユーザーコマンドを定義 |
| lua/fude/init.lua | toggle_iwhite() を追加して diffopt の iwhite を切り替え |
| lua/fude/config.lua | config.state に iwhite を追加し、reset_state() でも初期化 |
| doc/fude.txt | :FudeReviewToggleWhitespace のヘルプを追加 |
| CLAUDE.md | state フィールド一覧に iwhite を追記 |
| if state.iwhite then | ||
| state.iwhite = false | ||
| vim.opt.diffopt:remove("iwhite") | ||
| vim.notify("fude.nvim: Whitespace diff ON", vim.log.levels.INFO) | ||
| else | ||
| state.iwhite = true | ||
| vim.opt.diffopt:append("iwhite") |
There was a problem hiding this comment.
state.iwhite の初期値が常に false のため、ユーザーの元の diffopt に既に iwhite が入っているケースでトグル挙動が破綻します(1回目の実行で何も変わらず、2回目でユーザー設定の iwhite を削除してしまう)。トグルは vim.o.diffopt(または vim.opt.diffopt:get())の現在値から実状態を判定して state.iwhite を同期するか、セッション開始時点の diffopt を基準に on/off するようにしてください。
| if state.iwhite then | |
| state.iwhite = false | |
| vim.opt.diffopt:remove("iwhite") | |
| vim.notify("fude.nvim: Whitespace diff ON", vim.log.levels.INFO) | |
| else | |
| state.iwhite = true | |
| vim.opt.diffopt:append("iwhite") | |
| local diffopt = vim.opt.diffopt:get() | |
| local has_iwhite = false | |
| for _, opt in ipairs(diffopt) do | |
| if opt == "iwhite" then | |
| has_iwhite = true | |
| break | |
| end | |
| end | |
| -- Sync internal state with the actual current diffopt value before toggling. | |
| state.iwhite = has_iwhite | |
| if has_iwhite then | |
| vim.opt.diffopt:remove("iwhite") | |
| state.iwhite = false | |
| vim.notify("fude.nvim: Whitespace diff ON", vim.log.levels.INFO) | |
| else | |
| vim.opt.diffopt:append("iwhite") | |
| state.iwhite = true |
| function M.toggle_iwhite() | ||
| local state = config.state | ||
| if not state.active then | ||
| vim.notify("fude.nvim: Not active", vim.log.levels.WARN) | ||
| return | ||
| end |
There was a problem hiding this comment.
この実装だと config.opts.diffopt = nil(ユーザー既定の diffopt を維持する設定)の場合に state.original_diffopt が保存されないため、toggle_iwhite() による diffopt 変更が :FudeReviewStop で復元されずに残ります。toggle_iwhite() 実行前(または review start 時)に必ず original_diffopt を退避するようにして、停止時に確実に元へ戻るようにしてください。
| --- Toggle whitespace diff ignore (iwhite). | ||
| --- When enabled, whitespace-only changes are hidden from the diff view. | ||
| function M.toggle_iwhite() | ||
| local state = config.state | ||
| if not state.active then | ||
| vim.notify("fude.nvim: Not active", vim.log.levels.WARN) | ||
| return | ||
| end | ||
|
|
||
| if state.iwhite then | ||
| state.iwhite = false | ||
| vim.opt.diffopt:remove("iwhite") | ||
| vim.notify("fude.nvim: Whitespace diff ON", vim.log.levels.INFO) | ||
| else | ||
| state.iwhite = true | ||
| vim.opt.diffopt:append("iwhite") | ||
| vim.notify("fude.nvim: Whitespace diff ignored", vim.log.levels.INFO) | ||
| end | ||
| end |
There was a problem hiding this comment.
toggle_iwhite() の追加に対するテストが見当たりません。diffopt の変更/復元(特に stop 時に元へ戻ること、既に iwhite が入っている初期状態でのトグル挙動)を tests/fude/init_integration_spec.lua 等でカバーするテストを追加してください。
Summary
:FudeReviewToggleWhitespaceでdiffoptのiwhiteを on/off できるようにしたoriginal_diffoptの復元により自動クリーンアップされるTest plan
:FudeReviewToggleWhitespaceを実行 → diff から空白差分が消えることを確認:FudeReviewStop→diffoptが元に戻ることを確認🤖 Generated with Claude Code