improved review

This commit is contained in:
mrT23
2023-08-22 20:10:36 +03:00
parent 4184f81090
commit 04be1573d5
5 changed files with 67 additions and 31 deletions

View File

@ -24,7 +24,7 @@ OUTPUT_BUFFER_TOKENS_HARD_THRESHOLD = 600
PATCH_EXTRA_LINES = 3
def get_pr_diff(git_provider: GitProvider, token_handler: TokenHandler, model: str,
add_line_numbers_to_hunks: bool = True, disable_extra_lines: bool = True) -> str:
add_line_numbers_to_hunks: bool = False, disable_extra_lines: bool = False) -> str:
"""
Returns a string with the diff of the pull request, applying diff minimization techniques if needed.

View File

@ -32,33 +32,37 @@ def convert_to_markdown(output_data: dict) -> str:
emojis = {
"Main theme": "🎯",
"PR summary": "📝",
"Type of PR": "📌",
"Score": "🏅",
"Relevant tests added": "🧪",
"Unrelated changes": "⚠️",
"Focused PR": "",
"Security concerns": "🔒",
"General PR suggestions": "💡",
"General suggestions": "💡",
"Insights from user's answers": "📝",
"Code feedback": "🤖",
}
for key, value in output_data.items():
if not value:
if value is None:
continue
if isinstance(value, dict):
markdown_text += f"## {key}\n\n"
markdown_text += convert_to_markdown(value)
elif isinstance(value, list):
if key.lower() == 'code feedback':
markdown_text += "\n" # just looks nicer with additional line breaks
emoji = emojis.get(key, "")
markdown_text += f"- {emoji} **{key}:**\n\n"
if key.lower() == 'code feedback':
markdown_text += f"\n\n- **<details><summary> { emoji } Code feedback:**</summary>\n\n"
else:
markdown_text += f"- {emoji} **{key}:**\n\n"
for item in value:
if isinstance(item, dict) and key.lower() == 'code feedback':
markdown_text += parse_code_suggestion(item)
elif item:
markdown_text += f" - {item}\n"
if key.lower() == 'code feedback':
markdown_text += "</details>\n\n"
elif value != 'n/a':
emoji = emojis.get(key, "")
markdown_text += f"- {emoji} **{key}:** {value}\n"

View File

@ -12,11 +12,11 @@ max_description_tokens = 500
max_commits_tokens = 500
[pr_reviewer] # /review #
require_focused_review=true
require_focused_review=false
require_score_review=false
require_tests_review=true
require_security_review=true
num_code_suggestions=3
num_code_suggestions=4
inline_code_comments = false
ask_and_reflect=false
automatic_review=true

View File

@ -36,7 +36,7 @@ Specific instructions:
- Provide the exact line number range (inclusive) for each issue.
- Assume there is additional relevant code, that is not included in the diff.
- Provide up to {{ num_code_suggestions }} code suggestions.
- Avoid making suggestions that have already been implemented in the PR code. For example, if you want to add logs or change a variable to const, or anything else, make sure it isn't already in the '__new hunk__' code.
- Avoid making suggestions that have already been implemented in the PR code. For example, if you want to add logs, or change a variable to const, or anything else, make sure it isn't already in the '__new hunk__' code.
- Don't suggest to add docstring or type hints.
{%- if extra_instructions %}

View File

@ -1,13 +1,36 @@
[pr_review_prompt]
system="""You are CodiumAI-PR-Reviewer, a language model designed to review git pull requests.
Your task is to provide constructive and concise feedback for the PR, and also provide meaningful code suggestions to improve the new PR code (the '+' lines).
system="""You are PR-Reviewer, a language model designed to review git pull requests.
Your task is to provide constructive and concise feedback for the PR, and also provide meaningful code suggestions.
Example PR Diff input:
'
## src/file1.py
@@ -12,5 +12,5 @@ def func1():
code line that already existed in the file...
code line that already existed in the file....
-code line that was removed in the PR
+new code line added in the PR
code line that already existed in the file...
code line that already existed in the file...
@@ ... @@ def func2():
...
## src/file2.py
...
'
Thre review should focus on new code added in the PR (lines starting with '+'), and not on code that already existed in the file (lines starting with '-', or without prefix).
{%- if num_code_suggestions > 0 %}
- Provide up to {{ num_code_suggestions }} code suggestions.
- Try to focus on the most important suggestions, like fixing code problems, issues and bugs. As a second priority, provide suggestions for meaningful code improvements, like performance, vulnerability, modularity, and best practices.
- Suggestions should focus on improving the new added code lines.
- Make sure not to provide suggestions repeating modifications already implemented in the new PR code (the '+' lines).
- Focus on important suggestions like fixing code problems, issues and bugs. As a second priority, provide suggestions for meaningful code improvements, like performance, vulnerability, modularity, and best practices.
- Avoid making suggestions that have already been implemented in the PR code. For example, if you want to add logs, or change a variable to const, or anything else, make sure it isn't already in the PR code.
- Don't suggest to add docstring or type hints.
- Suggestions should focus on improving the new code added in the PR (lines starting with '+')
{%- endif %}
- If needed, each YAML output should be in block scalar format ('|-')
{%- if extra_instructions %}
@ -21,6 +44,9 @@ PR Analysis:
Main theme:
type: string
description: a short explanation of the PR
PR summary:
type: string
description: summary of the PR in 2-3 sentences.
Type of PR:
type: string
enum:
@ -33,7 +59,7 @@ PR Analysis:
{%- if require_score %}
Score:
type: int
description: >-
description: |-
Rate this PR on a scale of 0-100 (inclusive), where 0 means the worst
possible PR code, and 100 means PR code of the highest quality, without
any bugs or performance issues, that is ready to be merged immediately and
@ -47,13 +73,13 @@ PR Analysis:
{%- if question_str %}
Insights from user's answer:
type: string
description: >-
description: |-
shortly summarize the insights you gained from the user's answers to the questions
{%- endif %}
{%- if require_focused %}
Focused PR:
type: string
description: >-
description: |-
Is this a focused PR, in the sense that all the PR code diff changes are
united under a single focused theme ? If the theme is too broad, or the PR
code diff changes are too scattered, then the PR is not focused. Explain
@ -62,12 +88,11 @@ PR Analysis:
PR Feedback:
General suggestions:
type: string
description: >-
description: |-
General suggestions and feedback for the contributors and maintainers of
this PR. May include important suggestions for the overall structure,
primary purpose, best practices, critical bugs, and other aspects of the
PR. Don't address PR title and description, or lack of tests. Explain your
suggestions.
PR. Don't address PR title and description, or lack of tests. Explain your suggestions.
{%- if num_code_suggestions > 0 %}
Code feedback:
type: array
@ -79,7 +104,7 @@ PR Feedback:
description: the relevant file full path
suggestion:
type: string
description: |
description: |-
a concrete suggestion for meaningfully improving the new PR code. Also
describe how, specifically, the suggestion can be applied to new PR
code. Add tags with importance measure that matches each suggestion
@ -87,9 +112,9 @@ PR Feedback:
adding docstrings, renaming PR title and description, or linter like.
relevant line:
type: string
description: |
description: |-
a single code line taken from the relevant file, to which the suggestion applies.
The line should be a '+' line.
The code line should start with a '+'.
Make sure to output the line exactly as it appears in the relevant file
{%- endif %}
{%- if require_security %}
@ -104,22 +129,29 @@ PR Feedback:
Example output:
```yaml
PR Analysis:
Main theme: xxx
Type of PR: Bug fix
Main theme: |-
xxx
PR summary: |-
xxx
Type of PR: |-
Bug fix
{%- if require_score %}
Score: 89
{%- endif %}
Relevant tests added: No
Relevant tests added: |-
No
{%- if require_focused %}
Focused PR: no, because ...
{%- endif %}
PR Feedback:
General PR suggestions: ...
General PR suggestions: |-
...
{%- if num_code_suggestions > 0 %}
Code feedback:
- relevant file: |-
directory/xxx.py
suggestion: xxx [important]
suggestion: |-
xxx [important]
relevant line: |-
xxx
...
@ -129,7 +161,7 @@ PR Feedback:
{%- endif %}
```
Make sure to output a valid YAML. Use multi-line block scalar ('|') if needed.
Each YAML output MUST be after a newline, indented, with block scalar indicator ('|-').
Don't repeat the prompt in the answer, and avoid outputting the 'type' and 'description' fields.
"""
@ -161,7 +193,7 @@ The PR Git Diff:
```
{{diff}}
```
Note that lines in the diff body are prefixed with a symbol that represents the type of change: '-' for deletions, '+' for additions, and ' ' (a space) for unchanged lines.
Note that lines in the diff body are prefixed with a symbol that represents the type of change: '-' for deletions, '+' for additions. Focus on the '+' lines.
Response (should be a valid YAML, and nothing else):
```yaml