mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-05 13:20:39 +08:00
improve doce suggestions UI with difflib
This commit is contained in:
@ -14,7 +14,7 @@ from pr_agent.git_providers import get_git_provider
|
|||||||
from pr_agent.git_providers.git_provider import get_main_pr_language
|
from pr_agent.git_providers.git_provider import get_main_pr_language
|
||||||
from pr_agent.log import get_logger
|
from pr_agent.log import get_logger
|
||||||
from pr_agent.tools.pr_description import insert_br_after_x_chars
|
from pr_agent.tools.pr_description import insert_br_after_x_chars
|
||||||
|
import difflib
|
||||||
|
|
||||||
class PRCodeSuggestions:
|
class PRCodeSuggestions:
|
||||||
def __init__(self, pr_url: str, cli_mode=False, args: list = None,
|
def __init__(self, pr_url: str, cli_mode=False, args: list = None,
|
||||||
@ -312,7 +312,7 @@ class PRCodeSuggestions:
|
|||||||
|
|
||||||
pr_body += "<table>"
|
pr_body += "<table>"
|
||||||
header = f"Suggestions"
|
header = f"Suggestions"
|
||||||
delta = 65
|
delta = 77
|
||||||
header += " " * delta
|
header += " " * delta
|
||||||
pr_body += f"""<thead><tr><th></th><th>{header}</th></tr></thead>"""
|
pr_body += f"""<thead><tr><th></th><th>{header}</th></tr></thead>"""
|
||||||
pr_body += """<tbody>"""
|
pr_body += """<tbody>"""
|
||||||
@ -334,6 +334,11 @@ class PRCodeSuggestions:
|
|||||||
relevant_file = suggestion['relevant_file'].strip()
|
relevant_file = suggestion['relevant_file'].strip()
|
||||||
relevant_lines_start = int(suggestion['relevant_lines_start'])
|
relevant_lines_start = int(suggestion['relevant_lines_start'])
|
||||||
relevant_lines_end = int(suggestion['relevant_lines_end'])
|
relevant_lines_end = int(suggestion['relevant_lines_end'])
|
||||||
|
range_str = ""
|
||||||
|
if relevant_lines_start == relevant_lines_end:
|
||||||
|
range_str = f"[{relevant_lines_start}]"
|
||||||
|
else:
|
||||||
|
range_str = f"[{relevant_lines_start}-{relevant_lines_end}]"
|
||||||
code_snippet_link = self.git_provider.get_line_link(relevant_file, relevant_lines_start,
|
code_snippet_link = self.git_provider.get_line_link(relevant_file, relevant_lines_start,
|
||||||
relevant_lines_end)
|
relevant_lines_end)
|
||||||
# add html table for each suggestion
|
# add html table for each suggestion
|
||||||
@ -341,20 +346,31 @@ class PRCodeSuggestions:
|
|||||||
suggestion_content = suggestion['suggestion_content'].rstrip().rstrip()
|
suggestion_content = suggestion['suggestion_content'].rstrip().rstrip()
|
||||||
suggestion_content = insert_br_after_x_chars(suggestion_content, 90)
|
suggestion_content = insert_br_after_x_chars(suggestion_content, 90)
|
||||||
# pr_body += f"<tr><td><details><summary>{suggestion_content}</summary>"
|
# pr_body += f"<tr><td><details><summary>{suggestion_content}</summary>"
|
||||||
existing_code = suggestion['existing_code'].rstrip()
|
existing_code = suggestion['existing_code'].rstrip()+"\n"
|
||||||
improved_code = suggestion['improved_code'].rstrip()
|
improved_code = suggestion['improved_code'].rstrip()+"\n"
|
||||||
language_name = "python"
|
language_name = "python"
|
||||||
|
diff = difflib.unified_diff(existing_code.split('\n'),
|
||||||
|
improved_code.split('\n'))
|
||||||
|
patch_orig = "\n".join(diff)
|
||||||
|
print(patch_orig)
|
||||||
|
patch = "\n".join(patch_orig.splitlines()[5:]).strip('\n')
|
||||||
extension_s = suggestion['relevant_file'].rsplit('.')[-1]
|
extension_s = suggestion['relevant_file'].rsplit('.')[-1]
|
||||||
if extension_s and (extension_s in extension_to_language):
|
if extension_s and (extension_s in extension_to_language):
|
||||||
language_name = extension_to_language[extension_s]
|
language_name = extension_to_language[extension_s]
|
||||||
|
|
||||||
|
if len(suggestions) > 1:
|
||||||
|
example_code = "<details> <summary>Preview code:</summary>\n\n"
|
||||||
|
else:
|
||||||
example_code = ""
|
example_code = ""
|
||||||
if self.git_provider.is_supported("gfm_markdown"):
|
|
||||||
example_code = "<details> <summary> Example code:</summary>\n\n"
|
|
||||||
example_code += f"___\n\n"
|
example_code += f"___\n\n"
|
||||||
example_code += f"Existing code:\n```{language_name}\n{existing_code}\n```\n"
|
if len(suggestions) == 1:
|
||||||
example_code += f"Improved code:\n```{language_name}\n{improved_code}\n```\n"
|
example_code +="Preview code:\n"
|
||||||
if self.git_provider.is_supported("gfm_markdown"):
|
example_code += f"```diff\n{patch}\n```\n"
|
||||||
|
# example_code += f"Existing code:\n```{language_name}\n{existing_code}\n```\n"
|
||||||
|
# example_code += f"Improved code:\n```{language_name}\n{improved_code}\n```\n"
|
||||||
|
if len(suggestions) > 1:
|
||||||
example_code += "</details>\n"
|
example_code += "</details>\n"
|
||||||
|
|
||||||
pr_body += f"""
|
pr_body += f"""
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
@ -362,7 +378,7 @@ class PRCodeSuggestions:
|
|||||||
|
|
||||||
**{suggestion_content}**
|
**{suggestion_content}**
|
||||||
|
|
||||||
[{relevant_file} [{relevant_lines_start}-{relevant_lines_end}]]({code_snippet_link})
|
[{relevant_file} {range_str}]({code_snippet_link})
|
||||||
|
|
||||||
{example_code}
|
{example_code}
|
||||||
</td>
|
</td>
|
||||||
|
Reference in New Issue
Block a user