mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	fix(lsp): do not convert vim.NIL to nil in lists
This commit is contained in:
		| @@ -50,8 +50,13 @@ recursive_convert_NIL = function(v, tbl_processed) | ||||
|     return nil | ||||
|   elseif not tbl_processed[v] and type(v) == 'table' then | ||||
|     tbl_processed[v] = true | ||||
|     local inside_list = vim.tbl_islist(v) | ||||
|     return vim.tbl_map(function(x) | ||||
|       if not inside_list or (inside_list and type(x) == "table") then | ||||
|         return recursive_convert_NIL(x, tbl_processed) | ||||
|       else | ||||
|         return x | ||||
|       end | ||||
|     end, v) | ||||
|   end | ||||
|  | ||||
|   | ||||
| @@ -464,6 +464,23 @@ function tests.invalid_header() | ||||
|   io.stdout:write("Content-length: \r\n") | ||||
| end | ||||
|  | ||||
| function tests.decode_nil() | ||||
|   skeleton { | ||||
|     on_init = function(_) | ||||
|       return { capabilities = {} } | ||||
|     end; | ||||
|     body = function() | ||||
|       notify('start') | ||||
|       notify("workspace/executeCommand", { | ||||
|         arguments = { "EXTRACT_METHOD", {metadata = {field = vim.NIL}}, 3, 0, 6123, vim.NIL }, | ||||
|         command = "refactor.perform", | ||||
|         title = "EXTRACT_METHOD" | ||||
|       }) | ||||
|       notify('finish') | ||||
|     end; | ||||
|   } | ||||
| end | ||||
|  | ||||
| -- Tests will be indexed by TEST_NAME | ||||
|  | ||||
| local kill_timer = vim.loop.new_timer() | ||||
|   | ||||
| @@ -927,6 +927,48 @@ describe('LSP', function() | ||||
|         end; | ||||
|       } | ||||
|     end) | ||||
|  | ||||
|     it('should not trim vim.NIL from the end of a list', function() | ||||
|       local expected_handlers = { | ||||
|         {NIL, "shutdown", {}, 1}; | ||||
|         {NIL, "finish", {}, 1}; | ||||
|         {NIL, "workspace/executeCommand", { | ||||
|           arguments = { "EXTRACT_METHOD", {metadata = {}}, 3, 0, 6123, NIL }, | ||||
|           command = "refactor.perform", | ||||
|           title = "EXTRACT_METHOD" | ||||
|         }, 1}; | ||||
|         {NIL, "start", {}, 1}; | ||||
|       } | ||||
|       local client | ||||
|       test_rpc_server { | ||||
|         test_name = "decode_nil"; | ||||
|         on_setup = function() | ||||
|           exec_lua [[ | ||||
|             BUFFER = vim.api.nvim_create_buf(false, true) | ||||
|             vim.api.nvim_buf_set_lines(BUFFER, 0, -1, false, { | ||||
|               "testing"; | ||||
|               "123"; | ||||
|             }) | ||||
|           ]] | ||||
|         end; | ||||
|         on_init = function(_client) | ||||
|           client = _client | ||||
|           exec_lua [[ | ||||
|             assert(lsp.buf_attach_client(BUFFER, TEST_RPC_CLIENT_ID)) | ||||
|           ]] | ||||
|         end; | ||||
|         on_exit = function(code, signal) | ||||
|           eq(0, code, "exit code", fake_lsp_logfile) | ||||
|           eq(0, signal, "exit signal", fake_lsp_logfile) | ||||
|         end; | ||||
|         on_handler = function(err, method, params, client_id) | ||||
|           eq(table.remove(expected_handlers), {err, method, params, client_id}, "expected handler") | ||||
|           if method == 'finish' then | ||||
|             client.stop() | ||||
|           end | ||||
|         end; | ||||
|       } | ||||
|     end) | ||||
|   end) | ||||
|   describe('lsp._cmd_parts test', function() | ||||
|     local function _cmd_parts(input) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Akin Sowemimo
					Akin Sowemimo