def _ConvertCompletionData( completion_data ): return responses.BuildCompletionData( insertion_text = utils.ToUtf8IfNeeded( completion_data[ 'name' ] ), menu_text = utils.ToUtf8IfNeeded( completion_data[ 'name' ] ), kind = utils.ToUtf8IfNeeded( completion_data[ 'kind' ] ), extra_data = utils.ToUtf8IfNeeded( completion_data[ 'kind' ] ) )
def _ConvertDetailedCompletionData(completion_data, padding=0): name = completion_data['name'] display_parts = completion_data['displayParts'] signature = ''.join([p['text'] for p in display_parts]) menu_text = '{0} {1}'.format(name.ljust(padding), signature) return responses.BuildCompletionData( insertion_text=utils.ToUtf8IfNeeded(name), menu_text=utils.ToUtf8IfNeeded(menu_text), kind=utils.ToUtf8IfNeeded(completion_data['kind']))
def ComputeCandidatesInner(self, request_data): filename = request_data['filepath'] _logger.info("gocode completion request %s" % filename) if not filename: return contents = utils.ToUtf8IfNeeded( request_data['file_data'][filename]['contents']) offset = _ComputeOffset(contents, request_data['line_num'], request_data['column_num']) stdoutdata = self._ExecuteGoCodeBinary('-f=json', 'autocomplete', filename, str(offset), contents=contents) try: resultdata = json.loads(stdoutdata) except ValueError: _logger.error(PARSE_ERROR_MESSAGE) raise RuntimeError(PARSE_ERROR_MESSAGE) if len(resultdata) != 2: _logger.error(NO_COMPLETIONS_MESSAGE) raise RuntimeError(NO_COMPLETIONS_MESSAGE) for result in resultdata[1]: if result.get('class') == "PANIC": raise RuntimeError(GOCODE_PANIC_MESSAGE) return [_ConvertCompletionData(x) for x in resultdata[1]]
def ComputeCandidatesInner(self, request_data): filename = request_data['filepath'] _logger.info("gocode completion request %s" % filename) if not filename: return contents = utils.ToUtf8IfNeeded( request_data['file_data'][filename]['contents']) offset = _ComputeOffset(contents, request_data['line_num'], request_data['column_num']) cmd = [self._binary, '-f=json', 'autocomplete', filename, str(offset)] proc = self._popener(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdoutdata, stderrdata = proc.communicate(contents) if proc.returncode: _logger.error(COMPLETION_ERROR_MESSAGE + " code %i stderr: %s", proc.returncode, stderrdata) raise RuntimeError(COMPLETION_ERROR_MESSAGE) try: resultdata = json.loads(stdoutdata) except ValueError: _logger.error(PARSE_ERROR_MESSAGE) raise RuntimeError(PARSE_ERROR_MESSAGE) if len(resultdata) != 2: _logger.error(NO_COMPLETIONS_MESSAGE) raise RuntimeError(NO_COMPLETIONS_MESSAGE) for result in resultdata[1]: if result.get('class') == "PANIC": raise RuntimeError(GOCODE_PANIC_MESSAGE) return [_ConvertCompletionData(x) for x in resultdata[1]]
def _Reload(self, request_data): """ Syncronize TSServer's view of the file to the contents of the unsaved buffer. """ filename = request_data['filepath'] contents = request_data['file_data'][filename]['contents'] tmpfile = NamedTemporaryFile(delete=False) tmpfile.write(utils.ToUtf8IfNeeded(contents)) tmpfile.close() self._SendRequest('reload', { 'file': filename, 'tmpfile': tmpfile.name }) os.unlink(tmpfile.name)
def _GoToDefinition( self, request_data ): try: filename = request_data[ 'filepath' ] _logger.info( "godef GoTo request %s" % filename ) if not filename: return contents = utils.ToUtf8IfNeeded( request_data[ 'file_data' ][ filename ][ 'contents' ] ) offset = _ComputeOffset( contents, request_data[ 'line_num' ], request_data[ 'column_num' ] ) stdout = self._ExecuteBinary( self._binary_godef, "-i", "-f=%s" % filename, '-json', "-o=%s" % offset, contents = contents ) return self._ConstructGoToFromResponse( stdout ) except Exception: raise RuntimeError( 'Can\'t jump to definition.' )