From 10be2adb22caf25a0fde080f37a74a409cbcf9eb Mon Sep 17 00:00:00 2001 From: jinzhongjia Date: Sat, 13 Dec 2025 14:05:10 +0800 Subject: [PATCH 1/2] chore(completion): remove unused variable - Delete unused triggers variable from get_trigger_characters - Simplify code without functional changes - Improve code cleanliness --- lua/opencode/ui/completion/engines/blink_cmp.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/opencode/ui/completion/engines/blink_cmp.lua b/lua/opencode/ui/completion/engines/blink_cmp.lua index a13765b8..92f2a452 100644 --- a/lua/opencode/ui/completion/engines/blink_cmp.lua +++ b/lua/opencode/ui/completion/engines/blink_cmp.lua @@ -14,7 +14,6 @@ function Source:get_trigger_characters() local mention_key = config.get_key_for_function('input_window', 'mention') local slash_key = config.get_key_for_function('input_window', 'slash_commands') local context_key = config.get_key_for_function('input_window', 'context_items') - local triggers = {} return { slash_key or '', mention_key or '', From 42125324b252367b65a488773a13b837f01dd93c Mon Sep 17 00:00:00 2001 From: jinzhongjia Date: Sat, 13 Dec 2025 14:39:43 +0800 Subject: [PATCH 2/2] fix(completion): fix blink_cmp filtering and async support - Rename is_available to enabled per blink_cmp API - Implement filterText for proper fuzzy matching - Add async flag to source provider configuration - Improve insert text fallback handling --- lua/opencode/ui/completion/engines/blink_cmp.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lua/opencode/ui/completion/engines/blink_cmp.lua b/lua/opencode/ui/completion/engines/blink_cmp.lua index 92f2a452..651af736 100644 --- a/lua/opencode/ui/completion/engines/blink_cmp.lua +++ b/lua/opencode/ui/completion/engines/blink_cmp.lua @@ -21,7 +21,7 @@ function Source:get_trigger_characters() } end -function Source:is_available() +function Source:enabled() return vim.bo.filetype == 'opencode' end @@ -43,7 +43,7 @@ function Source:get_completions(ctx, callback) end local context = { - input = trigger_match, + input = trigger_match, -- Pass input for search-based sources (e.g., files) cursor_pos = col, line = line, trigger_char = trigger_char, @@ -53,6 +53,7 @@ function Source:get_completions(ctx, callback) for _, completion_source in ipairs(completion_sources) do local source_items = completion_source.complete(context):await() for i, item in ipairs(source_items) do + local insert_text = item.insert_text or item.label table.insert(items, { label = item.label, kind = item.kind, @@ -60,7 +61,9 @@ function Source:get_completions(ctx, callback) kind_hl = item.kind_hl, detail = item.detail, documentation = item.documentation, - insertText = item.insert_text or item.label, + -- Use filterText for fuzzy matching against the typed text after trigger char + filterText = item.filter_text or item.label, + insertText = insert_text, sortText = string.format( '%02d_%02d_%02d_%s', completion_source.priority or 999, @@ -100,6 +103,7 @@ function M.setup(completion_sources) blink.add_source_provider('opencode_mentions', { module = 'opencode.ui.completion.engines.blink_cmp', + async = true, }) return true