0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.1.0716: get warning message when 'completefunc' returns nothing

Problem:    Get warning message when 'completefunc' returns nothing.
Solution:   Allow for returning v:none to suppress the warning message.
            (Yasuhiro Matsumoto, closes #3789)
This commit is contained in:
Bram Moolenaar
2019-01-11 13:02:23 +01:00
parent 6f7e555f74
commit cee9bc2e3d
4 changed files with 62 additions and 22 deletions

View File

@@ -1076,6 +1076,10 @@ that contains the List. The Dict can have these items:
The only value currently recognized is "always", the
effect is that the function is called whenever the
leading text is changed.
If you want to suppress the warning message for an empty result, return
v:none. This is useful to implement asynchronous completion with complete().
Other items are ignored.
For acting upon end of completion, see the |CompleteDone| autocommand event.

View File

@@ -150,6 +150,7 @@ static int compl_cont_mode = 0;
static expand_T compl_xp;
static int compl_opt_refresh_always = FALSE;
static int compl_opt_suppress_empty = FALSE;
static void ins_ctrl_x(void);
static int has_compl_option(int dict_opt);
@@ -4247,8 +4248,12 @@ expand_by_function(
case VAR_DICT:
matchdict = rettv.vval.v_dict;
break;
case VAR_SPECIAL:
if (rettv.vval.v_number == VVAL_NONE)
compl_opt_suppress_empty = TRUE;
// FALLTHROUGH
default:
/* TODO: Give error message? */
// TODO: Give error message?
clear_tv(&rettv);
break;
}
@@ -5611,6 +5616,7 @@ ins_complete(int c, int enable_pum)
* completion.
*/
compl_opt_refresh_always = FALSE;
compl_opt_suppress_empty = FALSE;
if (col < 0)
col = curs_col;
@@ -5860,7 +5866,9 @@ ins_complete(int c, int enable_pum)
}
}
/* Show a message about what (completion) mode we're in. */
// Show a message about what (completion) mode we're in.
if (!compl_opt_suppress_empty)
{
showmode();
if (!shortmess(SHM_COMPLETIONMENU))
{
@@ -5872,7 +5880,8 @@ ins_complete(int c, int enable_pum)
? HL_ATTR(edit_submode_highl) : 0);
}
else
msg_clr_cmdline(); /* necessary for "noshowmode" */
msg_clr_cmdline(); // necessary for "noshowmode"
}
}
/* Show the popup menu, unless we got interrupted. */

View File

@@ -142,6 +142,14 @@ func Test_completefunc_args()
delfunc CompleteFunc
endfunc
func s:CompleteDone_CompleteFuncNone( findstart, base )
if a:findstart
return 0
endif
return v:none
endfunc
func s:CompleteDone_CompleteFuncDict( findstart, base )
if a:findstart
return 0
@@ -161,6 +169,10 @@ func s:CompleteDone_CompleteFuncDict( findstart, base )
\ }
endfunc
func s:CompleteDone_CheckCompletedItemNone()
let s:called_completedone = 1
endfunc
func s:CompleteDone_CheckCompletedItemDict()
call assert_equal( 'aword', v:completed_item[ 'word' ] )
call assert_equal( 'wrd', v:completed_item[ 'abbr' ] )
@@ -172,21 +184,34 @@ func s:CompleteDone_CheckCompletedItemDict()
let s:called_completedone = 1
endfunc
function Test_CompleteDoneDict()
func Test_CompleteDoneNone()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemNone()
set completefunc=<SID>CompleteDone_CompleteFuncNone
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
call assert_true(s:called_completedone)
let s:called_completedone = 0
au! CompleteDone
endfunc
func Test_CompleteDoneDict()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDict()
set completefunc=<SID>CompleteDone_CompleteFuncDict
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
call assert_equal( 'test', v:completed_item[ 'user_data' ] )
call assert_true( s:called_completedone )
call assert_equal('test', v:completed_item[ 'user_data' ])
call assert_true(s:called_completedone)
let s:called_completedone = 0
au! CompleteDone
endfunc
func s:CompleteDone_CompleteFuncDictNoUserData( findstart, base )
func s:CompleteDone_CompleteFuncDictNoUserData(findstart, base)
if a:findstart
return 0
endif
@@ -215,21 +240,21 @@ func s:CompleteDone_CheckCompletedItemDictNoUserData()
let s:called_completedone = 1
endfunc
function Test_CompleteDoneDictNoUserData()
func Test_CompleteDoneDictNoUserData()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDictNoUserData()
set completefunc=<SID>CompleteDone_CompleteFuncDictNoUserData
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
call assert_equal( '', v:completed_item[ 'user_data' ] )
call assert_true( s:called_completedone )
call assert_equal('', v:completed_item[ 'user_data' ])
call assert_true(s:called_completedone)
let s:called_completedone = 0
au! CompleteDone
endfunc
func s:CompleteDone_CompleteFuncList( findstart, base )
func s:CompleteDone_CompleteFuncList(findstart, base)
if a:findstart
return 0
endif
@@ -248,15 +273,15 @@ func s:CompleteDone_CheckCompletedItemList()
let s:called_completedone = 1
endfunc
function Test_CompleteDoneList()
func Test_CompleteDoneList()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemList()
set completefunc=<SID>CompleteDone_CompleteFuncList
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
call assert_equal( '', v:completed_item[ 'user_data' ] )
call assert_true( s:called_completedone )
call assert_equal('', v:completed_item[ 'user_data' ])
call assert_true(s:called_completedone)
let s:called_completedone = 0
au! CompleteDone

View File

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