@@ -3,6 +3,8 @@ local completion = require "obsidian.completion.refs"
3
3
local obsidian = require " obsidian"
4
4
local util = require " obsidian.util"
5
5
local LinkStyle = require (" obsidian.config" ).LinkStyle
6
+ local Note = require " obsidian.note"
7
+ local Path = require " obsidian.path"
6
8
7
9
--- @class cmp_obsidian_new.Source : obsidian.ABC
8
10
local source = abc .new_class ()
@@ -15,10 +17,14 @@ source.get_trigger_characters = completion.get_trigger_characters
15
17
16
18
source .get_keyword_pattern = completion .get_keyword_pattern
17
19
18
- source .complete = function (_ , request , callback )
20
+ --- Invoke completion (required).
21
+ --- @param params cmp.SourceCompletionApiParams
22
+ --- @param callback fun ( response : lsp.CompletionResponse | nil )
23
+ source .complete = function (_ , params , callback )
19
24
local client = assert (obsidian .get_client ())
20
- local can_complete , search , insert_start , insert_end , ref_type = completion .can_complete (request )
25
+ local can_complete , search , insert_start , insert_end , ref_type = completion .can_complete (params )
21
26
27
+ -- Different from cmp_obsidian
22
28
if search ~= nil then
23
29
search = util .lstrip_whitespace (search )
24
30
end
@@ -124,11 +130,11 @@ source.complete = function(_, request, callback)
124
130
newText = new_text ,
125
131
range = {
126
132
start = {
127
- line = request .context .cursor .row - 1 ,
133
+ line = params .context .cursor .row - 1 ,
128
134
character = insert_start ,
129
135
},
130
136
[" end" ] = {
131
- line = request .context .cursor .row - 1 ,
137
+ line = params .context .cursor .row - 1 ,
132
138
character = insert_end ,
133
139
},
134
140
},
@@ -146,12 +152,17 @@ source.complete = function(_, request, callback)
146
152
}
147
153
end
148
154
149
- source .execute = function (_ , item , callback )
150
- local Note = require " obsidian.note"
151
- local Path = require " obsidian.path"
152
-
155
+ --- Creates a new note using the default template for the completion item.
156
+ --- Executed after the item was selected.
157
+ --- @param completion_item lsp.CompletionItem
158
+ --- @param callback fun ( completion_item : lsp.CompletionItem | nil )
159
+ source .execute = function (_ , completion_item , callback )
153
160
local client = assert (obsidian .get_client ())
154
- local data = item .data
161
+ local data = completion_item .data
162
+
163
+ if data == nil then
164
+ return callback (nil )
165
+ end
155
166
156
167
-- Make sure `data.note` is actually an `obsidian.Note` object. If it gets serialized at some
157
168
-- point (seems to happen on Linux), it will lose its metatable.
0 commit comments