Skip to content

Commit

Permalink
patch 8.2.4570: no command line completion for :profile and :profdel
Browse files Browse the repository at this point in the history
Problem:    No command line completion for :profile and :profdel.
Solution:   Implement completion. (Yegappan Lakshmanan, closes #9955)
  • Loading branch information
yegappan authored and brammool committed Mar 15, 2022
1 parent 977525f commit 1fdf84e
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 9 deletions.
21 changes: 16 additions & 5 deletions src/cmdexpand.c
Expand Up @@ -1606,7 +1606,8 @@ set_context_in_lang_cmd(expand_T *xp, char_u *arg)
static enum
{
EXP_BREAKPT_ADD, // expand ":breakadd" sub-commands
EXP_BREAKPT_DEL // expand ":breakdel" sub-commands
EXP_BREAKPT_DEL, // expand ":breakdel" sub-commands
EXP_PROFDEL // expand ":profdel" sub-commands
} breakpt_expand_what;

/*
Expand All @@ -1623,16 +1624,17 @@ set_context_in_breakadd_cmd(expand_T *xp, char_u *arg, cmdidx_T cmdidx)

if (cmdidx == CMD_breakadd)
breakpt_expand_what = EXP_BREAKPT_ADD;
else
else if (cmdidx == CMD_breakdel)
breakpt_expand_what = EXP_BREAKPT_DEL;
else
breakpt_expand_what = EXP_PROFDEL;

p = skipwhite(arg);
if (*p == NUL)
return NULL;
subcmd_start = p;

if (STRNCMP("file ", p, 5) == 0 ||
STRNCMP("func ", p, 5) == 0)
if (STRNCMP("file ", p, 5) == 0 || STRNCMP("func ", p, 5) == 0)
{
// :breakadd file [lnum] <filename>
// :breakadd func [lnum] <funcname>
Expand Down Expand Up @@ -2025,6 +2027,7 @@ set_context_by_cmdname(

#ifdef FEAT_EVAL
case CMD_breakadd:
case CMD_profdel:
case CMD_breakdel:
return set_context_in_breakadd_cmd(xp, arg, cmdidx);
#endif
Expand Down Expand Up @@ -2432,13 +2435,21 @@ get_breakadd_arg(expand_T *xp UNUSED, int idx)

if (idx >=0 && idx <= 3)
{
// breakadd {expr, file, func, here}
if (breakpt_expand_what == EXP_BREAKPT_ADD)
return (char_u *)opts[idx];
else
else if (breakpt_expand_what == EXP_BREAKPT_DEL)
{
// breakdel {func, file, here}
if (idx <= 2)
return (char_u *)opts[idx + 1];
}
else
{
// profdel {func, file}
if (idx <= 1)
return (char_u *)opts[idx + 1];
}
}
return NULL;
}
Expand Down
11 changes: 8 additions & 3 deletions src/profiler.c
Expand Up @@ -376,7 +376,6 @@ get_profile_name(expand_T *xp UNUSED, int idx)
{
case PEXP_SUBCMD:
return (char_u *)pexpand_cmds[idx];
// case PEXP_FUNC: TODO
default:
return NULL;
}
Expand All @@ -399,14 +398,20 @@ set_context_in_profile_cmd(expand_T *xp, char_u *arg)
if (*end_subcmd == NUL)
return;

if (end_subcmd - arg == 5 && STRNCMP(arg, "start", 5) == 0)
if ((end_subcmd - arg == 5 && STRNCMP(arg, "start", 5) == 0)
|| (end_subcmd - arg == 4 && STRNCMP(arg, "file", 4) == 0))
{
xp->xp_context = EXPAND_FILES;
xp->xp_pattern = skipwhite(end_subcmd);
return;
}
else if (end_subcmd - arg == 4 && STRNCMP(arg, "func", 4) == 0)
{
xp->xp_context = EXPAND_USER_FUNC;
xp->xp_pattern = skipwhite(end_subcmd);
return;
}

// TODO: expand function names after "func"
xp->xp_context = EXPAND_NOTHING;
}

Expand Down
1 change: 0 additions & 1 deletion src/testdir/test_cmdline.vim
Expand Up @@ -3158,7 +3158,6 @@ func Test_cmdline_complete_breakdel()
call assert_equal("\"breakdel here Xtest", @:)
call feedkeys(":breakdel here \<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal("\"breakdel here ", @:)

endfunc

" vim: shiftwidth=2 sts=2 expandtab
41 changes: 41 additions & 0 deletions src/testdir/test_profile.vim
Expand Up @@ -434,6 +434,47 @@ func Test_profile_completion()

call feedkeys(":profile start test_prof\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_match('^"profile start.* test_profile\.vim', @:)

call feedkeys(":profile file test_prof\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_match('"profile file test_profile\.vim', @:)
call feedkeys(":profile file test_prof\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_match('"profile file test_profile\.vim', @:)
call feedkeys(":profile file test_prof \<Tab>\<C-B>\"\<CR>", 'tx')
call assert_match('"profile file test_prof ', @:)
call feedkeys(":profile file X1B2C3\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_match('"profile file X1B2C3', @:)

func Xprof_test()
endfunc
call feedkeys(":profile func Xprof\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profile func Xprof_test', @:)
call feedkeys(":profile func Xprof\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profile func Xprof_test', @:)
call feedkeys(":profile func Xprof \<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profile func Xprof ', @:)
call feedkeys(":profile func X1B2C3\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profile func X1B2C3', @:)

call feedkeys(":profdel \<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel file func', @:)
call feedkeys(":profdel fu\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel func', @:)
call feedkeys(":profdel he\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel he', @:)
call feedkeys(":profdel here \<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel here ', @:)
call feedkeys(":profdel file test_prof\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel file test_profile.vim', @:)
call feedkeys(":profdel file X1B2C3\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel file X1B2C3', @:)
call feedkeys(":profdel func Xprof\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel func Xprof_test', @:)
call feedkeys(":profdel func Xprof_test \<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel func Xprof_test ', @:)
call feedkeys(":profdel func X1B2C3\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"profdel func X1B2C3', @:)

delfunc Xprof_test
endfunc

func Test_profile_errors()
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -750,6 +750,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4570,
/**/
4569,
/**/
Expand Down

0 comments on commit 1fdf84e

Please sign in to comment.