dotfiles/vim/plugins/deoplete.nvim/rplugin/python3/deoplete/source/around.py
2018-04-05 13:06:54 +02:00

53 lines
1.6 KiB
Python

# ============================================================================
# FILE: around.py
# AUTHOR: Khalidov Oleg <brooth at gmail.com>
# License: MIT license
# ============================================================================
import re
from .base import Base
from deoplete.util import parse_buffer_pattern, getlines
LINES_ABOVE = 20
LINES_BELOW = 20
class Source(Base):
def __init__(self, vim):
super().__init__(vim)
self.name = 'around'
self.mark = '[~]'
self.rank = 300
def gather_candidates(self, context):
line = context['position'][1]
candidates = []
# lines above
words = parse_buffer_pattern(
reversed(getlines(self.vim, max([1, line - LINES_ABOVE]), line)),
context['keyword_patterns'])
candidates += [{'word': x, 'menu': 'A'} for x in words]
# grab ':changes' command output
p = re.compile(r'[\s\d]+')
lines = set()
for change_line in [x[p.search(x).span()[1]:] for x
in self.vim.call(
'execute', 'changes').split('\n')
if p.search(x)]:
if change_line and change_line != '-invalid-':
lines.add(change_line)
words = parse_buffer_pattern(lines, context['keyword_patterns'])
candidates += [{'word': x, 'menu': 'C'} for x in words]
# lines below
words = parse_buffer_pattern(
getlines(self.vim, line, line + LINES_BELOW),
context['keyword_patterns'])
candidates += [{'word': x, 'menu': 'B'} for x in words]
return candidates