| 30 | |
| 31 | |
| 32 | class CommandRequest( BaseRequest ): |
| 33 | def __init__( self, |
| 34 | arguments, |
| 35 | extra_data = None, |
| 36 | silent = False, |
| 37 | location = None ): |
| 38 | super( CommandRequest, self ).__init__() |
| 39 | self._arguments = _EnsureBackwardsCompatibility( arguments ) |
| 40 | self._command = arguments and arguments[ 0 ] |
| 41 | self._extra_data = extra_data |
| 42 | self._response = None |
| 43 | self._request_data = None |
| 44 | self._response_future = None |
| 45 | self._silent = silent |
| 46 | self._bufnr = extra_data.pop( 'bufnr', None ) if extra_data else None |
| 47 | self._location = location |
| 48 | |
| 49 | |
| 50 | def Start( self ): |
| 51 | if self._location is not None: |
| 52 | self._request_data = BuildRequestDataForLocation( *self._location ) |
| 53 | elif self._bufnr is not None: |
| 54 | self._request_data = BuildRequestData( self._bufnr ) |
| 55 | else: |
| 56 | self._request_data = BuildRequestData() |
| 57 | |
| 58 | if self._extra_data: |
| 59 | self._request_data.update( self._extra_data ) |
| 60 | self._request_data.update( { |
| 61 | 'command_arguments': self._arguments |
| 62 | } ) |
| 63 | self._response_future = self.PostDataToHandlerAsync( |
| 64 | self._request_data, |
| 65 | 'run_completer_command' ) |
| 66 | |
| 67 | |
| 68 | def Done( self ): |
| 69 | return bool( self._response_future ) and self._response_future.done() |
| 70 | |
| 71 | |
| 72 | def Response( self ): |
| 73 | if self._response is None and self._response_future is not None: |
| 74 | # Block |
| 75 | self._response = self.HandleFuture( self._response_future, |
| 76 | display_message = not self._silent ) |
| 77 | |
| 78 | return self._response |
| 79 | |
| 80 | |
| 81 | def RunPostCommandActionsIfNeeded( self, |
| 82 | modifiers, |
| 83 | buffer_command = DEFAULT_BUFFER_COMMAND ): |
| 84 | |
| 85 | # This is a blocking call if not Done() |
| 86 | self.Response() |
| 87 | |
| 88 | if self._response is None: |
| 89 | # An exception was raised and handled. |
no outgoing calls