Skip merged messages when inserting new ones
Co-Authored-By: Julia Risley <julia@zed.dev>
This commit is contained in:
parent
6e5de2fbbb
commit
0db0a1ccef
1 changed files with 29 additions and 2 deletions
|
@ -661,8 +661,9 @@ impl Assistant {
|
||||||
{
|
{
|
||||||
let start = self.buffer.update(cx, |buffer, cx| {
|
let start = self.buffer.update(cx, |buffer, cx| {
|
||||||
let offset = self
|
let offset = self
|
||||||
.messages
|
.messages[prev_message_ix + 1..]
|
||||||
.get(prev_message_ix + 1)
|
.iter()
|
||||||
|
.find(|message| message.start.is_valid(buffer))
|
||||||
.map_or(buffer.len(), |message| message.start.to_offset(buffer) - 1);
|
.map_or(buffer.len(), |message| message.start.to_offset(buffer) - 1);
|
||||||
buffer.edit([(offset..offset, "\n")], None, cx);
|
buffer.edit([(offset..offset, "\n")], None, cx);
|
||||||
buffer.anchor_before(offset + 1)
|
buffer.anchor_before(offset + 1)
|
||||||
|
@ -1451,6 +1452,7 @@ mod tests {
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Undoing the deletion should also undo the merge.
|
||||||
buffer.update(cx, |buffer, cx| buffer.undo(cx));
|
buffer.update(cx, |buffer, cx| buffer.undo(cx));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
messages(&assistant, cx),
|
messages(&assistant, cx),
|
||||||
|
@ -1461,6 +1463,31 @@ mod tests {
|
||||||
(message_3.id, Role::User, 6..7),
|
(message_3.id, Role::User, 6..7),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Redoing the deletion should also redo the merge.
|
||||||
|
buffer.update(cx, |buffer, cx| buffer.redo(cx));
|
||||||
|
assert_eq!(
|
||||||
|
messages(&assistant, cx),
|
||||||
|
vec![
|
||||||
|
(message_1.id, Role::User, 0..3),
|
||||||
|
(message_3.id, Role::User, 3..4),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Ensure we can still insert after a merged message.
|
||||||
|
let message_5 = assistant.update(cx, |assistant, cx| {
|
||||||
|
assistant
|
||||||
|
.insert_message_after(message_1.id, Role::System, cx)
|
||||||
|
.unwrap()
|
||||||
|
});
|
||||||
|
assert_eq!(
|
||||||
|
messages(&assistant, cx),
|
||||||
|
vec![
|
||||||
|
(message_1.id, Role::User, 0..3),
|
||||||
|
(message_5.id, Role::System, 3..4),
|
||||||
|
(message_3.id, Role::User, 4..5)
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn messages(
|
fn messages(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue