cord-nvim 2.0.0-beta.28

🚀 The most extensible Discord Rich Presence plugin for Neovim, powered by Rust.
local M = {
  diagnostic_count = 0,
  config = {
    scope = 0,
    severity = { min = vim.diagnostic.severity.WARN },
    override = true,
  },
}

M.setup = function(config)
  if config then
    local err = M.validate(config)
    if err then
      error(err, 0)
    else
      M.config = config
    end
  end

  return {
    name = 'Diagnostics',
    description = 'Displays diagnostic information',

    variables = {
      diagnostic = function() return M.diagnostics end,
      diagnostics = function() return M.diagnostic_count end,
    },

    config = M.config.override and {
      text = {
        workspace = M.config.scope == nil and function(opts)
          local text = 'In ' .. opts.workspace
          if M.diagnostic_count > 0 then
            text = text .. ' - ' .. M.diagnostic_count .. ' problems'
          end
          return text
        end or nil,
        viewing = M.config.scope == 0 and function(opts)
          local text = 'Viewing ' .. opts.filename
          if M.diagnostic_count > 0 then
            text = text .. ' - ' .. M.diagnostic_count .. ' problems'
          end
          return text
        end or nil,
        editing = M.config.scope == 0 and function(opts)
          local text = 'Editing ' .. opts.filename
          if M.diagnostic_count > 0 then
            text = text .. ' - ' .. M.diagnostic_count .. ' problems'
          end
          return text
        end or nil,
      },
    } or nil,
  }
end

M.validate = function(config)
  if config.scope then
    if config.scope == 'buffer' then
      M.scope = 0
    elseif config.scope ~= 'workspace' then
      return 'Invalid scope value, must be \'buffer\' or \'workspace\''
    end
  end

  if config.severity then
    local ty = type(config.severity)
    if ty ~= 'string' and ty ~= 'number' and ty ~= 'table' then
      return 'Invalid severity value, must be a string, number or table'
    end
  end

  if config.override then
    if type(config.override) ~= 'boolean' then
      return 'Invalid override value, must be a boolean'
    end
  end
end

M.get_diagnostics = function()
  return vim.diagnostic.get(M.config.scope, { severity = M.config.severity })
end

vim.api.nvim_create_autocmd('DiagnosticChanged', {
  callback = function()
    M.diagnostics = M.get_diagnostics()
    M.diagnostic_count = #M.diagnostics
  end,
  group = vim.api.nvim_create_augroup('CordDiagnosticsPlugin', { clear = true }),
})

return M