MCPcopy
hub / github.com/ycm-core/YouCompleteMe / CompletionRequest

Class CompletionRequest

python/ycm/client/completion_request.py:30–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28
29
30class CompletionRequest( BaseRequest ):
31 def __init__( self, request_data ):
32 super().__init__()
33 self.request_data = request_data
34 self._response_future = None
35
36
37 def Start( self ):
38 self._response_future = self.PostDataToHandlerAsync( self.request_data,
39 'completions' )
40
41
42 def Done( self ):
43 return bool( self._response_future ) and self._response_future.done()
44
45
46 def _RawResponse( self ):
47 if not self._response_future:
48 return NO_COMPLETIONS
49
50 response = self.HandleFuture( self._response_future,
51 truncate_message = True )
52 if not response:
53 return NO_COMPLETIONS
54
55 # Vim may not be able to convert the 'errors' entry to its internal format
56 # so we remove it from the response.
57 errors = response.pop( 'errors', [] )
58 for e in errors:
59 exception = MakeServerException( e )
60 _logger.error( exception )
61 DisplayServerException( exception, truncate_message = True )
62
63 response[ 'line' ] = self.request_data[ 'line_num' ]
64 response[ 'column' ] = self.request_data[ 'column_num' ]
65 return response
66
67
68 def Response( self ):
69 response = self._RawResponse()
70 response[ 'completions' ] = _ConvertCompletionDatasToVimDatas(
71 response[ 'completions' ] )
72 # FIXME: Do we really need to do this AdjustCandidateInsertionText ? I feel
73 # like Vim should do that for us
74 response[ 'completions' ] = base.AdjustCandidateInsertionText(
75 response[ 'completions' ] )
76 return response
77
78
79 def OnCompleteDone( self ):
80 if not self.Done():
81 return
82
83 if 'cs' in vimsupport.CurrentFiletypes():
84 self._OnCompleteDone_Csharp()
85 else:
86 self._OnCompleteDone_FixIt()
87

Calls

no outgoing calls