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:
@@ -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.
|
||||
|
15
src/edit.c
15
src/edit.c
@@ -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. */
|
||||
|
@@ -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
|
||||
|
@@ -799,6 +799,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
716,
|
||||
/**/
|
||||
715,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user