Exemple #1
0
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]]
Exemple #4
0
    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)
Exemple #6
0
 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.' )