Patch 8.2.4570
Problem:    No command line completion for :profile and :profdel.
Solution:   Implement completion. (Yegappan Lakshmanan, closes #9955)
Files:      src/cmdexpand.c, src/profiler.c, src/testdir/test_cmdline.vim,
            src/testdir/test_profile.vim


*** ../vim-8.2.4569/src/cmdexpand.c     2022-03-14 19:24:41.867926390 +0000
--- src/cmdexpand.c     2022-03-15 10:47:42.332248148 +0000
***************
*** 1606,1612 ****
  static enum
  {
      EXP_BREAKPT_ADD,  // expand ":breakadd" sub-commands
!     EXP_BREAKPT_DEL   // expand ":breakdel" sub-commands
  } breakpt_expand_what;
  
  /*
--- 1606,1613 ----
  static enum
  {
      EXP_BREAKPT_ADD,  // expand ":breakadd" sub-commands
!     EXP_BREAKPT_DEL,  // expand ":breakdel" sub-commands
!     EXP_PROFDEL               // expand ":profdel" sub-commands
  } breakpt_expand_what;
  
  /*
***************
*** 1623,1638 ****
  
      if (cmdidx == CMD_breakadd)
        breakpt_expand_what = EXP_BREAKPT_ADD;
!     else
        breakpt_expand_what = EXP_BREAKPT_DEL;
  
      p = skipwhite(arg);
      if (*p == NUL)
        return NULL;
      subcmd_start = p;
  
!     if (STRNCMP("file ", p, 5) == 0 ||
!           STRNCMP("func ", p, 5) == 0)
      {
        // :breakadd file [lnum] <filename>
        // :breakadd func [lnum] <funcname>
--- 1624,1640 ----
  
      if (cmdidx == CMD_breakadd)
        breakpt_expand_what = EXP_BREAKPT_ADD;
!     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)
      {
        // :breakadd file [lnum] <filename>
        // :breakadd func [lnum] <funcname>
***************
*** 2025,2030 ****
--- 2027,2033 ----
  
  #ifdef FEAT_EVAL
        case CMD_breakadd:
+       case CMD_profdel:
        case CMD_breakdel:
            return set_context_in_breakadd_cmd(xp, arg, cmdidx);
  #endif
***************
*** 2432,2444 ****
  
      if (idx >=0 && idx <= 3)
      {
        if (breakpt_expand_what == EXP_BREAKPT_ADD)
            return (char_u *)opts[idx];
!       else
        {
            if (idx <= 2)
                return (char_u *)opts[idx + 1];
        }
      }
      return NULL;
  }
--- 2435,2455 ----
  
      if (idx >=0 && idx <= 3)
      {
+       // breakadd {expr, file, func, here}
        if (breakpt_expand_what == EXP_BREAKPT_ADD)
            return (char_u *)opts[idx];
!       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;
  }
*** ../vim-8.2.4569/src/profiler.c      2022-01-05 16:08:59.524426437 +0000
--- src/profiler.c      2022-03-15 10:47:42.332248148 +0000
***************
*** 376,382 ****
      {
      case PEXP_SUBCMD:
        return (char_u *)pexpand_cmds[idx];
-     // case PEXP_FUNC: TODO
      default:
        return NULL;
      }
--- 376,381 ----
***************
*** 399,412 ****
      if (*end_subcmd == NUL)
        return;
  
!     if (end_subcmd - arg == 5 && STRNCMP(arg, "start", 5) == 0)
      {
        xp->xp_context = EXPAND_FILES;
        xp->xp_pattern = skipwhite(end_subcmd);
        return;
      }
  
-     // TODO: expand function names after "func"
      xp->xp_context = EXPAND_NOTHING;
  }
  
--- 398,417 ----
      if (*end_subcmd == NUL)
        return;
  
!     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;
+     }
  
      xp->xp_context = EXPAND_NOTHING;
  }
  
*** ../vim-8.2.4569/src/testdir/test_cmdline.vim        2022-03-14 
19:24:41.867926390 +0000
--- src/testdir/test_cmdline.vim        2022-03-15 10:47:42.332248148 +0000
***************
*** 3158,3164 ****
    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
--- 3158,3163 ----
*** ../vim-8.2.4569/src/testdir/test_profile.vim        2022-01-29 
21:45:30.485921485 +0000
--- src/testdir/test_profile.vim        2022-03-15 10:47:42.332248148 +0000
***************
*** 434,439 ****
--- 434,480 ----
  
    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()
*** ../vim-8.2.4569/src/version.c       2022-03-15 10:22:35.067373154 +0000
--- src/version.c       2022-03-15 10:50:12.819872759 +0000
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     4570,
  /**/

-- 
XML is a nice language for computers.  Not for humans.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20220315105407.B5B971C42FC%40moolenaar.net.

Raspunde prin e-mail lui