From 0fcd5e79a9be71027df6d7e77034d530fa9bf959 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Mon, 7 Jan 2019 17:55:55 +0000 Subject: [PATCH] Add ability to manually trigger completion menu (#2177) * Add ability to manually trigger completion menu * Mention :ALEComplete in completion docs * Add test for ALEComplete --- autoload/ale/completion.vim | 6 ++++++ doc/ale.txt | 14 ++++++++++++++ plugin/ale.vim | 3 +++ test/test_ale_complete_command.vader | 22 ++++++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 test/test_ale_complete_command.vader 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 :AleComplete +< + A plug mapping `(ale_complete)` is defined for this command. > + + imap (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() +command! -bar ALEComplete :call ale#completion#AlwaysGetCompletions() + " mappings for commands nnoremap (ale_previous) :ALEPrevious nnoremap (ale_previous_wrap) :ALEPreviousWrap @@ -229,6 +231,7 @@ nnoremap (ale_go_to_definition_in_vsplit) :ALEGoToDefinitionInVSp nnoremap (ale_find_references) :ALEFindReferences nnoremap (ale_hover) :ALEHover nnoremap (ale_documentation) :ALEDocumentation +inoremap (ale_complete) :ALEComplete " 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