Fix: decouple inline and table suggestion filtering logic

- **Refactor `run` method in `PRCodeSuggestions`**:
  - Pre-filter suggestions based on `suggestions_score_threshold` early in the process to prevent publishing low-score suggestions in any mode.
  - Separate inline and table publishing logic for better clarity and control.
  - Ensure dual publishing mode correctly displays all valid suggestions inline while filtering the summary table based on `dual_publishing_score_threshold`.
  - Fix potential issue where the progress bar or "no suggestions" message could be mishandled when no high-score suggestions exist for the table.

- **Update `push_inline_code_suggestions`**:
  - Re-verify score threshold within the function to ensure robust filtering (though pre-filtering in `run` handles this primarily now).
This commit is contained in:
diana-jung 2025-11-26 16:56:32 +09:00 committed by GitHub
parent ab808fd114
commit 1315fa651b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -123,17 +123,42 @@ class PRCodeSuggestions:
await self.publish_no_suggestions()
return
# Filter data by suggestions_score_threshold
score_threshold = max(1, int(get_settings().pr_code_suggestions.suggestions_score_threshold))
data['code_suggestions'] = [
d for d in data['code_suggestions']
if int(d.get('score', 0)) >= score_threshold
]
if not data['code_suggestions']:
await self.publish_no_suggestions()
return
# publish the suggestions
if get_settings().config.publish_output:
# If a temporary comment was published, remove it
self.git_provider.remove_initial_comment()
# Publish table summarized suggestions
if ((not get_settings().pr_code_suggestions.commitable_code_suggestions) and
self.git_provider.is_supported("gfm_markdown")):
# Logic for Inline Suggestions
dual_threshold = int(get_settings().pr_code_suggestions.dual_publishing_score_threshold)
if get_settings().pr_code_suggestions.commitable_code_suggestions or dual_threshold > 0:
await self.push_inline_code_suggestions(data)
# Logic for Table Suggestions
if self.git_provider.is_supported("gfm_markdown") and \
(not get_settings().pr_code_suggestions.commitable_code_suggestions or dual_threshold > 0):
data_for_table = data
# dual publishing mode
if dual_threshold > 0:
data_for_table = {'code_suggestions': []}
for suggestion in data['code_suggestions']:
if int(suggestion.get('score', 0)) >= dual_threshold:
data_for_table['code_suggestions'].append(suggestion)
if data_for_table['code_suggestions']:
# generate summarized suggestions
pr_body = self.generate_summarized_suggestions(data)
pr_body = self.generate_summarized_suggestions(data_for_table)
get_logger().debug(f"PR output", artifact=pr_body)
# require self-review
@ -168,14 +193,12 @@ class PRCodeSuggestions:
self.git_provider.edit_comment(self.progress_response, body=pr_body)
else:
self.git_provider.publish_comment(pr_body)
# dual publishing mode
if int(get_settings().pr_code_suggestions.dual_publishing_score_threshold) > 0:
await self.dual_publishing(data)
else:
await self.push_inline_code_suggestions(data)
if self.progress_response:
self.git_provider.remove_comment(self.progress_response)
else:
if self.progress_response and not (get_settings().pr_code_suggestions.commitable_code_suggestions or dual_threshold > 0):
self.git_provider.remove_comment(self.progress_response)
else:
get_logger().info('Code suggestions generated for PR, but not published since publish_output is False.')
pr_body = self.generate_summarized_suggestions(data)