From 0ed21bc46eedb92bddf638228662ae33b471ca5d Mon Sep 17 00:00:00 2001 From: micbou Date: Fri, 31 Mar 2017 02:06:46 +0200 Subject: [PATCH] Split OnBufferVisit again We can't use VisitedBufferRequiresReparse for the FileType autocommand event because ycmd may parse a buffer differently depending on its filetype. --- autoload/youcompleteme.vim | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/autoload/youcompleteme.vim b/autoload/youcompleteme.vim index 733162fb..409490e0 100644 --- a/autoload/youcompleteme.vim +++ b/autoload/youcompleteme.vim @@ -90,7 +90,8 @@ function! youcompleteme#Enable() " We also need to trigger buf init code on the FileType event because when " the user does :enew and then :set ft=something, we need to run buf init " code again. - autocmd BufRead,BufEnter,FileType * call s:OnBufferVisit() + autocmd BufRead,FileType * call s:OnBufferRead() + autocmd BufEnter * call s:OnBufferEnter() autocmd BufUnload * call s:OnBufferUnload() autocmd CursorHold,CursorHoldI * call s:OnCursorHold() autocmd InsertLeave * call s:OnInsertLeave() @@ -100,7 +101,7 @@ function! youcompleteme#Enable() augroup END " BufRead/FileType events are not triggered for the first loaded file. - " However, we don't directly call the s:OnBufferVisit function because it + " However, we don't directly call the s:OnBufferRead function because it " would send requests that can't succeed as the server is not ready yet and " would slow down startup. if s:AllowedToCompleteInCurrentBuffer() @@ -425,12 +426,26 @@ function! s:OnCompleteDone() endfunction -function! s:OnBufferVisit() +function! s:OnBufferRead() " We need to do this even when we are not allowed to complete in the current " buffer because we might be allowed to complete in the future! The canonical " example is creating a new buffer with :enew and then setting a filetype. call s:SetUpYcmChangedTick() + if !s:AllowedToCompleteInCurrentBuffer() + return + endif + + call s:SetUpCompleteopt() + call s:SetCompleteFunc() + call s:SetOmnicompleteFunc() + + exec s:python_command "ycm_state.OnBufferVisit()" + call s:OnFileReadyToParse() +endfunction + + +function! s:OnBufferEnter() if !s:VisitedBufferRequiresReparse() return endif