Change summary
crates/language/src/buffer.rs | 17 +++++++++++++++++
crates/rpc/proto/zed.proto | 1 +
crates/text/src/operation_queue.rs | 2 +-
crates/text/src/text.rs | 4 ++++
4 files changed, 23 insertions(+), 1 deletion(-)
Detailed changes
@@ -327,6 +327,13 @@ impl Buffer {
);
}
+ let deferred_ops = message
+ .deferred_operations
+ .into_iter()
+ .map(proto::deserialize_operation)
+ .collect::<Result<Vec<_>>>()?;
+ this.apply_ops(deferred_ops, cx)?;
+
Ok(this)
}
@@ -362,6 +369,16 @@ impl Buffer {
proto::serialize_diagnostic_set(set.provider_name().to_string(), set.iter())
})
.collect(),
+ deferred_operations: self
+ .deferred_ops
+ .iter()
+ .map(proto::serialize_operation)
+ .chain(
+ self.text
+ .deferred_ops()
+ .map(|op| proto::serialize_operation(&Operation::Buffer(op.clone()))),
+ )
+ .collect(),
}
}
@@ -270,6 +270,7 @@ message Buffer {
repeated SelectionSet selections = 7;
repeated DiagnosticSet diagnostic_sets = 8;
uint32 lamport_timestamp = 9;
+ repeated Operation deferred_operations = 10;
}
message BufferFragment {
@@ -53,7 +53,7 @@ impl<T: Operation> OperationQueue<T> {
}
pub fn iter(&self) -> impl Iterator<Item = &T> {
- self.0.cursor::<()>().map(|i| &i.0)
+ self.0.iter().map(|i| &i.0)
}
}
@@ -1101,6 +1101,10 @@ impl Buffer {
Ok(())
}
+ pub fn deferred_ops(&self) -> impl Iterator<Item = &Operation> {
+ self.deferred_ops.iter()
+ }
+
fn flush_deferred_ops(&mut self) -> Result<()> {
self.deferred_replicas.clear();
let mut deferred_ops = Vec::new();