Patch 8.2.1872
Problem:    Matchfuzzy() does not prefer sequential matches.
Solution:   Give sequential matches a higher bonus. (Christian Brabandt,
            closes #7140)
Files:      src/search.c, src/testdir/test_matchfuzzy.vim


*** ../vim-8.2.1871/src/search.c        2020-10-11 20:44:10.873134571 +0200
--- src/search.c        2020-10-20 19:00:37.230400193 +0200
***************
*** 4252,4259 ****
      list_T    *lmatchpos;
  } fuzzyItem_T;
  
! // bonus for adjacent matches
! #define SEQUENTIAL_BONUS 15
  // bonus if match occurs after a separator
  #define SEPARATOR_BONUS 30
  // bonus if match is uppercase and prev is lower
--- 4252,4260 ----
      list_T    *lmatchpos;
  } fuzzyItem_T;
  
! // bonus for adjacent matches; this is higher than SEPARATOR_BONUS so that
! // matching a whole word is preferred.
! #define SEQUENTIAL_BONUS 40
  // bonus if match occurs after a separator
  #define SEPARATOR_BONUS 30
  // bonus if match is uppercase and prev is lower
*** ../vim-8.2.1871/src/testdir/test_matchfuzzy.vim     2020-09-22 
20:33:30.437223175 +0200
--- src/testdir/test_matchfuzzy.vim     2020-10-20 18:59:11.034557974 +0200
***************
*** 18,24 ****
    call assert_equal(['aabbaa', 'aaabbbaaa', 'aaaabbbbaaaa', 'aba'], 
matchfuzzy(['aba', 'aabbaa', 'aaabbbaaa', 'aaaabbbbaaaa'], 'aa'))
    call assert_equal(['one'], matchfuzzy(['one', 'two'], 'one'))
    call assert_equal(['oneTwo', 'onetwo'], matchfuzzy(['onetwo', 'oneTwo'], 
'oneTwo'))
!   call assert_equal(['one_two', 'onetwo'], matchfuzzy(['onetwo', 'one_two'], 
'oneTwo'))
    call assert_equal(['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'], 
matchfuzzy(['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'], 'aa'))
    call assert_equal(256, matchfuzzy([repeat('a', 256)], repeat('a', 
256))[0]->len())
    call assert_equal([], matchfuzzy([repeat('a', 300)], repeat('a', 257)))
--- 18,24 ----
    call assert_equal(['aabbaa', 'aaabbbaaa', 'aaaabbbbaaaa', 'aba'], 
matchfuzzy(['aba', 'aabbaa', 'aaabbbaaa', 'aaaabbbbaaaa'], 'aa'))
    call assert_equal(['one'], matchfuzzy(['one', 'two'], 'one'))
    call assert_equal(['oneTwo', 'onetwo'], matchfuzzy(['onetwo', 'oneTwo'], 
'oneTwo'))
!   call assert_equal(['onetwo', 'one_two'], matchfuzzy(['onetwo', 'one_two'], 
'oneTwo'))
    call assert_equal(['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'], 
matchfuzzy(['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'], 'aa'))
    call assert_equal(256, matchfuzzy([repeat('a', 256)], repeat('a', 
256))[0]->len())
    call assert_equal([], matchfuzzy([repeat('a', 300)], repeat('a', 257)))
***************
*** 27,33 ****
    " preference for camel case match
    call assert_equal(['oneTwo', 'onetwo'], ['onetwo', 
'oneTwo']->matchfuzzy('onetwo'))
    " preference for match after a separator (_ or space)
!   call assert_equal(['one_two', 'one two', 'onetwo'], ['onetwo', 'one_two', 
'one two']->matchfuzzy('onetwo'))
    " preference for leading letter match
    call assert_equal(['onetwo', 'xonetwo'], ['xonetwo', 
'onetwo']->matchfuzzy('onetwo'))
    " preference for sequential match
--- 27,37 ----
    " preference for camel case match
    call assert_equal(['oneTwo', 'onetwo'], ['onetwo', 
'oneTwo']->matchfuzzy('onetwo'))
    " preference for match after a separator (_ or space)
