]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1150: :hi completion may complete to wrong value v9.1.1150
authorYee Cheng Chin <ychin.git@gmail.com>
Tue, 25 Feb 2025 19:41:52 +0000 (20:41 +0100)
committerChristian Brabandt <cb@256bit.org>
Tue, 25 Feb 2025 19:41:52 +0000 (20:41 +0100)
Problem:  :highlight auto-complettion has a minor bug where an existing
          highlight group with a cterm color being unset would result in
          it being auto-completed to -1 in cmdline which is invalid.

Solution: Correctly check for whether an int value is set to non-zero
          before retrieving the existing value for auto-complete. Also
          do this for attr/string values as they previously worked only
          by accident (Yee Cheng Chin).

closes: #16726

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/highlight.c
src/testdir/test_cmdline.vim
src/version.c

index 2d965660e20f6704fce6f788080e69c595c25795..755d75f4ca72d862f8771c554c6e49e5f3c2eb65 100644 (file)
@@ -4531,14 +4531,17 @@ expand_highlight_group(
 
        char_u      buf[MAX_ATTR_LEN];
 
-       if (expand_hi_synid != 0 && type != 0 && expand_hi_include_orig)
+       expand_hi_curvalue = NULL;
+       if (expand_hi_include_orig)
        {
-           // Retrieve the current value to go first in completion
-           expand_hi_curvalue = highlight_arg_to_string(
-                   type, iarg, sarg, buf);
+           if (((type == LIST_ATTR || type == LIST_INT) && iarg != 0) ||
+               (type == LIST_STRING && sarg != NULL))
+           {
+               // Retrieve the current value to go first in completion
+               expand_hi_curvalue = highlight_arg_to_string(
+                       type, iarg, sarg, buf);
+           }
        }
-       else
-           expand_hi_curvalue = NULL;
 
        if (expandfunc != NULL)
        {
index 042710c2aae77a22d63be3c12b5f249fbbf51419..be4ae4e184ccf5f0e66c84b3471a88ea51d4fc86 100644 (file)
@@ -488,14 +488,22 @@ func Test_highlight_group_completion()
 
   " Test completing the current value
   hi FooBar term=bold,underline cterm=undercurl ctermfg=lightgray ctermbg=12 ctermul=34
+  hi AlmostEmpty term=bold
   call assert_equal('bold,underline', getcompletion('hi FooBar term=', 'cmdline')[0])
   call assert_equal('undercurl', getcompletion('hi FooBar cterm=', 'cmdline')[0])
   call assert_equal('7', getcompletion('hi FooBar ctermfg=', 'cmdline')[0])
   call assert_equal('12', getcompletion('hi FooBar ctermbg=', 'cmdline')[0])
   call assert_equal('34', getcompletion('hi FooBar ctermul=', 'cmdline')[0])
 
-  " "bold,underline" is unique and creates an extra item. "undercurl" and
-  " should be de-duplicated
+  " highlight group exists, but no value was set. Should not complete to
+  " existing value
+  call assert_equal('fg', getcompletion('hi AlmostEmpty ctermfg=', 'cmdline')[0])
+  call assert_equal('fg', getcompletion('hi AlmostEmpty ctermbg=', 'cmdline')[0])
+  call assert_equal('fg', getcompletion('hi AlmostEmpty ctermul=', 'cmdline')[0])
+  call assert_equal('bold', getcompletion('hi AlmostEmpty cterm=', 'cmdline')[0])
+
+  " "bold,underline" is unique and creates an extra item. "undercurl" isn't
+  " and should be de-duplicated.
   call assert_equal(len(getcompletion('hi FooBar term=', 'cmdline')),
         \ 1 + len(getcompletion('hi FooBar cterm=', 'cmdline')))
 
@@ -519,6 +527,13 @@ func Test_highlight_group_completion()
 
     " Check that existing value is de-duplicated and doesn't show up later
     call assert_equal(1, count(getcompletion('hi FooBar guibg=', 'cmdline'), 'brown1'))
+
+    " highlight group exists, but no value was set. Should not complete to
+    " existing value
+    call assert_equal('fg', getcompletion('hi AlmostEmpty guifg=', 'cmdline')[0])
+    call assert_equal('fg', getcompletion('hi AlmostEmpty guibg=', 'cmdline')[0])
+    call assert_equal('fg', getcompletion('hi AlmostEmpty guisp=', 'cmdline')[0])
+    call assert_equal('bold', getcompletion('hi AlmostEmpty gui=', 'cmdline')[0])
   endif
 
   " Test completing attributes
index 523e4fc8e8fb1726607dc6eba03f9271f847d713..6275311a1246d27e0a55947e0cbcb1f0424a3139 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1150,
 /**/
     1149,
 /**/