diff --git a/crates/text/src/tests.rs b/crates/text/src/tests.rs index 7994d5b8f1a1ce3f6daed3df54a399f6ef2a2be2..e66837f21b295a14c5011bc4921f5d43717b386e 100644 --- a/crates/text/src/tests.rs +++ b/crates/text/src/tests.rs @@ -529,6 +529,16 @@ fn test_history() { assert!(buffer.end_transaction_at(now).is_none()); buffer.undo(); assert_eq!(buffer.text(), "12cde6"); + + // Redo stack gets cleared after performing an edit. + buffer.edit([(0..0, "X")]); + assert_eq!(buffer.text(), "X12cde6"); + buffer.redo(); + assert_eq!(buffer.text(), "X12cde6"); + buffer.undo(); + assert_eq!(buffer.text(), "12cde6"); + buffer.undo(); + assert_eq!(buffer.text(), "123456"); } #[test] diff --git a/crates/text/src/text.rs b/crates/text/src/text.rs index 7bf8ee208fcece78063e4c0fd226401a9d7e2cdb..8d37ad0c8b0c7dca7c12ef03740d763fe0554823 100644 --- a/crates/text/src/text.rs +++ b/crates/text/src/text.rs @@ -216,6 +216,7 @@ impl History { self.undo_stack.pop(); None } else { + self.redo_stack.clear(); let entry = self.undo_stack.last_mut().unwrap(); entry.last_edit_at = now; Some(entry) @@ -276,6 +277,7 @@ impl History { last_edit_at: now, suppress_grouping: false, }); + self.redo_stack.clear(); } fn push_undo(&mut self, op_id: clock::Local) {