diff --git a/python/ycm/completers/cs/OmniSharpServer b/python/ycm/completers/cs/OmniSharpServer index ee198be6..53ea4d7f 160000 --- a/python/ycm/completers/cs/OmniSharpServer +++ b/python/ycm/completers/cs/OmniSharpServer @@ -1 +1 @@ -Subproject commit ee198be6f06d39cef84b0817e0b88d3e08cbc477 +Subproject commit 53ea4d7fb5190fa118ff36cdf1037644b4a2fc9f diff --git a/python/ycm/completers/cs/cs_completer.py b/python/ycm/completers/cs/cs_completer.py index 03c51566..4ec15e98 100755 --- a/python/ycm/completers/cs/cs_completer.py +++ b/python/ycm/completers/cs/cs_completer.py @@ -39,6 +39,17 @@ class CsharpCompleter( Completer ): A Completer that uses the Omnisharp server as completion engine. """ + subcommands = { + 'StartServer': (lambda self, request_data: self._StartServer( request_data )), + 'StopServer': (lambda self, request_data: self._StopServer()), + 'RestartServer': (lambda self, request_data: self._RestartServer( request_data )), + 'ServerRunning': (lambda self, request_data: self._ServerIsRunning()), + 'ServerReady': (lambda self, request_data: self._ServerIsReady()), + 'GoToDefinition': (lambda self, request_data: self._GoToDefinition( request_data )), + 'GoToDeclaration': (lambda self, request_data: self._GoToDefinition( request_data )), + 'GoToDefinitionElseDeclaration': (lambda self, request_data: self._GoToDefinition( request_data )) + } + def __init__( self, user_options ): super( CsharpCompleter, self ).__init__( user_options ) self._omnisharp_port = None @@ -65,13 +76,7 @@ class CsharpCompleter( Completer ): def DefinedSubcommands( self ): - return [ 'StartServer', - 'StopServer', - 'RestartServer', - 'ServerRunning', - 'GoToDefinition', - 'GoToDeclaration', - 'GoToDefinitionElseDeclaration' ] + return CsharpCompleter.subcommands.keys() def OnFileReadyToParse( self, request_data ): @@ -85,21 +90,11 @@ class CsharpCompleter( Completer ): raise ValueError( self.UserCommandsHelpMessage() ) command = arguments[ 0 ] - if command == 'StartServer': - return self._StartServer( request_data ) - elif command == 'StopServer': - return self._StopServer() - elif command == 'RestartServer': - if self._ServerIsRunning(): - self._StopServer() - return self._StartServer( request_data ) - elif command == 'ServerRunning': - return self._ServerIsRunning() - elif command in [ 'GoToDefinition', - 'GoToDeclaration', - 'GoToDefinitionElseDeclaration' ]: - return self._GoToDefinition( request_data ) - raise ValueError( self.UserCommandsHelpMessage() ) + if command in CsharpCompleter.subcommands: + command_lamba = CsharpCompleter.subcommands[ command ] + return command_lamba( self, request_data ) + else: + raise ValueError( self.UserCommandsHelpMessage() ) def DebugInfo( self ): @@ -181,6 +176,13 @@ class CsharpCompleter( Completer ): self._logger.info( 'Stopping OmniSharp server' ) + def _RestartServer ( self, request_data ): + """ Restarts the OmniSharp server """ + if self._ServerIsRunning(): + self._StopServer() + return self._StartServer( request_data ) + + def _GetCompletions( self, request_data ): """ Ask server for completions """ completions = self._GetResponse( '/autocomplete', @@ -221,6 +223,15 @@ class CsharpCompleter( Completer ): return False + def _ServerIsReady( self ): + """ Check if our OmniSharp server is ready """ + try: + return bool( self._omnisharp_port and + self._GetResponse( '/checkreadystatus', silent = True ) ) + except: + return False + + def _ServerLocation( self ): return 'http://localhost:' + str( self._omnisharp_port ) diff --git a/python/ycm/server/tests/get_completions_test.py b/python/ycm/server/tests/get_completions_test.py index 174ed03b..55e267d5 100644 --- a/python/ycm/server/tests/get_completions_test.py +++ b/python/ycm/server/tests/get_completions_test.py @@ -73,7 +73,7 @@ def GetCompletions_CsCompleter_Works_test(): while True: result = app.post_json( '/run_completer_command', BuildRequest( completer_target = 'filetype_default', - command_arguments = ['ServerRunning'], + command_arguments = ['ServerReady'], filetype = 'cs' ) ).json if result: break