Now properly ignoring unwanted filetypes

The previous implementation of ignoring filetypes the user doesn't want
completions for was deeply flawed. This one actually works...
This commit is contained in:
Strahinja Val Markovic 2012-08-13 19:01:55 -07:00
parent f74ddbcec5
commit bcf9ddff32

View File

@ -34,12 +34,6 @@ function! youcompleteme#Enable()
return
endif
" If the user set the current filetype as a filetype that YCM should ignore,
" then we don't do anything
if get( g:ycm_filetypes_to_ignore, &filetype, 0 )
return
endif
augroup youcompleteme
autocmd!
autocmd CursorMovedI * call s:OnCursorMovedInsertMode()
@ -101,13 +95,28 @@ function! youcompleteme#Enable()
endfunction
function! s:AllowedToCompleteInCurrentFile()
" If the user set the current filetype as a filetype that YCM should ignore,
" then we don't do anything
return !get( g:ycm_filetypes_to_ignore, &filetype, 0 )
endfunction
function! s:OnBufferVisit()
if !s:AllowedToCompleteInCurrentFile()
return
endif
call s:SetCompleteFunc()
call s:OnFileReadyToParse()
endfunction
function! s:OnCursorHold()
if !s:AllowedToCompleteInCurrentFile()
return
endif
" Order is important here; we need to extract any done diagnostics before
" reparsing the file again
call s:UpdateDiagnosticNotifications()
@ -132,6 +141,10 @@ endfunction
function! s:OnCursorMovedInsertMode()
if !s:AllowedToCompleteInCurrentFile()
return
endif
call s:UpdateCursorMoved()
call s:IdentifierFinishedOperations()
call s:ClosePreviewWindowIfNeeded()
@ -140,11 +153,19 @@ endfunction
function! s:OnCursorMovedNormalMode()
if !s:AllowedToCompleteInCurrentFile()
return
endif
call s:UpdateDiagnosticNotifications()
endfunction
function! s:OnInsertLeave()
if !s:AllowedToCompleteInCurrentFile()
return
endif
let s:omnifunc_mode = 0
call s:UpdateDiagnosticNotifications()
py ycm_state.OnInsertLeave()
@ -153,6 +174,10 @@ endfunction
function! s:OnInsertEnter()
if !s:AllowedToCompleteInCurrentFile()
return
endif
let s:old_cursor_position = []
endfunction
@ -217,11 +242,12 @@ function! s:InvokeCompletion()
" This is tricky. First, having 'refresh' set to 'always' in the dictionary
" that our completion function returns makes sure that our completion function
" is called on every keystroke. Secondly, when the sequence of characters the user typed produces no
" results in our search an infinite loop can occur. The problem is that our
" feedkeys call triggers the OnCursorMovedI event which we are tied to.
" We prevent this infinite loop from starting by making sure that the user has
" moved the cursor since the last time we provided completion results.
" is called on every keystroke. Secondly, when the sequence of characters the
" user typed produces no results in our search an infinite loop can occur. The
" problem is that our feedkeys call triggers the OnCursorMovedI event which we
" are tied to. We prevent this infinite loop from starting by making sure that
" the user has moved the cursor since the last time we provided completion
" results.
if !s:cursor_moved
return
endif