🐻 minimal ui2 fuzzy finder for Neovim codeberg.org/comfysage/artio.nvim
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(builtins): add diagnostics pickers

robin 5d3060f4 8763f8aa

+80
+74
lua/artio/builtins.lua
··· 405 405 ) 406 406 end 407 407 408 + ---@private 409 + ---@param severity vim.diagnostic.Severity 410 + ---@return string 411 + local function get_severity_hl(severity) 412 + if severity == vim.diagnostic.severity.ERROR then 413 + return "DiagnosticError" 414 + elseif severity == vim.diagnostic.severity.WARN then 415 + return "DiagnosticWarn" 416 + elseif severity == vim.diagnostic.severity.INFO then 417 + return "DiagnosticInfo" 418 + elseif severity == vim.diagnostic.severity.HINT then 419 + return "DiagnosticHint" 420 + end 421 + return "" 422 + end 423 + 424 + ---@class artio.picker.diagnostics.Props : artio.Picker.config 425 + ---@field buf? integer defaults to workspace 426 + 427 + ---@param props? artio.picker.diagnostics.Props 428 + builtins.diagnostics = function(props) 429 + props = props or {} 430 + local lst = vim.diagnostic.get(props.buf) 431 + 432 + return artio.generic( 433 + lst, 434 + extend({ 435 + prompt = "diagnostics", 436 + format_item = function(item) 437 + local text = item.message 438 + if item.code then 439 + text = ("%s [%s]"):format(text, item.code) 440 + end 441 + return ("%d:%d :: %s"):format(item.end_lnum, item.end_col, text) 442 + end, 443 + on_close = function(item, _) 444 + vim.schedule(function() 445 + local win = vim.fn.bufwinid(item.bufnr) 446 + if win < 0 then 447 + vim.api.nvim_win_set_buf(0, item.bufnr) 448 + win = 0 449 + end 450 + vim.api.nvim_set_current_win(win) 451 + vim.api.nvim_win_set_cursor(win, { item.end_lnum + 1, item.end_col }) 452 + end) 453 + end, 454 + hl_item = function(item) 455 + return { 456 + { { 0, #item.text }, get_severity_hl(item.v.severity) }, 457 + } 458 + end, 459 + get_icon = function(item) 460 + if item.v.severity == vim.diagnostic.severity.ERROR then 461 + return "E", get_severity_hl(item.v.severity) 462 + elseif item.v.severity == vim.diagnostic.severity.WARN then 463 + return "W", get_severity_hl(item.v.severity) 464 + elseif item.v.severity == vim.diagnostic.severity.INFO then 465 + return "I", get_severity_hl(item.v.severity) 466 + elseif item.v.severity == vim.diagnostic.severity.HINT then 467 + return "H", get_severity_hl(item.v.severity) 468 + end 469 + return " " 470 + end, 471 + }, props) 472 + ) 473 + end 474 + 475 + ---@param props? artio.picker.diagnostics.Props 476 + builtins.diagnostics_buffer = function(props) 477 + props = props or {} 478 + props.buf = props.buf or vim.api.nvim_get_current_buf() 479 + return builtins.diagnostics(props) 480 + end 481 + 408 482 return builtins
+6
plugin/artio.lua
··· 59 59 vim.keymap.set("n", "<Plug>(artio-colorschemes)", function() 60 60 return require("artio.builtins").colorschemes() 61 61 end) 62 + vim.keymap.set("n", "<Plug>(artio-diagnostics)", function() 63 + return require("artio.builtins").diagnostics() 64 + end) 65 + vim.keymap.set("n", "<Plug>(artio-diagnostics-buffer)", function() 66 + return require("artio.builtins").diagnostics_buffer() 67 + end) 62 68 63 69 -- == actions == 64 70