diff options
author | phanium <91544758+phanen@users.noreply.github.com> | 2025-03-24 20:14:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-24 05:14:22 -0700 |
commit | af4231d4070c8d664b919f5466a827905881ef32 (patch) | |
tree | 8f511f1750b2982af055450a4e8ae7b4b61f7aa0 /test | |
parent | c98260822699bf622b14caffc908a47039deca51 (diff) | |
download | rneovim-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.lua | 7 | ||||
-rw-r--r-- | test/functional/lua/command_line_completion_spec.lua | 37 |
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 }, |