mirror of
https://github.com/neovim/neovim
synced 2025-07-16 09:11:51 +00:00
vim-patch:9.1.1475: completion: regression when "nearest" in 'completeopt' (#34607)
Problem: completion: regression when "nearest" in 'completeopt'
Solution: fix compare function (Girish Palya)
closes: vim/vim#17577
cd68f21f60
Co-authored-by: Girish Palya <girishji@gmail.com>
This commit is contained in:
@ -1330,7 +1330,7 @@ static int cp_compare_nearest(const void *a, const void *b)
|
||||
{
|
||||
int score_a = ((compl_T *)a)->cp_score;
|
||||
int score_b = ((compl_T *)b)->cp_score;
|
||||
if (score_a < 0 || score_b < 0) {
|
||||
if (score_a == 0 || score_b == 0) {
|
||||
return 0;
|
||||
}
|
||||
return (score_a > score_b) ? 1 : (score_a < score_b) ? -1 : 0;
|
||||
|
@ -4573,6 +4573,22 @@ func Test_nearest_cpt_option()
|
||||
exe "normal! of\<c-n>\<c-r>=PrintMenuWords()\<cr>"
|
||||
call assert_equal('f{''matches'': [''foo1'', ''foo3'', ''foo2''], ''selected'': -1}', getline(2))
|
||||
|
||||
" Multiple sources
|
||||
func F1(findstart, base)
|
||||
if a:findstart
|
||||
return col('.') - 1
|
||||
endif
|
||||
return ['foo4', 'foo5']
|
||||
endfunc
|
||||
%d
|
||||
set complete+=FF1
|
||||
call setline(1, ["foo1", "foo2", "bar1", "foo3"])
|
||||
exe "normal! 2jof\<c-n>\<c-r>=PrintMenuWords()\<cr>"
|
||||
call assert_equal('f{''matches'': [''foo3'', ''foo2'', ''foo1'', ''foo4'', ''foo5''],
|
||||
\ ''selected'': -1}', getline(4))
|
||||
set complete-=FF1
|
||||
delfunc F1
|
||||
|
||||
set completeopt=menu,longest,nearest
|
||||
%d
|
||||
call setline(1, ["fo", "foo", "foobar", "foobarbaz"])
|
||||
|
Reference in New Issue
Block a user