Merge pull request #2601 from delphinus/feature/better-completion-for-deoplete
Show more candidates for Deoplete completion
This commit is contained in:
commit
36a50111b9
4 changed files with 31 additions and 7 deletions
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Reference in a new issue