irongit

My nvim configuration

refactor(highlights): extract qf-line-highlights from claude-nvim

Move highlight module out of claude-nvim into top-level extensions
so any qflist source (telescope, LSP, etc.) gets line highlights.
Drop claude-specific highlight/blame config and prompt text tracking.
Add changedtick polling to catch qflist changes from non-cmd sources.
huncholanehuncholaneauthored
parent ae4ace9commit 5184a9227c378ec13d5d35bfec6b7ea88993cf4bBrowse files

6 files changed, +36 -34

+1-1claude-nvim/lua/claude/find.lua
@@ -105,7 +105,7 @@ function M.find()
105105 vim.fn.setqflist({}, " ", { title = query, items = items })
106106 vim.cmd("copen")
107107 pcall(vim.cmd, "cc 2")
108- pcall(function() require("claude.highlights").refresh_all() end)
108+ pcall(function() require("extensions.qf-line-highlights").refresh_all() end)
109109 end))
110110 end)
111111 end
+0-6claude-nvim/lua/claude/init.lua
@@ -2,7 +2,6 @@ local M = {}
22
33 local ui = require("claude.ui")
44 local runner = require("claude.runner")
5-local highlights = require("claude.highlights")
65 local pickers = require("claude.pickers")
76 local edit = require("claude.edit")
87 local timetravel = require("claude.timetravel")
@@ -15,10 +14,6 @@ local defaults = {
1514 width = 80,
1615 --- Add --dangerously-skip-permissions flag to all claude commands (default: false)
1716 skip_permissions = false,
18- --- Highlight claude-changed lines like gitsigns (default: true)
19- highlight = true,
20- --- Inline blame: show prompt text on changed lines (default: true)
21- blame = true,
2217 --- Write raw stream events + cmd + exit codes to <data>/claude-nvim/debug.log
2318 debug = false,
2419 }
@@ -29,7 +24,6 @@ function M.setup(opts)
2924 opts = vim.tbl_deep_extend("force", defaults, opts or {})
3025 ui.setup(opts)
3126 runner.setup(opts)
32- highlights.setup(opts)
3327 edit.setup(opts)
3428 commit.setup(opts)
3529 find.setup(opts)
+1-1claude-nvim/lua/claude/pickers.lua
@@ -34,7 +34,7 @@ function M.set_qf_from_prompt(p)
3434 table.insert(items, 1, { text = "▌ " .. title, valid = 0 })
3535 vim.fn.setqflist({}, " ", { title = title, items = items })
3636 vim.cmd("copen")
37- pcall(function() require("claude.highlights").refresh_all() end)
37+ pcall(function() require("extensions.qf-line-highlights").refresh_all() end)
3838 end
3939
4040 function M.qf_last()
+1-1claude-nvim/lua/claude/runner.lua
@@ -96,7 +96,7 @@ local function flush_prompt(sid)
9696 table.insert(st.session.prompts, p)
9797 store.save(st.session)
9898 vim.schedule(function()
99- local ok_h, hl = pcall(require, "claude.highlights")
99+ local ok_h, hl = pcall(require, "extensions.qf-line-highlights")
100100 if ok_h then hl.refresh_all() end
101101 local ok_t, tt = pcall(require, "claude.timetravel")
102102 if ok_t then tt.bump() end
+1-0init.lua
@@ -3,3 +3,4 @@ require("options")
33 require("functions")
44 require("commands")
55 require("keymaps")
6+require("extensions.qf-line-highlights").setup()
+32-25claude-nvim/lua/claude/highlights.lua → lua/extensions/qf-line-highlights.lua
@@ -1,23 +1,7 @@
11 local M = {}
22
3-local ns = vim.api.nvim_create_namespace("claude_changes")
4-local cfg = { highlight = true }
5-
6-function M.setup(opts)
7- cfg.highlight = opts.highlight ~= false
8-
9- vim.api.nvim_set_hl(0, "ClaudeChange", { default = true, bg = "#3a2410" })
10-
11- vim.api.nvim_create_autocmd({ "BufReadPost", "BufWritePost", "BufEnter" }, {
12- callback = function(args)
13- M.apply_to_buf(args.buf)
14- end,
15- })
16-
17- vim.api.nvim_create_autocmd({ "QuickFixCmdPost" }, {
18- callback = function() M.refresh_all() end,
19- })
20-end
3+local ns = vim.api.nvim_create_namespace("qf_line_highlights")
4+local cfg = { hl_group = "QfLineHl" }
215
226 local function qf_item_path(item)
237 if item.filename and item.filename ~= "" then return item.filename end
@@ -29,15 +13,14 @@ end
2913
3014 local function collect_for_path(abs_path)
3115 local out = {}
32- local items = vim.fn.getqflist()
33- for _, item in ipairs(items) do
16+ for _, item in ipairs(vim.fn.getqflist()) do
3417 local fname = qf_item_path(item)
3518 if fname and fname ~= "" then
3619 local p = vim.fn.fnamemodify(fname, ":p")
3720 if p == abs_path and item.lnum and item.lnum > 0 then
3821 local s = item.lnum
3922 local e = (item.end_lnum and item.end_lnum > 0) and item.end_lnum or s
40- table.insert(out, { start = s, finish = e, prompt = item.text or "" })
23+ table.insert(out, { start = s, finish = e })
4124 end
4225 end
4326 end
@@ -46,7 +29,6 @@ end
4629
4730 function M.apply_to_buf(buf)
4831 if not vim.api.nvim_buf_is_valid(buf) then return end
49- if not cfg.highlight then return end
5032 local name = vim.api.nvim_buf_get_name(buf)
5133 if name == "" then return end
5234 if vim.bo[buf].buftype ~= "" then return end
@@ -60,9 +42,7 @@ function M.apply_to_buf(buf)
6042 local e = math.min(lc - 1, (h.finish or h.start or 1) - 1)
6143 if e < s then e = s end
6244 for ln = s, e do
63- if cfg.highlight then
64- pcall(vim.api.nvim_buf_set_extmark, buf, ns, ln, 0, { line_hl_group = "ClaudeChange" })
65- end
45+ pcall(vim.api.nvim_buf_set_extmark, buf, ns, ln, 0, { line_hl_group = cfg.hl_group })
6646 end
6747 end
6848 end
@@ -75,4 +55,31 @@ function M.refresh_all()
7555 end
7656 end
7757
58+function M.setup(opts)
59+ opts = opts or {}
60+ if opts.hl_group then cfg.hl_group = opts.hl_group end
61+
62+ vim.api.nvim_set_hl(0, "QfLineHl", { default = true, bg = "#3a2410" })
63+
64+ vim.api.nvim_create_autocmd({ "BufReadPost", "BufWritePost", "BufEnter" }, {
65+ callback = function(args) M.apply_to_buf(args.buf) end,
66+ })
67+
68+ vim.api.nvim_create_autocmd({ "QuickFixCmdPost" }, {
69+ callback = function() M.refresh_all() end,
70+ })
71+
72+ -- Detect qflist changes from any source (Lua setqflist by telescope/LSP/etc.).
73+ local last_tick = -1
74+ vim.api.nvim_create_autocmd({ "CursorHold", "WinEnter", "BufWinEnter", "FocusGained" }, {
75+ callback = function()
76+ local tick = (vim.fn.getqflist({ changedtick = 0 }) or {}).changedtick or 0
77+ if tick ~= last_tick then
78+ last_tick = tick
79+ M.refresh_all()
80+ end
81+ end,
82+ })
83+end
84+
7885 return M