From 4b4f678bef2e91bc26ab004a94701136af6711ba Mon Sep 17 00:00:00 2001 From: micbou Date: Fri, 17 Aug 2018 04:36:27 +0200 Subject: [PATCH] Support completion FixIts for C-family languages --- README.md | 2 +- doc/youcompleteme.txt | 4 +- python/ycm/client/completion_request.py | 21 ++------- python/ycm/tests/postcomplete_test.py | 60 +++++++------------------ 4 files changed, 24 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 1aaabc6d..6a26d576 100644 --- a/README.md +++ b/README.md @@ -696,7 +696,7 @@ Quick Feature Summary ### C-family languages (C, C++, Objective C, Objective C++, CUDA) -* Semantic auto-completion +* Semantic auto-completion with automatic fixes * Real-time diagnostic display * Go to include/declaration/definition (`GoTo`, etc.) * Semantic type information for identifiers (`GetType`) diff --git a/doc/youcompleteme.txt b/doc/youcompleteme.txt index 30632ee3..18d800e5 100644 --- a/doc/youcompleteme.txt +++ b/doc/youcompleteme.txt @@ -920,7 +920,7 @@ General (all languages) ~ *youcompleteme-c-family-languages* C-family languages (C, C++, Objective C, Objective C++, CUDA) ~ -- Semantic auto-completion +- Semantic auto-completion with automatic fixes - Real-time diagnostic display - Go to include/declaration/definition (|GoTo|, etc.) - Semantic type information for identifiers (|GetType|) @@ -3630,7 +3630,7 @@ http://valloric.github.io/YouCompleteMe/. The author's homepage is http://val.markovic.io. Please do **NOT** go to #vim on freenode for support. Please contact the -YouCompleteMe maintainers directly using the contact details below. +YouCompleteMe maintainers directly using the contact details. =============================================================================== *youcompleteme-license* diff --git a/python/ycm/client/completion_request.py b/python/ycm/client/completion_request.py index 4729571d..7f5af13d 100644 --- a/python/ycm/client/completion_request.py +++ b/python/ycm/client/completion_request.py @@ -23,7 +23,6 @@ from __future__ import absolute_import from builtins import * # noqa import logging -from future.utils import iteritems from ycmd.utils import ToUnicode from ycm.client.base_request import ( BaseRequest, DisplayServerException, MakeServerException ) @@ -38,12 +37,6 @@ class CompletionRequest( BaseRequest ): super( CompletionRequest, self ).__init__() self.request_data = request_data self._response_future = None - self._complete_done_hooks = { - 'cs': self._OnCompleteDone_Csharp, - 'java': self._OnCompleteDone_FixIt, - 'javascript': self._OnCompleteDone_FixIt, - 'typescript': self._OnCompleteDone_FixIt, - } def Start( self ): @@ -88,16 +81,10 @@ class CompletionRequest( BaseRequest ): if not self.Done(): return - complete_done_actions = self._GetCompleteDoneHooks() - for action in complete_done_actions: - action() - - - def _GetCompleteDoneHooks( self ): - filetypes = vimsupport.CurrentFiletypes() - for key, value in iteritems( self._complete_done_hooks ): - if key in filetypes: - yield value + if 'cs' in vimsupport.CurrentFiletypes(): + self._OnCompleteDone_Csharp() + else: + self._OnCompleteDone_FixIt() def _GetCompletionsUserMayHaveCompleted( self ): diff --git a/python/ycm/tests/postcomplete_test.py b/python/ycm/tests/postcomplete_test.py index 515bea2e..27801e2d 100644 --- a/python/ycm/tests/postcomplete_test.py +++ b/python/ycm/tests/postcomplete_test.py @@ -129,63 +129,37 @@ def _SetUpCompleteDone( completions ): yield request -@patch( 'ycm.vimsupport.CurrentFiletypes', return_value = [ 'cs' ] ) -def GetCompleteDoneHooks_ResultOnCsharp_test( *args ): - request = CompletionRequest( None ) - result = list( request._GetCompleteDoneHooks() ) - eq_( result, [ request._OnCompleteDone_Csharp ] ) - - -@patch( 'ycm.vimsupport.CurrentFiletypes', return_value = [ 'java' ] ) -def GetCompleteDoneHooks_ResultOnJava_test( *args ): - request = CompletionRequest( None ) - result = list( request._GetCompleteDoneHooks() ) - eq_( result, [ request._OnCompleteDone_FixIt ] ) - - -@patch( 'ycm.vimsupport.CurrentFiletypes', return_value = [ 'typescript' ] ) -def GetCompleteDoneHooks_ResultOnTypeScript_test( *args ): - request = CompletionRequest( None ) - result = list( request._GetCompleteDoneHooks() ) - eq_( result, [ request._OnCompleteDone_FixIt ] ) - - @patch( 'ycm.vimsupport.CurrentFiletypes', return_value = [ 'ycmtest' ] ) -def GetCompleteDoneHooks_EmptyOnOtherFiletype_test( *args ): - request = CompletionRequest( None ) - result = request._GetCompleteDoneHooks() - eq_( len( list( result ) ), 0 ) - - -@patch( 'ycm.vimsupport.CurrentFiletypes', return_value = [ 'ycmtest' ] ) -def OnCompleteDone_WithActionCallsIt_test( *args ): - request = CompletionRequest( None ) - request.Done = MagicMock( return_value = True ) - action = MagicMock() - request._complete_done_hooks[ 'ycmtest' ] = action - request.OnCompleteDone() - ok_( action.called ) - - -@patch( 'ycm.vimsupport.CurrentFiletypes', return_value = [ 'ycmtest' ] ) -def OnCompleteDone_NoActionNoError_test( *args ): +def OnCompleteDone_DefaultFixIt_test( *args ): request = CompletionRequest( None ) request.Done = MagicMock( return_value = True ) request._OnCompleteDone_Csharp = MagicMock() request._OnCompleteDone_FixIt = MagicMock() request.OnCompleteDone() request._OnCompleteDone_Csharp.assert_not_called() + request._OnCompleteDone_FixIt.assert_called_once_with() + + +@patch( 'ycm.vimsupport.CurrentFiletypes', return_value = [ 'cs' ] ) +def OnCompleteDone_CsharpFixIt_test( *args ): + request = CompletionRequest( None ) + request.Done = MagicMock( return_value = True ) + request._OnCompleteDone_Csharp = MagicMock() + request._OnCompleteDone_FixIt = MagicMock() + request.OnCompleteDone() + request._OnCompleteDone_Csharp.assert_called_once_with() request._OnCompleteDone_FixIt.assert_not_called() @patch( 'ycm.vimsupport.CurrentFiletypes', return_value = [ 'ycmtest' ] ) -def OnCompleteDone_NoActionIfNotDone_test( *args ): +def OnCompleteDone_NoFixItIfNotDone_test( *args ): request = CompletionRequest( None ) request.Done = MagicMock( return_value = False ) - action = MagicMock() - request._complete_done_hooks[ 'ycmtest' ] = action + request._OnCompleteDone_Csharp = MagicMock() + request._OnCompleteDone_FixIt = MagicMock() request.OnCompleteDone() - action.assert_not_called() + request._OnCompleteDone_Csharp.assert_not_called() + request._OnCompleteDone_FixIt.assert_not_called() def FilterToCompletedCompletions_MatchIsReturned_test():