Skip to content

Commit 125d4f1

Browse files
committed
feat: support disabling accept on trigger character, block parenthesis
closes #212
1 parent 6f0fc86 commit 125d4f1

File tree

4 files changed

+20
-10
lines changed

4 files changed

+20
-10
lines changed

README.md

+5-3
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,13 @@ MiniDeps.add({
230230
-- however, some LSPs (*cough* tsserver *cough*) return characters that would essentially
231231
-- always show the window. We block these by default
232232
blocked_trigger_characters = { ' ', '\n', '\t' },
233+
-- when true, will show the completion window when the cursor comes after a trigger character after accepting an item
234+
show_on_accept_on_trigger_character = true,
233235
-- when true, will show the completion window when the cursor comes after a trigger character when entering insert mode
234236
show_on_insert_on_trigger_character = true,
235-
-- list of additional trigger characters that won't trigger the completion window when the cursor comes after a trigger character when entering insert mode
236-
show_on_insert_blocked_trigger_characters = { "'", '"' },
237-
-- when false, will not show the completion window when in a snippet
237+
-- list of additional trigger characters that won't trigger the completion window when the cursor comes after a trigger character when entering insert mode/accepting an item
238+
show_on_x_blocked_trigger_characters = { "'", '"', '(' },
239+
-- when false, will not show the completion window automatically when in a snippet
238240
show_in_snippet = true,
239241
},
240242

lua/blink/cmp/accept/init.lua

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ local function accept(item)
5353
-- TODO: since we apply the additional text edits after, auto imported functions will not
5454
-- get auto brackets. If we apply them before, we have to modify the textEdit to compensate
5555
brackets_lib.add_brackets_via_semantic_token(vim.bo.filetype, item, function()
56-
require('blink.cmp.trigger.completion').show_if_on_trigger_character()
56+
require('blink.cmp.trigger.completion').show_if_on_trigger_character({ is_accept = true })
5757
require('blink.cmp.trigger.signature').show_if_on_trigger_character()
5858
end)
5959
else
60-
require('blink.cmp.trigger.completion').show_if_on_trigger_character()
60+
require('blink.cmp.trigger.completion').show_if_on_trigger_character({ is_accept = true })
6161
require('blink.cmp.trigger.signature').show_if_on_trigger_character()
6262
end
6363

lua/blink/cmp/config.lua

+6-3
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@
4444
--- @field keyword_regex? string
4545
--- @field exclude_from_prefix_regex? string
4646
--- @field blocked_trigger_characters? string[]
47+
--- @field show_on_accept_on_trigger_character? boolean When true, will show the completion window when the cursor comes after a trigger character after accepting an item
4748
--- @field show_on_insert_on_trigger_character? boolean When true, will show the completion window when the cursor comes after a trigger character when entering insert mode
48-
--- @field show_on_insert_blocked_trigger_characters? string[] List of additional trigger characters that won't trigger the completion window when the cursor comes after a trigger character when entering insert mode
49+
--- @field show_on_x_blocked_trigger_characters? string[] List of additional trigger characters that won't trigger the completion window when the cursor comes after a trigger character when entering insert mode/accepting an item
4950
--- @field show_in_snippet? boolean When false, will not show the completion window when in a snippet
5051
---
5152
--- @class blink.cmp.SignatureHelpTriggerConfig
@@ -253,10 +254,12 @@ local config = {
253254
-- however, some LSPs (*cough* tsserver *cough*) return characters that would essentially
254255
-- always show the window. We block these by default
255256
blocked_trigger_characters = { ' ', '\n', '\t' },
257+
-- when true, will show the completion window when the cursor comes after a trigger character after accepting an item
258+
show_on_accept_on_trigger_character = true,
256259
-- when true, will show the completion window when the cursor comes after a trigger character when entering insert mode
257260
show_on_insert_on_trigger_character = true,
258-
-- list of additional trigger characters that won't trigger the completion window when the cursor comes after a trigger character when entering insert mode
259-
show_on_insert_blocked_trigger_characters = { "'", '"' },
261+
-- list of additional trigger characters that won't trigger the completion window when the cursor comes after a trigger character when entering insert mode/accepting an item
262+
show_on_x_blocked_trigger_characters = { "'", '"', '(' },
260263
-- when false, will not show the completion window when in a snippet
261264
show_in_snippet = false,
262265
},

lua/blink/cmp/trigger/completion.lua

+7-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ function trigger.activate_autocmds()
8686
local char_under_cursor = vim.api.nvim_get_current_line():sub(cursor_col, cursor_col)
8787
local is_on_trigger = vim.tbl_contains(sources.get_trigger_characters(), char_under_cursor)
8888
local is_on_trigger_for_show_on_insert = is_on_trigger
89-
and not vim.tbl_contains(config.show_on_insert_blocked_trigger_characters, char_under_cursor)
89+
and not vim.tbl_contains(config.show_on_x_blocked_trigger_characters, char_under_cursor)
9090
local is_on_context_char = char_under_cursor:match(config.keyword_regex) ~= nil
9191

9292
local insert_enter_on_trigger_character = config.show_on_insert_on_trigger_character
@@ -152,10 +152,15 @@ function trigger.suppress_events_for_callback(cb)
152152
and is_insert_mode
153153
end
154154

155-
function trigger.show_if_on_trigger_character()
155+
--- @param opts { is_accept?: boolean } | nil
156+
function trigger.show_if_on_trigger_character(opts)
157+
if opts and opts.is_accept and not config.show_on_accept_on_trigger_character then return end
158+
156159
local cursor_col = vim.api.nvim_win_get_cursor(0)[2]
157160
local char_under_cursor = vim.api.nvim_get_current_line():sub(cursor_col, cursor_col)
158161
local is_on_trigger = vim.tbl_contains(sources.get_trigger_characters(), char_under_cursor)
162+
and not vim.tbl_contains(config.show_on_x_blocked_trigger_characters, char_under_cursor)
163+
159164
if is_on_trigger then trigger.show({ trigger_character = char_under_cursor }) end
160165
return is_on_trigger
161166
end

0 commit comments

Comments
 (0)