summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerko Steiner <jerko.steiner@gmail.com>2019-01-07 17:55:55 +0000
committerw0rp <w0rp@users.noreply.github.com>2019-01-07 17:55:55 +0000
commit0fcd5e79a9be71027df6d7e77034d530fa9bf959 (patch)
tree1df17f03c74cc75b8b5b609037e20cce38e04dff
parent5bbe77101db18968fde65210956e54750d7ff4f5 (diff)
downloadale-0fcd5e79a9be71027df6d7e77034d530fa9bf959.zip
Add ability to manually trigger completion menu (#2177)
* Add ability to manually trigger completion menu * Mention :ALEComplete in completion docs * Add test for ALEComplete
-rw-r--r--autoload/ale/completion.vim6
-rw-r--r--doc/ale.txt14
-rw-r--r--plugin/ale.vim3
-rw-r--r--test/test_ale_complete_command.vader22
4 files changed, 45 insertions, 0 deletions
diff --git a/autoload/ale/completion.vim b/autoload/ale/completion.vim
index 9dd913f5..3bf29191 100644
--- a/autoload/ale/completion.vim
+++ b/autoload/ale/completion.vim
@@ -509,6 +509,12 @@ function! ale#completion#GetCompletions() abort
return
endif
+ call ale#completion#AlwaysGetCompletions()
+endfunction
+
+" This function can be used to manually trigger autocomplete, even when
+" g:ale_completion_enabled is set to false
+function! ale#completion#AlwaysGetCompletions() abort
let [l:line, l:column] = getcurpos()[1:2]
let l:prefix = ale#completion#GetPrefix(&filetype, l:line, l:column)
diff --git a/doc/ale.txt b/doc/ale.txt
index 1cfa7898..6bedf755 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -821,6 +821,9 @@ with |g:ale_completion_max_suggestions|.
If you don't like some of the suggestions you see, you can filter them out
with |g:ale_completion_excluded_words| or |b:ale_completion_excluded_words|.
+The |ALEComplete| command can be used to show completion suggestions manually,
+even when |g:ale_completion_enabled| is set to `0`.
+
*ale-completion-completopt-bug*
ALE implements completion as you type by temporarily adjusting |completeopt|
@@ -2236,6 +2239,17 @@ ALE will use to search for Python executables.
===============================================================================
8. Commands/Keybinds *ale-commands*
+ALEComplete *ALEComplete*
+
+ Manually trigger LSP autocomplete and show the menu. Works only when called
+ from insert mode. >
+
+ inoremap <silent> <C-Space> <C-\><C-O>:AleComplete<CR>
+<
+ A plug mapping `<Plug>(ale_complete)` is defined for this command. >
+
+ imap <C-Space> <Plug>(ale_complete)
+<
ALEDocumentation *ALEDocumentation*
Similar to the |ALEHover| command, retrieve documentation information for
diff --git a/plugin/ale.vim b/plugin/ale.vim
index f57a495c..4af59a91 100644
--- a/plugin/ale.vim
+++ b/plugin/ale.vim
@@ -204,6 +204,8 @@ command! -bar ALEDocumentation :call ale#hover#ShowDocumentationAtCursor()
" Search for appearances of a symbol, such as a type name or function name.
command! -nargs=1 ALESymbolSearch :call ale#symbol#Search(<q-args>)
+command! -bar ALEComplete :call ale#completion#AlwaysGetCompletions()
+
" <Plug> mappings for commands
nnoremap <silent> <Plug>(ale_previous) :ALEPrevious<Return>
nnoremap <silent> <Plug>(ale_previous_wrap) :ALEPreviousWrap<Return>
@@ -229,6 +231,7 @@ nnoremap <silent> <Plug>(ale_go_to_definition_in_vsplit) :ALEGoToDefinitionInVSp
nnoremap <silent> <Plug>(ale_find_references) :ALEFindReferences<Return>
nnoremap <silent> <Plug>(ale_hover) :ALEHover<Return>
nnoremap <silent> <Plug>(ale_documentation) :ALEDocumentation<Return>
+inoremap <silent> <Plug>(ale_complete) <C-\><C-O>:ALEComplete<Return>
" Set up autocmd groups now.
call ale#events#Init()
diff --git a/test/test_ale_complete_command.vader b/test/test_ale_complete_command.vader
new file mode 100644
index 00000000..c6ef8bf5
--- /dev/null
+++ b/test/test_ale_complete_command.vader
@@ -0,0 +1,22 @@
+Before:
+ function! MockAlwaysGetCompletions() abort
+ let g:get_completions_called = 0
+
+ function! ale#completion#AlwaysGetCompletions() abort
+ let g:get_completions_called = 1
+ endfunction
+ endfunction
+
+ call MockAlwaysGetCompletions()
+
+After:
+ unlet! g:get_completions_called
+ delfunction MockAlwaysGetCompletions
+ delfunction ale#completion#AlwaysGetCompletions
+
+ runtime autoload/ale/completion.vim
+
+Execute(ale#completion#AlwaysGetCompletions should be called when ALEComplete is executed):
+ AssertEqual 0, g:get_completions_called
+ ALEComplete
+ AssertEqual 1, g:get_completions_called