diff --git a/pr_agent/algo/utils.py b/pr_agent/algo/utils.py index d5e1a3c6..50505e24 100644 --- a/pr_agent/algo/utils.py +++ b/pr_agent/algo/utils.py @@ -59,7 +59,7 @@ def convert_to_markdown(output_data: dict, gfm_supported: bool=True) -> str: if key.lower() == 'code feedback': if gfm_supported: markdown_text += f"\n\n- " - markdown_text += f"
{ emoji } Code feedback:\n\n" + markdown_text += f"
{ emoji } Code feedback:" else: markdown_text += f"\n\n- **{emoji} Code feedback:**\n\n" else: @@ -91,24 +91,52 @@ def parse_code_suggestion(code_suggestions: dict, gfm_supported: bool=True) -> s str: A string containing the markdown formatted text generated from the input dictionary. """ markdown_text = "" - for sub_key, sub_value in code_suggestions.items(): - if isinstance(sub_value, dict): # "code example" - markdown_text += f" - **{sub_key}:**\n" - for code_key, code_value in sub_value.items(): # 'before' and 'after' code - code_str = f"```\n{code_value}\n```" - code_str_indented = textwrap.indent(code_str, ' ') - markdown_text += f" - **{code_key}:**\n{code_str_indented}\n" - else: - if "relevant file" in sub_key.lower(): - markdown_text += f"\n - **{sub_key}:** {sub_value} \n" + if gfm_supported and 'relevant line' in code_suggestions: + # markdown_text=markdown_text.strip() + markdown_text += '' + relevant_file = '' + for sub_key, sub_value in code_suggestions.items(): + try: + if sub_key.lower() == 'relevant file': + relevant_file = sub_value.strip('`').strip('"').strip("'") + markdown_text += f"" + # continue + elif sub_key.lower() == 'suggestion': + markdown_text += f"" + elif sub_key.lower() == 'relevant line': + markdown_text += f"" + sub_value_list = sub_value.split('](') + relevant_line = sub_value_list[0].lstrip('`').lstrip('[') + if len(sub_value_list) > 1: + link = sub_value_list[1].rstrip(')').strip('`') + markdown_text += f"" + else: + markdown_text += f"" + markdown_text += "" + except Exception as e: + get_logger().exception(f"Failed to parse code suggestion: {e}") + pass + markdown_text += '
{sub_key}{relevant_file}
{sub_key}      {sub_value}
relevant line{relevant_line}{relevant_line}
' + markdown_text += "
" + else: + for sub_key, sub_value in code_suggestions.items(): + if isinstance(sub_value, dict): # "code example" + markdown_text += f" - **{sub_key}:**\n" + for code_key, code_value in sub_value.items(): # 'before' and 'after' code + code_str = f"```\n{code_value}\n```" + code_str_indented = textwrap.indent(code_str, ' ') + markdown_text += f" - **{code_key}:**\n{code_str_indented}\n" else: - markdown_text += f" **{sub_key}:** {sub_value} \n" - if not gfm_supported: - if "relevant line" not in sub_key.lower(): # nicer presentation + if "relevant file" in sub_key.lower(): + markdown_text += f"\n - **{sub_key}:** {sub_value} \n" + else: + markdown_text += f" **{sub_key}:** {sub_value} \n" + if not gfm_supported: + if "relevant line" not in sub_key.lower(): # nicer presentation # markdown_text = markdown_text.rstrip('\n') + "\\\n" # works for gitlab markdown_text = markdown_text.rstrip('\n') + " \n" # works for gitlab and bitbucker - markdown_text += "\n" + markdown_text += "\n" return markdown_text