mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-05 05:10:38 +08:00
add doc placement before after
This commit is contained in:
@ -58,6 +58,13 @@ Code Documentation:
|
|||||||
type: integer
|
type: integer
|
||||||
description: |-
|
description: |-
|
||||||
The relevant line number from a '__new hunk__' section where the {{ docs_for_language }} should be added.
|
The relevant line number from a '__new hunk__' section where the {{ docs_for_language }} should be added.
|
||||||
|
doc placement:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- before
|
||||||
|
- after
|
||||||
|
description: |-
|
||||||
|
The {{ docs_for_language }} placement relative to the relevant line (code component).
|
||||||
documentation:
|
documentation:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
@ -70,6 +77,7 @@ Code Documentation:
|
|||||||
- relevant file: |-
|
- relevant file: |-
|
||||||
src/file1.py
|
src/file1.py
|
||||||
relevant lines: 12
|
relevant lines: 12
|
||||||
|
doc placement: after
|
||||||
documentation: |-
|
documentation: |-
|
||||||
\"\"\"
|
\"\"\"
|
||||||
This is a python docstring for func1.
|
This is a python docstring for func1.
|
||||||
|
@ -115,8 +115,9 @@ class PRAddDocs:
|
|||||||
relevant_file = d['relevant file'].strip()
|
relevant_file = d['relevant file'].strip()
|
||||||
relevant_line = int(d['relevant line']) # absolute position
|
relevant_line = int(d['relevant line']) # absolute position
|
||||||
documentation = d['documentation']
|
documentation = d['documentation']
|
||||||
|
doc_placement = d['doc placement'].strip()
|
||||||
if documentation:
|
if documentation:
|
||||||
new_code_snippet = self.dedent_code(relevant_file, relevant_line, documentation,
|
new_code_snippet = self.dedent_code(relevant_file, relevant_line, documentation, doc_placement,
|
||||||
add_original_line=True)
|
add_original_line=True)
|
||||||
|
|
||||||
body = f"**Suggestion:** Proposed documentation\n```suggestion\n" + new_code_snippet + "\n```"
|
body = f"**Suggestion:** Proposed documentation\n```suggestion\n" + new_code_snippet + "\n```"
|
||||||
@ -133,7 +134,7 @@ class PRAddDocs:
|
|||||||
for code_suggestion in code_suggestions:
|
for code_suggestion in code_suggestions:
|
||||||
self.git_provider.publish_code_suggestions([code_suggestion])
|
self.git_provider.publish_code_suggestions([code_suggestion])
|
||||||
|
|
||||||
def dedent_code(self, relevant_file, relevant_lines_start, new_code_snippet, add_original_line=False):
|
def dedent_code(self, relevant_file, relevant_lines_start, new_code_snippet, doc_placement='after', add_original_line=False):
|
||||||
try: # dedent code snippet
|
try: # dedent code snippet
|
||||||
self.diff_files = self.git_provider.diff_files if self.git_provider.diff_files \
|
self.diff_files = self.git_provider.diff_files if self.git_provider.diff_files \
|
||||||
else self.git_provider.get_diff_files()
|
else self.git_provider.get_diff_files()
|
||||||
@ -143,14 +144,21 @@ class PRAddDocs:
|
|||||||
original_initial_line = file.head_file.splitlines()[relevant_lines_start - 1]
|
original_initial_line = file.head_file.splitlines()[relevant_lines_start - 1]
|
||||||
break
|
break
|
||||||
if original_initial_line:
|
if original_initial_line:
|
||||||
|
if doc_placement == 'after':
|
||||||
|
line = file.head_file.splitlines()[relevant_lines_start]
|
||||||
|
else:
|
||||||
|
line = original_initial_line
|
||||||
suggested_initial_line = new_code_snippet.splitlines()[0]
|
suggested_initial_line = new_code_snippet.splitlines()[0]
|
||||||
original_initial_spaces = len(original_initial_line) - len(original_initial_line.lstrip())
|
original_initial_spaces = len(line) - len(line.lstrip())
|
||||||
suggested_initial_spaces = len(suggested_initial_line) - len(suggested_initial_line.lstrip())
|
suggested_initial_spaces = len(suggested_initial_line) - len(suggested_initial_line.lstrip())
|
||||||
delta_spaces = original_initial_spaces - suggested_initial_spaces
|
delta_spaces = original_initial_spaces - suggested_initial_spaces
|
||||||
if delta_spaces > 0:
|
if delta_spaces > 0:
|
||||||
new_code_snippet = textwrap.indent(new_code_snippet, delta_spaces * " ").rstrip('\n')
|
new_code_snippet = textwrap.indent(new_code_snippet, delta_spaces * " ").rstrip('\n')
|
||||||
if add_original_line:
|
if add_original_line:
|
||||||
|
if doc_placement == 'after':
|
||||||
new_code_snippet = original_initial_line + "\n" + new_code_snippet
|
new_code_snippet = original_initial_line + "\n" + new_code_snippet
|
||||||
|
else:
|
||||||
|
new_code_snippet = new_code_snippet + "\n" + original_initial_line
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if get_settings().config.verbosity_level >= 2:
|
if get_settings().config.verbosity_level >= 2:
|
||||||
logging.info(f"Could not dedent code snippet for file {relevant_file}, error: {e}")
|
logging.info(f"Could not dedent code snippet for file {relevant_file}, error: {e}")
|
||||||
|
Reference in New Issue
Block a user