0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 8.2.4398: some command completion functions are too long

Problem:    Some command completion functions are too long.
Solution:   Refactor code into separate functions.  Add a few more tests.
            (Yegappan Lakshmanan, closes #9785)
This commit is contained in:
Yegappan Lakshmanan
2022-02-16 12:44:29 +00:00
committed by Bram Moolenaar
parent 34f8117dec
commit b31aec3b93
6 changed files with 491 additions and 346 deletions

View File

@@ -231,6 +231,9 @@ find_ucmd(
return p;
}
/*
* Set completion context for :command
*/
char_u *
set_context_in_user_cmd(expand_T *xp, char_u *arg_in)
{
@@ -292,6 +295,56 @@ set_context_in_user_cmd(expand_T *xp, char_u *arg_in)
return skipwhite(p);
}
/*
* Set the completion context for the argument of a user defined command.
*/
char_u *
set_context_in_user_cmdarg(
char_u *cmd UNUSED,
char_u *arg,
long argt,
int compl,
expand_T *xp,
int forceit)
{
char_u *p;
if (compl == EXPAND_NOTHING)
return NULL;
if (argt & EX_XFILE)
{
// EX_XFILE: file names are handled before this call
xp->xp_context = compl;
return NULL;
}
#ifdef FEAT_MENU
if (compl == EXPAND_MENUS)
return set_context_in_menu_cmd(xp, cmd, arg, forceit);
#endif
if (compl == EXPAND_COMMANDS)
return arg;
if (compl == EXPAND_MAPPINGS)
return set_context_in_map_cmd(xp, (char_u *)"map", arg, forceit, FALSE,
FALSE, CMD_map);
// Find start of last argument.
p = arg;
while (*p)
{
if (*p == ' ')
// argument starts after a space
arg = p + 1;
else if (*p == '\\' && *(p + 1) != NUL)
++p; // skip over escaped character
MB_PTR_ADV(p);
}
xp->xp_pattern = arg;
xp->xp_context = compl;
return NULL;
}
char_u *
expand_user_command_name(int idx)
{