Merge pull request #2601 from delphinus/feature/better-completion-for-deoplete

Show more candidates for Deoplete completion
This commit is contained in:
w0rp 2019-07-14 10:29:03 +01:00 committed by GitHub
commit 36a50111b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 7 deletions

View file

@ -60,7 +60,8 @@ let s:omni_start_map = {
\ '<default>': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$', \ '<default>': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$',
\} \}
" A map of exact characters for triggering LSP completions. " A map of exact characters for triggering LSP completions. Do not forget to
" update self.input_patterns in ale.py in updating entries in this map.
let s:trigger_character_map = { let s:trigger_character_map = {
\ '<default>': ['.'], \ '<default>': ['.'],
\ 'typescript': ['.', '''', '"'], \ 'typescript': ['.', '''', '"'],
@ -217,6 +218,10 @@ function! ale#completion#GetCompletionPosition() abort
return l:column - len(l:match) - 1 return l:column - len(l:match) - 1
endfunction endfunction
function! ale#completion#GetCompletionPositionForDeoplete(input) abort
return match(a:input, '\k*$')
endfunction
function! ale#completion#GetCompletionResult() abort function! ale#completion#GetCompletionResult() abort
if exists('b:ale_completion_result') if exists('b:ale_completion_result')
return b:ale_completion_result return b:ale_completion_result

View file

@ -24,10 +24,19 @@ class Source(Base):
self.rank = 1000 self.rank = 1000
self.is_bytepos = True self.is_bytepos = True
self.min_pattern_length = 1 self.min_pattern_length = 1
# Do not forget to update s:trigger_character_map in completion.vim in
# updating entries in this map.
self.input_patterns = {
'_': r'\.\w*$',
'rust': r'(\.|::)\w*$',
'typescript': r'(\.|\'|")\w*$',
}
# Returns an integer for the start position, as with omnifunc. # Returns an integer for the start position, as with omnifunc.
def get_completion_position(self): def get_complete_position(self, context):
return self.vim.call('ale#completion#GetCompletionPosition') return self.vim.call(
'ale#completion#GetCompletionPositionForDeoplete', context['input']
)
def gather_candidates(self, context): def gather_candidates(self, context):
# Stop early if ALE can't provide completion data for this buffer. # Stop early if ALE can't provide completion data for this buffer.

View file

@ -32,6 +32,10 @@ Execute(ale#completion#GetCompletionPosition() should return the position in the
" This is the first character of 'bar' " This is the first character of 'bar'
AssertEqual 4, ale#completion#GetCompletionPosition() AssertEqual 4, ale#completion#GetCompletionPosition()
Execute(ale#completion#GetCompletionPositionForDeoplete() should return the position on the given input string):
" This is the first character of 'bar'
AssertEqual 4, ale#completion#GetCompletionPositionForDeoplete('foo bar')
Execute(ale#completion#CanProvideCompletions should return 0 when no completion sources are available): Execute(ale#completion#CanProvideCompletions should return 0 when no completion sources are available):
AssertEqual 0, ale#completion#CanProvideCompletions() AssertEqual 0, ale#completion#CanProvideCompletions()

View file

@ -41,6 +41,11 @@ class DeopleteSourceTest(unittest.TestCase):
) )
self.assertEqual(attributes, { self.assertEqual(attributes, {
'input_patterns': {
'_': r'\.\w*$',
'rust': r'(\.|::)\w*$',
'typescript': r'(\.|\'|")\w*$',
},
'is_bytepos': True, 'is_bytepos': True,
'mark': '[L]', 'mark': '[L]',
'min_pattern_length': 1, 'min_pattern_length': 1,
@ -48,12 +53,13 @@ class DeopleteSourceTest(unittest.TestCase):
'rank': 1000, 'rank': 1000,
}) })
def test_completion_position(self): def test_complete_position(self):
self.call_results['ale#completion#GetCompletionPosition'] = 2 self.call_results['ale#completion#GetCompletionPositionForDeoplete'] = 2
context = {'input': 'foo'}
self.assertEqual(self.source.get_completion_position(), 2) self.assertEqual(self.source.get_complete_position(context), 2)
self.assertEqual(self.call_list, [ self.assertEqual(self.call_list, [
('ale#completion#GetCompletionPosition', ()), ('ale#completion#GetCompletionPositionForDeoplete', ('foo',)),
]) ])
def test_request_completion_results(self): def test_request_completion_results(self):