mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	feat(diagnostic): add format option to setloclist/setqflist (#33977)
				
					
				
			This commit is contained in:
		 Maria José Solano
					Maria José Solano
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							c681336e3c
						
					
				
				
					commit
					2f24ae8de4
				
			| @@ -923,6 +923,11 @@ setloclist({opts})                               *vim.diagnostic.setloclist()* | ||||
|                   "Diagnostics". | ||||
|                 • {severity}? (`vim.diagnostic.SeverityFilter`) See | ||||
|                   |diagnostic-severity|. | ||||
|                 • {format}? (`fun(diagnostic:vim.Diagnostic): string?`) A | ||||
|                   function that takes a diagnostic as input and returns a | ||||
|                   string or nil. If the return value is nil, the diagnostic is | ||||
|                   not displayed in the location list. Else the output text is | ||||
|                   used to display the diagnostic. | ||||
|  | ||||
| setqflist({opts})                                 *vim.diagnostic.setqflist()* | ||||
|     Add all diagnostics to the quickfix list. | ||||
| @@ -938,6 +943,11 @@ setqflist({opts})                                 *vim.diagnostic.setqflist()* | ||||
|                   title, it's updated. If not, a new quickfix list is created. | ||||
|                 • {severity}? (`vim.diagnostic.SeverityFilter`) See | ||||
|                   |diagnostic-severity|. | ||||
|                 • {format}? (`fun(diagnostic:vim.Diagnostic): string?`) A | ||||
|                   function that takes a diagnostic as input and returns a | ||||
|                   string or nil. If the return value is nil, the diagnostic is | ||||
|                   not displayed in the quickfix list. Else the output text is | ||||
|                   used to display the diagnostic. | ||||
|  | ||||
|                                                        *vim.diagnostic.show()* | ||||
| show({namespace}, {bufnr}, {diagnostics}, {opts}) | ||||
|   | ||||
| @@ -126,7 +126,9 @@ DEFAULTS | ||||
|  | ||||
| DIAGNOSTICS | ||||
|  | ||||
| • todo | ||||
| • |vim.diagnostic.setloclist()| and |vim.diagnostic.setqflist()| now support a | ||||
|   `format` function to modify (or filter) diagnostics before being set in the | ||||
|   location/quickfix list. | ||||
|  | ||||
| EDITOR | ||||
|  | ||||
|   | ||||
| @@ -909,6 +909,9 @@ local function set_list(loclist, opts) | ||||
|   -- Don't clamp line numbers since the quickfix list can already handle line | ||||
|   -- numbers beyond the end of the buffer | ||||
|   local diagnostics = get_diagnostics(bufnr, opts --[[@as vim.diagnostic.GetOpts]], false) | ||||
|   if opts.format then | ||||
|     diagnostics = reformat_diagnostics(opts.format, diagnostics) | ||||
|   end | ||||
|   local items = M.toqflist(diagnostics) | ||||
|   local qf_id = nil | ||||
|   if loclist then | ||||
| @@ -2361,6 +2364,11 @@ end | ||||
| --- | ||||
| --- See |diagnostic-severity|. | ||||
| --- @field severity? vim.diagnostic.SeverityFilter | ||||
| --- | ||||
| --- A function that takes a diagnostic as input and returns a string or nil. | ||||
| --- If the return value is nil, the diagnostic is not displayed in the quickfix list. | ||||
| --- Else the output text is used to display the diagnostic. | ||||
| --- @field format? fun(diagnostic:vim.Diagnostic): string? | ||||
|  | ||||
| --- Add all diagnostics to the quickfix list. | ||||
| --- | ||||
| @@ -2389,6 +2397,11 @@ end | ||||
| --- | ||||
| --- See |diagnostic-severity|. | ||||
| --- @field severity? vim.diagnostic.SeverityFilter | ||||
| --- | ||||
| --- A function that takes a diagnostic as input and returns a string or nil. | ||||
| --- If the return value is nil, the diagnostic is not displayed in the location list. | ||||
| --- Else the output text is used to display the diagnostic. | ||||
| --- @field format? fun(diagnostic:vim.Diagnostic): string? | ||||
|  | ||||
| --- Add buffer diagnostics to the location list. | ||||
| --- | ||||
|   | ||||
| @@ -3448,6 +3448,32 @@ describe('vim.diagnostic', function() | ||||
|       eq(1, #loc_list) | ||||
|       eq('Error here!', loc_list[1].text) | ||||
|     end) | ||||
|  | ||||
|     it('supports format function', function() | ||||
|       local loc_list = exec_lua(function() | ||||
|         vim.api.nvim_win_set_buf(0, _G.diagnostic_bufnr) | ||||
|  | ||||
|         vim.diagnostic.set(_G.diagnostic_ns, _G.diagnostic_bufnr, { | ||||
|           _G.make_error('Error', 1, 1, 1, 1, 'foo_ls'), | ||||
|           _G.make_error('Another error', 2, 2, 2, 2, 'foo_ls'), | ||||
|         }) | ||||
|  | ||||
|         vim.diagnostic.setloclist({ | ||||
|           format = function(diagnostic) | ||||
|             if diagnostic.lnum > 1 then | ||||
|               return nil | ||||
|             end | ||||
|  | ||||
|             return string.format('%s: %s', diagnostic.source, diagnostic.message) | ||||
|           end, | ||||
|         }) | ||||
|  | ||||
|         return vim.fn.getloclist(0) | ||||
|       end) | ||||
|  | ||||
|       eq(1, #loc_list) | ||||
|       eq('foo_ls: Error', loc_list[1].text) | ||||
|     end) | ||||
|   end) | ||||
|  | ||||
|   describe('setqflist()', function() | ||||
| @@ -3516,6 +3542,32 @@ describe('vim.diagnostic', function() | ||||
|  | ||||
|       neq(0, qf_winid) | ||||
|     end) | ||||
|  | ||||
|     it('supports format function', function() | ||||
|       local qf_list = exec_lua(function() | ||||
|         vim.api.nvim_win_set_buf(0, _G.diagnostic_bufnr) | ||||
|  | ||||
|         vim.diagnostic.set(_G.diagnostic_ns, _G.diagnostic_bufnr, { | ||||
|           _G.make_error('Error', 1, 1, 1, 1, 'foo_ls'), | ||||
|           _G.make_error('Another error', 2, 2, 2, 2, 'foo_ls'), | ||||
|         }) | ||||
|  | ||||
|         vim.diagnostic.setqflist({ | ||||
|           format = function(diagnostic) | ||||
|             if diagnostic.lnum > 1 then | ||||
|               return nil | ||||
|             end | ||||
|  | ||||
|             return string.format('%s: %s', diagnostic.source, diagnostic.message) | ||||
|           end, | ||||
|         }) | ||||
|  | ||||
|         return vim.fn.getqflist() | ||||
|       end) | ||||
|  | ||||
|       eq(1, #qf_list) | ||||
|       eq('foo_ls: Error', qf_list[1].text) | ||||
|     end) | ||||
|   end) | ||||
|  | ||||
|   describe('match()', function() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user