Skip to content
This repository was archived by the owner on Sep 23, 2025. It is now read-only.

Commit 0c7997e

Browse files
committed
Replace feedback_type String with FeedbackType enum
- Add FeedbackType enum with Comment and CompleteReview variants - Update UserFeedback struct to use enum instead of string - Update format_user_feedback_message to match on enum variants - Update IPC message handler to convert string to enum - Improves type safety and prevents invalid feedback types Better type safety for user feedback handling in blocking pattern.
1 parent 3f6ef26 commit 0c7997e

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

server/src/ipc.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ impl IPCCommunicator {
401401
// Return mock feedback for testing
402402
return Ok(crate::synthetic_pr::UserFeedback {
403403
review_id: Some(review_id.to_string()),
404-
feedback_type: "comment".to_string(),
404+
feedback_type: crate::synthetic_pr::FeedbackType::Comment,
405405
file_path: Some("test.rs".to_string()),
406406
line_number: Some(42),
407407
comment_text: Some("This is a test comment".to_string()),
@@ -816,7 +816,10 @@ impl IPCCommunicator {
816816
// Convert to UserFeedback struct
817817
let user_feedback = crate::synthetic_pr::UserFeedback {
818818
review_id: Some(feedback_payload.review_id.clone()),
819-
feedback_type: feedback_payload.feedback_type,
819+
feedback_type: match feedback_payload.feedback_type.as_str() {
820+
"complete_review" => crate::synthetic_pr::FeedbackType::CompleteReview,
821+
_ => crate::synthetic_pr::FeedbackType::Comment,
822+
},
820823
file_path: feedback_payload.file_path,
821824
line_number: feedback_payload.line_number,
822825
comment_text: feedback_payload.comment_text,

server/src/server.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ impl DialecticServer {
8686

8787
/// Format user feedback into clear instructions for the LLM
8888
fn format_user_feedback_message(&self, feedback: &UserFeedback) -> String {
89-
match feedback.feedback_type.as_str() {
90-
"comment" => {
89+
match feedback.feedback_type {
90+
crate::synthetic_pr::FeedbackType::Comment => {
9191
let file_path = feedback.file_path.as_deref().unwrap_or("unknown file");
9292
let line_number = feedback.line_number.unwrap_or(0);
9393
let comment_text = feedback.comment_text.as_deref().unwrap_or("(no comment)");
@@ -111,7 +111,7 @@ impl DialecticServer {
111111
file_path, line_number, comment_text, context, feedback.review_id.as_deref().unwrap_or("unknown")
112112
)
113113
}
114-
"complete_review" => {
114+
crate::synthetic_pr::FeedbackType::CompleteReview => {
115115
let action = feedback.completion_action.as_deref().unwrap_or("return");
116116
let notes = feedback.additional_notes.as_deref().unwrap_or("");
117117

@@ -142,7 +142,6 @@ impl DialecticServer {
142142
)
143143
}
144144
}
145-
_ => format!("User provided feedback: {:?}", feedback)
146145
}
147146
}
148147

server/src/synthetic_pr/mcp_tools.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,20 @@ pub struct RequestReviewParams {
1717
pub repo_path: Option<String>,
1818
}
1919

20+
/// User feedback type from VSCode extension
21+
#[derive(Debug, Serialize, Deserialize, JsonSchema, Clone)]
22+
#[serde(rename_all = "snake_case")]
23+
pub enum FeedbackType {
24+
Comment,
25+
CompleteReview,
26+
}
27+
2028
/// User feedback data from blocking MCP tools
2129
// ANCHOR: user_feedback
2230
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
2331
pub struct UserFeedback {
2432
pub review_id: Option<String>,
25-
pub feedback_type: String, // "comment" or "complete_review"
33+
pub feedback_type: FeedbackType,
2634
pub file_path: Option<String>,
2735
pub line_number: Option<u32>,
2836
pub comment_text: Option<String>,

0 commit comments

Comments
 (0)