RFC: cmdline completion (#362)
* manual support dot-repeat * cmdwin and terminal * cmdline only * Fix * fix * Improve * Fix test * Support macro * disable cmdline for now * Simplify * fmt * consume once * Ignore = type * cmdline * fmt * Improve * update * fmt * Support incsearch * fix * Add api * Avoid cmdline completion if the native_menu enabled * fix for macro * Improve * fmt * Insert-mode only by default * Update * avoid conflict * Improve default mapping * Fix * fix * similar to native * Update * Fix README.md * Improve * Use <afile>
This commit is contained in:
@@ -267,7 +267,7 @@ source.complete = function(self, ctx, callback)
|
||||
completion_context = {
|
||||
triggerKind = types.lsp.CompletionTriggerKind.TriggerForIncompleteCompletions,
|
||||
}
|
||||
elseif self.request_offset ~= offset then
|
||||
elseif not vim.tbl_contains({ self.request_offset, self.offset }, offset) then
|
||||
completion_context = {
|
||||
triggerKind = types.lsp.CompletionTriggerKind.Invoked,
|
||||
}
|
||||
@@ -303,40 +303,37 @@ source.complete = function(self, ctx, callback)
|
||||
option = self:get_config().opts,
|
||||
completion_context = completion_context,
|
||||
},
|
||||
async.timeout(
|
||||
self.complete_dedup(vim.schedule_wrap(function(response)
|
||||
if #((response or {}).items or response or {}) > 0 then
|
||||
debug.log(self:get_debug_name(), 'retrieve', #(response.items or response))
|
||||
local old_offset = self.offset
|
||||
local old_entries = self.entries
|
||||
self.complete_dedup(vim.schedule_wrap(misc.once(function(response)
|
||||
if #((response or {}).items or response or {}) > 0 then
|
||||
debug.log(self:get_debug_name(), 'retrieve', #(response.items or response))
|
||||
local old_offset = self.offset
|
||||
local old_entries = self.entries
|
||||
|
||||
self.status = source.SourceStatus.COMPLETED
|
||||
self.incomplete = response.isIncomplete or false
|
||||
self.entries = {}
|
||||
for i, item in ipairs(response.items or response) do
|
||||
if (misc.safe(item) or {}).label then
|
||||
local e = entry.new(ctx, self, item)
|
||||
self.entries[i] = e
|
||||
self.offset = math.min(self.offset, e:get_offset())
|
||||
end
|
||||
self.status = source.SourceStatus.COMPLETED
|
||||
self.incomplete = response.isIncomplete or false
|
||||
self.entries = {}
|
||||
for i, item in ipairs(response.items or response) do
|
||||
if (misc.safe(item) or {}).label then
|
||||
local e = entry.new(ctx, self, item)
|
||||
self.entries[i] = e
|
||||
self.offset = math.min(self.offset, e:get_offset())
|
||||
end
|
||||
self.revision = self.revision + 1
|
||||
if #self:get_entries(ctx) == 0 then
|
||||
self.offset = old_offset
|
||||
self.entries = old_entries
|
||||
self.revision = self.revision + 1
|
||||
end
|
||||
else
|
||||
debug.log(self:get_debug_name(), 'continue', 'nil')
|
||||
if completion_context.triggerKind == types.lsp.CompletionTriggerKind.TriggerCharacter then
|
||||
self:reset()
|
||||
end
|
||||
self.status = prev_status
|
||||
end
|
||||
callback()
|
||||
end)),
|
||||
2000
|
||||
)
|
||||
self.revision = self.revision + 1
|
||||
if #self:get_entries(ctx) == 0 then
|
||||
self.offset = old_offset
|
||||
self.entries = old_entries
|
||||
self.revision = self.revision + 1
|
||||
end
|
||||
else
|
||||
debug.log(self:get_debug_name(), 'continue', 'nil')
|
||||
if completion_context.triggerKind == types.lsp.CompletionTriggerKind.TriggerCharacter then
|
||||
self:reset()
|
||||
end
|
||||
self.status = prev_status
|
||||
end
|
||||
callback()
|
||||
end)))
|
||||
)
|
||||
return true
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user