summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShougo Matsushita <Shougo.Matsu@gmail.com>2020-11-19 15:37:27 +0900
committerShougo Matsushita <Shougo.Matsu@gmail.com>2020-11-19 15:37:27 +0900
commit58db1b1c80d67dd0f48c8224c4e4d737885a2f65 (patch)
tree0832de47f16c7f08393a896e15ac9ee2f1395a48
parent27c5ddba448e50e182985e1582dd519342986cef (diff)
downloaddeoplete.nvim-58db1b1c80d67dd0f48c8224c4e4d737885a2f65.zip
Skip if old completion
-rw-r--r--autoload/deoplete/handler.vim1
-rw-r--r--autoload/deoplete/init.vim1
-rw-r--r--rplugin/python3/deoplete/context.py1
-rw-r--r--rplugin/python3/deoplete/deoplete.py10
4 files changed, 11 insertions, 2 deletions
diff --git a/autoload/deoplete/handler.vim b/autoload/deoplete/handler.vim
index e355063..bf98ce5 100644
--- a/autoload/deoplete/handler.vim
+++ b/autoload/deoplete/handler.vim
@@ -61,6 +61,7 @@ function! deoplete#handler#_do_complete() abort
let prev.candidates = context.candidates
let prev.complete_position = context.complete_position
let prev.linenr = line('.')
+ let prev.time = context.time
if context.event ==# 'Manual'
let context.event = ''
diff --git a/autoload/deoplete/init.vim b/autoload/deoplete/init.vim
index cd9ccfa..e181e81 100644
--- a/autoload/deoplete/init.vim
+++ b/autoload/deoplete/init.vim
@@ -274,6 +274,7 @@ function! deoplete#init#_prev_completion() abort
\ 'linenr': -1,
\ 'candidates': [],
\ 'complete_position': -1,
+ \ 'time': reltime(),
\ }
endfunction
diff --git a/rplugin/python3/deoplete/context.py b/rplugin/python3/deoplete/context.py
index 0983a40..63aeaf1 100644
--- a/rplugin/python3/deoplete/context.py
+++ b/rplugin/python3/deoplete/context.py
@@ -48,6 +48,7 @@ class Context(object):
'deoplete#util#get_next_input', event),
'position': self._vim.call('getpos', '.'),
'same_filetypes': same_filetypes,
+ 'time': self._vim.call('reltime'),
}
context.update(self._cached) # type: ignore
diff --git a/rplugin/python3/deoplete/deoplete.py b/rplugin/python3/deoplete/deoplete.py
index 3774e59..475590a 100644
--- a/rplugin/python3/deoplete/deoplete.py
+++ b/rplugin/python3/deoplete/deoplete.py
@@ -96,9 +96,10 @@ class Deoplete(logger.LoggingMixin):
if needs_poll:
self._vim.call('deoplete#handler#_async_timer_start')
- # Async update is skipped if same.
- # Note: If needs_poll, it cannot be skipped.
prev_completion = self._vim.vars['deoplete#_prev_completion']
+
+ # Skip if async update is same.
+ # Note: If needs_poll, it cannot be skipped.
prev_candidates = prev_completion['candidates']
event = context['event']
same_candidates = prev_candidates and candidates == prev_candidates
@@ -106,6 +107,10 @@ class Deoplete(logger.LoggingMixin):
event == 'Async' or event == 'Update'):
return
+ # Skip if old completion.
+ if context['time'] < prev_completion['time']:
+ return
+
# error(self._vim, candidates)
self._vim.vars['deoplete#_context'] = {
'complete_position': position,
@@ -113,6 +118,7 @@ class Deoplete(logger.LoggingMixin):
'candidates': candidates,
'event': context['event'],
'input': context['input'],
+ 'time': context['time'],
'is_async': needs_poll,
}