|
5 | 5 | --- @field config blink.cmp.SourceProviderConfigWrapper
|
6 | 6 | --- @field module blink.cmp.Source
|
7 | 7 | --- @field last_response blink.cmp.CompletionResponse | nil
|
| 8 | +--- @field resolve_tasks table<blink.cmp.CompletionItem, blink.cmp.Task> |
8 | 9 | ---
|
9 | 10 | --- @field new fun(id: string, config: blink.cmp.SourceProviderConfig): blink.cmp.SourceProvider
|
10 | 11 | --- @field get_trigger_characters fun(self: blink.cmp.SourceProvider): string[]
|
@@ -35,6 +36,7 @@ function source.new(id, config)
|
35 | 36 | )
|
36 | 37 | self.config = require('blink.cmp.sources.lib.provider.config').new(config)
|
37 | 38 | self.last_response = nil
|
| 39 | + self.resolve_tasks = {} |
38 | 40 |
|
39 | 41 | return self
|
40 | 42 | end
|
@@ -100,12 +102,23 @@ end
|
100 | 102 | --- @param item blink.cmp.CompletionItem
|
101 | 103 | --- @return blink.cmp.Task
|
102 | 104 | function source:resolve(item)
|
103 |
| - return async.task.new(function(resolve) |
104 |
| - if self.module.resolve == nil then return resolve(nil) end |
105 |
| - return self.module:resolve(item, function(resolved_item) |
106 |
| - vim.schedule(function() resolve(resolved_item) end) |
| 105 | + local tasks = self.resolve_tasks |
| 106 | + if tasks[item] == nil or tasks[item].status == async.STATUS.CANCELLED then |
| 107 | + tasks[item] = async.task.new(function(resolve) |
| 108 | + if self.module.resolve == nil then return resolve(nil) end |
| 109 | + return self.module:resolve(item, function(resolved_item) |
| 110 | + -- use the item's existing documentation and detail if the LSP didn't return it |
| 111 | + -- TODO: do we need this? this would be for java but never checked if it's needed |
| 112 | + if resolved_item ~= nil and resolved_item.documentation == nil then |
| 113 | + resolved_item.documentation = item.documentation |
| 114 | + end |
| 115 | + if resolved_item ~= nil and resolved_item.detail == nil then resolved_item.detail = item.detail end |
| 116 | + |
| 117 | + vim.schedule(function() resolve(resolved_item or item) end) |
| 118 | + end) |
107 | 119 | end)
|
108 |
| - end) |
| 120 | + end |
| 121 | + return tasks[item] |
109 | 122 | end
|
110 | 123 |
|
111 | 124 | --- Signature help ---
|
|
0 commit comments