diff options
author | Raphael <glephunter@gmail.com> | 2023-11-18 12:26:52 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-18 12:26:52 +0800 |
commit | cdc8bacc7945da816738e330555fa85d3ffffd56 (patch) | |
tree | bb7dd7d69754a37821b2bb3e72250e19266795f0 | |
parent | abac33605fb50d55fc796229f0812c246bf635d2 (diff) | |
download | rneovim-cdc8bacc7945da816738e330555fa85d3ffffd56.tar.gz rneovim-cdc8bacc7945da816738e330555fa85d3ffffd56.tar.bz2 rneovim-cdc8bacc7945da816738e330555fa85d3ffffd56.zip |
fix(completion): filter results with complete+=f (#26029)
-rw-r--r-- | src/nvim/insexpand.c | 20 | ||||
-rw-r--r-- | test/functional/editor/completion_spec.lua | 27 |
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) |