mirror of
https://github.com/neovim/neovim.git
synced 2026-05-24 05:40:08 +00:00
refactor(excmd): pass fargs to Lua for builtin cmds #39528
Problem: The fallback that tokenizes `eap->arg` by unescaped whitespace (when the parser doesn't pre-split via `EX_EXPAND` etc.) lives in `nlua_do_ucmd`, so only user-command callbacks got `eap.fargs`. Builtin commands routed through `nlua_call_excmd` have to re-parse the args themselves (e.g. `M.ex_lsp`). Solution: - Move the tokenization into `nlua_push_eap` so every Lua handler sees `eap.fargs`. Keep only the `EX_NOSPC` override in `nlua_do_ucmd` (the `nargs=1`/`?` case which is genuinely user-command-specific). - Drop the re-parse in `M.ex_lsp`.
This commit is contained in:
@@ -174,19 +174,13 @@ local available_subcmds = vim.tbl_keys(actions)
|
||||
--- Implements command: `:lsp {subcmd} {name}?`.
|
||||
--- @param eap vim._core.ExCmdArgs
|
||||
function M.ex_lsp(eap)
|
||||
local fargs = api.nvim_parse_cmd('lsp ' .. eap.args, {}).args
|
||||
if not fargs then
|
||||
return
|
||||
end
|
||||
local subcmd = fargs[1]
|
||||
local subcmd = eap.fargs[1]
|
||||
if not vim.list_contains(available_subcmds, subcmd) then
|
||||
echo_err(N_('E5800: Invalid :lsp subcommand: %s'):format(subcmd))
|
||||
return
|
||||
end
|
||||
|
||||
local clients = { unpack(fargs, 2) }
|
||||
|
||||
actions[subcmd](clients)
|
||||
actions[subcmd]({ unpack(eap.fargs, 2) })
|
||||
end
|
||||
|
||||
--- Completion logic for `:lsp` command
|
||||
|
||||
@@ -52,7 +52,7 @@ end
|
||||
--- @param items string[] List of swapfile paths.
|
||||
function M.select_swap(items)
|
||||
vim.ui.select(items, {
|
||||
prompt = N_('Enter number of swap file to use (q or empty cancels):'),
|
||||
prompt = N_('Select a swapfile:'),
|
||||
kind = 'swap',
|
||||
format_item = format_swap,
|
||||
}, function(_, idx)
|
||||
|
||||
@@ -30,7 +30,7 @@ function M.select_tag(eap, extra)
|
||||
end
|
||||
|
||||
vim.ui.select(items, {
|
||||
prompt = N_('Type number and <Enter> (q or empty cancels):'),
|
||||
prompt = N_('Select a tag:'),
|
||||
kind = 'tag',
|
||||
format_item = function(m)
|
||||
local marker = m.cur and '>' or ' '
|
||||
|
||||
Reference in New Issue
Block a user