|
@@ -17,26 +17,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+import vim
|
|
import time
|
|
import time
|
|
-from ycm.client.base_request import BaseRequest, BuildRequestData
|
|
+from ycm.client.base_request import BaseRequest, BuildRequestData, ServerError
|
|
|
|
+from ycm import vimsupport
|
|
|
|
+from ycm.utils import ToUtf8IfNeeded
|
|
|
|
|
|
|
|
|
|
class CommandRequest( BaseRequest ):
|
|
class CommandRequest( BaseRequest ):
|
|
- class ServerResponse( object ):
|
|
|
|
- def __init__( self ):
|
|
|
|
- pass
|
|
|
|
-
|
|
|
|
- def Valid( self ):
|
|
|
|
- return True
|
|
|
|
-
|
|
|
|
def __init__( self, arguments, completer_target = None ):
|
|
def __init__( self, arguments, completer_target = None ):
|
|
super( CommandRequest, self ).__init__()
|
|
super( CommandRequest, self ).__init__()
|
|
self._arguments = arguments
|
|
self._arguments = arguments
|
|
self._completer_target = ( completer_target if completer_target
|
|
self._completer_target = ( completer_target if completer_target
|
|
else 'filetype_default' )
|
|
else 'filetype_default' )
|
|
-
|
|
+ self._is_goto_command = (
|
|
-
|
|
+ True if arguments and arguments[ 0 ].startswith( 'GoTo' ) else False )
|
|
-
|
|
+ self._response = None
|
|
|
|
+
|
|
|
|
|
|
def Start( self ):
|
|
def Start( self ):
|
|
request_data = BuildRequestData()
|
|
request_data = BuildRequestData()
|
|
@@ -44,34 +41,51 @@ class CommandRequest( BaseRequest ):
|
|
'completer_target': self._completer_target,
|
|
'completer_target': self._completer_target,
|
|
'command_arguments': self._arguments
|
|
'command_arguments': self._arguments
|
|
} )
|
|
} )
|
|
- self._response = self.PostDataToHandler( request_data,
|
|
+ try:
|
|
- 'run_completer_command' )
|
|
+ self._response = self.PostDataToHandler( request_data,
|
|
|
|
+ 'run_completer_command' )
|
|
|
|
+ except ServerError as e:
|
|
|
|
+ vimsupport.PostVimMessage( e )
|
|
|
|
|
|
|
|
|
|
def Response( self ):
|
|
def Response( self ):
|
|
-
|
|
+ return self._response
|
|
-
|
|
+
|
|
-
|
|
+
|
|
-
|
|
+ def RunPostCommandActionsIfNeeded( self ):
|
|
-
|
|
+ if not self._is_goto_command or not self.Done() or not self._response:
|
|
-
|
|
+ return
|
|
-
|
|
+
|
|
-
|
|
+ if isinstance( self._response, list ):
|
|
-
|
|
+ defs = [ _BuildQfListItem( x ) for x in self._response ]
|
|
-
|
|
+ vim.eval( 'setqflist( %s )' % repr( defs ) )
|
|
-
|
|
+ vim.eval( 'youcompleteme#OpenGoToList()' )
|
|
-
|
|
+ else:
|
|
-
|
|
+ vimsupport.JumpToLocation( self._response[ 'filepath' ],
|
|
-
|
|
+ self._response[ 'line_num' ] + 1,
|
|
-
|
|
+ self._response[ 'column_num' ] )
|
|
- return self.ServerResponse()
|
|
+
|
|
-
|
|
+
|
|
-
|
|
+
|
|
-def SendCommandRequest( self, arguments, completer ):
|
|
+
|
|
- request = CommandRequest( self, arguments, completer )
|
|
+def SendCommandRequest( arguments, completer ):
|
|
|
|
+ request = CommandRequest( arguments, completer )
|
|
request.Start()
|
|
request.Start()
|
|
while not request.Done():
|
|
while not request.Done():
|
|
time.sleep( 0.1 )
|
|
time.sleep( 0.1 )
|
|
|
|
|
|
|
|
+ request.RunPostCommandActionsIfNeeded()
|
|
return request.Response()
|
|
return request.Response()
|
|
|
|
|
|
|
|
+
|
|
|
|
+def _BuildQfListItem( goto_data_item ):
|
|
|
|
+ qf_item = {}
|
|
|
|
+ if 'filepath' in goto_data_item:
|
|
|
|
+ qf_item[ 'filename' ] = ToUtf8IfNeeded( goto_data_item[ 'filepath' ] )
|
|
|
|
+ if 'description' in goto_data_item:
|
|
|
|
+ qf_item[ 'text' ] = ToUtf8IfNeeded( goto_data_item[ 'description' ] )
|
|
|
|
+ if 'line_num' in goto_data_item:
|
|
|
|
+ qf_item[ 'lnum' ] = goto_data_item[ 'line_num' ] + 1
|
|
|
|
+ if 'column_num' in goto_data_item:
|
|
|
|
+ qf_item[ 'col' ] = goto_data_item[ 'column_num' ]
|
|
|
|
+ return qf_item
|