folke / trouble.nvim

🚦 A pretty diagnostics, references, telescope results, quickfix and location list to help you solve all the trouble your code is causing.
Apache License 2.0
5.11k stars 173 forks source link

bug: scrolling through items does not always highlight correct range in preview #476

Closed tom-anders closed 1 month ago

tom-anders commented 1 month ago

Did you check docs and existing issues?

Neovim version (nvim -v)

0.10.0

Operating system/version

Ubuntu 22

Describe the bug

When scrolling though trouble with j/k, the range of the item under the cursor is not always highlighted correctly in the preview.

This seems to happen if two items have the same line number, but different columns. (Update: I also observed this where all items have different line numbers. It only seems to happen to the first item in the list though)

Correct highlight for 2nd item:

image

Incorrect highlight for 1st item:

image

Steps To Reproduce

1) nvim -u repro.lua (see below) 2) scroll through list with j/k and observe highlighting in preview=

Expected Behavior

The range of the item under the cursor should be highlighted in the preview

Repro

-- DO NOT change the paths and don't remove the colorscheme
local root = vim.fn.fnamemodify("./.repro", ":p")

-- set stdpaths to use .repro
for _, name in ipairs({ "config", "data", "state", "cache" }) do
  vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name
end

-- bootstrap lazy
local lazypath = root .. "/plugins/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath, })
end
vim.opt.runtimepath:prepend(lazypath)

-- install plugins
local plugins = {
  "folke/tokyonight.nvim",
  "folke/trouble.nvim",
  -- add any other plugins here
}
require("lazy").setup(plugins, {
  root = root .. "/plugins",
})

vim.cmd.colorscheme("tokyonight")

vim.cmd.edit("repro.lua")

vim.fn.setqflist({
   {
       bufnr = 0,
       lnum = 1,
       col = 0,
       end_col = 4,
       text = "hello",
   },
   {
       bufnr = 0,
       lnum = 1,
       col = 8,
       end_col = 12,
       text = "world",
   },
})

local ns = vim.api.nvim_create_namespace("repro")
vim.diagnostic.set(ns, 0, {
  {
    bufnr = 0,
    lnum = 1,
    col = 0,
    end_col = 10,
    message = "d1",
  },
  {
    bufnr = 0,
    lnum = 1,
    col = 12,
    end_col = 25,
    message = "d2",
  },
  {
    bufnr = 0,
    lnum = 5,
    col = 1,
    end_col = 15,
    message = "d3",
  },
  {
    bufnr = 0,
    lnum = 5,
    col = 16,
    end_col = 25,
    message = "d4",
  },
})

require'trouble'.open({mode = "diagnostics", focus = true})
tom-anders commented 1 month ago

Update: also happens for the last item in the list sometimes

folke commented 1 month ago

Fixed. Thank you for reporting!

tom-anders commented 1 month ago

fix confirmed, thanks for the quick response!