mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-12-13 03:15:17 +00:00
Compare commits
7 commits
c4cd2e9f30
...
4e2469723c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e2469723c | ||
|
|
dcab8a893c | ||
|
|
2230da73fd | ||
|
|
f251a8a6cb | ||
|
|
725a26ba88 | ||
|
|
1a4df62f89 | ||
|
|
6561d0478e |
3 changed files with 92 additions and 0 deletions
|
|
@ -292,6 +292,27 @@ enable_global_pr_compliance = true
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
???+ example "Section visibility options"
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><b>enable_security_section</b></td>
|
||||||
|
<td>If set to true, the security compliance section will be displayed in the output. When false, the entire security section is hidden. Default is true.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><b>enable_ticket_section</b></td>
|
||||||
|
<td>If set to true, the ticket compliance section will be displayed in the output. When false, the entire ticket section is hidden. Default is true.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><b>enable_codebase_duplication_section</b></td>
|
||||||
|
<td>If set to true, the codebase duplication compliance section will be displayed in the output. When false, the entire codebase duplication section is hidden. Default is true.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><b>enable_custom_compliance_section</b></td>
|
||||||
|
<td>If set to true, the custom compliance section will be displayed in the output. When false, the entire custom section is hidden. Default is true.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
???+ example "Security compliance options"
|
???+ example "Security compliance options"
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
|
||||||
|
|
@ -868,6 +868,44 @@ def try_fix_yaml(response_text: str,
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# 5.5 fallback - try to normalize diff-style removal markers ('-') within list items
|
||||||
|
response_text_lines_copy = response_text_lines.copy()
|
||||||
|
modified = False
|
||||||
|
|
||||||
|
for i, line in enumerate(response_text_lines_copy):
|
||||||
|
if line.startswith('+'):
|
||||||
|
response_text_lines_copy[i] = ' ' + line[1:]
|
||||||
|
modified = True
|
||||||
|
|
||||||
|
# normalize lines starting with '-'. Distinguish real YAML list items from diff deletions.
|
||||||
|
for i, line in enumerate(response_text_lines_copy):
|
||||||
|
if not line.startswith('-'):
|
||||||
|
continue
|
||||||
|
|
||||||
|
remainder = line[1:]
|
||||||
|
if line.startswith('- '):
|
||||||
|
second_char = remainder[1] if len(remainder) > 1 else ''
|
||||||
|
if second_char and second_char not in (' ', '\t', '+', '-'):
|
||||||
|
continue # real list item → keep as-is
|
||||||
|
|
||||||
|
# treat it as a diff "removed" marker inside block content
|
||||||
|
cleaned = remainder
|
||||||
|
while cleaned and cleaned[0] in ('+', '-'):
|
||||||
|
cleaned = cleaned[1:]
|
||||||
|
if cleaned and cleaned[0] not in (' ', '\t'):
|
||||||
|
cleaned = ' ' + cleaned
|
||||||
|
if cleaned != line:
|
||||||
|
response_text_lines_copy[i] = cleaned
|
||||||
|
modified = True
|
||||||
|
if modified:
|
||||||
|
try:
|
||||||
|
data = yaml.safe_load('\n'.join(response_text_lines_copy))
|
||||||
|
get_logger().info("Successfully parsed AI prediction after normalizing diff removal markers")
|
||||||
|
return data
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
# sixth fallback - replace tabs with spaces
|
# sixth fallback - replace tabs with spaces
|
||||||
if '\t' in response_text:
|
if '\t' in response_text:
|
||||||
response_text_copy = copy.deepcopy(response_text)
|
response_text_copy = copy.deepcopy(response_text)
|
||||||
|
|
|
||||||
|
|
@ -244,3 +244,36 @@ int sub(int a, int b) {
|
||||||
'''
|
'''
|
||||||
expected_output = {'code_suggestions': [{'relevant_file': 'a.c\n', 'existing_code': ' int sum(int a, int b) {\n return a + b;\n }\n\n int sub(int a, int b) {\n return a - b;\n }\n'}]}
|
expected_output = {'code_suggestions': [{'relevant_file': 'a.c\n', 'existing_code': ' int sum(int a, int b) {\n return a + b;\n }\n\n int sub(int a, int b) {\n return a - b;\n }\n'}]}
|
||||||
assert try_fix_yaml(review_text, first_key='code_suggestions', last_key='existing_code') == expected_output
|
assert try_fix_yaml(review_text, first_key='code_suggestions', last_key='existing_code') == expected_output
|
||||||
|
|
||||||
|
def test_diff_markers_removed_within_list_item(self):
|
||||||
|
"""
|
||||||
|
Ensures diff-style '-' markers nested inside list items are normalised so the YAML parses
|
||||||
|
into the expected structure.
|
||||||
|
"""
|
||||||
|
review_text = '''\
|
||||||
|
code_suggestions:
|
||||||
|
- relevant_file: |
|
||||||
|
example.rb
|
||||||
|
existing_code: |
|
||||||
|
+ puts 'hello'
|
||||||
|
+ puts 'world'
|
||||||
|
- relevant_file: |
|
||||||
|
- example.py
|
||||||
|
- existing_code: |
|
||||||
|
-+ print('hello')
|
||||||
|
-+ print('world')
|
||||||
|
'''
|
||||||
|
expected_output = {
|
||||||
|
'code_suggestions': [
|
||||||
|
{
|
||||||
|
'relevant_file': 'example.rb\n',
|
||||||
|
'existing_code': "puts 'hello'\nputs 'world'\n"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'relevant_file': 'example.py\n',
|
||||||
|
'existing_code': "print('hello')\nprint('world')\n"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
assert try_fix_yaml(review_text, first_key='code_suggestions', last_key='existing_code') == expected_output
|
||||||
Loading…
Reference in a new issue