bug fixes in gitlab code suggestion

This commit is contained in:
mrT23
2023-07-28 11:24:14 +03:00
parent 8f16c46012
commit 4664d91844
2 changed files with 30 additions and 20 deletions

View File

@ -140,32 +140,42 @@ class GitLabProvider(GitProvider):
else: else:
pos_obj['new_line'] = target_line_no - 1 pos_obj['new_line'] = target_line_no - 1
pos_obj['old_line'] = source_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, self.mr.discussions.create({'body': body,
'position': pos_obj}) 'position': pos_obj})
def publish_code_suggestions(self, code_suggestions: list): def publish_code_suggestions(self, code_suggestions: list):
for suggestion in code_suggestions: for suggestion in code_suggestions:
body = suggestion['body'] try:
relevant_file = suggestion['relevant_file'] body = suggestion['body']
relevant_lines_start = suggestion['relevant_lines_start'] relevant_file = suggestion['relevant_file']
relevant_lines_end = suggestion['relevant_lines_end'] 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() self.diff_files = self.diff_files if self.diff_files else self.get_diff_files()
target_file = None target_file = None
for file in self.diff_files: for file in self.diff_files:
if file.filename == relevant_file:
if file.filename == relevant_file: if file.filename == relevant_file:
target_file = file if file.filename == relevant_file:
break target_file = file
range = relevant_lines_end - relevant_lines_start + 1 break
body = body.replace('```suggestion', f'```suggestion:-0+{range}') 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() # edit_type, found, source_line_no, target_file, target_line_no = self.find_in_file(target_file,
relevant_line_in_file = lines[relevant_lines_start - 1] # relevant_line_in_file)
edit_type, found, source_line_no, target_file, target_line_no = self.find_in_file(target_file, # for code suggestions, we want to edit the new code
relevant_line_in_file) source_line_no = None
self.send_inline_comment(body, edit_type, found, relevant_file, relevant_line_in_file, source_line_no, target_line_no = relevant_lines_start + 1
target_file, target_line_no) 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): def search_line(self, relevant_file, relevant_line_in_file):
target_file = None target_file = None

View File

@ -96,8 +96,8 @@ class PRCodeSuggestions:
logging.info(f"suggestion: {d}") logging.info(f"suggestion: {d}")
relevant_file = d['relevant file'].strip() relevant_file = d['relevant file'].strip()
relevant_lines_str = d['relevant lines'].strip() relevant_lines_str = d['relevant lines'].strip()
if ',' in relevant_lines_str: # 'relevant lines': '181, 190' if ',' in relevant_lines_str: # handling 'relevant lines': '181, 190' or '178-184, 188-194'
relevant_lines_str = int(relevant_lines_str.split(',')[0]) relevant_lines_str = relevant_lines_str.split(',')[0]
relevant_lines_start = int(relevant_lines_str.split('-')[0]) # absolute position relevant_lines_start = int(relevant_lines_str.split('-')[0]) # absolute position
relevant_lines_end = int(relevant_lines_str.split('-')[-1]) relevant_lines_end = int(relevant_lines_str.split('-')[-1])
content = d['suggestion content'] content = d['suggestion content']