def parse_at_cursor(cursor, buffer): args_range = _get_args_range(cursor, buffer) if not args_range: return None (start_row, start_col), (end_row, end_col) = args_range beginning = buffer[start_row][:start_col + 1] ending = buffer[end_row][end_col:] buffer_range_len = sum( len(buffer[index]) for index in range(start_row, end_row + 1)) args_start = start_col + 1 args_end = args_start + buffer_range_len - len(beginning) - len(ending) return type( '', (), { 'start_row_index': start_row, 'end_row_index': end_row, 'start_row_indent': _get_line_indent(buffer[start_row]), 'beginning': beginning, 'args': parse_args_line(''.join( buffer[start_row:end_row + 1])[args_start:args_end]), 'ending': ending, })
def test_parse_args_line_empty_args_returns_array_with_original_args_line(): assert args_parser.parse_args_line(',,,') == [',,,']
def test_parse_args_line_nested_calls_multiple_bracket_types_returns_args(): assert (args_parser.parse_args_line( 'l1([1,2,3,], {"a": [3,6,7],}), l2[5], {}, []') == [ 'l1([1,2,3,], {"a": [3,6,7],})', 'l2[5]', '{}', '[]' ])
def test_parse_args_line_nested_calls_single_bracket_type_returns_args(): assert (args_parser.parse_args_line('l11(l21(l31(a, b), c), l22(d, e)), f') == ['l11(l21(l31(a, b), c), l22(d, e))', 'f'])
def test_parse_args_line_returns_args_with_spaces_discarded(): assert args_parser.parse_args_line(' a , b,c , d') == [ 'a', 'b', 'c', 'd' ]
def test_parse_args_line_invalid_args_returns_array_with_original_args_line( invalid_line): assert args_parser.parse_args_line(invalid_line) == [invalid_line]