From f0146bcbe751b15aad7605ed3f33246d8a45d902 Mon Sep 17 00:00:00 2001 From: glepnir Date: Wed, 26 Aug 2026 16:37:44 +0800 Subject: [PATCH] vim-patch:9.2.1009: duplicate dict code in ins_compl_dict_alloc() (#41497) Problem: ins_compl_dict_alloc() builds the same dict as fill_complete_info_dict(). Solution: Call fill_complete_info_dict() instead (glepnir). closes: vim/vim#21140 https://github.com/vim/vim/commit/303a153694d93e93620023835c64e4dc2122e3b2 --- src/nvim/insexpand.c | 11 +---------- test/functional/editor/completion_spec.lua | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/nvim/insexpand.c b/src/nvim/insexpand.c index 21de3d6e64..0c34426381 100644 --- a/src/nvim/insexpand.c +++ b/src/nvim/insexpand.c @@ -1452,16 +1452,7 @@ static dict_T *ins_compl_dict_alloc(compl_T *match) { // { word, abbr, menu, kind, info } dict_T *dict = tv_dict_alloc_lock(VAR_FIXED); - tv_dict_add_str_len(dict, S_LEN("word"), match->cp_str.data, (int)match->cp_str.size); - tv_dict_add_str(dict, S_LEN("abbr"), match->cp_text[CPT_ABBR]); - tv_dict_add_str(dict, S_LEN("menu"), match->cp_text[CPT_MENU]); - tv_dict_add_str(dict, S_LEN("kind"), match->cp_text[CPT_KIND]); - tv_dict_add_str(dict, S_LEN("info"), match->cp_text[CPT_INFO]); - if (match->cp_user_data.v_type == VAR_UNKNOWN) { - tv_dict_add_str_len(dict, S_LEN("user_data"), "", 0); - } else { - tv_dict_add_tv(dict, S_LEN("user_data"), &match->cp_user_data); - } + fill_complete_info_dict(dict, match, false); return dict; } diff --git a/test/functional/editor/completion_spec.lua b/test/functional/editor/completion_spec.lua index 86b5bca879..b9b91ec520 100644 --- a/test/functional/editor/completion_spec.lua +++ b/test/functional/editor/completion_spec.lua @@ -65,10 +65,16 @@ describe('completion', function() it('returns expected dict in normal completion', function() feed('ifooo') eq('foo', eval('getline(2)')) - eq( - { word = 'foo', abbr = '', menu = '', info = '', kind = '', user_data = '' }, - eval('v:completed_item') - ) + eq({ + word = 'foo', + abbr = '', + menu = '', + info = '', + kind = '', + user_data = '', + abbr_hlgroup = '', + kind_hlgroup = '', + }, eval('v:completed_item')) end) it('is readonly', function() screen:try_resize(80, 8) @@ -105,6 +111,8 @@ describe('completion', function() menu = 'baz', info = 'foobar', kind = 'foobaz', + abbr_hlgroup = '', + kind_hlgroup = '', user_data = '', }, eval('v:completed_item')) end)