Improve struct and pointer autocompletion in C (#4231)

* Add explicit trigger characters for C (#4226)

* Stop completion before issuing subsequent requests (#4226)

Co-authored-by: Marios Sioutis <26476573+s-marios@users.noreply.github.com>
This commit is contained in:
Marios S 2022-07-04 22:00:29 +09:00 committed by GitHub
parent d6f3d4976d
commit a918f8c7bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 0 deletions

View File

@ -6,6 +6,7 @@ scriptencoding utf-8
" only valid in Insert mode. This way, feedkeys() won't send these keys if you " only valid in Insert mode. This way, feedkeys() won't send these keys if you
" quit Insert mode quickly enough. " quit Insert mode quickly enough.
inoremap <silent> <Plug>(ale_show_completion_menu) <C-x><C-o><C-p> inoremap <silent> <Plug>(ale_show_completion_menu) <C-x><C-o><C-p>
inoremap <silent> <Plug>(ale_stop_completion_menu) <C-x><C-z>
" If we hit the key sequence in normal mode, then we won't show the menu, so " If we hit the key sequence in normal mode, then we won't show the menu, so
" we should restore the old settings right away. " we should restore the old settings right away.
nnoremap <silent> <Plug>(ale_show_completion_menu) :call ale#completion#RestoreCompletionOptions()<CR> nnoremap <silent> <Plug>(ale_show_completion_menu) :call ale#completion#RestoreCompletionOptions()<CR>
@ -133,6 +134,7 @@ let s:should_complete_map = {
\ 'typescript': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|''$|"$', \ 'typescript': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|''$|"$',
\ 'rust': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$', \ 'rust': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$',
\ 'cpp': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$|-\>$', \ 'cpp': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$|-\>$',
\ 'c': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|-\>$',
\} \}
" Regular expressions for finding the start column to replace with completion. " Regular expressions for finding the start column to replace with completion.
@ -148,6 +150,7 @@ let s:trigger_character_map = {
\ 'typescript': ['.', '''', '"'], \ 'typescript': ['.', '''', '"'],
\ 'rust': ['.', '::'], \ 'rust': ['.', '::'],
\ 'cpp': ['.', '::', '->'], \ 'cpp': ['.', '::', '->'],
\ 'c': ['.', '->'],
\} \}
function! s:GetFiletypeValue(map, filetype) abort function! s:GetFiletypeValue(map, filetype) abort
@ -978,6 +981,14 @@ function! ale#completion#StopTimer() abort
let s:timer_id = -1 let s:timer_id = -1
endfunction endfunction
" Close the previous completion menu (if any), so that the newer autocompletion
" candidates will show up
function! s:closePreviousCompletionMenu() abort
if exists('*complete_info') && !empty(complete_info(['mode']))
call ale#util#FeedKeys("\<Plug>(ale_stop_completion_menu)")
endif
endfunction
function! ale#completion#Queue() abort function! ale#completion#Queue() abort
if !get(b:, 'ale_completion_enabled', g:ale_completion_enabled) if !get(b:, 'ale_completion_enabled', g:ale_completion_enabled)
return return
@ -999,6 +1010,8 @@ function! ale#completion#Queue() abort
call ale#completion#StopTimer() call ale#completion#StopTimer()
call s:closePreviousCompletionMenu()
let s:timer_id = timer_start(g:ale_completion_delay, function('s:TimerHandler')) let s:timer_id = timer_start(g:ale_completion_delay, function('s:TimerHandler'))
endfunction endfunction

View File

@ -32,6 +32,7 @@ class Source(Base):
'rust': r'(\.|::)\w*$', 'rust': r'(\.|::)\w*$',
'typescript': r'(\.|\'|")\w*$', 'typescript': r'(\.|\'|")\w*$',
'cpp': r'(\.|::|->)\w*$', 'cpp': r'(\.|::|->)\w*$',
'c': r'(\.|->)\w*$',
} }
# Returns an integer for the start position, as with omnifunc. # Returns an integer for the start position, as with omnifunc.

View File

@ -53,6 +53,7 @@ class DeopleteSourceTest(unittest.TestCase):
'rust': r'(\.|::)\w*$', 'rust': r'(\.|::)\w*$',
'typescript': r'(\.|\'|")\w*$', 'typescript': r'(\.|\'|")\w*$',
'cpp': r'(\.|::|->)\w*$', 'cpp': r'(\.|::|->)\w*$',
'c': r'(\.|->)\w*$',
}, },
'is_bytepos': True, 'is_bytepos': True,
'is_volatile': True, 'is_volatile': True,