mirror of
https://github.com/openai/codex.git
synced 2026-05-23 12:34:25 +00:00
codex: address apply_patch grammar review feedback
Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
@@ -19,8 +19,6 @@ use ParseError::*;
|
||||
|
||||
#[derive(Debug, Default, Clone)]
|
||||
pub struct StreamingPatchParser {
|
||||
allow_environment_id: bool,
|
||||
saw_environment_id: bool,
|
||||
line_buffer: String,
|
||||
state: StreamingParserState,
|
||||
line_number: usize,
|
||||
@@ -32,11 +30,15 @@ struct StreamingParserState {
|
||||
hunks: Vec<Hunk>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone)]
|
||||
#[derive(Debug, Clone)]
|
||||
enum StreamingParserMode {
|
||||
#[default]
|
||||
NotStarted,
|
||||
StartedPatch,
|
||||
NotStarted {
|
||||
allow_environment_id: bool,
|
||||
},
|
||||
StartedPatch {
|
||||
allow_environment_id: bool,
|
||||
saw_environment_id: bool,
|
||||
},
|
||||
AddFile,
|
||||
DeleteFile,
|
||||
UpdateFile {
|
||||
@@ -45,9 +47,29 @@ enum StreamingParserMode {
|
||||
EndedPatch,
|
||||
}
|
||||
|
||||
impl Default for StreamingParserMode {
|
||||
fn default() -> Self {
|
||||
Self::NotStarted {
|
||||
allow_environment_id: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl StreamingPatchParser {
|
||||
pub fn set_allow_environment_id(&mut self, allow_environment_id: bool) {
|
||||
self.allow_environment_id = allow_environment_id;
|
||||
match &mut self.state.mode {
|
||||
StreamingParserMode::NotStarted {
|
||||
allow_environment_id: current,
|
||||
}
|
||||
| StreamingParserMode::StartedPatch {
|
||||
allow_environment_id: current,
|
||||
..
|
||||
} => *current = allow_environment_id,
|
||||
StreamingParserMode::AddFile
|
||||
| StreamingParserMode::DeleteFile
|
||||
| StreamingParserMode::UpdateFile { .. }
|
||||
| StreamingParserMode::EndedPatch => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn ensure_update_hunk_is_not_empty(&self, line: &str) -> Result<(), ParseError> {
|
||||
@@ -158,18 +180,26 @@ impl StreamingPatchParser {
|
||||
fn process_line(&mut self, line: &str) -> Result<(), ParseError> {
|
||||
let trimmed = line.trim();
|
||||
match self.state.mode.clone() {
|
||||
StreamingParserMode::NotStarted => {
|
||||
StreamingParserMode::NotStarted {
|
||||
allow_environment_id,
|
||||
} => {
|
||||
if trimmed == BEGIN_PATCH_MARKER {
|
||||
self.state.mode = StreamingParserMode::StartedPatch;
|
||||
self.state.mode = StreamingParserMode::StartedPatch {
|
||||
allow_environment_id,
|
||||
saw_environment_id: false,
|
||||
};
|
||||
return Ok(());
|
||||
}
|
||||
Err(InvalidPatchError(
|
||||
"The first line of the patch must be '*** Begin Patch'".to_string(),
|
||||
))
|
||||
}
|
||||
StreamingParserMode::StartedPatch => {
|
||||
if self.allow_environment_id
|
||||
&& !self.saw_environment_id
|
||||
StreamingParserMode::StartedPatch {
|
||||
allow_environment_id,
|
||||
saw_environment_id,
|
||||
} => {
|
||||
if allow_environment_id
|
||||
&& !saw_environment_id
|
||||
&& let Some(environment_id) = trimmed.strip_prefix(ENVIRONMENT_ID_MARKER)
|
||||
{
|
||||
if environment_id.trim().is_empty() {
|
||||
@@ -177,7 +207,10 @@ impl StreamingPatchParser {
|
||||
"Environment ID cannot be empty".to_string(),
|
||||
));
|
||||
}
|
||||
self.saw_environment_id = true;
|
||||
self.state.mode = StreamingParserMode::StartedPatch {
|
||||
allow_environment_id,
|
||||
saw_environment_id: true,
|
||||
};
|
||||
return Ok(());
|
||||
}
|
||||
if self.handle_hunk_headers_and_end_patch(trimmed)? {
|
||||
|
||||
Reference in New Issue
Block a user