1
0
forked from aniani/vim

patch 8.2.4608: getcompletion() does not work when 'wildoptions' has "fuzzy"

Problem:    getcompletion() does not work properly when 'wildoptions
            contains "fuzzy".
Solution:   Do not use addstar(). (Yegappan Lakshmanan, closes #9992,
            closes #9986)
This commit is contained in:
Yegappan Lakshmanan 2022-03-22 16:06:31 +00:00 committed by Bram Moolenaar
parent 35dc17634d
commit e7dd0fa2c6
4 changed files with 28 additions and 1 deletions

View File

@ -3273,6 +3273,10 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
is applied to filter the results. Otherwise all the matches is applied to filter the results. Otherwise all the matches
are returned. The 'wildignorecase' option always applies. are returned. The 'wildignorecase' option always applies.
If the 'wildoptions' option contains 'fuzzy', then fuzzy
matching is used to get the completion matches. Otherwise
regular expression matching is used.
If {type} is "cmdline", then the |cmdline-completion| result is If {type} is "cmdline", then the |cmdline-completion| result is
returned. For example, to complete the possible values after returned. For example, to complete the possible values after
a ":call" command: > a ":call" command: >

View File

@ -3707,7 +3707,12 @@ f_getcompletion(typval_T *argvars, typval_T *rettv)
# endif # endif
} }
pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context); if (cmdline_fuzzy_completion_supported(&xpc))
// when fuzzy matching, don't modify the search string
pat = vim_strsave(xpc.xp_pattern);
else
pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context);
if ((rettv_list_alloc(rettv) != FAIL) && (pat != NULL)) if ((rettv_list_alloc(rettv) != FAIL) && (pat != NULL))
{ {
int i; int i;

View File

@ -552,6 +552,22 @@ func Test_getcompletion()
call assert_fails('call getcompletion("abc", [])', 'E475:') call assert_fails('call getcompletion("abc", [])', 'E475:')
endfunc endfunc
" Test for getcompletion() with "fuzzy" in 'wildoptions'
func Test_getcompletion_wildoptions()
let save_wildoptions = &wildoptions
set wildoptions&
let l = getcompletion('space', 'option')
call assert_equal([], l)
let l = getcompletion('ier', 'command')
call assert_equal([], l)
set wildoptions=fuzzy
let l = getcompletion('space', 'option')
call assert_true(index(l, 'backspace') >= 0)
let l = getcompletion('ier', 'command')
call assert_true(index(l, 'compiler') >= 0)
let &wildoptions = save_wildoptions
endfunc
func Test_complete_autoload_error() func Test_complete_autoload_error()
let save_rtp = &rtp let save_rtp = &rtp
let lines =<< trim END let lines =<< trim END

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4608,
/**/ /**/
4607, 4607,
/**/ /**/