From 4664d9184439f9c21a6829b933bfec2f1d9d3458 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Fri, 28 Jul 2023 11:24:14 +0300 Subject: [PATCH] bug fixes in gitlab code suggestion --- pr_agent/git_providers/gitlab_provider.py | 46 ++++++++++++++--------- pr_agent/tools/pr_code_suggestions.py | 4 +- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/pr_agent/git_providers/gitlab_provider.py b/pr_agent/git_providers/gitlab_provider.py index 9e27d694..b88ba28a 100644 --- a/pr_agent/git_providers/gitlab_provider.py +++ b/pr_agent/git_providers/gitlab_provider.py @@ -140,32 +140,42 @@ class GitLabProvider(GitProvider): else: pos_obj['new_line'] = target_line_no - 1 pos_obj['old_line'] = source_line_no - 1 + logging.debug(f"Creating comment in {self.id_mr} with body {body} and position {pos_obj}") self.mr.discussions.create({'body': body, 'position': pos_obj}) def publish_code_suggestions(self, code_suggestions: list): for suggestion in code_suggestions: - body = suggestion['body'] - relevant_file = suggestion['relevant_file'] - relevant_lines_start = suggestion['relevant_lines_start'] - relevant_lines_end = suggestion['relevant_lines_end'] + try: + body = suggestion['body'] + relevant_file = suggestion['relevant_file'] + relevant_lines_start = suggestion['relevant_lines_start'] + relevant_lines_end = suggestion['relevant_lines_end'] - self.diff_files = self.diff_files if self.diff_files else self.get_diff_files() - target_file = None - for file in self.diff_files: - if file.filename == relevant_file: + self.diff_files = self.diff_files if self.diff_files else self.get_diff_files() + target_file = None + for file in self.diff_files: if file.filename == relevant_file: - target_file = file - break - range = relevant_lines_end - relevant_lines_start + 1 - body = body.replace('```suggestion', f'```suggestion:-0+{range}') + if file.filename == relevant_file: + target_file = file + break + range = relevant_lines_end - relevant_lines_start # no need to add 1 + body = body.replace('```suggestion', f'```suggestion:-0+{range}') + lines = target_file.head_file.splitlines() + relevant_line_in_file = lines[relevant_lines_start - 1] - lines = target_file.head_file.splitlines() - relevant_line_in_file = lines[relevant_lines_start - 1] - edit_type, found, source_line_no, target_file, target_line_no = self.find_in_file(target_file, - relevant_line_in_file) - self.send_inline_comment(body, edit_type, found, relevant_file, relevant_line_in_file, source_line_no, - target_file, target_line_no) + # edit_type, found, source_line_no, target_file, target_line_no = self.find_in_file(target_file, + # relevant_line_in_file) + # for code suggestions, we want to edit the new code + source_line_no = None + target_line_no = relevant_lines_start + 1 + found = True + edit_type = 'addition' + + self.send_inline_comment(body, edit_type, found, relevant_file, relevant_line_in_file, source_line_no, + target_file, target_line_no) + except Exception as e: + logging.exception(f"Could not publish code suggestion:\nsuggestion: {suggestion}\nerror: {e}") def search_line(self, relevant_file, relevant_line_in_file): target_file = None diff --git a/pr_agent/tools/pr_code_suggestions.py b/pr_agent/tools/pr_code_suggestions.py index a3b388d9..6ec80ec0 100644 --- a/pr_agent/tools/pr_code_suggestions.py +++ b/pr_agent/tools/pr_code_suggestions.py @@ -96,8 +96,8 @@ class PRCodeSuggestions: logging.info(f"suggestion: {d}") relevant_file = d['relevant file'].strip() relevant_lines_str = d['relevant lines'].strip() - if ',' in relevant_lines_str: # 'relevant lines': '181, 190' - relevant_lines_str = int(relevant_lines_str.split(',')[0]) + if ',' in relevant_lines_str: # handling 'relevant lines': '181, 190' or '178-184, 188-194' + relevant_lines_str = relevant_lines_str.split(',')[0] relevant_lines_start = int(relevant_lines_str.split('-')[0]) # absolute position relevant_lines_end = int(relevant_lines_str.split('-')[-1]) content = d['suggestion content']