aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/_editor.lua2
-rw-r--r--test/functional/lua/command_line_completion_spec.lua24
2 files changed, 26 insertions, 0 deletions
diff --git a/runtime/lua/vim/_editor.lua b/runtime/lua/vim/_editor.lua
index 94168bea5d..975f3fea4a 100644
--- a/runtime/lua/vim/_editor.lua
+++ b/runtime/lua/vim/_editor.lua
@@ -913,6 +913,7 @@ function vim._expand_pat(pat, env)
local match_part = string.sub(last_part, search_index, #last_part)
local prefix_match_pat = string.sub(pat, 1, #pat - #match_part) or ''
+ local last_char = string.sub(last_part, #last_part)
local final_env = env
@@ -971,6 +972,7 @@ function vim._expand_pat(pat, env)
type(k) == 'string'
and string.sub(k, 1, string.len(match_part)) == match_part
and k:match('^[_%w]+$') ~= nil -- filter out invalid identifiers for field, e.g. 'foo#bar'
+ and (last_char ~= '.' or string.sub(k, 1, 1) ~= '_') -- don't include private fields after '.'
then
keys[k] = true
end
diff --git a/test/functional/lua/command_line_completion_spec.lua b/test/functional/lua/command_line_completion_spec.lua
index f8786a45bb..ae0ab19d6b 100644
--- a/test/functional/lua/command_line_completion_spec.lua
+++ b/test/functional/lua/command_line_completion_spec.lua
@@ -107,6 +107,30 @@ describe('nlua_expand_pat', function()
eq({ { 'set' }, 11 }, get_completions('vim.keymap.se'))
end)
+ it('should exclude private fields after "."', function()
+ eq(
+ { { 'bar' }, 4 },
+ get_completions('foo.', {
+ foo = {
+ _bar = true,
+ bar = true,
+ },
+ })
+ )
+ end)
+
+ it('should include private fields after "._"', function()
+ eq(
+ { { '_bar' }, 4 },
+ get_completions('foo._', {
+ foo = {
+ _bar = true,
+ bar = true,
+ },
+ })
+ )
+ end)
+
it('should be able to interpolate globals', function()
eq(
{ {