Show progress as the agent locates which range it needs to edit (#31582)
Release Notes: - Improved latency when the agent starts streaming edits. --------- Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
This commit is contained in:
parent
94a5fe265d
commit
4f78165ee8
13 changed files with 1342 additions and 660 deletions
|
@ -16,7 +16,7 @@ fn init_logger() {
|
|||
|
||||
#[test]
|
||||
fn test_edit() {
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "abc".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "abc");
|
||||
assert_eq!(buffer.text(), "abc");
|
||||
buffer.edit([(3..3, "def")]);
|
||||
assert_eq!(buffer.text(), "abcdef");
|
||||
|
@ -175,7 +175,7 @@ fn test_line_endings() {
|
|||
LineEnding::Windows
|
||||
);
|
||||
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "one\r\ntwo\rthree".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "one\r\ntwo\rthree");
|
||||
assert_eq!(buffer.text(), "one\ntwo\nthree");
|
||||
assert_eq!(buffer.line_ending(), LineEnding::Windows);
|
||||
buffer.check_invariants();
|
||||
|
@ -189,7 +189,7 @@ fn test_line_endings() {
|
|||
|
||||
#[test]
|
||||
fn test_line_len() {
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "");
|
||||
buffer.edit([(0..0, "abcd\nefg\nhij")]);
|
||||
buffer.edit([(12..12, "kl\nmno")]);
|
||||
buffer.edit([(18..18, "\npqrs\n")]);
|
||||
|
@ -206,7 +206,7 @@ fn test_line_len() {
|
|||
#[test]
|
||||
fn test_common_prefix_at_position() {
|
||||
let text = "a = str; b = δα";
|
||||
let buffer = Buffer::new(0, BufferId::new(1).unwrap(), text.into());
|
||||
let buffer = Buffer::new(0, BufferId::new(1).unwrap(), text);
|
||||
|
||||
let offset1 = offset_after(text, "str");
|
||||
let offset2 = offset_after(text, "δα");
|
||||
|
@ -257,7 +257,7 @@ fn test_text_summary_for_range() {
|
|||
let buffer = Buffer::new(
|
||||
0,
|
||||
BufferId::new(1).unwrap(),
|
||||
"ab\nefg\nhklm\nnopqrs\ntuvwxyz".into(),
|
||||
"ab\nefg\nhklm\nnopqrs\ntuvwxyz",
|
||||
);
|
||||
assert_eq!(
|
||||
buffer.text_summary_for_range::<TextSummary, _>(0..2),
|
||||
|
@ -347,7 +347,7 @@ fn test_text_summary_for_range() {
|
|||
|
||||
#[test]
|
||||
fn test_chars_at() {
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "");
|
||||
buffer.edit([(0..0, "abcd\nefgh\nij")]);
|
||||
buffer.edit([(12..12, "kl\nmno")]);
|
||||
buffer.edit([(18..18, "\npqrs")]);
|
||||
|
@ -369,7 +369,7 @@ fn test_chars_at() {
|
|||
assert_eq!(chars.collect::<String>(), "PQrs");
|
||||
|
||||
// Regression test:
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "");
|
||||
buffer.edit([(0..0, "[workspace]\nmembers = [\n \"xray_core\",\n \"xray_server\",\n \"xray_cli\",\n \"xray_wasm\",\n]\n")]);
|
||||
buffer.edit([(60..60, "\n")]);
|
||||
|
||||
|
@ -379,7 +379,7 @@ fn test_chars_at() {
|
|||
|
||||
#[test]
|
||||
fn test_anchors() {
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "");
|
||||
buffer.edit([(0..0, "abc")]);
|
||||
let left_anchor = buffer.anchor_before(2);
|
||||
let right_anchor = buffer.anchor_after(2);
|
||||
|
@ -497,7 +497,7 @@ fn test_anchors() {
|
|||
|
||||
#[test]
|
||||
fn test_anchors_at_start_and_end() {
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "");
|
||||
let before_start_anchor = buffer.anchor_before(0);
|
||||
let after_end_anchor = buffer.anchor_after(0);
|
||||
|
||||
|
@ -520,7 +520,7 @@ fn test_anchors_at_start_and_end() {
|
|||
|
||||
#[test]
|
||||
fn test_undo_redo() {
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "1234".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "1234");
|
||||
// Set group interval to zero so as to not group edits in the undo stack.
|
||||
buffer.set_group_interval(Duration::from_secs(0));
|
||||
|
||||
|
@ -557,7 +557,7 @@ fn test_undo_redo() {
|
|||
#[test]
|
||||
fn test_history() {
|
||||
let mut now = Instant::now();
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "123456".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "123456");
|
||||
buffer.set_group_interval(Duration::from_millis(300));
|
||||
|
||||
let transaction_1 = buffer.start_transaction_at(now).unwrap();
|
||||
|
@ -624,7 +624,7 @@ fn test_history() {
|
|||
#[test]
|
||||
fn test_finalize_last_transaction() {
|
||||
let now = Instant::now();
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "123456".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "123456");
|
||||
buffer.history.group_interval = Duration::from_millis(1);
|
||||
|
||||
buffer.start_transaction_at(now);
|
||||
|
@ -660,7 +660,7 @@ fn test_finalize_last_transaction() {
|
|||
#[test]
|
||||
fn test_edited_ranges_for_transaction() {
|
||||
let now = Instant::now();
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "1234567".into());
|
||||
let mut buffer = Buffer::new(0, BufferId::new(1).unwrap(), "1234567");
|
||||
|
||||
buffer.start_transaction_at(now);
|
||||
buffer.edit([(2..4, "cd")]);
|
||||
|
@ -699,9 +699,9 @@ fn test_edited_ranges_for_transaction() {
|
|||
fn test_concurrent_edits() {
|
||||
let text = "abcdef";
|
||||
|
||||
let mut buffer1 = Buffer::new(1, BufferId::new(1).unwrap(), text.into());
|
||||
let mut buffer2 = Buffer::new(2, BufferId::new(1).unwrap(), text.into());
|
||||
let mut buffer3 = Buffer::new(3, BufferId::new(1).unwrap(), text.into());
|
||||
let mut buffer1 = Buffer::new(1, BufferId::new(1).unwrap(), text);
|
||||
let mut buffer2 = Buffer::new(2, BufferId::new(1).unwrap(), text);
|
||||
let mut buffer3 = Buffer::new(3, BufferId::new(1).unwrap(), text);
|
||||
|
||||
let buf1_op = buffer1.edit([(1..2, "12")]);
|
||||
assert_eq!(buffer1.text(), "a12cdef");
|
||||
|
|
|
@ -677,7 +677,8 @@ impl FromIterator<char> for LineIndent {
|
|||
}
|
||||
|
||||
impl Buffer {
|
||||
pub fn new(replica_id: u16, remote_id: BufferId, mut base_text: String) -> Buffer {
|
||||
pub fn new(replica_id: u16, remote_id: BufferId, base_text: impl Into<String>) -> Buffer {
|
||||
let mut base_text = base_text.into();
|
||||
let line_ending = LineEnding::detect(&base_text);
|
||||
LineEnding::normalize(&mut base_text);
|
||||
Self::new_normalized(replica_id, remote_id, line_ending, Rope::from(base_text))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue