This commit is contained in:
hrsh7th
2021-10-28 01:59:50 +09:00
parent 881ca573db
commit 58d081300b

View File

@@ -151,7 +151,7 @@ core.prepare = function(self)
end end
---Check auto-completion ---Check auto-completion
core.on_change = function(self, event) core.on_change = function(self, trigger_event)
local ignore = false local ignore = false
ignore = ignore or self.suspending ignore = ignore or self.suspending
ignore = ignore or (vim.fn.pumvisible() == 1 and (vim.v.completed_item).word) ignore = ignore or (vim.fn.pumvisible() == 1 and (vim.v.completed_item).word)
@@ -161,14 +161,14 @@ core.on_change = function(self, event)
return return
end end
self:autoindent(event, function() self:autoindent(trigger_event, function()
local ctx = self:get_context({ reason = types.cmp.ContextReason.Auto }) local ctx = self:get_context({ reason = types.cmp.ContextReason.Auto })
debug.log(('ctx: `%s`'):format(ctx.cursor_before_line)) debug.log(('ctx: `%s`'):format(ctx.cursor_before_line))
if ctx:changed(ctx.prev_context) then if ctx:changed(ctx.prev_context) then
self.view:on_change() self.view:on_change()
debug.log('changed') debug.log('changed')
if vim.tbl_contains(config.get().completion.autocomplete or {}, event) then if vim.tbl_contains(config.get().completion.autocomplete or {}, trigger_event) then
self:complete(ctx) self:complete(ctx)
else else
self.filter.timeout = THROTTLE_TIME self.filter.timeout = THROTTLE_TIME
@@ -193,31 +193,36 @@ core.on_moved = function(self)
end end
---Check autoindent ---Check autoindent
---@param event cmp.TriggerEvent ---@param trigger_event cmp.TriggerEvent
---@param callback function ---@param callback function
core.autoindent = function(self, event, callback) core.autoindent = function(self, trigger_event, callback)
if event == types.cmp.TriggerEvent.TextChanged then if trigger_event ~= types.cmp.TriggerEvent.TextChanged then
local cursor_before_line = api.get_cursor_before_line() return callback()
local prefix = pattern.matchstr('[^[:blank:]]\\+$', cursor_before_line) end
if prefix then if not api.is_insert_mode() then
for _, key in ipairs(vim.split(vim.bo.indentkeys, ',')) do return callback()
if vim.tbl_contains({ '=' .. prefix, '0=' .. prefix }, key) then end
local release = self:suspend()
vim.schedule(function() local cursor_before_line = api.get_cursor_before_line()
if cursor_before_line == api.get_cursor_before_line() then local prefix = pattern.matchstr('[^[:blank:]]\\+$', cursor_before_line)
local indentkeys = vim.bo.indentkeys if prefix then
vim.bo.indentkeys = indentkeys .. ',!^F' for _, key in ipairs(vim.split(vim.bo.indentkeys, ',')) do
keymap.feedkeys(keymap.t('<C-f>'), 'n', function() if vim.tbl_contains({ '=' .. prefix, '0=' .. prefix }, key) then
vim.bo.indentkeys = indentkeys local release = self:suspend()
release() vim.schedule(function()
callback() if cursor_before_line == api.get_cursor_before_line() then
end) local indentkeys = vim.bo.indentkeys
else vim.bo.indentkeys = indentkeys .. ',!^F'
keymap.feedkeys(keymap.t('<C-f>'), 'n', function()
vim.bo.indentkeys = indentkeys
release()
callback() callback()
end end)
end) else
return callback()
end end
end)
return
end end
end end
end end