mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00:00 
			
		
		
		
	fix(diagnostic): always return copies of diagnostic items (#25010)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							2ef7b6a433
						
					
				
				
					commit
					d272143318
				
			@@ -480,6 +480,9 @@ fromqflist({list})                               *vim.diagnostic.fromqflist()*
 | 
			
		||||
get({bufnr}, {opts})                                    *vim.diagnostic.get()*
 | 
			
		||||
    Get current diagnostics.
 | 
			
		||||
 | 
			
		||||
    Modifying diagnostics in the returned table has no effect. To set
 | 
			
		||||
    diagnostics in a buffer, use |vim.diagnostic.set()|.
 | 
			
		||||
 | 
			
		||||
    Parameters: ~
 | 
			
		||||
      • {bufnr}  (integer|nil) Buffer number to get diagnostics from. Use 0
 | 
			
		||||
                 for current buffer or nil for all buffers.
 | 
			
		||||
 
 | 
			
		||||
@@ -386,6 +386,7 @@ local function get_diagnostics(bufnr, opts, clamp)
 | 
			
		||||
 | 
			
		||||
  local function add(b, d)
 | 
			
		||||
    if not opts.lnum or d.lnum == opts.lnum then
 | 
			
		||||
      d = vim.deepcopy(d)
 | 
			
		||||
      if clamp and api.nvim_buf_is_loaded(b) then
 | 
			
		||||
        local line_count = buf_line_count[b] - 1
 | 
			
		||||
        if
 | 
			
		||||
@@ -396,7 +397,6 @@ local function get_diagnostics(bufnr, opts, clamp)
 | 
			
		||||
          or d.col < 0
 | 
			
		||||
          or d.end_col < 0
 | 
			
		||||
        then
 | 
			
		||||
          d = vim.deepcopy(d)
 | 
			
		||||
          d.lnum = math.max(math.min(d.lnum, line_count), 0)
 | 
			
		||||
          d.end_lnum = math.max(math.min(d.end_lnum, line_count), 0)
 | 
			
		||||
          d.col = math.max(d.col, 0)
 | 
			
		||||
@@ -750,6 +750,8 @@ end
 | 
			
		||||
 | 
			
		||||
--- Get current diagnostics.
 | 
			
		||||
---
 | 
			
		||||
--- Modifying diagnostics in the returned table has no effect. To set diagnostics in a buffer, use |vim.diagnostic.set()|.
 | 
			
		||||
---
 | 
			
		||||
---@param bufnr integer|nil Buffer number to get diagnostics from. Use 0 for
 | 
			
		||||
---                        current buffer or nil for all buffers.
 | 
			
		||||
---@param opts table|nil A table with the following keys:
 | 
			
		||||
 
 | 
			
		||||
@@ -181,6 +181,18 @@ describe('vim.diagnostic', function()
 | 
			
		||||
    eq(0, #diagnostics)
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('always returns a copy of diagnostic tables', function()
 | 
			
		||||
    local result = exec_lua [[
 | 
			
		||||
      vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
 | 
			
		||||
        make_error('Diagnostic #1', 1, 1, 1, 1),
 | 
			
		||||
      })
 | 
			
		||||
      local diag = vim.diagnostic.get()
 | 
			
		||||
      diag[1].col = 10000
 | 
			
		||||
      return vim.diagnostic.get()[1].col == 10000
 | 
			
		||||
    ]]
 | 
			
		||||
    eq(result, false)
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  it('resolves buffer number 0 to the current buffer', function()
 | 
			
		||||
    eq(2, exec_lua [[
 | 
			
		||||
      vim.api.nvim_set_current_buf(diagnostic_bufnr)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user