!   if has("win32")
!     call assert_equal(['onetwo', 'one two', 'one_two'], ['onetwo', 'one_two', 
'one two']->matchfuzzy('onetwo'))
!   else
!     call assert_equal(['onetwo', 'one_two', 'one two'], ['onetwo', 'one_two', 
'one two']->matchfuzzy('onetwo'))
!   endif
    " preference for leading letter match
    call assert_equal(['onetwo', 'xonetwo'], ['xonetwo', 
'onetwo']->matchfuzzy('onetwo'))
    " preference for sequential match
***************
*** 36,41 ****
--- 40,47 ----
    call assert_equal(['xonetwo', 'xxonetwo'], ['xxonetwo', 
'xonetwo']->matchfuzzy('onetwo'))
    " total non-matching letter(s) penalty
    call assert_equal(['one', 'onex', 'onexx'], ['onexx', 'one', 
'onex']->matchfuzzy('one'))
+   " prefer complete matches over separator matches
+   call assert_equal(['.vim/vimrc', '.vim/vimrc_colors', '.vim/v_i_m_r_c'], 
['.vim/vimrc', '.vim/vimrc_colors', '.vim/v_i_m_r_c']->matchfuzzy('vimrc'))
  
    %bw!
    eval ['somebuf', 'anotherone', 'needle', 'yetanotherone']->map({_, v -> 
bufadd(v) + bufload(v)})
***************
*** 133,141 ****
    " preference for camel case match
    call assert_equal(['oneĄwo', 'oneąwo'],
          \ ['oneąwo', 'oneĄwo']->matchfuzzy('oneąwo'))
!   " preference for match after a separator (_ or space)
!   call assert_equal(['ⅠⅡa_bㄟㄠ', 'ⅠⅡa bㄟㄠ', 'ⅠⅡabㄟㄠ'],
!         \ ['ⅠⅡabㄟㄠ', 'ⅠⅡa_bㄟㄠ', 'ⅠⅡa bㄟㄠ']->matchfuzzy('ⅠⅡabㄟㄠ'))
    " preference for leading letter match
    call assert_equal(['ŗŝţũŵż', 'xŗŝţũŵż'],
          \ ['xŗŝţũŵż', 'ŗŝţũŵż']->matchfuzzy('ŗŝţũŵż'))
--- 139,154 ----
    " preference for camel case match
    call assert_equal(['oneĄwo', 'oneąwo'],
          \ ['oneąwo', 'oneĄwo']->matchfuzzy('oneąwo'))
!   " preference for complete match then match after separator (_ or space)
!   if has("win32")
!     " order is different between Windows and Unix :(
!     " It's important that the complete match is first
!     call assert_equal(['ⅠⅡabㄟㄠ', 'ⅠⅡa bㄟㄠ', 'ⅠⅡa_bㄟㄠ'],
!           \ ['ⅠⅡabㄟㄠ', 'ⅠⅡa_bㄟㄠ', 'ⅠⅡa bㄟㄠ']->matchfuzzy('ⅠⅡabㄟㄠ'))
!   else
!     call assert_equal(['ⅠⅡabㄟㄠ'] + sort(['ⅠⅡa_bㄟㄠ', 'ⅠⅡa bㄟㄠ']),
!           \ ['ⅠⅡabㄟㄠ', 'ⅠⅡa bㄟㄠ', 'ⅠⅡa_bㄟㄠ']->matchfuzzy('ⅠⅡabㄟㄠ'))
!   endif
    " preference for leading letter match
    call assert_equal(['ŗŝţũŵż', 'xŗŝţũŵż'],
          \ ['xŗŝţũŵż', 'ŗŝţũŵż']->matchfuzzy('ŗŝţũŵż'))
*** ../vim-8.2.1871/src/version.c       2020-10-20 14:59:08.693104225 +0200
--- src/version.c       2020-10-20 19:01:19.974318003 +0200
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     1872,
  /**/

-- 
>From "know your smileys":
 :-| :-|   Deja' vu!

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202010201701.09KH1tOv1447054%40masaka.moolenaar.net.

Raspunde prin e-mail lui