4
4
5
5
local uv = vim .uv
6
6
7
+ --- @param bufnr integer
7
8
--- @return string
8
- local function get_buf_text ()
9
- local bufnr = vim .api .nvim_get_current_buf ()
9
+ local function get_buf_text (bufnr )
10
10
local lines = vim .api .nvim_buf_get_lines (bufnr , 0 , - 1 , false )
11
11
12
12
-- exclude word under the cursor
@@ -62,19 +62,30 @@ local function run_async(buf_text, callback)
62
62
worker :queue (buf_text )
63
63
end
64
64
65
+ --- @class blink.cmp.BufferOpts
66
+ --- @field get_bufnrs fun (): integer[]
67
+
65
68
--- Public API
66
69
67
- --- @class blink.cmp.Source
68
70
local buffer = {}
69
71
70
- function buffer .new () return setmetatable ({}, { __index = buffer }) end
72
+ function buffer .new (opts )
73
+ opts = opts or {} --- @type blink.cmp.BufferOpts
74
+ local self = setmetatable ({}, { __index = buffer })
75
+ self .get_bufnrs = opts .get_bufnrs or function () return { vim .api .nvim_get_current_buf () } end
76
+ return self
77
+ end
71
78
72
79
function buffer :get_completions (_ , callback )
73
80
local transformed_callback = function (items )
74
81
callback ({ is_incomplete_forward = false , is_incomplete_backward = false , items = items })
75
82
end
76
83
77
- local buf_text = get_buf_text ()
84
+ local buf_texts = {}
85
+ for _ , buf in ipairs (self .get_bufnrs ()) do
86
+ table.insert (buf_texts , get_buf_text (buf ))
87
+ end
88
+ local buf_text = table.concat (buf_texts , ' \n ' )
78
89
-- should take less than 2ms
79
90
if # buf_text < 20000 then
80
91
run_sync (buf_text , transformed_callback )
@@ -91,3 +102,4 @@ function buffer:get_completions(_, callback)
91
102
end
92
103
93
104
return buffer
105
+
0 commit comments