def _PreviousIdentifier(min_num_candidate_size_chars, request_data):
    def PreviousIdentifierOnLine(line, column, filetype):
        nearest_ident = ''
        for match in identifier_utils.IdentifierRegexForFiletype(
                filetype).finditer(line):
            if match.end() <= column:
                nearest_ident = match.group()
        return nearest_ident

    line_num = request_data['line_num'] - 1
    column_num = request_data['column_codepoint'] - 1
    filepath = request_data['filepath']

    contents_per_line = (SplitLines(
        request_data['file_data'][filepath]['contents']))

    filetype = request_data['first_filetype']
    ident = PreviousIdentifierOnLine(contents_per_line[line_num], column_num,
                                     filetype)
    if ident:
        if len(ident) < min_num_candidate_size_chars:
            return ''
        return ident

    line_num = line_num - 1

    if line_num < 0:
        return ''

    prev_line = contents_per_line[line_num]
    ident = PreviousIdentifierOnLine(prev_line, len(prev_line), filetype)
    if len(ident) < min_num_candidate_size_chars:
        return ''
    return ident
示例#2
0
def Range(request_data):
    filepath = request_data['filepath']
    lines = SplitLines(request_data['file_data'][filepath]['contents'])

    start = request_data['range']['start']
    start_line_num = start['line_num']
    start_line_value = lines[start_line_num - 1]
    start_codepoint = ByteOffsetToCodepointOffset(start_line_value,
                                                  start['column_num'])

    end = request_data['range']['end']
    end_line_num = end['line_num']
    end_line_value = lines[end_line_num - 1]
    end_codepoint = ByteOffsetToCodepointOffset(end_line_value,
                                                end['column_num'])

    # LSP requires to use the start of the next line as the end position for a
    # range that ends with a newline.
    if end_codepoint >= len(end_line_value):
        end_line_num += 1
        end_line_value = ''
        end_codepoint = 1

    return {
        'start': Position(start_line_num, start_line_value, start_codepoint),
        'end': Position(end_line_num, end_line_value, end_codepoint)
    }
示例#3
0
def _GetCursorIdentifier(collect_from_comments_and_strings, request_data):
    filepath = request_data['filepath']
    contents = request_data['file_data'][filepath]['contents']
    filetype = request_data['first_filetype']
    if not collect_from_comments_and_strings:
        contents = identifier_utils.RemoveIdentifierFreeText(
            contents, filetype)
    contents_per_line = SplitLines(contents)
    line = contents_per_line[request_data['line_num'] - 1]
    return identifier_utils.IdentifierAtIndex(
        line, request_data['column_codepoint'] - 1, filetype)
示例#4
0
文件: request_wrap.py 项目: jnhe/ycmd
    def _CurrentLine(self):
        current_file = self._request['filepath']
        contents = self._request['file_data'][current_file]['contents']

        try:
            return SplitLines(contents)[self._request['line_num'] - 1]
        except IndexError:
            _logger.exception('Client returned invalid line number {0} '
                              'for file {1}. Assuming empty.'.format(
                                  self._request['line_num'],
                                  self._request['filepath']))
            return ''
示例#5
0
def GetFileLines( request_data, filename ):
  """Like GetFileContents but return the contents as a list of lines. Avoid
  splitting the lines if they have already been split for the current file."""
  if filename == request_data[ 'filepath' ]:
    return request_data[ 'lines' ]
  return SplitLines( GetFileContents( request_data, filename ) )
示例#6
0
 def _CurrentLines(self):
     current_file = self['filepath']
     contents = self['file_data'][current_file]['contents']
     return SplitLines(contents)
示例#7
0
def ReplaceWithEmptyLines( regex_match ):
  return '\n' * ( len( SplitLines( regex_match.group( 0 ) ) ) - 1 )
示例#8
0
    def _CurrentLine(self):
        current_file = self._request['filepath']
        contents = self._request['file_data'][current_file]['contents']

        return SplitLines(contents)[self._request['line_num'] - 1]