From 3287888ba63cdc57ef8b429ef4924f8585a75fd9 Mon Sep 17 00:00:00 2001 From: ddcien Date: Wed, 20 Dec 2023 18:08:29 +0800 Subject: [PATCH 1/6] Fix: utils.str.get_word --- lua/cmp/utils/str.lua | 1 + lua/cmp/utils/str_spec.lua | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/lua/cmp/utils/str.lua b/lua/cmp/utils/str.lua index 84b0177e0..dba0f5db6 100644 --- a/lua/cmp/utils/str.lua +++ b/lua/cmp/utils/str.lua @@ -122,6 +122,7 @@ str.get_word = function(text, stop_char, min_length) local c = string.byte(text, i, i) if #word < min_length then table.insert(word, string.char(c)) + has_alnum = has_alnum or char.is_alnum(c) elseif not INVALIDS[c] then add(c) has_alnum = has_alnum or char.is_alnum(c) diff --git a/lua/cmp/utils/str_spec.lua b/lua/cmp/utils/str_spec.lua index 1a218559f..23cc702aa 100644 --- a/lua/cmp/utils/str_spec.lua +++ b/lua/cmp/utils/str_spec.lua @@ -10,6 +10,13 @@ describe('utils.str', function() assert.are.equal(str.get_word('"devDependencies": ${1},', string.byte('"')), '"devDependencies') assert.are.equal(str.get_word('#[cfg(test)]'), '#[cfg(test)]') assert.are.equal(str.get_word('import { GetStaticProps$1 } from "next";', nil, 9), 'import { GetStaticProps') + assert.are.equal(str.get_word("do {\n${1:statements}\n}while ($0)", nil, 0), 'do') + assert.are.equal(str.get_word("do {\n${1:statements}\n}while ($0)", nil, 1), 'do') + assert.are.equal(str.get_word("do {\n${1:statements}\n}while ($0)", nil, 2), 'do') + assert.are.equal(str.get_word("for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}", nil, 0), 'for') + assert.are.equal(str.get_word("for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}", nil, 1), 'for') + assert.are.equal(str.get_word("for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}", nil, 2), 'for') + assert.are.equal(str.get_word("for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}", nil, 3), 'for') end) it('remove_suffix', function() From 0c18ffbe34077ae3fc1bd970db01d96f7aa92dc2 Mon Sep 17 00:00:00 2001 From: ddcien Date: Wed, 20 Dec 2023 10:10:34 +0000 Subject: [PATCH 2/6] Format with stylua --- lua/cmp/utils/str_spec.lua | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lua/cmp/utils/str_spec.lua b/lua/cmp/utils/str_spec.lua index 23cc702aa..9e4d54c58 100644 --- a/lua/cmp/utils/str_spec.lua +++ b/lua/cmp/utils/str_spec.lua @@ -10,13 +10,13 @@ describe('utils.str', function() assert.are.equal(str.get_word('"devDependencies": ${1},', string.byte('"')), '"devDependencies') assert.are.equal(str.get_word('#[cfg(test)]'), '#[cfg(test)]') assert.are.equal(str.get_word('import { GetStaticProps$1 } from "next";', nil, 9), 'import { GetStaticProps') - assert.are.equal(str.get_word("do {\n${1:statements}\n}while ($0)", nil, 0), 'do') - assert.are.equal(str.get_word("do {\n${1:statements}\n}while ($0)", nil, 1), 'do') - assert.are.equal(str.get_word("do {\n${1:statements}\n}while ($0)", nil, 2), 'do') - assert.are.equal(str.get_word("for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}", nil, 0), 'for') - assert.are.equal(str.get_word("for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}", nil, 1), 'for') - assert.are.equal(str.get_word("for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}", nil, 2), 'for') - assert.are.equal(str.get_word("for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}", nil, 3), 'for') + assert.are.equal(str.get_word('do {\n${1:statements}\n}while ($0)', nil, 0), 'do') + assert.are.equal(str.get_word('do {\n${1:statements}\n}while ($0)', nil, 1), 'do') + assert.are.equal(str.get_word('do {\n${1:statements}\n}while ($0)', nil, 2), 'do') + assert.are.equal(str.get_word('for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}', nil, 0), 'for') + assert.are.equal(str.get_word('for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}', nil, 1), 'for') + assert.are.equal(str.get_word('for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}', nil, 2), 'for') + assert.are.equal(str.get_word('for (${1:init-statement}; ${2:condition}; ${3:inc-expression}) {\n$0\n}', nil, 3), 'for') end) it('remove_suffix', function() From 39c2948a5488ff579db96fcd1eb5dbb085253df6 Mon Sep 17 00:00:00 2001 From: ddcien Date: Tue, 26 Dec 2023 10:01:53 +0800 Subject: [PATCH 3/6] Fix source.complete --- lua/cmp/source.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/cmp/source.lua b/lua/cmp/source.lua index d733224da..321b99aac 100644 --- a/lua/cmp/source.lua +++ b/lua/cmp/source.lua @@ -295,7 +295,7 @@ source.complete = function(self, ctx, callback) completion_context = { triggerKind = types.lsp.CompletionTriggerKind.TriggerForIncompleteCompletions, } - elseif not vim.tbl_contains({ self.request_offset, self.offset }, offset) then + else completion_context = { triggerKind = types.lsp.CompletionTriggerKind.Invoked, } From 8dceb388f666ba80ae4bf56894d4dfbc16ba5bd4 Mon Sep 17 00:00:00 2001 From: ddcien Date: Tue, 26 Dec 2023 10:19:48 +0800 Subject: [PATCH 4/6] Disable 'Cmdline*' events while use native-menu --- lua/cmp/init.lua | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lua/cmp/init.lua b/lua/cmp/init.lua index 4aaf2fe6c..4dae582f9 100644 --- a/lua/cmp/init.lua +++ b/lua/cmp/init.lua @@ -329,8 +329,6 @@ local on_insert_enter = function() cmp.core:on_change('InsertEnter') end end -autocmd.subscribe({ 'CmdlineEnter' }, async.debounce_next_tick(on_insert_enter)) -autocmd.subscribe({ 'InsertEnter' }, async.debounce_next_tick_by_keymap(on_insert_enter)) -- async.throttle is needed for performance. The mapping `:...` will fire `CmdlineChanged` for each character. local on_text_changed = function() @@ -338,23 +336,31 @@ local on_text_changed = function() cmp.core:on_change('TextChanged') end end + +-- If make this asynchronous, the completion menu will not close when the command output is displayed. +local on_insert_leave = function() + cmp.core:reset() + cmp.core.view:close() +end + +autocmd.subscribe('InsertEnter', async.debounce_next_tick_by_keymap(on_insert_enter)) autocmd.subscribe({ 'TextChangedI', 'TextChangedP' }, on_text_changed) -autocmd.subscribe('CmdlineChanged', async.debounce_next_tick(on_text_changed)) +autocmd.subscribe('InsertLeave', on_insert_leave) + +if not config.is_native_menu() then + autocmd.subscribe('CmdlineEnter', async.debounce_next_tick(on_insert_enter)) + autocmd.subscribe('CmdlineChanged', async.debounce_next_tick(on_text_changed)) + autocmd.subscribe('CmdlineLeave', on_insert_leave) +end autocmd.subscribe('CursorMovedI', function() if config.enabled() then cmp.core:on_moved() else - cmp.core:reset() - cmp.core.view:close() + on_insert_leave() end end) --- If make this asynchronous, the completion menu will not close when the command output is displayed. -autocmd.subscribe({ 'InsertLeave', 'CmdlineLeave' }, function() - cmp.core:reset() - cmp.core.view:close() -end) cmp.event:on('complete_done', function(evt) if evt.entry then From ae92a44b172b37e1607f685153912d5edbb28f8a Mon Sep 17 00:00:00 2001 From: ddcien Date: Tue, 26 Dec 2023 10:20:22 +0800 Subject: [PATCH 5/6] Add .editorconfig --- .editorconfig | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..2759aa194 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +#editorconfig.org +root = true + +[*.lua] +trim_trailing_whitespace = false +indent_style = space +indent_size = 2 From a0341be9a749f0790dfb18e4e5a2451b343d02c5 Mon Sep 17 00:00:00 2001 From: ddcien Date: Tue, 26 Dec 2023 02:20:53 +0000 Subject: [PATCH 6/6] Format with stylua --- lua/cmp/init.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/cmp/init.lua b/lua/cmp/init.lua index 4dae582f9..982621753 100644 --- a/lua/cmp/init.lua +++ b/lua/cmp/init.lua @@ -361,7 +361,6 @@ autocmd.subscribe('CursorMovedI', function() end end) - cmp.event:on('complete_done', function(evt) if evt.entry then cmp.config.compare.recently_used:add_entry(evt.entry)