From ca3df352abeaf6e75e6ad27330599701714abc21 Mon Sep 17 00:00:00 2001 From: joosomi Date: Sun, 25 May 2025 00:02:21 +0900 Subject: [PATCH] refactor: improve todo section handling and clarify todo content description --- pr_agent/algo/utils.py | 51 +++++++++++----------- pr_agent/settings/pr_reviewer_prompts.toml | 2 +- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/pr_agent/algo/utils.py b/pr_agent/algo/utils.py index d595dde9..82a5b782 100644 --- a/pr_agent/algo/utils.py +++ b/pr_agent/algo/utils.py @@ -211,6 +211,26 @@ def convert_to_markdown_v2(output_data: dict, value = emphasize_header(value.strip(), only_markdown=True) markdown_text += f"{value}\n\n" elif 'todo sections' in key_nice.lower(): + def format_todo_item(todo_item): + relevant_file = todo_item.get('relevant_file', '').strip() + line_number = todo_item.get('line_number', '') + content = todo_item.get('content', '') + reference_link = None + try: + if git_provider and relevant_file and line_number: + reference_link = git_provider.get_line_link(relevant_file, line_number, line_number) + except Exception as e: + print(f"Error generating link: {e}") + return f"{relevant_file} [{line_number}]: {content}" + + file_line = f"{relevant_file} [{line_number}]" + if reference_link: + if gfm_supported: + file_line = f"{file_line}" + else: + file_line = f"[{file_line}]({reference_link})" + return f"{file_line}: {content}" if content.strip() else file_line + if gfm_supported: markdown_text += f"" if is_value_no(value): @@ -220,20 +240,10 @@ def convert_to_markdown_v2(output_data: dict, if isinstance(value, list): markdown_text += "\n" + else: + markdown_text += f"

{format_todo_item(value)}

\n" markdown_text += f"\n" else: if is_value_no(value): @@ -242,18 +252,9 @@ def convert_to_markdown_v2(output_data: dict, markdown_text += f"### {emoji} ToDo sections\n\n" if isinstance(value, list): for todo_item in value: - relevant_file = todo_item.get('relevant_file', '').strip() - line_number = todo_item.get('line_number', '') - content = todo_item.get('content', '') - if git_provider and relevant_file and line_number: - reference_link = git_provider.get_line_link(relevant_file, line_number, line_number) - file_line = f"[{relevant_file} [{line_number}]]({reference_link})" - else: - file_line = f"{relevant_file} [{line_number}]" - if content.strip(): - markdown_text += f"- {file_line}: {content}\n" - else: - markdown_text += f"- {file_line}\n" + markdown_text += f"- {format_todo_item(todo_item)}\n" + else: + markdown_text += f"- {format_todo_item(value)}\n" elif 'can be split' in key_nice.lower(): if gfm_supported: markdown_text += f"" diff --git a/pr_agent/settings/pr_reviewer_prompts.toml b/pr_agent/settings/pr_reviewer_prompts.toml index cfe63562..29a73a49 100644 --- a/pr_agent/settings/pr_reviewer_prompts.toml +++ b/pr_agent/settings/pr_reviewer_prompts.toml @@ -75,7 +75,7 @@ class KeyIssuesComponentLink(BaseModel): class TodoSection(BaseModel): relevant_file: str = Field(description="The file containing the TODO comment") line_number: int = Field(description="The line number of the TODO comment") - content: str = Field(description="The content of the TODO comment. Only include items that are actual TODO comments inside code comments (e.g., lines starting with #, //, /*,