aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael <glephunter@gmail.com>2023-11-18 12:26:52 +0800
committerGitHub <noreply@github.com>2023-11-18 12:26:52 +0800
commitcdc8bacc7945da816738e330555fa85d3ffffd56 (patch)
treebb7dd7d69754a37821b2bb3e72250e19266795f0
parentabac33605fb50d55fc796229f0812c246bf635d2 (diff)
downloadrneovim-cdc8bacc7945da816738e330555fa85d3ffffd56.tar.gz
rneovim-cdc8bacc7945da816738e330555fa85d3ffffd56.tar.bz2
rneovim-cdc8bacc7945da816738e330555fa85d3ffffd56.zip
fix(completion): filter results with complete+=f (#26029)
-rw-r--r--src/nvim/insexpand.c20
-rw-r--r--test/functional/editor/completion_spec.lua27
2 files changed, 19 insertions, 28 deletions
diff --git a/src/nvim/insexpand.c b/src/nvim/insexpand.c
index adbd2a5315..c2bec8b045 100644
--- a/src/nvim/insexpand.c
+++ b/src/nvim/insexpand.c
@@ -3325,24 +3325,10 @@ static void get_next_bufname_token(void)
{
FOR_ALL_BUFFERS(b) {
if (b->b_p_bl && b->b_sfname != NULL) {
- char *start = get_past_head(b->b_sfname);
- char *current = start;
- char *p = (char *)path_next_component(start);
- while (true) {
- int len = (int)(p - current) - (*p == NUL ? 0 : 1);
- // treat . as a separator, unless it is the first char in a filename
- char *dot = strchr(current, '.');
- if (dot && *p == NUL && *current != '.') {
- len = (int)(dot - current);
- p = dot + 1;
- }
- ins_compl_add(current, len, NULL, NULL, false, NULL, 0,
+ char *tail = path_tail(b->b_sfname);
+ if (strncmp(tail, compl_orig_text, strlen(compl_orig_text)) == 0) {
+ ins_compl_add(tail, (int)strlen(tail), NULL, NULL, false, NULL, 0,
p_ic ? CP_ICASE : 0, false);
- if (*p == NUL) {
- break;
- }
- current = p;
- p = (char *)path_next_component(p);
}
}
}
diff --git a/test/functional/editor/completion_spec.lua b/test/functional/editor/completion_spec.lua
index 51f30543e3..cbaf401f06 100644
--- a/test/functional/editor/completion_spec.lua
+++ b/test/functional/editor/completion_spec.lua
@@ -1231,25 +1231,30 @@ describe('completion', function()
it('complete with f flag #25598', function()
screen:try_resize(20, 9)
- local bufname = 'foo/bar.txt'
- local hidden = 'fooA/.hidden'
- if helpers.is_os('win') then
- bufname = 'C:\\foo\\bar.txt'
- hidden = 'C:\\fooA\\.hidden'
- end
- command('set complete+=f | edit '..bufname..' | edit '..hidden..' | enew')
+ command('set complete+=f | edit foo | edit bar |edit foa |edit .hidden')
feed('i<C-n>')
-
screen:expect{grid=[[
foo^ |
{2:foo }{0: }|
{1:bar }{0: }|
- {1:txt }{0: }|
- {1:fooA }{0: }|
+ {1:foa }{0: }|
{1:.hidden }{0: }|
{0:~ }|
{0:~ }|
- {3:-- }{4:match 1 of 5} |
+ {0:~ }|
+ {3:-- }{4:match 1 of 4} |
+ ]]}
+ feed('<Esc>ccf<C-n>')
+ screen:expect{grid=[[
+ foo^ |
+ {2:foo }{0: }|
+ {1:foa }{0: }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {0:~ }|
+ {3:-- }{4:match 1 of 2} |
]]}
end)
end)