mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	perf(diagnostic): use api variable and improve validate (#21111)
* fix(diagnostic): use api variable and improve validate * fix: fix test case
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
			
		||||
local if_nil = vim.F.if_nil
 | 
			
		||||
local api, if_nil = vim.api, vim.F.if_nil
 | 
			
		||||
 | 
			
		||||
local M = {}
 | 
			
		||||
 | 
			
		||||
@@ -47,11 +47,11 @@ local bufnr_and_namespace_cacher_mt = {
 | 
			
		||||
 | 
			
		||||
local diagnostic_cache
 | 
			
		||||
do
 | 
			
		||||
  local group = vim.api.nvim_create_augroup('DiagnosticBufWipeout', {})
 | 
			
		||||
  local group = api.nvim_create_augroup('DiagnosticBufWipeout', {})
 | 
			
		||||
  diagnostic_cache = setmetatable({}, {
 | 
			
		||||
    __index = function(t, bufnr)
 | 
			
		||||
      assert(bufnr > 0, 'Invalid buffer number')
 | 
			
		||||
      vim.api.nvim_create_autocmd('BufWipeout', {
 | 
			
		||||
      api.nvim_create_autocmd('BufWipeout', {
 | 
			
		||||
        group = group,
 | 
			
		||||
        buffer = bufnr,
 | 
			
		||||
        callback = function()
 | 
			
		||||
@@ -245,7 +245,7 @@ end)()
 | 
			
		||||
---@private
 | 
			
		||||
local function get_bufnr(bufnr)
 | 
			
		||||
  if not bufnr or bufnr == 0 then
 | 
			
		||||
    return vim.api.nvim_get_current_buf()
 | 
			
		||||
    return api.nvim_get_current_buf()
 | 
			
		||||
  end
 | 
			
		||||
  return bufnr
 | 
			
		||||
end
 | 
			
		||||
@@ -299,7 +299,7 @@ end
 | 
			
		||||
---@private
 | 
			
		||||
local function restore_extmarks(bufnr, last)
 | 
			
		||||
  for ns, extmarks in pairs(diagnostic_cache_extmarks[bufnr]) do
 | 
			
		||||
    local extmarks_current = vim.api.nvim_buf_get_extmarks(bufnr, ns, 0, -1, { details = true })
 | 
			
		||||
    local extmarks_current = api.nvim_buf_get_extmarks(bufnr, ns, 0, -1, { details = true })
 | 
			
		||||
    local found = {}
 | 
			
		||||
    for _, extmark in ipairs(extmarks_current) do
 | 
			
		||||
      -- nvim_buf_set_lines will move any extmark to the line after the last
 | 
			
		||||
@@ -312,7 +312,7 @@ local function restore_extmarks(bufnr, last)
 | 
			
		||||
      if not found[extmark[1]] then
 | 
			
		||||
        local opts = extmark[4]
 | 
			
		||||
        opts.id = extmark[1]
 | 
			
		||||
        pcall(vim.api.nvim_buf_set_extmark, bufnr, ns, extmark[2], extmark[3], opts)
 | 
			
		||||
        pcall(api.nvim_buf_set_extmark, bufnr, ns, extmark[2], extmark[3], opts)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
@@ -322,7 +322,7 @@ end
 | 
			
		||||
local function save_extmarks(namespace, bufnr)
 | 
			
		||||
  bufnr = get_bufnr(bufnr)
 | 
			
		||||
  if not diagnostic_attached_buffers[bufnr] then
 | 
			
		||||
    vim.api.nvim_buf_attach(bufnr, false, {
 | 
			
		||||
    api.nvim_buf_attach(bufnr, false, {
 | 
			
		||||
      on_lines = function(_, _, _, _, _, last)
 | 
			
		||||
        restore_extmarks(bufnr, last - 1)
 | 
			
		||||
      end,
 | 
			
		||||
@@ -333,7 +333,7 @@ local function save_extmarks(namespace, bufnr)
 | 
			
		||||
    diagnostic_attached_buffers[bufnr] = true
 | 
			
		||||
  end
 | 
			
		||||
  diagnostic_cache_extmarks[bufnr][namespace] =
 | 
			
		||||
    vim.api.nvim_buf_get_extmarks(bufnr, namespace, 0, -1, { details = true })
 | 
			
		||||
    api.nvim_buf_get_extmarks(bufnr, namespace, 0, -1, { details = true })
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local registered_autocmds = {}
 | 
			
		||||
@@ -366,8 +366,8 @@ local function schedule_display(namespace, bufnr, args)
 | 
			
		||||
 | 
			
		||||
  local key = make_augroup_key(namespace, bufnr)
 | 
			
		||||
  if not registered_autocmds[key] then
 | 
			
		||||
    local group = vim.api.nvim_create_augroup(key, { clear = true })
 | 
			
		||||
    vim.api.nvim_create_autocmd(insert_leave_auto_cmds, {
 | 
			
		||||
    local group = api.nvim_create_augroup(key, { clear = true })
 | 
			
		||||
    api.nvim_create_autocmd(insert_leave_auto_cmds, {
 | 
			
		||||
      group = group,
 | 
			
		||||
      buffer = bufnr,
 | 
			
		||||
      callback = function()
 | 
			
		||||
@@ -384,7 +384,7 @@ local function clear_scheduled_display(namespace, bufnr)
 | 
			
		||||
  local key = make_augroup_key(namespace, bufnr)
 | 
			
		||||
 | 
			
		||||
  if registered_autocmds[key] then
 | 
			
		||||
    vim.api.nvim_del_augroup_by_name(key)
 | 
			
		||||
    api.nvim_del_augroup_by_name(key)
 | 
			
		||||
    registered_autocmds[key] = nil
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@@ -399,7 +399,7 @@ local function get_diagnostics(bufnr, opts, clamp)
 | 
			
		||||
  -- Memoized results of buf_line_count per bufnr
 | 
			
		||||
  local buf_line_count = setmetatable({}, {
 | 
			
		||||
    __index = function(t, k)
 | 
			
		||||
      t[k] = vim.api.nvim_buf_line_count(k)
 | 
			
		||||
      t[k] = api.nvim_buf_line_count(k)
 | 
			
		||||
      return rawget(t, k)
 | 
			
		||||
    end,
 | 
			
		||||
  })
 | 
			
		||||
@@ -407,7 +407,7 @@ local function get_diagnostics(bufnr, opts, clamp)
 | 
			
		||||
  ---@private
 | 
			
		||||
  local function add(b, d)
 | 
			
		||||
    if not opts.lnum or d.lnum == opts.lnum then
 | 
			
		||||
      if clamp and vim.api.nvim_buf_is_loaded(b) then
 | 
			
		||||
      if clamp and api.nvim_buf_is_loaded(b) then
 | 
			
		||||
        local line_count = buf_line_count[b] - 1
 | 
			
		||||
        if
 | 
			
		||||
          d.lnum > line_count
 | 
			
		||||
@@ -471,7 +471,7 @@ local function set_list(loclist, opts)
 | 
			
		||||
  local winnr = opts.winnr or 0
 | 
			
		||||
  local bufnr
 | 
			
		||||
  if loclist then
 | 
			
		||||
    bufnr = vim.api.nvim_win_get_buf(winnr)
 | 
			
		||||
    bufnr = api.nvim_win_get_buf(winnr)
 | 
			
		||||
  end
 | 
			
		||||
  -- Don't clamp line numbers since the quickfix list can already handle line
 | 
			
		||||
  -- numbers beyond the end of the buffer
 | 
			
		||||
@@ -483,7 +483,7 @@ local function set_list(loclist, opts)
 | 
			
		||||
    vim.fn.setqflist({}, ' ', { title = title, items = items })
 | 
			
		||||
  end
 | 
			
		||||
  if open then
 | 
			
		||||
    vim.api.nvim_command(loclist and 'lopen' or 'botright copen')
 | 
			
		||||
    api.nvim_command(loclist and 'lopen' or 'botright copen')
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@@ -492,7 +492,7 @@ local function next_diagnostic(position, search_forward, bufnr, opts, namespace)
 | 
			
		||||
  position[1] = position[1] - 1
 | 
			
		||||
  bufnr = get_bufnr(bufnr)
 | 
			
		||||
  local wrap = vim.F.if_nil(opts.wrap, true)
 | 
			
		||||
  local line_count = vim.api.nvim_buf_line_count(bufnr)
 | 
			
		||||
  local line_count = api.nvim_buf_line_count(bufnr)
 | 
			
		||||
  local diagnostics =
 | 
			
		||||
    get_diagnostics(bufnr, vim.tbl_extend('keep', opts, { namespace = namespace }), true)
 | 
			
		||||
  local line_diagnostics = diagnostic_lines(diagnostics)
 | 
			
		||||
@@ -506,7 +506,7 @@ local function next_diagnostic(position, search_forward, bufnr, opts, namespace)
 | 
			
		||||
      lnum = (lnum + line_count) % line_count
 | 
			
		||||
    end
 | 
			
		||||
    if line_diagnostics[lnum] and not vim.tbl_isempty(line_diagnostics[lnum]) then
 | 
			
		||||
      local line_length = #vim.api.nvim_buf_get_lines(bufnr, lnum, lnum + 1, true)[1]
 | 
			
		||||
      local line_length = #api.nvim_buf_get_lines(bufnr, lnum, lnum + 1, true)[1]
 | 
			
		||||
      local sort_diagnostics, is_next
 | 
			
		||||
      if search_forward then
 | 
			
		||||
        sort_diagnostics = function(a, b)
 | 
			
		||||
@@ -542,17 +542,17 @@ local function diagnostic_move_pos(opts, pos)
 | 
			
		||||
  opts = opts or {}
 | 
			
		||||
 | 
			
		||||
  local float = vim.F.if_nil(opts.float, true)
 | 
			
		||||
  local win_id = opts.win_id or vim.api.nvim_get_current_win()
 | 
			
		||||
  local win_id = opts.win_id or api.nvim_get_current_win()
 | 
			
		||||
 | 
			
		||||
  if not pos then
 | 
			
		||||
    vim.api.nvim_echo({ { 'No more valid diagnostics to move to', 'WarningMsg' } }, true, {})
 | 
			
		||||
    api.nvim_echo({ { 'No more valid diagnostics to move to', 'WarningMsg' } }, true, {})
 | 
			
		||||
    return
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  vim.api.nvim_win_call(win_id, function()
 | 
			
		||||
  api.nvim_win_call(win_id, function()
 | 
			
		||||
    -- Save position in the window's jumplist
 | 
			
		||||
    vim.cmd("normal! m'")
 | 
			
		||||
    vim.api.nvim_win_set_cursor(win_id, { pos[1] + 1, pos[2] })
 | 
			
		||||
    api.nvim_win_set_cursor(win_id, { pos[1] + 1, pos[2] })
 | 
			
		||||
    -- Open folds under the cursor
 | 
			
		||||
    vim.cmd('normal! zv')
 | 
			
		||||
  end)
 | 
			
		||||
@@ -561,7 +561,7 @@ local function diagnostic_move_pos(opts, pos)
 | 
			
		||||
    local float_opts = type(float) == 'table' and float or {}
 | 
			
		||||
    vim.schedule(function()
 | 
			
		||||
      M.open_float(vim.tbl_extend('keep', float_opts, {
 | 
			
		||||
        bufnr = vim.api.nvim_win_get_buf(win_id),
 | 
			
		||||
        bufnr = api.nvim_win_get_buf(win_id),
 | 
			
		||||
        scope = 'cursor',
 | 
			
		||||
        focus = false,
 | 
			
		||||
      }))
 | 
			
		||||
@@ -666,13 +666,13 @@ function M.config(opts, namespace)
 | 
			
		||||
 | 
			
		||||
  if namespace then
 | 
			
		||||
    for bufnr, v in pairs(diagnostic_cache) do
 | 
			
		||||
      if vim.api.nvim_buf_is_loaded(bufnr) and v[namespace] then
 | 
			
		||||
      if api.nvim_buf_is_loaded(bufnr) and v[namespace] then
 | 
			
		||||
        M.show(namespace, bufnr)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  else
 | 
			
		||||
    for bufnr, v in pairs(diagnostic_cache) do
 | 
			
		||||
      if vim.api.nvim_buf_is_loaded(bufnr) then
 | 
			
		||||
      if api.nvim_buf_is_loaded(bufnr) then
 | 
			
		||||
        for ns in pairs(v) do
 | 
			
		||||
          M.show(ns, bufnr)
 | 
			
		||||
        end
 | 
			
		||||
@@ -707,11 +707,11 @@ function M.set(namespace, bufnr, diagnostics, opts)
 | 
			
		||||
    set_diagnostic_cache(namespace, bufnr, diagnostics)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  if vim.api.nvim_buf_is_loaded(bufnr) then
 | 
			
		||||
  if api.nvim_buf_is_loaded(bufnr) then
 | 
			
		||||
    M.show(namespace, bufnr, nil, opts)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  vim.api.nvim_exec_autocmds('DiagnosticChanged', {
 | 
			
		||||
  api.nvim_exec_autocmds('DiagnosticChanged', {
 | 
			
		||||
    modeline = false,
 | 
			
		||||
    buffer = bufnr,
 | 
			
		||||
    data = { diagnostics = diagnostics },
 | 
			
		||||
@@ -726,7 +726,7 @@ function M.get_namespace(namespace)
 | 
			
		||||
  vim.validate({ namespace = { namespace, 'n' } })
 | 
			
		||||
  if not all_namespaces[namespace] then
 | 
			
		||||
    local name
 | 
			
		||||
    for k, v in pairs(vim.api.nvim_get_namespaces()) do
 | 
			
		||||
    for k, v in pairs(api.nvim_get_namespaces()) do
 | 
			
		||||
      if namespace == v then
 | 
			
		||||
        name = k
 | 
			
		||||
        break
 | 
			
		||||
@@ -776,9 +776,9 @@ end
 | 
			
		||||
function M.get_prev(opts)
 | 
			
		||||
  opts = opts or {}
 | 
			
		||||
 | 
			
		||||
  local win_id = opts.win_id or vim.api.nvim_get_current_win()
 | 
			
		||||
  local bufnr = vim.api.nvim_win_get_buf(win_id)
 | 
			
		||||
  local cursor_position = opts.cursor_position or vim.api.nvim_win_get_cursor(win_id)
 | 
			
		||||
  local win_id = opts.win_id or api.nvim_get_current_win()
 | 
			
		||||
  local bufnr = api.nvim_win_get_buf(win_id)
 | 
			
		||||
  local cursor_position = opts.cursor_position or api.nvim_win_get_cursor(win_id)
 | 
			
		||||
 | 
			
		||||
  return next_diagnostic(cursor_position, false, bufnr, opts, opts.namespace)
 | 
			
		||||
end
 | 
			
		||||
@@ -809,9 +809,9 @@ end
 | 
			
		||||
function M.get_next(opts)
 | 
			
		||||
  opts = opts or {}
 | 
			
		||||
 | 
			
		||||
  local win_id = opts.win_id or vim.api.nvim_get_current_win()
 | 
			
		||||
  local bufnr = vim.api.nvim_win_get_buf(win_id)
 | 
			
		||||
  local cursor_position = opts.cursor_position or vim.api.nvim_win_get_cursor(win_id)
 | 
			
		||||
  local win_id = opts.win_id or api.nvim_get_current_win()
 | 
			
		||||
  local bufnr = api.nvim_win_get_buf(win_id)
 | 
			
		||||
  local cursor_position = opts.cursor_position or api.nvim_win_get_cursor(win_id)
 | 
			
		||||
 | 
			
		||||
  return next_diagnostic(cursor_position, true, bufnr, opts, opts.namespace)
 | 
			
		||||
end
 | 
			
		||||
@@ -931,7 +931,7 @@ M.handlers.underline = {
 | 
			
		||||
 | 
			
		||||
    local ns = M.get_namespace(namespace)
 | 
			
		||||
    if not ns.user_data.underline_ns then
 | 
			
		||||
      ns.user_data.underline_ns = vim.api.nvim_create_namespace('')
 | 
			
		||||
      ns.user_data.underline_ns = api.nvim_create_namespace('')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local underline_ns = ns.user_data.underline_ns
 | 
			
		||||
@@ -958,7 +958,7 @@ M.handlers.underline = {
 | 
			
		||||
    local ns = M.get_namespace(namespace)
 | 
			
		||||
    if ns.user_data.underline_ns then
 | 
			
		||||
      diagnostic_cache_extmarks[bufnr][ns.user_data.underline_ns] = {}
 | 
			
		||||
      vim.api.nvim_buf_clear_namespace(bufnr, ns.user_data.underline_ns, 0, -1)
 | 
			
		||||
      api.nvim_buf_clear_namespace(bufnr, ns.user_data.underline_ns, 0, -1)
 | 
			
		||||
    end
 | 
			
		||||
  end,
 | 
			
		||||
}
 | 
			
		||||
@@ -997,7 +997,7 @@ M.handlers.virtual_text = {
 | 
			
		||||
 | 
			
		||||
    local ns = M.get_namespace(namespace)
 | 
			
		||||
    if not ns.user_data.virt_text_ns then
 | 
			
		||||
      ns.user_data.virt_text_ns = vim.api.nvim_create_namespace('')
 | 
			
		||||
      ns.user_data.virt_text_ns = api.nvim_create_namespace('')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local virt_text_ns = ns.user_data.virt_text_ns
 | 
			
		||||
@@ -1009,7 +1009,7 @@ M.handlers.virtual_text = {
 | 
			
		||||
      local virt_texts = M._get_virt_text_chunks(line_diagnostics, opts.virtual_text)
 | 
			
		||||
 | 
			
		||||
      if virt_texts then
 | 
			
		||||
        vim.api.nvim_buf_set_extmark(bufnr, virt_text_ns, line, 0, {
 | 
			
		||||
        api.nvim_buf_set_extmark(bufnr, virt_text_ns, line, 0, {
 | 
			
		||||
          hl_mode = 'combine',
 | 
			
		||||
          virt_text = virt_texts,
 | 
			
		||||
        })
 | 
			
		||||
@@ -1021,7 +1021,7 @@ M.handlers.virtual_text = {
 | 
			
		||||
    local ns = M.get_namespace(namespace)
 | 
			
		||||
    if ns.user_data.virt_text_ns then
 | 
			
		||||
      diagnostic_cache_extmarks[bufnr][ns.user_data.virt_text_ns] = {}
 | 
			
		||||
      vim.api.nvim_buf_clear_namespace(bufnr, ns.user_data.virt_text_ns, 0, -1)
 | 
			
		||||
      api.nvim_buf_clear_namespace(bufnr, ns.user_data.virt_text_ns, 0, -1)
 | 
			
		||||
    end
 | 
			
		||||
  end,
 | 
			
		||||
}
 | 
			
		||||
@@ -1153,7 +1153,7 @@ function M.show(namespace, bufnr, diagnostics, opts)
 | 
			
		||||
  if opts.update_in_insert then
 | 
			
		||||
    clear_scheduled_display(namespace, bufnr)
 | 
			
		||||
  else
 | 
			
		||||
    local mode = vim.api.nvim_get_mode()
 | 
			
		||||
    local mode = api.nvim_get_mode()
 | 
			
		||||
    if string.sub(mode.mode, 1, 1) == 'i' then
 | 
			
		||||
      schedule_display(namespace, bufnr, opts)
 | 
			
		||||
      return
 | 
			
		||||
@@ -1251,7 +1251,7 @@ function M.open_float(opts, ...)
 | 
			
		||||
  local lnum, col
 | 
			
		||||
  if scope == 'line' or scope == 'cursor' then
 | 
			
		||||
    if not opts.pos then
 | 
			
		||||
      local pos = vim.api.nvim_win_get_cursor(0)
 | 
			
		||||
      local pos = api.nvim_win_get_cursor(0)
 | 
			
		||||
      lnum = pos[1] - 1
 | 
			
		||||
      col = pos[2]
 | 
			
		||||
    elseif type(opts.pos) == 'number' then
 | 
			
		||||
@@ -1273,7 +1273,7 @@ function M.open_float(opts, ...)
 | 
			
		||||
    end, diagnostics)
 | 
			
		||||
  elseif scope == 'cursor' then
 | 
			
		||||
    -- LSP servers can send diagnostics with `end_col` past the length of the line
 | 
			
		||||
    local line_length = #vim.api.nvim_buf_get_lines(bufnr, lnum, lnum + 1, true)[1]
 | 
			
		||||
    local line_length = #api.nvim_buf_get_lines(bufnr, lnum, lnum + 1, true)[1]
 | 
			
		||||
    diagnostics = vim.tbl_filter(function(d)
 | 
			
		||||
      return d.lnum == lnum
 | 
			
		||||
        and math.min(d.col, line_length - 1) <= col
 | 
			
		||||
@@ -1305,9 +1305,7 @@ function M.open_float(opts, ...)
 | 
			
		||||
    vim.validate({
 | 
			
		||||
      header = {
 | 
			
		||||
        header,
 | 
			
		||||
        function(v)
 | 
			
		||||
          return type(v) == 'string' or type(v) == 'table'
 | 
			
		||||
        end,
 | 
			
		||||
        { 'string', 'table' },
 | 
			
		||||
        "'string' or 'table'",
 | 
			
		||||
      },
 | 
			
		||||
    })
 | 
			
		||||
@@ -1341,9 +1339,7 @@ function M.open_float(opts, ...)
 | 
			
		||||
    vim.validate({
 | 
			
		||||
      prefix = {
 | 
			
		||||
        prefix_opt,
 | 
			
		||||
        function(v)
 | 
			
		||||
          return type(v) == 'string' or type(v) == 'table' or type(v) == 'function'
 | 
			
		||||
        end,
 | 
			
		||||
        { 'string', 'table', 'function' },
 | 
			
		||||
        "'string' or 'table' or 'function'",
 | 
			
		||||
      },
 | 
			
		||||
    })
 | 
			
		||||
@@ -1377,9 +1373,9 @@ function M.open_float(opts, ...)
 | 
			
		||||
  for i, hi in ipairs(highlights) do
 | 
			
		||||
    local prefixlen, hiname, prefix_hiname = unpack(hi)
 | 
			
		||||
    if prefix_hiname then
 | 
			
		||||
      vim.api.nvim_buf_add_highlight(float_bufnr, -1, prefix_hiname, i - 1, 0, prefixlen)
 | 
			
		||||
      api.nvim_buf_add_highlight(float_bufnr, -1, prefix_hiname, i - 1, 0, prefixlen)
 | 
			
		||||
    end
 | 
			
		||||
    vim.api.nvim_buf_add_highlight(float_bufnr, -1, hiname, i - 1, prefixlen, -1)
 | 
			
		||||
    api.nvim_buf_add_highlight(float_bufnr, -1, hiname, i - 1, prefixlen, -1)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  return float_bufnr, winnr
 | 
			
		||||
@@ -1410,7 +1406,7 @@ function M.reset(namespace, bufnr)
 | 
			
		||||
      M.hide(iter_namespace, iter_bufnr)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_exec_autocmds('DiagnosticChanged', {
 | 
			
		||||
    api.nvim_exec_autocmds('DiagnosticChanged', {
 | 
			
		||||
      modeline = false,
 | 
			
		||||
      buffer = iter_bufnr,
 | 
			
		||||
      data = { diagnostics = {} },
 | 
			
		||||
 
 | 
			
		||||
@@ -1776,7 +1776,7 @@ end)
 | 
			
		||||
        return lines
 | 
			
		||||
      ]])
 | 
			
		||||
 | 
			
		||||
      eq(".../diagnostic.lua:0: prefix: expected 'string' or 'table' or 'function', got 42",
 | 
			
		||||
      eq(".../diagnostic.lua:0: prefix: expected string|table|function, got number",
 | 
			
		||||
        pcall_err(exec_lua, [[ vim.diagnostic.open_float({ prefix = 42 }) ]]))
 | 
			
		||||
    end)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user