assistant: Undo workflow step when buffer is discarded (#16465)
This fixes a weird bug: 1. Use `/workflow` in assistant 2. Have it generate a step that modifies a file 3. Either (a) select the step in the assistant and have it auto-insert newlines (b) select "Transform" to have the step applied 4. Close the modified file in the editor ("Discard") 5. Re-open the file 6. BUG: the changes made by assistant are still there! The reason for the bug is that the assistant keeps references to buffers and they're not closed/reloaded when closed/reopened. To fix the bug we now rollback the applied workflow steps when discarding a buffer. (This does *not* yet fix the issue where a workflow step inserts a new buffer into the project/worktree that does not show up on the file system yet but in `/file` and hangs around until Zed is closed.) Release Notes: - N/A Co-authored-by: Bennet <bennet@zed.dev>
This commit is contained in:
parent
69aae2037d
commit
037cf1393c
6 changed files with 41 additions and 2 deletions
|
@ -332,6 +332,8 @@ pub enum Event {
|
|||
CapabilityChanged,
|
||||
/// The buffer was explicitly requested to close.
|
||||
Closed,
|
||||
/// The buffer was discarded when closing.
|
||||
Discarded,
|
||||
}
|
||||
|
||||
/// The file associated with a buffer.
|
||||
|
@ -827,6 +829,12 @@ impl Buffer {
|
|||
cx.notify();
|
||||
}
|
||||
|
||||
/// This method is called to signal that the buffer has been discarded.
|
||||
pub fn discarded(&mut self, cx: &mut ModelContext<Self>) {
|
||||
cx.emit(Event::Discarded);
|
||||
cx.notify();
|
||||
}
|
||||
|
||||
/// Reloads the contents of the buffer from disk.
|
||||
pub fn reload(
|
||||
&mut self,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue