Auto merge of #1538 - vheon:fix-completer-available, r=Valloric

Fix completer available

Sorry, I deleted the branch on github by mistake. Here is the same changes from #1530 plus a buffer local variable, so we don't try to set the `omnifunc` everytime we enter insert mode. I signed the CLA.
This commit is contained in:
Homu 2015-06-16 07:21:21 +09:00
commit bc5f581b2d
3 changed files with 76 additions and 8 deletions

View File

@ -423,7 +423,10 @@ endfunction
function! s:SetCompleteFunc() function! s:SetCompleteFunc()
let &completefunc = 'youcompleteme#Complete' let &completefunc = 'youcompleteme#Complete'
let &l:completefunc = 'youcompleteme#Complete' let &l:completefunc = 'youcompleteme#Complete'
endfunction
function! s:SetOmnicompleteFunc()
if pyeval( 'ycm_state.NativeFiletypeCompletionUsable()' ) if pyeval( 'ycm_state.NativeFiletypeCompletionUsable()' )
let &omnifunc = 'youcompleteme#OmniComplete' let &omnifunc = 'youcompleteme#OmniComplete'
let &l:omnifunc = 'youcompleteme#OmniComplete' let &l:omnifunc = 'youcompleteme#OmniComplete'
@ -505,6 +508,11 @@ function! s:OnInsertEnter()
return return
endif endif
if get( b:, 'ycm_omnicomplete', 0 )
let b:ycm_omnicomplete = 1
call s:SetOmnicompleteFunc()
endif
let s:old_cursor_position = [] let s:old_cursor_position = []
endfunction endfunction
@ -559,8 +567,7 @@ endfunction
function! s:UpdateDiagnosticNotifications() function! s:UpdateDiagnosticNotifications()
let should_display_diagnostics = g:ycm_show_diagnostics_ui && let should_display_diagnostics = g:ycm_show_diagnostics_ui &&
\ s:DiagnosticUiSupportedForCurrentFiletype() && \ s:DiagnosticUiSupportedForCurrentFiletype()
\ pyeval( 'ycm_state.NativeFiletypeCompletionUsable()' )
if !should_display_diagnostics if !should_display_diagnostics
return return

View File

@ -0,0 +1,48 @@
#!/usr/bin/env python
#
# Copyright (C) 2013 Google Inc.
#
# This file is part of YouCompleteMe.
#
# YouCompleteMe is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# YouCompleteMe is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with YouCompleteMe. If not, see <http://www.gnu.org/licenses/>.
from ycm.client.base_request import ( BaseRequest, BuildRequestData,
HandleServerException )
class CompleterAvailableRequest( BaseRequest ):
def __init__( self, filetypes ):
super( CompleterAvailableRequest, self ).__init__()
self.filetypes = filetypes
self._response = None
def Start( self ):
request_data = BuildRequestData()
request_data.update( { 'filetypes': self.filetypes } )
try:
self._response = self.PostDataToHandler( request_data,
'semantic_completion_available' )
except Exception as e:
HandleServerException( e )
def Response( self ):
return self._response
def SendCompleterAvailableRequest( filetypes ):
request = CompleterAvailableRequest( filetypes )
# This is a blocking call.
request.Start()
return request.Response()

View File

@ -30,9 +30,9 @@ from ycmd.request_wrap import RequestWrap
from ycm.diagnostic_interface import DiagnosticInterface from ycm.diagnostic_interface import DiagnosticInterface
from ycm.omni_completer import OmniCompleter from ycm.omni_completer import OmniCompleter
from ycm import syntax_parse from ycm import syntax_parse
from ycmd.completers.completer_utils import FiletypeCompleterExistsForFiletype
from ycm.client.ycmd_keepalive import YcmdKeepalive from ycm.client.ycmd_keepalive import YcmdKeepalive
from ycm.client.base_request import BaseRequest, BuildRequestData from ycm.client.base_request import BaseRequest, BuildRequestData
from ycm.client.completer_available_request import SendCompleterAvailableRequest
from ycm.client.command_request import SendCommandRequest from ycm.client.command_request import SendCommandRequest
from ycm.client.completion_request import CompletionRequest from ycm.client.completion_request import CompletionRequest
from ycm.client.omni_completion_request import OmniCompletionRequest from ycm.client.omni_completion_request import OmniCompletionRequest
@ -98,6 +98,7 @@ class YouCompleteMe( object ):
self._ycmd_keepalive.Start() self._ycmd_keepalive.Start()
def _SetupServer( self ): def _SetupServer( self ):
self._available_completers = {}
server_port = utils.GetUnusedLocalhostPort() server_port = utils.GetUnusedLocalhostPort()
# The temp options file is deleted by ycmd during startup # The temp options file is deleted by ycmd during startup
with tempfile.NamedTemporaryFile( delete = False ) as options_file: with tempfile.NamedTemporaryFile( delete = False ) as options_file:
@ -217,8 +218,20 @@ class YouCompleteMe( object ):
return self._omnicomp return self._omnicomp
def FiletypeCompleterExistsForFiletype( self, filetype ):
try:
return self._available_completers[ filetype ]
except KeyError:
pass
exists_completer = ( self.IsServerAlive() and
bool( SendCompleterAvailableRequest( filetype ) ) )
self._available_completers[ filetype ] = exists_completer
return exists_completer
def NativeFiletypeCompletionAvailable( self ): def NativeFiletypeCompletionAvailable( self ):
return any( [ FiletypeCompleterExistsForFiletype( x ) for x in return any( [ self.FiletypeCompleterExistsForFiletype( x ) for x in
vimsupport.CurrentFiletypes() ] ) vimsupport.CurrentFiletypes() ] )
@ -299,10 +312,10 @@ class YouCompleteMe( object ):
def UpdateDiagnosticInterface( self ): def UpdateDiagnosticInterface( self ):
if not self.DiagnosticsForCurrentFileReady(): if ( self.DiagnosticsForCurrentFileReady() and
return self.NativeFiletypeCompletionUsable() ):
self._diag_interface.UpdateWithNewDiagnostics( self._diag_interface.UpdateWithNewDiagnostics(
self.GetDiagnosticsFromStoredRequest() ) self.GetDiagnosticsFromStoredRequest() )
def ShowDetailedDiagnostic( self ): def ShowDetailedDiagnostic( self ):