diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-01-17 12:24:24 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-01-17 14:01:26 +0800 |
commit | 245522db1eb294007066878492d19295a5e91f04 (patch) | |
tree | a9b1819f56c76047d2946ba2e5e0332affb928ad | |
parent | bdd14d03c7711e11c00cf81b417e869ecd10a3b0 (diff) | |
download | rneovim-245522db1eb294007066878492d19295a5e91f04.tar.gz rneovim-245522db1eb294007066878492d19295a5e91f04.tar.bz2 rneovim-245522db1eb294007066878492d19295a5e91f04.zip |
vim-patch:8.2.4478: crash when using fuzzy completion
Problem: Crash when using fuzzy completion.
Solution: Temporary fix: put back regexp. (closes vim/vim#9852, closes vim/vim#9851)
https://github.com/vim/vim/commit/00333cb3b341499df8729b9345f0bbad968cda0b
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
-rw-r--r-- | src/nvim/cmdexpand.c | 20 | ||||
-rw-r--r-- | src/nvim/testdir/test_cmdline.vim | 4 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/nvim/cmdexpand.c b/src/nvim/cmdexpand.c index 2f2545412b..f6b5127268 100644 --- a/src/nvim/cmdexpand.c +++ b/src/nvim/cmdexpand.c @@ -2636,6 +2636,8 @@ static int ExpandFromContext(expand_T *xp, char *pat, char ***matches, int *numM regmatch_T regmatch = { .rm_ic = false }; int ret; int flags = map_wildopts_to_ewflags(options); + const bool fuzzy = cmdline_fuzzy_complete(pat) + && cmdline_fuzzy_completion_supported(xp); if (xp->xp_context == EXPAND_FILES || xp->xp_context == EXPAND_DIRECTORIES @@ -2716,13 +2718,15 @@ static int ExpandFromContext(expand_T *xp, char *pat, char ***matches, int *numM return nlua_expand_pat(xp, pat, numMatches, matches); } - regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0); - if (regmatch.regprog == NULL) { - return FAIL; - } + if (!fuzzy) { + regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0); + if (regmatch.regprog == NULL) { + return FAIL; + } - // set ignore-case according to p_ic, p_scs and pat - regmatch.rm_ic = ignorecase(pat); + // set ignore-case according to p_ic, p_scs and pat + regmatch.rm_ic = ignorecase(pat); + } if (xp->xp_context == EXPAND_SETTINGS || xp->xp_context == EXPAND_BOOL_SETTINGS) { @@ -2735,7 +2739,9 @@ static int ExpandFromContext(expand_T *xp, char *pat, char ***matches, int *numM ret = ExpandOther(pat, xp, ®match, matches, numMatches); } - vim_regfree(regmatch.regprog); + if (!fuzzy) { + vim_regfree(regmatch.regprog); + } xfree(tofree); return ret; diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim index 16d99cf4c5..4c59a8ab7c 100644 --- a/src/nvim/testdir/test_cmdline.vim +++ b/src/nvim/testdir/test_cmdline.vim @@ -2869,6 +2869,10 @@ func Test_wildoptions_fuzzy() call assert_equal('"mapclear <buffer>', @:) " map name fuzzy completion - NOT supported + " test regex completion works + set wildoptions=fuzzy + call feedkeys(":cnoremap <ex\<Tab> <esc> \<Tab>\<C-B>\"\<CR>", 'tx') + call assert_equal("\"cnoremap <expr> <esc> \<Tab>", @:) " menu name fuzzy completion if has('gui_running') |