mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	messages: use proper multiline error message for rpcrequest and API wrappers
This commit is contained in:
		| @@ -6078,7 +6078,7 @@ nr2char({expr} [, {utf8}])				*nr2char()* | |||||||
| 		characters.  nr2char(0) is a real NUL and terminates the | 		characters.  nr2char(0) is a real NUL and terminates the | ||||||
| 		string, thus results in an empty string. | 		string, thus results in an empty string. | ||||||
|  |  | ||||||
| nvim_...({...})						*nvim_...()* *eval-api* | nvim_...({...})					*E5555* *nvim_...()* *eval-api* | ||||||
| 		Call nvim |api| functions. The type checking of arguments will | 		Call nvim |api| functions. The type checking of arguments will | ||||||
| 		be stricter than for most other builtins. For instance, | 		be stricter than for most other builtins. For instance, | ||||||
| 		if Integer is expected, a |Number| must be passed in, a | 		if Integer is expected, a |Number| must be passed in, a | ||||||
|   | |||||||
| @@ -702,6 +702,8 @@ events, which the UI must handle. | |||||||
| 		"echo"		|:echo| message | 		"echo"		|:echo| message | ||||||
| 		"echomsg"	|:echomsg| message | 		"echomsg"	|:echomsg| message | ||||||
| 		"echoerr"	|:echoerr| message | 		"echoerr"	|:echoerr| message | ||||||
|  | 		"lua_error"	Error in |:lua| code | ||||||
|  | 		"rpc_error"	Error response from |rpcrequest()| | ||||||
| 		"return_prompt"	|press-enter| prompt after a multiple messages | 		"return_prompt"	|press-enter| prompt after a multiple messages | ||||||
| 		"quickfix"	Quickfix navigation message | 		"quickfix"	Quickfix navigation message | ||||||
| 		"wmsg"		Warning ("search hit BOTTOM", |W10|, …) | 		"wmsg"		Warning ("search hit BOTTOM", |W10|, …) | ||||||
|   | |||||||
| @@ -6529,7 +6529,7 @@ static void api_wrapper(typval_T *argvars, typval_T *rettv, FunPtr fptr) | |||||||
|   Object result = fn(VIML_INTERNAL_CALL, args, &err); |   Object result = fn(VIML_INTERNAL_CALL, args, &err); | ||||||
|  |  | ||||||
|   if (ERROR_SET(&err)) { |   if (ERROR_SET(&err)) { | ||||||
|     nvim_err_writeln(cstr_as_string(err.msg)); |     emsgf_multiline((const char *)e_api_error, err.msg); | ||||||
|     goto end; |     goto end; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -14118,8 +14118,11 @@ static void f_rpcrequest(typval_T *argvars, typval_T *rettv, FunPtr fptr) | |||||||
|  |  | ||||||
|  |  | ||||||
|   Error err = ERROR_INIT; |   Error err = ERROR_INIT; | ||||||
|   Object result = rpc_send_call((uint64_t)argvars[0].vval.v_number, |  | ||||||
|                                 tv_get_string(&argvars[1]), args, &err); |   uint64_t chan_id = (uint64_t)argvars[0].vval.v_number; | ||||||
|  |   const char *method = tv_get_string(&argvars[1]); | ||||||
|  |  | ||||||
|  |   Object result = rpc_send_call(chan_id, method, args, &err); | ||||||
|  |  | ||||||
|   if (l_provider_call_nesting) { |   if (l_provider_call_nesting) { | ||||||
|     current_SID = save_current_SID; |     current_SID = save_current_SID; | ||||||
| @@ -14132,7 +14135,20 @@ static void f_rpcrequest(typval_T *argvars, typval_T *rettv, FunPtr fptr) | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (ERROR_SET(&err)) { |   if (ERROR_SET(&err)) { | ||||||
|     nvim_err_writeln(cstr_as_string(err.msg)); |     const char *name = NULL; | ||||||
|  |     Channel *chan = find_channel(chan_id); | ||||||
|  |     if (chan) { | ||||||
|  |       name = rpc_client_name(chan); | ||||||
|  |     } | ||||||
|  |     msg_ext_set_kind("rpc_error"); | ||||||
|  |     if (name) { | ||||||
|  |       emsgf_multiline("Error invoking '%s' on channel %"PRIu64" (%s):\n%s", | ||||||
|  |                       method, chan_id, name, err.msg); | ||||||
|  |     } else { | ||||||
|  |       emsgf_multiline("Error invoking '%s' on channel %"PRIu64":\n%s", | ||||||
|  |                       method, chan_id, err.msg); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     goto end; |     goto end; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1039,6 +1039,7 @@ EXTERN char_u e_au_recursive[] INIT(= N_( | |||||||
| EXTERN char_u e_unsupportedoption[] INIT(= N_("E519: Option not supported")); | EXTERN char_u e_unsupportedoption[] INIT(= N_("E519: Option not supported")); | ||||||
| EXTERN char_u e_fnametoolong[] INIT(= N_("E856: Filename too long")); | EXTERN char_u e_fnametoolong[] INIT(= N_("E856: Filename too long")); | ||||||
| EXTERN char_u e_float_as_string[] INIT(= N_("E806: using Float as a String")); | EXTERN char_u e_float_as_string[] INIT(= N_("E806: using Float as a String")); | ||||||
|  |  | ||||||
| EXTERN char_u e_autocmd_err[] INIT(=N_( | EXTERN char_u e_autocmd_err[] INIT(=N_( | ||||||
|     "E5500: autocmd has thrown an exception: %s")); |     "E5500: autocmd has thrown an exception: %s")); | ||||||
| EXTERN char_u e_cmdmap_err[] INIT(=N_( | EXTERN char_u e_cmdmap_err[] INIT(=N_( | ||||||
| @@ -1047,6 +1048,10 @@ EXTERN char_u e_cmdmap_repeated[] INIT(=N_( | |||||||
|     "E5521: <Cmd> mapping must end with <CR> before second <Cmd>")); |     "E5521: <Cmd> mapping must end with <CR> before second <Cmd>")); | ||||||
| EXTERN char_u e_cmdmap_key[] INIT(=N_( | EXTERN char_u e_cmdmap_key[] INIT(=N_( | ||||||
|     "E5522: <Cmd> mapping must not include %s key")); |     "E5522: <Cmd> mapping must not include %s key")); | ||||||
|  |  | ||||||
|  | EXTERN char_u e_api_error[] INIT(=N_( | ||||||
|  |     "E5555: API call: %s")); | ||||||
|  |  | ||||||
| EXTERN char_u e_floatonly[] INIT(=N_( | EXTERN char_u e_floatonly[] INIT(=N_( | ||||||
|     "E5601: Cannot close window, only floating window would remain")); |     "E5601: Cannot close window, only floating window would remain")); | ||||||
| EXTERN char_u e_floatexchange[] INIT(=N_( | EXTERN char_u e_floatexchange[] INIT(=N_( | ||||||
|   | |||||||
| @@ -54,6 +54,7 @@ static void nlua_error(lua_State *const lstate, const char *const msg) | |||||||
|   size_t len; |   size_t len; | ||||||
|   const char *const str = lua_tolstring(lstate, -1, &len); |   const char *const str = lua_tolstring(lstate, -1, &len); | ||||||
|  |  | ||||||
|  |   msg_ext_set_kind("lua_error"); | ||||||
|   emsgf_multiline(msg, (int)len, str); |   emsgf_multiline(msg, (int)len, str); | ||||||
|  |  | ||||||
|   lua_pop(lstate, 1); |   lua_pop(lstate, 1); | ||||||
|   | |||||||
| @@ -687,6 +687,22 @@ Dictionary rpc_client_info(Channel *chan) | |||||||
|   return copy_dictionary(chan->rpc.info); |   return copy_dictionary(chan->rpc.info); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | const char *rpc_client_name(Channel *chan) | ||||||
|  | { | ||||||
|  |   if (!chan->is_rpc) { | ||||||
|  |     return NULL; | ||||||
|  |   } | ||||||
|  |   Dictionary info = chan->rpc.info; | ||||||
|  |   for (size_t i = 0; i < info.size; i++) { | ||||||
|  |     if (strequal("name", info.items[i].key.data) | ||||||
|  |         && info.items[i].value.type == kObjectTypeString) { | ||||||
|  |       return info.items[i].value.data.string.data; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
| #if MIN_LOG_LEVEL <= DEBUG_LOG_LEVEL | #if MIN_LOG_LEVEL <= DEBUG_LOG_LEVEL | ||||||
| #define REQ "[request]  " | #define REQ "[request]  " | ||||||
| #define RES "[response] " | #define RES "[response] " | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ local ok = helpers.ok | |||||||
| local meths = helpers.meths | local meths = helpers.meths | ||||||
| local spawn, merge_args = helpers.spawn, helpers.merge_args | local spawn, merge_args = helpers.spawn, helpers.merge_args | ||||||
| local set_session = helpers.set_session | local set_session = helpers.set_session | ||||||
| local expect_err = helpers.expect_err | local meth_pcall = helpers.meth_pcall | ||||||
|  |  | ||||||
| describe('server -> client', function() | describe('server -> client', function() | ||||||
|   local cid |   local cid | ||||||
| @@ -221,8 +221,8 @@ describe('server -> client', function() | |||||||
|     end) |     end) | ||||||
|  |  | ||||||
|     it('returns an error if the request failed', function() |     it('returns an error if the request failed', function() | ||||||
|       expect_err('Vim:Invalid method: does%-not%-exist', |       eq({false, "Vim:Error invoking 'does-not-exist' on channel 3:\nInvalid method: does-not-exist" }, | ||||||
|                  eval, "rpcrequest(vim, 'does-not-exist')") |          meth_pcall(eval, "rpcrequest(vim, 'does-not-exist')")) | ||||||
|     end) |     end) | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -892,7 +892,7 @@ describe('API', function() | |||||||
|       eq({info=info}, meths.get_var("opened_event")) |       eq({info=info}, meths.get_var("opened_event")) | ||||||
|       eq({[1]=testinfo,[2]=stderr,[3]=info}, meths.list_chans()) |       eq({[1]=testinfo,[2]=stderr,[3]=info}, meths.list_chans()) | ||||||
|       eq(info, meths.get_chan_info(3)) |       eq(info, meths.get_chan_info(3)) | ||||||
|       eval('rpcrequest(3, "nvim_set_client_info", "cat", {}, "remote",'.. |       eval('rpcrequest(3, "nvim_set_client_info", "amazing-cat", {}, "remote",'.. | ||||||
|                        '{"nvim_command":{"n_args":1}},'.. -- and so on |                        '{"nvim_command":{"n_args":1}},'.. -- and so on | ||||||
|                        '{"description":"The Amazing Cat"})') |                        '{"description":"The Amazing Cat"})') | ||||||
|       info = { |       info = { | ||||||
| @@ -900,7 +900,7 @@ describe('API', function() | |||||||
|         id=3, |         id=3, | ||||||
|         mode='rpc', |         mode='rpc', | ||||||
|         client = { |         client = { | ||||||
|           name='cat', |           name='amazing-cat', | ||||||
|           version={major=0}, |           version={major=0}, | ||||||
|           type='remote', |           type='remote', | ||||||
|           methods={nvim_command={n_args=1}}, |           methods={nvim_command={n_args=1}}, | ||||||
| @@ -909,6 +909,9 @@ describe('API', function() | |||||||
|       } |       } | ||||||
|       eq({info=info}, meths.get_var("info_event")) |       eq({info=info}, meths.get_var("info_event")) | ||||||
|       eq({[1]=testinfo,[2]=stderr,[3]=info}, meths.list_chans()) |       eq({[1]=testinfo,[2]=stderr,[3]=info}, meths.list_chans()) | ||||||
|  |  | ||||||
|  |       eq({false, "Vim:Error invoking 'nvim_set_current_buf' on channel 3 (amazing-cat):\nWrong type for argument 1, expecting Buffer"}, | ||||||
|  |          meth_pcall(eval, 'rpcrequest(3, "nvim_set_current_buf", -1)')) | ||||||
|     end) |     end) | ||||||
|  |  | ||||||
|     it('works for :terminal channel', function() |     it('works for :terminal channel', function() | ||||||
|   | |||||||
| @@ -219,7 +219,7 @@ describe('autocmd', function() | |||||||
|     eq(7, eval('g:test')) |     eq(7, eval('g:test')) | ||||||
|  |  | ||||||
|     -- API calls are blocked when aucmd_win is not in scope |     -- API calls are blocked when aucmd_win is not in scope | ||||||
|     eq({false, 'Vim(call):Invalid window id'}, |     eq({false, 'Vim(call):E5555: API call: Invalid window id'}, | ||||||
|        meth_pcall(command, "call nvim_set_current_win(g:winid)")) |        meth_pcall(command, "call nvim_set_current_win(g:winid)")) | ||||||
|  |  | ||||||
|     -- second time aucmd_win is needed, a different code path is invoked |     -- second time aucmd_win is needed, a different code path is invoked | ||||||
| @@ -257,7 +257,7 @@ describe('autocmd', function() | |||||||
|     eq(0, eval('g:had_value')) |     eq(0, eval('g:had_value')) | ||||||
|     eq(7, eval('g:test')) |     eq(7, eval('g:test')) | ||||||
|  |  | ||||||
|     eq({false, 'Vim(call):Invalid window id'}, |     eq({false, 'Vim(call):E5555: API call: Invalid window id'}, | ||||||
|        meth_pcall(command, "call nvim_set_current_win(g:winid)")) |        meth_pcall(command, "call nvim_set_current_win(g:winid)")) | ||||||
|   end) |   end) | ||||||
| end) | end) | ||||||
|   | |||||||
| @@ -34,16 +34,16 @@ describe('eval-API', function() | |||||||
|     eq('Vim(call):E119: Not enough arguments for function: nvim_set_option', err) |     eq('Vim(call):E119: Not enough arguments for function: nvim_set_option', err) | ||||||
|  |  | ||||||
|     err = exc_exec('call nvim_buf_set_lines(1, 0, -1, [], ["list"])') |     err = exc_exec('call nvim_buf_set_lines(1, 0, -1, [], ["list"])') | ||||||
|     eq('Vim(call):Wrong type for argument 4, expecting Boolean', err) |     eq('Vim(call):E5555: API call: Wrong type for argument 4, expecting Boolean', err) | ||||||
|  |  | ||||||
|     err = exc_exec('call nvim_buf_set_lines(0, 0, -1, v:true, "string")') |     err = exc_exec('call nvim_buf_set_lines(0, 0, -1, v:true, "string")') | ||||||
|     eq('Vim(call):Wrong type for argument 5, expecting ArrayOf(String)', err) |     eq('Vim(call):E5555: API call: Wrong type for argument 5, expecting ArrayOf(String)', err) | ||||||
|  |  | ||||||
|     err = exc_exec('call nvim_buf_get_number("0")') |     err = exc_exec('call nvim_buf_get_number("0")') | ||||||
|     eq('Vim(call):Wrong type for argument 1, expecting Buffer', err) |     eq('Vim(call):E5555: API call: Wrong type for argument 1, expecting Buffer', err) | ||||||
|  |  | ||||||
|     err = exc_exec('call nvim_buf_line_count(17)') |     err = exc_exec('call nvim_buf_line_count(17)') | ||||||
|     eq('Vim(call):Invalid buffer id', err) |     eq('Vim(call):E5555: API call: Invalid buffer id', err) | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -73,7 +73,7 @@ if prepend_argv then | |||||||
|   nvim_argv = new_nvim_argv |   nvim_argv = new_nvim_argv | ||||||
| end | end | ||||||
|  |  | ||||||
| local session, loop_running, last_error | local session, loop_running, last_error, method_error | ||||||
|  |  | ||||||
| local function get_session() | local function get_session() | ||||||
|   return session |   return session | ||||||
| @@ -190,12 +190,21 @@ local function call_and_stop_on_error(lsession, ...) | |||||||
|   return result |   return result | ||||||
| end | end | ||||||
|  |  | ||||||
|  | local function set_method_error(err) | ||||||
|  |   method_error = err | ||||||
|  | end | ||||||
|  |  | ||||||
| local function run_session(lsession, request_cb, notification_cb, setup_cb, timeout) | local function run_session(lsession, request_cb, notification_cb, setup_cb, timeout) | ||||||
|   local on_request, on_notification, on_setup |   local on_request, on_notification, on_setup | ||||||
|  |  | ||||||
|   if request_cb then |   if request_cb then | ||||||
|     function on_request(method, args) |     function on_request(method, args) | ||||||
|       return call_and_stop_on_error(lsession, request_cb, method, args) |       method_error = nil | ||||||
|  |       local result = call_and_stop_on_error(lsession, request_cb, method, args) | ||||||
|  |       if method_error ~= nil then | ||||||
|  |         return method_error, true | ||||||
|  |       end | ||||||
|  |       return result | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
| @@ -806,6 +815,7 @@ local module = { | |||||||
|   run = run, |   run = run, | ||||||
|   run_session = run_session, |   run_session = run_session, | ||||||
|   set_session = set_session, |   set_session = set_session, | ||||||
|  |   set_method_error = set_method_error, | ||||||
|   set_shell_powershell = set_shell_powershell, |   set_shell_powershell = set_shell_powershell, | ||||||
|   skip_fragile = skip_fragile, |   skip_fragile = skip_fragile, | ||||||
|   source = source, |   source = source, | ||||||
|   | |||||||
| @@ -40,8 +40,8 @@ describe('python3 provider', function() | |||||||
|     -- mostly bogus. |     -- mostly bogus. | ||||||
|     local very_long_symbol = string.rep('a', 1200) |     local very_long_symbol = string.rep('a', 1200) | ||||||
|     feed_command(':silent! py3 print('..very_long_symbol..' b)') |     feed_command(':silent! py3 print('..very_long_symbol..' b)') | ||||||
|     -- Truncated error message would not contain this (last) line. |     -- Error message will contain this (last) line. | ||||||
|     eq('SyntaxError: invalid syntax', eval('v:errmsg')) |     eq('Error invoking \'python_execute\' on channel 3 (python3-script-host):\n  File "<string>", line 1\n    print('..very_long_symbol..' b)\n          '..string.rep(' ',1200)..' ^\nSyntaxError: invalid syntax', eval('v:errmsg')) | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|   it('python3_execute with nested commands', function() |   it('python3_execute with nested commands', function() | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ local clear, feed = helpers.clear, helpers.feed | |||||||
| local eval = helpers.eval | local eval = helpers.eval | ||||||
| local eq = helpers.eq | local eq = helpers.eq | ||||||
| local command = helpers.command | local command = helpers.command | ||||||
|  | local set_method_error = helpers.set_method_error | ||||||
|  |  | ||||||
|  |  | ||||||
| describe('ui/ext_messages', function() | describe('ui/ext_messages', function() | ||||||
| @@ -631,7 +632,7 @@ describe('ui/ext_messages', function() | |||||||
|     eq(0, eval('&cmdheight')) |     eq(0, eval('&cmdheight')) | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|   it('supports multiline messages', function() |   it('supports multiline messages from lua', function() | ||||||
|     feed(':lua error("such\\nmultiline\\nerror")<cr>') |     feed(':lua error("such\\nmultiline\\nerror")<cr>') | ||||||
|     screen:expect{grid=[[ |     screen:expect{grid=[[ | ||||||
|       ^                         | |       ^                         | | ||||||
| @@ -641,9 +642,61 @@ describe('ui/ext_messages', function() | |||||||
|       {1:~                        }| |       {1:~                        }| | ||||||
|     ]], messages={{ |     ]], messages={{ | ||||||
|         content = {{'E5105: Error while calling lua chunk: [string "<VimL compiled string>"]:1: such\nmultiline\nerror', 2}}, |         content = {{'E5105: Error while calling lua chunk: [string "<VimL compiled string>"]:1: such\nmultiline\nerror', 2}}, | ||||||
|         kind = "emsg" |         kind = "lua_error" | ||||||
|      }}} |      }}} | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|  |   it('supports multiline messages from rpc', function() | ||||||
|  |     feed(':call rpcrequest(1, "test_method")<cr>') | ||||||
|  |  | ||||||
|  |     screen:expect{grid=[[ | ||||||
|  |       ^                         | | ||||||
|  |       {1:~                        }| | ||||||
|  |       {1:~                        }| | ||||||
|  |       {1:~                        }| | ||||||
|  |       {1:~                        }| | ||||||
|  |     ]], messages={{ | ||||||
|  |       content = {{"Error invoking 'test_method' on channel 1:\ncomplete\nerror\n\nmessage", 2}}, | ||||||
|  |       kind = "rpc_error" | ||||||
|  |     }}, request_cb=function (name) | ||||||
|  |       if name == "test_method" then | ||||||
|  |         set_method_error("complete\nerror\n\nmessage") | ||||||
|  |       end | ||||||
|  |     end} | ||||||
|  |   end) | ||||||
|  | end) | ||||||
|  |  | ||||||
|  | describe('ui/builtin messages', function() | ||||||
|  |   local screen | ||||||
|  |   before_each(function() | ||||||
|  |     clear() | ||||||
|  |     screen = Screen.new(60, 7) | ||||||
|  |     screen:attach({rgb=true, ext_popupmenu=true}) | ||||||
|  |     screen:set_default_attr_ids({ | ||||||
|  |       [1] = {bold = true, foreground = Screen.colors.Blue1}, | ||||||
|  |       [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red}, | ||||||
|  |       [3] = {bold = true, reverse = true}, | ||||||
|  |       [4] = {bold = true, foreground = Screen.colors.SeaGreen4}, | ||||||
|  |     }) | ||||||
|  |   end) | ||||||
|  |  | ||||||
|  |   it('supports multiline messages from rpc', function() | ||||||
|  |     feed(':call rpcrequest(1, "test_method")<cr>') | ||||||
|  |  | ||||||
|  |     screen:expect{grid=[[ | ||||||
|  |       {3:                                                            }| | ||||||
|  |       {2:Error invoking 'test_method' on channel 1:}                  | | ||||||
|  |       {2:complete}                                                    | | ||||||
|  |       {2:error}                                                       | | ||||||
|  |                                                                   | | ||||||
|  |       {2:message}                                                     | | ||||||
|  |       {4:Press ENTER or type command to continue}^                     | | ||||||
|  |     ]], request_cb=function (name) | ||||||
|  |       if name == "test_method" then | ||||||
|  |         set_method_error("complete\nerror\n\nmessage") | ||||||
|  |       end | ||||||
|  |     end} | ||||||
|  |   end) | ||||||
| end) | end) | ||||||
|  |  | ||||||
| describe('ui/ext_messages', function() | describe('ui/ext_messages', function() | ||||||
|   | |||||||
| @@ -322,7 +322,7 @@ function Screen:expect(expected, attr_ids, attr_ignore) | |||||||
|     assert(not (attr_ids ~= nil or attr_ignore ~= nil)) |     assert(not (attr_ids ~= nil or attr_ignore ~= nil)) | ||||||
|     local is_key = {grid=true, attr_ids=true, attr_ignore=true, condition=true, |     local is_key = {grid=true, attr_ids=true, attr_ignore=true, condition=true, | ||||||
|                     any=true, mode=true, unchanged=true, intermediate=true, |                     any=true, mode=true, unchanged=true, intermediate=true, | ||||||
|                     reset=true, timeout=true} |                     reset=true, timeout=true, request_cb=true} | ||||||
|     for _, v in ipairs(ext_keys) do |     for _, v in ipairs(ext_keys) do | ||||||
|       is_key[v] = true |       is_key[v] = true | ||||||
|     end |     end | ||||||
| @@ -497,7 +497,7 @@ function Screen:_wait(check, flags) | |||||||
|  |  | ||||||
|     return true |     return true | ||||||
|   end |   end | ||||||
|   run_session(self._session, nil, notification_cb, nil, minimal_timeout) |   run_session(self._session, flags.request_cb, notification_cb, nil, minimal_timeout) | ||||||
|   if not did_flush then |   if not did_flush then | ||||||
|     err = "no flush received" |     err = "no flush received" | ||||||
|   elseif not checked then |   elseif not checked then | ||||||
| @@ -510,7 +510,7 @@ function Screen:_wait(check, flags) | |||||||
|  |  | ||||||
|   if not success_seen then |   if not success_seen then | ||||||
|     did_miminal_timeout = true |     did_miminal_timeout = true | ||||||
|     run_session(self._session, nil, notification_cb, nil, timeout-minimal_timeout) |     run_session(self._session, flags.request_cb, notification_cb, nil, timeout-minimal_timeout) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   local did_warn = false |   local did_warn = false | ||||||
| @@ -565,12 +565,12 @@ asynchronous (feed(), nvim_input()) and synchronous API calls. | |||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
| function Screen:sleep(ms) | function Screen:sleep(ms, request_cb) | ||||||
|   local function notification_cb(method, args) |   local function notification_cb(method, args) | ||||||
|     assert(method == 'redraw') |     assert(method == 'redraw') | ||||||
|     self:_redraw(args) |     self:_redraw(args) | ||||||
|   end |   end | ||||||
|   run_session(self._session, nil, notification_cb, nil, ms) |   run_session(self._session, request_cb, notification_cb, nil, ms) | ||||||
| end | end | ||||||
|  |  | ||||||
| function Screen:_redraw(updates) | function Screen:_redraw(updates) | ||||||
| @@ -1145,8 +1145,8 @@ end | |||||||
| -- Use snapshot_util({},true) to generate a text-only (no attributes) test. | -- Use snapshot_util({},true) to generate a text-only (no attributes) test. | ||||||
| -- | -- | ||||||
| -- @see Screen:redraw_debug() | -- @see Screen:redraw_debug() | ||||||
| function Screen:snapshot_util(attrs, ignore) | function Screen:snapshot_util(attrs, ignore, request_cb) | ||||||
|   self:sleep(250) |   self:sleep(250, request_cb) | ||||||
|   self:print_snapshot(attrs, ignore) |   self:print_snapshot(attrs, ignore) | ||||||
| end | end | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								third-party/cmake/BuildLuarocks.cmake
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								third-party/cmake/BuildLuarocks.cmake
									
									
									
									
										vendored
									
									
								
							| @@ -202,7 +202,7 @@ if(USE_BUNDLED_BUSTED) | |||||||
|   # DEPENDS on the previous module, because Luarocks breaks if parallel. |   # DEPENDS on the previous module, because Luarocks breaks if parallel. | ||||||
|   add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client |   add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client | ||||||
|     COMMAND ${LUAROCKS_BINARY} |     COMMAND ${LUAROCKS_BINARY} | ||||||
|     ARGS build nvim-client 0.1.0-1 ${LUAROCKS_BUILDARGS} |     ARGS build nvim-client 0.2.0-1 ${LUAROCKS_BUILDARGS} | ||||||
|     DEPENDS luv) |     DEPENDS luv) | ||||||
|   add_custom_target(nvim-client |   add_custom_target(nvim-client | ||||||
|     DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client) |     DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Björn Linse
					Björn Linse