Skip to content

Commit e8372ab

Browse files
committed
feat: misc
1 parent 8a599ba commit e8372ab

File tree

4 files changed

+189
-197
lines changed

4 files changed

+189
-197
lines changed

lua/blink/cmp/cmp.lua

+39-34
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
local M = {}
1+
local cmp = {}
22

3-
M.kind_icons = {
3+
cmp.kind_icons = {
44
Text = '󰉿',
55
Method = '󰊕',
66
Function = '󰊕',
@@ -32,17 +32,17 @@ M.kind_icons = {
3232
Operator = '󰪚',
3333
TypeParameter = '󰬛',
3434
}
35-
M.filtered_items = {}
35+
cmp.filtered_items = {}
3636

37-
M.fuzzy = require('blink.fuzzy').fuzzy
38-
M.lsp = require('blink.cmp.lsp')
37+
cmp.fuzzy = require('blink.fuzzy').fuzzy
38+
cmp.lsp = require('blink.cmp.lsp')
3939

40-
M.accept = function(cmp_win)
40+
cmp.accept = function(cmp_win)
4141
local bufnr = vim.api.nvim_get_current_buf()
42-
local current_line, start_col, end_col = M.get_query_to_replace(bufnr)
42+
local current_line, start_col, end_col = cmp.get_query_to_replace(bufnr)
4343

4444
-- Get the item from the filtered items based on the cursorline position
45-
local item = M.filtered_items[vim.api.nvim_win_get_cursor(cmp_win.id)[1]]
45+
local item = cmp.filtered_items[vim.api.nvim_win_get_cursor(cmp_win.id)[1]]
4646

4747
-- Apply text edit
4848
vim.api.nvim_buf_set_text(bufnr, current_line, start_col, current_line, end_col, { item.word })
@@ -53,50 +53,53 @@ M.accept = function(cmp_win)
5353
-- These are used for things like auto-imports
5454
-- todo: check capabilities to know ahead of time
5555
if item.additionalTextEdits ~= nil then
56-
M.apply_additional_text_edits(item.client_id, item)
56+
cmp.apply_additional_text_edits(item.client_id, item)
5757
else
58-
M.lsp.resolve(item, function(client_id, resolved_item) M.apply_additional_text_edits(client_id, resolved_item) end)
58+
cmp.lsp.resolve(
59+
item,
60+
function(client_id, resolved_item) cmp.apply_additional_text_edits(client_id, resolved_item) end
61+
)
5962
end
6063
end
6164

62-
M.select_next = function(cmp_win, doc_win)
65+
cmp.select_next = function(cmp_win, doc_win)
6366
if cmp_win.id == nil then return end
6467

6568
local current_line = vim.api.nvim_win_get_cursor(cmp_win.id)[1]
66-
local item_count = #M.filtered_items
69+
local item_count = #cmp.filtered_items
6770
local line_count = vim.api.nvim_buf_line_count(cmp_win.buf)
6871

6972
-- draw a new line if we're at the end and there's more items
7073
-- todo: this is a hack while waiting for virtual scroll
7174
if current_line == line_count and item_count > line_count then
72-
M.draw_item(cmp_win.buf, line_count + 1, M.filtered_items[line_count + 1])
75+
cmp.draw_item(cmp_win.buf, line_count + 1, cmp.filtered_items[line_count + 1])
7376
vim.api.nvim_win_set_cursor(cmp_win.id, { line_count + 1, 0 })
7477
-- otherwise just move the cursor, wrapping if at the bottom
7578
else
7679
local line = current_line == item_count and 1 or current_line + 1
7780
vim.api.nvim_win_set_cursor(cmp_win.id, { line, 0 })
7881
end
7982

80-
M.update_doc(cmp_win, doc_win)
83+
cmp.update_doc(cmp_win, doc_win)
8184
end
8285

8386
-- todo: how to handle overflow to the bottom? should probably just do proper virtual scroll
84-
M.select_prev = function(cmp_win, doc_win)
87+
cmp.select_prev = function(cmp_win, doc_win)
8588
if cmp_win.id == nil then return end
8689

8790
local current_line = vim.api.nvim_win_get_cursor(cmp_win.id)[1]
8891
local line_count = vim.api.nvim_buf_line_count(cmp_win.buf)
8992
local line = current_line - 1 == 0 and line_count or current_line - 1
9093
vim.api.nvim_win_set_cursor(cmp_win.id, { line, 0 })
9194

92-
M.update_doc(cmp_win, doc_win)
95+
cmp.update_doc(cmp_win, doc_win)
9396
end
9497

95-
M.update = function(cmp_win, doc_win, items, opts)
96-
local query = M.get_query()
98+
cmp.update = function(cmp_win, doc_win, items, opts)
99+
local query = cmp.get_query()
97100

98101
-- get the items based on the user's query
99-
local filtered_items = M.filter_items(query, items)
102+
local filtered_items = cmp.filter_items(query, items)
100103

101104
-- guards for cases where we shouldn't show the completion window
102105
local no_items = #filtered_items == 0
@@ -115,7 +118,7 @@ M.update = function(cmp_win, doc_win, items, opts)
115118
vim.api.nvim_buf_set_option(cmp_win.buf, 'modified', false)
116119

117120
for idx, item in ipairs(filtered_items) do
118-
M.draw_item(cmp_win.buf, idx, item)
121+
cmp.draw_item(cmp_win.buf, idx, item)
119122
-- only draw until the window is full
120123
if idx >= cmp_win.config.max_height then break end
121124
end
@@ -124,23 +127,23 @@ M.update = function(cmp_win, doc_win, items, opts)
124127
cmp_win:update()
125128

126129
-- documentation
127-
M.update_doc(cmp_win, doc_win)
130+
cmp.update_doc(cmp_win, doc_win)
128131

129-
M.filtered_items = filtered_items
132+
cmp.filtered_items = filtered_items
130133
end
131134

132-
function M.update_doc(cmp_win, doc_win)
135+
function cmp.update_doc(cmp_win, doc_win)
133136
-- completion window isn't open
134137
if cmp_win.id == nil then return end
135138

136139
local current_line = vim.api.nvim_win_get_cursor(cmp_win.id)[1]
137-
local item = M.filtered_items[current_line]
140+
local item = cmp.filtered_items[current_line]
138141
if item == nil then
139142
doc_win:close()
140143
return
141144
end
142145

143-
M.lsp.resolve(item, function(_, resolved_item)
146+
cmp.lsp.resolve(item, function(_, resolved_item)
144147
if resolved_item.detail == nil then
145148
doc_win:close()
146149
return
@@ -158,10 +161,10 @@ function M.update_doc(cmp_win, doc_win)
158161
end
159162

160163
---------- UTILS ------------
161-
M.draw_item = function(bufnr, idx, item)
164+
cmp.draw_item = function(bufnr, idx, item)
162165
-- get highlight
163166
local kind_hl = 'CmpItemKind' .. item.kind
164-
local kind_icon = M.kind_icons[item.kind] or M.kind_icons.Field
167+
local kind_icon = cmp.kind_icons[item.kind] or cmp.kind_icons.Field
165168
local kind = item.kind
166169

167170
-- get line text
@@ -181,7 +184,7 @@ M.draw_item = function(bufnr, idx, item)
181184
vim.api.nvim_buf_set_option(bufnr, 'modified', false)
182185
end
183186

184-
M.filter_items = function(query, items)
187+
cmp.filter_items = function(query, items)
185188
if query == '' then return items end
186189

187190
-- convert to table of strings
@@ -192,15 +195,15 @@ M.filter_items = function(query, items)
192195

193196
-- perform fuzzy search
194197
local filtered_items = {}
195-
local selected_indices = M.fuzzy(query, words)
198+
local selected_indices = cmp.fuzzy(query, words)
196199
for _, selected_index in ipairs(selected_indices) do
197200
table.insert(filtered_items, items[selected_index + 1])
198201
end
199202

200203
return filtered_items
201204
end
202205

203-
M.get_query = function()
206+
cmp.get_query = function()
204207
local bufnr = vim.api.nvim_get_current_buf()
205208
local current_line = vim.api.nvim_win_get_cursor(0)[1] - 1
206209
local current_col = vim.api.nvim_win_get_cursor(0)[2] - 1
@@ -209,7 +212,7 @@ M.get_query = function()
209212
return query
210213
end
211214

212-
M.get_query_to_replace = function(bufnr)
215+
cmp.get_query_to_replace = function(bufnr)
213216
local current_line = vim.api.nvim_win_get_cursor(0)[1]
214217
local current_col = vim.api.nvim_win_get_cursor(0)[2]
215218
local line = vim.api.nvim_buf_get_lines(bufnr, current_line - 1, current_line, false)[1]
@@ -233,11 +236,13 @@ M.get_query_to_replace = function(bufnr)
233236
return current_line - 1, start_col - 1, end_col
234237
end
235238

236-
M.apply_additional_text_edits = function(client_id, item) M.apply_text_edits(client_id, item.additionalTextEdits or {}) end
239+
cmp.apply_additional_text_edits = function(client_id, item)
240+
cmp.apply_text_edits(client_id, item.additionalTextEdits or {})
241+
end
237242

238-
M.apply_text_edits = function(client_id, edits)
243+
cmp.apply_text_edits = function(client_id, edits)
239244
local offset_encoding = vim.lsp.get_client_by_id(client_id).offset_encoding
240245
vim.lsp.util.apply_text_edits(edits, vim.api.nvim_get_current_buf(), offset_encoding)
241246
end
242247

243-
return M
248+
return cmp

lua/blink/cmp/init.lua

+39-36
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
local M = {}
1+
local m = {}
22

3-
M.items = {}
3+
m.items = {}
44

5-
M.setup = function(config)
6-
M.cmp_win = require('blink.cmp.win').new({
5+
m.setup = function(config)
6+
m.cmp_win = require('blink.cmp.win').new({
77
cursorline = true,
88
winhighlight = 'Normal:Pmenu,FloatBorder:Pmenu,CursorLine:PmenuSel,Search:None',
99
})
10-
M.doc_win = require('blink.cmp.win').new({
10+
m.doc_win = require('blink.cmp.win').new({
1111
width = 60,
1212
max_height = 20,
13-
relative = M.cmp_win,
13+
relative = m.cmp_win,
1414
wrap = true,
1515
filetype = 'typescript', -- todo: set dynamically
1616
padding = true,
1717
})
18-
M.lsp = require('blink.cmp.lsp')
19-
M.cmp = require('blink.cmp.cmp')
18+
m.lsp = require('blink.cmp.lsp')
19+
m.cmp = require('blink.cmp.cmp')
2020

2121
local last_char = ''
2222
vim.api.nvim_create_autocmd('InsertCharPre', {
@@ -26,26 +26,26 @@ M.setup = function(config)
2626
-- decide if we should show the completion window
2727
vim.api.nvim_create_autocmd('TextChangedI', {
2828
callback = function()
29-
if M.cmp_win.id ~= nil then return end
29+
if m.cmp_win.id ~= nil then return end
3030
-- todo: if went from prefix to no prefix, clear the items
31-
if last_char ~= '' and last_char ~= ' ' and last_char ~= '\n' then M.update() end
31+
if last_char ~= '' and last_char ~= ' ' and last_char ~= '\n' then m.update() end
3232
end,
3333
})
3434

3535
-- update the completion window
3636
vim.api.nvim_create_autocmd('CursorMovedI', {
3737
callback = function()
38-
if M.cmp_win.id ~= nil then M.update() end
38+
if m.cmp_win.id ~= nil then m.update() end
3939
end,
4040
})
4141

4242
-- show completion windows
4343
vim.api.nvim_create_autocmd({ 'InsertLeave', 'BufLeave' }, {
4444
callback = function()
45-
M.lsp.cancel_completions()
46-
M.cmp_win:close()
47-
M.doc_win:close()
48-
M.items = {}
45+
m.lsp.cancel_completions()
46+
m.cmp_win:close()
47+
m.doc_win:close()
48+
m.items = {}
4949
end,
5050
})
5151

@@ -57,45 +57,48 @@ M.setup = function(config)
5757
noremap = true,
5858
silent = true,
5959
callback = function()
60-
if M.cmp_win.id == nil then return vim.api.nvim_replace_termcodes(key, true, false, true) end
60+
if m.cmp_win.id == nil then return vim.api.nvim_replace_termcodes(key, true, false, true) end
6161
vim.schedule(callback)
6262
end,
6363
})
6464
end
65-
keymap('i', '<Tab>', M.accept)
66-
keymap('i', '<C-j>', M.select_next)
67-
keymap('i', '<C-k>', M.select_prev)
68-
keymap('i', '<Up>', M.select_prev)
69-
keymap('i', '<Down>', M.select_next)
65+
keymap('i', '<Tab>', m.accept)
66+
keymap('i', '<C-j>', m.select_next)
67+
keymap('i', '<C-k>', m.select_prev)
68+
keymap('i', '<Up>', m.select_prev)
69+
keymap('i', '<Down>', m.select_next)
7070
vim.api.nvim_set_keymap('i', '<C-space>', '', {
7171
noremap = true,
7272
silent = true,
73-
callback = function() M.update({ force = true }) end,
73+
callback = function() m.update({ force = true }) end,
7474
})
7575
end
7676

77-
M.update = function(opts)
77+
m.update = function(opts)
7878
opts = opts or { force = false }
7979

80+
m.cmp_win:temp_buf_hack()
81+
m.doc_win:temp_buf_hack()
82+
8083
-- immediately update the results
81-
M.cmp.update(M.cmp_win, M.doc_win, M.items, opts)
82-
M.cmp_win:update()
83-
M.doc_win:update()
84+
m.cmp.update(m.cmp_win, m.doc_win, m.items, opts)
85+
m.cmp_win:update()
86+
m.doc_win:update()
8487
-- trigger the lsp and update the results after retrieving
85-
M.lsp.completions(function(items)
86-
M.items = items
87-
M.cmp.update(M.cmp_win, M.doc_win, M.items, opts)
88-
M.cmp_win:update()
89-
M.doc_win:update()
88+
m.lsp.completions(function(items)
89+
m.items = items
90+
m.cmp.update(m.cmp_win, m.doc_win, m.items, opts)
91+
m.cmp_win:update()
92+
m.doc_win:update()
9093
end)
9194
end
9295

93-
M.accept = function()
94-
if M.cmp_win.id ~= nil then M.cmp.accept(M.cmp_win) end
96+
m.accept = function()
97+
if m.cmp_win.id ~= nil then m.cmp.accept(m.cmp_win) end
9598
end
9699

97-
M.select_prev = function() M.cmp.select_prev(M.cmp_win, M.doc_win) end
100+
m.select_prev = function() m.cmp.select_prev(m.cmp_win, m.doc_win) end
98101

99-
M.select_next = function() M.cmp.select_next(M.cmp_win, M.doc_win) end
102+
m.select_next = function() m.cmp.select_next(m.cmp_win, m.doc_win) end
100103

101-
return M
104+
return m

0 commit comments

Comments
 (0)