Merge pull request #1897 from qodo-ai/tr/pr_diagram

feat: enable PR diagram by default and improve mermaid diagram genera…
This commit is contained in:
Tal
2025-06-27 11:46:58 +03:00
committed by GitHub
4 changed files with 19 additions and 12 deletions

View File

@ -59,17 +59,23 @@ Everything below this marker is treated as previously auto-generated content and
### Sequence Diagram Support
When the `enable_pr_diagram` option is enabled in your configuration, the `/describe` tool will include a `Mermaid` sequence diagram in the PR description.
This diagram represents interactions between components/functions based on the diff content.
This diagram represents interactions between components/functions based on the PR content.
### How to enable
[//]: # (### How to enable\disable)
In your configuration:
[//]: # ()
[//]: # (In your configuration:)
```
toml
[pr_description]
enable_pr_diagram = true
```
[//]: # ()
[//]: # (```)
[//]: # (toml)
[//]: # ([pr_description])
[//]: # (enable_pr_diagram = true)
[//]: # (```)
## Configuration options
@ -126,7 +132,7 @@ enable_pr_diagram = true
</tr>
<tr>
<td><b>enable_pr_diagram</b></td>
<td>If set to true, the tool will generate a horizontal Mermaid flowchart summarizing the main pull request changes. This field remains empty if not applicable. Default is false.</td>
<td>If set to true, the tool will generate a horizontal Mermaid flowchart summarizing the main pull request changes. This field remains empty if not applicable. Default is true.</td>
</tr>
</table>

View File

@ -106,7 +106,7 @@ enable_pr_type=true
final_update_message = true
enable_help_text=false
enable_help_comment=true
enable_pr_diagram=false # adds a section with a diagram of the PR changes
enable_pr_diagram=true # adds a section with a diagram of the PR changes
# describe as comment
publish_description_as_comment=false
publish_description_as_comment_persistent=true

View File

@ -48,7 +48,7 @@ class PRDescription(BaseModel):
description: str = Field(description="summarize the PR changes in up to four bullet points, each up to 8 words. For large PRs, add sub-bullets if needed. Order bullets by importance, with each bullet highlighting a key change group.")
title: str = Field(description="a concise and descriptive title that captures the PR's main theme")
{%- if enable_pr_diagram %}
changes_diagram: str = Field(description="a horizontal diagram that represents the main PR changes, in the format of a valid mermaid LR flowchart. The diagram should be concise and easy to read. Leave empty if no diagram is relevant. To create robust Mermaid diagrams, follow this two-step process: (1) Declare the nodes: nodeID["node description"]. (2) Then define the links: nodeID1 -- "link text" --> nodeID2 ")
changes_diagram: str = Field(description="a horizontal diagram that represents the main PR changes, in the format of a valid mermaid LR flowchart. The diagram should be concise and easy to read. Leave empty if no diagram is relevant. To create robust Mermaid diagrams, follow this two-step process: (1) Declare the nodes: nodeID["node description"]. (2) Then define the links: nodeID1 -- "link text" --> nodeID2. Node description must always be surrounded with quotation marks.")
{%- endif %}
{%- if enable_semantic_files_types %}
pr_files: List[FileDescription] = Field(max_items=20, description="a list of all the files that were changed in the PR, and summary of their changes. Each file must be analyzed regardless of change size.")

View File

@ -59,6 +59,7 @@ class PRDescription:
# Initialize the variables dictionary
self.COLLAPSIBLE_FILE_LIST_THRESHOLD = get_settings().pr_description.get("collapsible_file_list_threshold", 8)
enable_pr_diagram = get_settings().pr_description.get("enable_pr_diagram", False) and self.git_provider.is_supported("gfm_markdown") # github and gitlab support gfm_markdown
self.vars = {
"title": self.git_provider.pr.title,
"branch": self.git_provider.get_pr_branch(),
@ -73,7 +74,7 @@ class PRDescription:
"related_tickets": "",
"include_file_summary_changes": len(self.git_provider.get_diff_files()) <= self.COLLAPSIBLE_FILE_LIST_THRESHOLD,
"duplicate_prompt_examples": get_settings().config.get("duplicate_prompt_examples", False),
"enable_pr_diagram": get_settings().pr_description.get("enable_pr_diagram", False),
"enable_pr_diagram": enable_pr_diagram,
}
self.user_description = self.git_provider.get_user_description()