Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

neovim/lua/bugabinga/diagnostic.lua

Raw
local map = require 'std.map'
local auto = require 'std.auto'
local icon = require 'std.icon'

local diagnostic_icons = {
  error = icon.error,
  warn = icon.warn,
  info = icon.info,
  hint = icon.hint,
}

local display_name = {
  'Error',
  'Warning',
  'Information',
  'Hint',
}

local diagnostic = vim.diagnostic

local diagnostic_format = function(context)
  return string.format('%s: %s', display_name[context.severity], context.message)
end

local prefix_format = function(context, index, total)
  local severity_name = diagnostic.severity[context.severity]
  return string.format('%s/%s %s %s ', index, total, context.source, diagnostic_icons[severity_name]),
      'DiagnosticVirtualText' .. display_name[context.severity]
end

-- ERROR-only visibility: only errors render inline (underline/sign/virtual text);
-- WARN/HINT stay hidden but remain available via H (float) and <leader>HH (quickfix)
local error_only = { min = diagnostic.severity.ERROR }

diagnostic.config {
  underline = { severity = error_only },
  virtual_text = {
    severity = error_only,
    source = false,
    spacing = 2,
    prefix = '⦿ ',
    format = diagnostic_format,
  },
  float = {
    focusable = false,
    style = 'minimal',
    source = 'if_many',
    header = 'Diagnostic',
    prefix = prefix_format,
  },
  update_in_insert = false,
  signs = {
    severity = error_only,
    text = {
      [vim.diagnostic.severity.ERROR] = diagnostic_icons.error,
      [vim.diagnostic.severity.WARN] = diagnostic_icons.warn,
      [vim.diagnostic.severity.INFO] = diagnostic_icons.info,
      [vim.diagnostic.severity.HINT] = diagnostic_icons.hint,
    }
  },
  severity_sort = true,
}

map.normal {
  description = 'Toggle diagnostics',
  category = 'diagnostic',
  keys = '<leader>td',
  command = function()
    if not diagnostic.is_enabled() then
      diagnostic.enable()
      vim.notify 'Enabling Diagnostics'
    else
      diagnostic.enable(false)
      vim.notify 'Disabling Diagnostics'
    end
  end,
}

map.normal {
  description = 'Show diagnostics under cursor',
  category = 'diagnostic',
  keys = 'H',
  command = diagnostic.open_float,
}

map.normal {
  description = 'Open diagnostics in quickfix list.',
  category = 'diagnostic',
  keys = 'HH',
  command = diagnostic.setqflist,
}