summaryrefslogtreecommitdiff
path: root/rplugin/python3/deoplete/sources/ale.py
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2019-05-21 13:53:09 +0100
committerw0rp <devw0rp@gmail.com>2019-05-21 13:53:09 +0100
commit3e3801e81ef70d3b35b7c527fbd1b4f62d50bae5 (patch)
tree79ce1ca62632864002e002bef38e957fe46025bb /rplugin/python3/deoplete/sources/ale.py
parent89db85121c001fc60787647f012978a2328816a5 (diff)
downloadale-3e3801e81ef70d3b35b7c527fbd1b4f62d50bae5.zip
Revert "Fix #2492 - Remove all Deoplete support for now"
This reverts commit 975cc7af8fbabe234a220c84e56b7ff719d8d959.
Diffstat (limited to 'rplugin/python3/deoplete/sources/ale.py')
-rw-r--r--rplugin/python3/deoplete/sources/ale.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/rplugin/python3/deoplete/sources/ale.py b/rplugin/python3/deoplete/sources/ale.py
new file mode 100644
index 00000000..7ed2f6c0
--- /dev/null
+++ b/rplugin/python3/deoplete/sources/ale.py
@@ -0,0 +1,54 @@
+"""
+A Deoplete source for ALE completion via tsserver and LSP.
+"""
+__author__ = 'Joao Paulo, w0rp'
+
+try:
+ from deoplete.source.base import Base
+except ImportError:
+ # Mock the Base class if deoplete isn't available, as mock isn't available
+ # in the Docker image.
+ class Base(object):
+ def __init__(self, vim):
+ pass
+
+
+# Make sure this code is valid in Python 2, used for running unit tests.
+class Source(Base):
+
+ def __init__(self, vim):
+ super(Source, self).__init__(vim)
+
+ self.name = 'ale'
+ self.mark = '[L]'
+ self.rank = 100
+ self.is_bytepos = True
+ self.min_pattern_length = 1
+
+ # Returns an integer for the start position, as with omnifunc.
+ def get_completion_position(self):
+ return self.vim.call('ale#completion#GetCompletionPosition')
+
+ def gather_candidates(self, context):
+ # Stop early if ALE can't provide completion data for this buffer.
+ if not self.vim.call('ale#completion#CanProvideCompletions'):
+ return None
+
+ if context.get('is_refresh'):
+ context['is_async'] = False
+
+ if context['is_async']:
+ # Result is the same as for omnifunc, or None.
+ result = self.vim.call('ale#completion#GetCompletionResult')
+
+ if result is not None:
+ context['is_async'] = False
+
+ return result
+ else:
+ context['is_async'] = True
+
+ # Request some completion results.
+ self.vim.call('ale#completion#GetCompletions', 'deoplete')
+
+ return []