patch 9.1.1053: "nosort" enables fuzzy filtering even if "fuzzy" isn't in 'completeopt'
Commit: https://github.com/vim/vim/commit/d65aa1bbdb808ef8fecde6df240c48cc39a52a8e Author: zeertzjq <zeert...@outlook.com> Date: Sat Jan 25 15:29:03 2025 +0100 patch 9.1.1053: "nosort" enables fuzzy filtering even if "fuzzy" isn't in 'completeopt' Problem: "nosort" enables fuzzy filtering even if "fuzzy" isn't in 'completeopt' (after v9.1.1049) Solution: Only enable fuzzy filtering when "fuzzy" is in 'completeopt'. (zeertzjq) closes: #16510 Signed-off-by: zeertzjq <zeert...@outlook.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/insexpand.c b/src/insexpand.c index 1a71f63fb..bf8f215e9 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -1264,8 +1264,8 @@ ins_compl_build_pum(void) int max_fuzzy_score = 0; unsigned int cur_cot_flags = get_cot_flags(); int compl_no_select = (cur_cot_flags & COT_NOSELECT) != 0; - int fuzzy_nosort = (cur_cot_flags & COT_NOSORT) != 0; - int fuzzy_filter = fuzzy_nosort || (cur_cot_flags & COT_FUZZY) != 0; + int fuzzy_filter = (cur_cot_flags & COT_FUZZY) != 0; + int fuzzy_sort = fuzzy_filter && !(cur_cot_flags & COT_NOSORT); compl_T *match_head = NULL; compl_T *match_tail = NULL; compl_T *match_next = NULL; @@ -1328,14 +1328,14 @@ ins_compl_build_pum(void) shown_compl = compl; // Update the maximum fuzzy score and the shown match // if the current item's score is higher - if (!fuzzy_nosort && compl->cp_score > max_fuzzy_score) + if (fuzzy_sort && compl->cp_score > max_fuzzy_score) { did_find_shown_match = TRUE; max_fuzzy_score = compl->cp_score; if (!compl_no_select) compl_shown_match = compl; } - else if (fuzzy_nosort && i == 0 && !compl_no_select) + else if (!fuzzy_sort && i == 0 && !compl_no_select) compl_shown_match = shown_compl; if (!shown_match_ok && compl == compl_shown_match && !compl_no_select) @@ -1392,7 +1392,7 @@ ins_compl_build_pum(void) compl = match_next; } - if (fuzzy_filter && !fuzzy_nosort && compl_leader.string != NULL && compl_leader.length > 0) + if (fuzzy_sort && compl_leader.string != NULL && compl_leader.length > 0) { for (i = 0; i < compl_match_arraysize; i++) compl_match_array[i].pum_idx = i; diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 75ccb673b..466e358cf 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -2857,8 +2857,8 @@ func Test_complete_fuzzy_match() " test case for nosort option set cot=menuone,menu,noinsert,fuzzy,nosort - " fooBaz" should have a higher score when the leader is "fb". - " With `nosort`, "foobar" should still be shown first in the popup menu. + " "fooBaz" should have a higher score when the leader is "fb". + " With "nosort", "foobar" should still be shown first in the popup menu. call feedkeys("S\<C-x>\<C-o>fb", 'tx') call assert_equal('foobar', g:word) call feedkeys("S\<C-x>\<C-o>好", 'tx') @@ -2870,6 +2870,11 @@ func Test_complete_fuzzy_match() call feedkeys("S\<C-x>\<C-o>好\<C-N>", 'tx') call assert_equal('你好吗', g:word) + " "nosort" shouldn't enable fuzzy filtering when "fuzzy" isn't present. + set cot=menuone,noinsert,nosort + call feedkeys("S\<C-x>\<C-o>fooB\<C-Y>", 'tx') + call assert_equal('fooBaz', getline('.')) + " clean up set omnifunc= bw! diff --git a/src/version.c b/src/version.c index 66e9d1079..75fbffc74 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1053, /**/ 1052, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tbhPD-000jSl-T4%40256bit.org.