diff --git a/lua/trouble/lsp.lua b/lua/trouble/lsp.lua index 985a5e87..58f7f90b 100644 --- a/lua/trouble/lsp.lua +++ b/lua/trouble/lsp.lua @@ -17,6 +17,7 @@ local function preprocess_diag(diag, bufnr) ---@class Diagnostics ---@field is_file boolean + ---@field fixed boolean local ret ret = { bufnr = bufnr, diff --git a/lua/trouble/view.lua b/lua/trouble/view.lua index 293c95e2..8647f4cd 100644 --- a/lua/trouble/view.lua +++ b/lua/trouble/view.lua @@ -1,8 +1,10 @@ local renderer = require("trouble.renderer") local config = require("trouble.config") local folds = require("trouble.folds") +local pfiletype = require('plenary.filetype') local highlight = vim.api.nvim_buf_add_highlight +local buf_opt = vim.api.nvim_buf_get_option ---@class View ---@field buf number @@ -142,7 +144,7 @@ function View:setup(opts) vim.api.nvim_exec([[ augroup LspTroubleHighlights autocmd! * - autocmd CursorMoved lua require("trouble").action("preview") + autocmd CursorMoved nested lua require("trouble").action("preview") autocmd BufEnter lua require("trouble").action("on_enter") autocmd BufLeave lua require("trouble").action("on_leave") augroup END @@ -279,10 +281,15 @@ function View:jump(opts) View.switch_to(opts.win or self.parent, item.bufnr) vim.api.nvim_win_set_cursor(self.parent, {item.start.line + 1, item.start.character}) + + -- edit the buffer if it was a temp one + if item.fixed == true then + vim.cmd "e" + item.fixed = nil + end end end --- TODO: nvim_open_window function View:preview() local item = self:current_item() if not item then return end @@ -290,7 +297,18 @@ function View:preview() if item.is_file ~= true then vim.api.nvim_win_set_buf(self.parent, item.bufnr) vim.api.nvim_win_set_cursor(self.parent, - {item.start.line, item.start.character}) + {item.start.line + 1, item.start.character}) + -- center the buffer vertically + vim.api.nvim_buf_call(item.bufnr, function() vim.cmd "norm! zz" end) + + -- check if this is a temp buffer created by lsp diag + -- if so, then trigger BufRead to fix syntax etc + if item.fixed ~= true and buf_opt(item.bufnr, "buflisted") == false then + vim.api.nvim_buf_call(item.bufnr, + function() vim.cmd "do BufRead" end) + item.fixed = true + end + clear_hl(item.bufnr) buffersHl[item.bufnr] = true for row = item.start.line, item.finish.line, 1 do