From: zeertzjq Date: Sat, 25 Jan 2025 14:29:03 +0000 (+0100) Subject: patch 9.1.1053: "nosort" enables fuzzy filtering even if "fuzzy" isn't in 'completeopt' X-Git-Tag: v9.1.1053^0 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=d65aa1bbdb808ef8fecde6df240c48cc39a52a8e;p=thirdparty%2Fvim.git 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 Signed-off-by: Christian Brabandt --- diff --git a/src/insexpand.c b/src/insexpand.c index 1a71f63fb1..bf8f215e93 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 75ccb673b2..466e358cf8 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\\fb", 'tx') call assert_equal('foobar', g:word) call feedkeys("S\\好", 'tx') @@ -2870,6 +2870,11 @@ func Test_complete_fuzzy_match() call feedkeys("S\\好\", '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\\fooB\", 'tx') + call assert_equal('fooBaz', getline('.')) + " clean up set omnifunc= bw! diff --git a/src/version.c b/src/version.c index 66e9d1079f..75fbffc744 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, /**/