From ee51d90fb8e9a289b9242f701e7011b60ee162a3 Mon Sep 17 00:00:00 2001 From: kyu08 <49891479+kyu08@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:39:18 +0900 Subject: [PATCH] feat: add FudeReviewToggleWhitespace command to toggle iwhite diffopt Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 1 + README.md | 1 + doc/fude.txt | 7 +++++++ lua/fude/config.lua | 2 ++ lua/fude/init.lua | 20 ++++++++++++++++++++ plugin/fude.lua | 4 ++++ 6 files changed, 35 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 98b4427..20c42d4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -91,6 +91,7 @@ All plugin code lives under `lua/fude/`. The plugin entry point is `plugin/fude. | `reload_timer` | init | init | | `reloading` | init | init | | `gitsigns_reset` | init, scope | init | +| `iwhite` | init | init | | `sidepanel` | ui/sidepanel | ui/sidepanel | **高リスクフィールド**(多数のモジュールから参照): diff --git a/README.md b/README.md index d80632d..1784235 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,7 @@ PR code review inside Neovim. Review GitHub pull requests without leaving your e | `:FudeCopyPRURL` | Copy PR URL to clipboard | | `:FudeReviewReload` | Reload review data from GitHub | | `:FudeReviewToggleCommentStyle` | Toggle comment display style (virtualText/inline) | +| `:FudeReviewToggleWhitespace` | Toggle whitespace diff ignore (iwhite) | | `:FudeReviewToggleGitsigns` | Toggle gitsigns between PR base and HEAD | | `:FudeCreatePR` | Create draft PR from template | diff --git a/doc/fude.txt b/doc/fude.txt index 14cf648..a58de95 100644 --- a/doc/fude.txt +++ b/doc/fude.txt @@ -341,6 +341,13 @@ Using lazy.nvim: >lua or viewed/reviewed state is toggled. Configurable via `sidepanel` options. Requires an active session. +:FudeReviewToggleWhitespace *:FudeReviewToggleWhitespace* + Toggle whitespace diff ignore (iwhite) on and off. + When enabled, whitespace-only changes are hidden from the diff view. + Execute again to show whitespace changes. + The setting is automatically restored when review mode stops. + Requires an active review session. + :FudeReviewToggleGitsigns *:FudeReviewToggleGitsigns* Toggle gitsigns base between PR base and HEAD. By default during review mode, gitsigns uses the PR base (or commit diff --git a/lua/fude/config.lua b/lua/fude/config.lua index 7d9d2b6..9273741 100644 --- a/lua/fude/config.lua +++ b/lua/fude/config.lua @@ -125,6 +125,7 @@ M.state = { reload_timer = nil, -- vim.uv.new_timer() handle for auto-reload reloading = false, -- Guard flag to prevent concurrent reloads gitsigns_reset = false, -- true: HEAD表示(一時的に元のワークツリー状態)、false: PRベース表示 + iwhite = false, -- true: diffopt に iwhite を追加して空白差分を無視 sidepanel = nil, -- { win, buf, scope_entries, file_entries, section_map, augroup } } @@ -178,6 +179,7 @@ function M.reset_state() reload_timer = nil, reloading = false, gitsigns_reset = false, + iwhite = false, sidepanel = nil, } end diff --git a/lua/fude/init.lua b/lua/fude/init.lua index 32fa565..e3f422e 100644 --- a/lua/fude/init.lua +++ b/lua/fude/init.lua @@ -708,6 +708,26 @@ function M.restore_gitsigns_base() end end +--- 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 + --- Toggle gitsigns base between PR base and HEAD. --- When toggled to HEAD, gitsigns uses HEAD as the base to show changes in the working tree. --- When toggled back, gitsigns uses the PR base as the base to show changes in the working tree. diff --git a/plugin/fude.lua b/plugin/fude.lua index e32b289..daf53dd 100644 --- a/plugin/fude.lua +++ b/plugin/fude.lua @@ -153,6 +153,10 @@ vim.api.nvim_create_user_command("FudeReviewToggleCommentStyle", function() require("fude.ui").refresh_extmarks() end, { desc = "Toggle comment display style (virtualText/inline)" }) +vim.api.nvim_create_user_command("FudeReviewToggleWhitespace", function() + require("fude").toggle_iwhite() +end, { desc = "Toggle whitespace diff (iwhite)" }) + vim.api.nvim_create_user_command("FudeReviewToggleGitsigns", function() require("fude").toggle_gitsigns() end, { desc = "Toggle gitsigns between PR base and HEAD" })