aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorphanium <91544758+phanen@users.noreply.github.com>2025-03-24 20:14:22 +0800
committerGitHub <noreply@github.com>2025-03-24 05:14:22 -0700
commitaf4231d4070c8d664b919f5466a827905881ef32 (patch)
tree8f511f1750b2982af055450a4e8ae7b4b61f7aa0 /test
parentc98260822699bf622b14caffc908a47039deca51 (diff)
downloadrneovim-af4231d4070c8d664b919f5466a827905881ef32.tar.gz
rneovim-af4231d4070c8d664b919f5466a827905881ef32.tar.bz2
rneovim-af4231d4070c8d664b919f5466a827905881ef32.zip
fix(cmdline): cmdline completion of _defer_require() modules #33007
Problem: `:lua vim.lsp.c<tab>` does not list vim.lsp.completion in the completion list after 24cea4c7f7417c7fe99a98a0487f51dd68c4f409. Solution: - Always include `vim.lsp._submodule` keys in candidates. - Fixes `vim.lsp.c<tab>` -> `vim.lsp.completion`. - Eager-load `vim.lsp.completion` to get its completion. - Fixes `vim.lsp.completion.g<tab>` -> `vim.lsp.completion.get`.
Diffstat (limited to 'test')
-rw-r--r--test/functional/editor/completion_spec.lua7
-rw-r--r--test/functional/lua/command_line_completion_spec.lua37
2 files changed, 42 insertions, 2 deletions
diff --git a/test/functional/editor/completion_spec.lua b/test/functional/editor/completion_spec.lua
index 106e0df347..3e5d0e48e8 100644
--- a/test/functional/editor/completion_spec.lua
+++ b/test/functional/editor/completion_spec.lua
@@ -928,6 +928,13 @@ describe('completion', function()
command('set wildoptions+=fuzzy')
eq({ 'vim' }, fn.getcompletion('vi', 'lua'))
end)
+
+ it('completes _defer_require() modules', function()
+ -- vim.lsp.c<tab> -> vim.lsp.completion
+ ok(vim.tbl_contains(fn.getcompletion('lua vim.lsp.c', 'cmdline'), 'completion'))
+ -- vim.lsp.completion.g<tab> -> vim.lsp.completion.get
+ ok(vim.tbl_contains(fn.getcompletion('lua vim.lsp.completion.g', 'cmdline'), 'get'))
+ end)
end)
it('cmdline completion supports various string options', function()
diff --git a/test/functional/lua/command_line_completion_spec.lua b/test/functional/lua/command_line_completion_spec.lua
index 7dac7448e9..ee3d0325e1 100644
--- a/test/functional/lua/command_line_completion_spec.lua
+++ b/test/functional/lua/command_line_completion_spec.lua
@@ -24,6 +24,23 @@ describe('nlua_expand_pat', function()
it('returns empty table when nothing matches', function()
eq({ {}, 0 }, get_completions('foo', { bar = true }))
+
+ -- can access non-exist field
+ for _, m in ipairs {
+ 'vim.',
+ 'vim.lsp.',
+ 'vim.treesitter.',
+ 'vim.deepcopy.',
+ 'vim.fn.',
+ 'vim.api.',
+ 'vim.o.',
+ 'vim.b.',
+ } do
+ eq({ {}, m:len() }, get_completions(m .. 'foo'))
+ eq({ {}, 0 }, get_completions(m .. 'foo.'))
+ eq({ {}, 0 }, get_completions(m .. 'foo.bar'))
+ eq({ {}, 0 }, get_completions(m .. 'foo.bar.'))
+ end
end)
it('returns nice completions with function call prefix', function()
@@ -99,12 +116,28 @@ describe('nlua_expand_pat', function()
it('with lazy submodules of "vim" global', function()
eq({ { 'inspect', 'inspect_pos' }, 4 }, get_completions('vim.inspec'))
-
eq({ { 'treesitter' }, 4 }, get_completions('vim.treesi'))
-
+ eq({ { 'dev' }, 15 }, get_completions('vim.treesitter.de'))
+ eq({ { 'edit_query' }, 19 }, get_completions('vim.treesitter.dev.edit_'))
eq({ { 'set' }, 11 }, get_completions('vim.keymap.se'))
end)
+ it('include keys in mt.__index and ._submodules', function()
+ eq(
+ { { 'bar1', 'bar2', 'bar3' }, 4 },
+ exec_lua(function() -- metatable cannot be serialized
+ return {
+ vim._expand_pat('foo.', {
+ foo = setmetatable(
+ { bar1 = true, _submodules = { bar2 = true } },
+ { __index = { bar3 = true } }
+ ),
+ }),
+ }
+ end)
+ )
+ end)
+
it('excludes private fields after "."', function()
eq(
{ { 'bar' }, 4 },