Refactor completeopt handling

Temporarily set &completeopt before triggering automatic completion,
instead of handling different settings afterwards.
`g:jedi#popup_select_first` is used to use `noinsert` instead of
`noselect`.

Fixes https://github.com/davidhalter/jedi-vim/issues/516.
Fixes https://github.com/davidhalter/jedi-vim/issues/706.
This commit is contained in:
Daniel Hahler
2017-06-04 02:21:33 +02:00
parent a2cf2291da
commit a46ea1a1eb

View File

@@ -582,32 +582,37 @@ function! s:save_first_col() abort
endfunction endfunction
function! jedi#complete_string(is_popup_on_dot) abort function! jedi#complete_string(autocomplete) abort
if a:is_popup_on_dot && !(g:jedi#popup_on_dot && jedi#do_popup_on_dot_in_highlight()) if a:autocomplete
if !(g:jedi#popup_on_dot && jedi#do_popup_on_dot_in_highlight())
return '' return ''
endif endif
if pumvisible() && !a:is_popup_on_dot
return "\<C-n>" let s:saved_completeopt = &completeopt
set completeopt-=longest
set completeopt+=menuone
set completeopt-=menu
if &completeopt !~# 'noinsert\|noselect'
if g:jedi#popup_select_first
set completeopt+=noinsert
else else
return "\<C-x>\<C-o>\<C-r>=jedi#complete_opened(".a:is_popup_on_dot.")\<CR>" set completeopt+=noselect
endif endif
endif
elseif pumvisible()
return "\<C-n>"
endif
return "\<C-x>\<C-o>\<C-r>=jedi#complete_opened(".a:autocomplete.")\<CR>"
endfunction endfunction
function! jedi#complete_opened(is_popup_on_dot) abort function! jedi#complete_opened(autocomplete) abort
if pumvisible() if a:autocomplete
" Only go down if it is visible, user-enabled and the longest let &completeopt = s:saved_completeopt
" option is set. unlet s:saved_completeopt
if g:jedi#popup_select_first && stridx(&completeopt, 'longest') > -1 elseif pumvisible() && g:jedi#popup_select_first && stridx(&completeopt, 'longest') > -1
return "\<Down>" return "\<Down>"
endif endif
if a:is_popup_on_dot
if &completeopt !~# '\(noinsert\|noselect\)'
" Prevent completion of the first entry with dot completion.
return "\<C-p>"
endif
endif
endif
return '' return ''
endfunction endfunction
@@ -616,7 +621,7 @@ function! jedi#smart_auto_mappings() abort
" Auto put import statement after from module.name<space> and complete " Auto put import statement after from module.name<space> and complete
if search('\m^\s*from\s\+[A-Za-z0-9._]\{1,50}\%#\s*$', 'bcn', line('.')) if search('\m^\s*from\s\+[A-Za-z0-9._]\{1,50}\%#\s*$', 'bcn', line('.'))
" Enter character and start completion. " Enter character and start completion.
return "\<space>import \<C-x>\<C-o>\<C-r>=jedi#complete_opened(1)\<CR>" return "\<space>import \<C-r>=jedi#complete_string(1)\<CR>"
endif endif
return "\<space>" return "\<space>"
endfunction endfunction