Rename TextBuffer back to Buffer
This commit is contained in:
parent
37eae2ba67
commit
eea0f35d38
5 changed files with 55 additions and 56 deletions
|
@ -1,6 +1,6 @@
|
||||||
use crate::Point;
|
use crate::Point;
|
||||||
|
|
||||||
use super::{Content, TextBuffer};
|
use super::{Buffer, Content};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use std::{cmp::Ordering, ops::Range};
|
use std::{cmp::Ordering, ops::Range};
|
||||||
use sum_tree::Bias;
|
use sum_tree::Bias;
|
||||||
|
@ -65,7 +65,7 @@ impl Anchor {
|
||||||
Ok(offset_comparison.then_with(|| self.bias.cmp(&other.bias)))
|
Ok(offset_comparison.then_with(|| self.bias.cmp(&other.bias)))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn bias_left(&self, buffer: &TextBuffer) -> Anchor {
|
pub fn bias_left(&self, buffer: &Buffer) -> Anchor {
|
||||||
if self.bias == Bias::Left {
|
if self.bias == Bias::Left {
|
||||||
self.clone()
|
self.clone()
|
||||||
} else {
|
} else {
|
||||||
|
@ -73,7 +73,7 @@ impl Anchor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn bias_right(&self, buffer: &TextBuffer) -> Anchor {
|
pub fn bias_right(&self, buffer: &Buffer) -> Anchor {
|
||||||
if self.bias == Bias::Right {
|
if self.bias == Bias::Right {
|
||||||
self.clone()
|
self.clone()
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -56,7 +56,7 @@ type HashMap<K, V> = std::collections::HashMap<K, V>;
|
||||||
type HashSet<T> = std::collections::HashSet<T>;
|
type HashSet<T> = std::collections::HashSet<T>;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct TextBuffer {
|
pub struct Buffer {
|
||||||
fragments: SumTree<Fragment>,
|
fragments: SumTree<Fragment>,
|
||||||
visible_text: Rope,
|
visible_text: Rope,
|
||||||
deleted_text: Rope,
|
deleted_text: Rope,
|
||||||
|
@ -441,8 +441,8 @@ pub struct UndoOperation {
|
||||||
version: clock::Global,
|
version: clock::Global,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TextBuffer {
|
impl Buffer {
|
||||||
pub fn new(replica_id: u16, remote_id: u64, history: History) -> TextBuffer {
|
pub fn new(replica_id: u16, remote_id: u64, history: History) -> Buffer {
|
||||||
let mut fragments = SumTree::new();
|
let mut fragments = SumTree::new();
|
||||||
|
|
||||||
let visible_text = Rope::from(history.base_text.as_ref());
|
let visible_text = Rope::from(history.base_text.as_ref());
|
||||||
|
@ -459,7 +459,7 @@ impl TextBuffer {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
TextBuffer {
|
Buffer {
|
||||||
visible_text,
|
visible_text,
|
||||||
deleted_text: Rope::new(),
|
deleted_text: Rope::new(),
|
||||||
fragments,
|
fragments,
|
||||||
|
@ -478,8 +478,7 @@ impl TextBuffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_proto(replica_id: u16, message: proto::Buffer) -> Result<Self> {
|
pub fn from_proto(replica_id: u16, message: proto::Buffer) -> Result<Self> {
|
||||||
let mut buffer =
|
let mut buffer = Buffer::new(replica_id, message.id, History::new(message.content.into()));
|
||||||
TextBuffer::new(replica_id, message.id, History::new(message.content.into()));
|
|
||||||
let ops = message
|
let ops = message
|
||||||
.history
|
.history
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -1369,7 +1368,7 @@ impl TextBuffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
impl TextBuffer {
|
impl Buffer {
|
||||||
fn random_byte_range(&mut self, start_offset: usize, rng: &mut impl rand::Rng) -> Range<usize> {
|
fn random_byte_range(&mut self, start_offset: usize, rng: &mut impl rand::Rng) -> Range<usize> {
|
||||||
let end = self.clip_offset(rng.gen_range(start_offset..=self.len()), Bias::Right);
|
let end = self.clip_offset(rng.gen_range(start_offset..=self.len()), Bias::Right);
|
||||||
let start = self.clip_offset(rng.gen_range(start_offset..=end), Bias::Right);
|
let start = self.clip_offset(rng.gen_range(start_offset..=end), Bias::Right);
|
||||||
|
@ -1617,8 +1616,8 @@ impl<'a> From<&'a Snapshot> for Content<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> From<&'a TextBuffer> for Content<'a> {
|
impl<'a> From<&'a Buffer> for Content<'a> {
|
||||||
fn from(buffer: &'a TextBuffer) -> Self {
|
fn from(buffer: &'a Buffer) -> Self {
|
||||||
Self {
|
Self {
|
||||||
visible_text: &buffer.visible_text,
|
visible_text: &buffer.visible_text,
|
||||||
fragments: &buffer.fragments,
|
fragments: &buffer.fragments,
|
||||||
|
@ -1627,8 +1626,8 @@ impl<'a> From<&'a TextBuffer> for Content<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> From<&'a mut TextBuffer> for Content<'a> {
|
impl<'a> From<&'a mut Buffer> for Content<'a> {
|
||||||
fn from(buffer: &'a mut TextBuffer) -> Self {
|
fn from(buffer: &'a mut Buffer) -> Self {
|
||||||
Self {
|
Self {
|
||||||
visible_text: &buffer.visible_text,
|
visible_text: &buffer.visible_text,
|
||||||
fragments: &buffer.fragments,
|
fragments: &buffer.fragments,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{Anchor, Point, TextBuffer, ToOffset as _, ToPoint as _};
|
use crate::{Anchor, Buffer, Point, ToOffset as _, ToPoint as _};
|
||||||
use std::{cmp::Ordering, mem, ops::Range};
|
use std::{cmp::Ordering, mem, ops::Range};
|
||||||
|
|
||||||
pub type SelectionSetId = clock::Lamport;
|
pub type SelectionSetId = clock::Lamport;
|
||||||
|
@ -29,7 +29,7 @@ impl Selection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_head(&mut self, buffer: &TextBuffer, cursor: Anchor) {
|
pub fn set_head(&mut self, buffer: &Buffer, cursor: Anchor) {
|
||||||
if cursor.cmp(self.tail(), buffer).unwrap() < Ordering::Equal {
|
if cursor.cmp(self.tail(), buffer).unwrap() < Ordering::Equal {
|
||||||
if !self.reversed {
|
if !self.reversed {
|
||||||
mem::swap(&mut self.start, &mut self.end);
|
mem::swap(&mut self.start, &mut self.end);
|
||||||
|
@ -53,7 +53,7 @@ impl Selection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn point_range(&self, buffer: &TextBuffer) -> Range<Point> {
|
pub fn point_range(&self, buffer: &Buffer) -> Range<Point> {
|
||||||
let start = self.start.to_point(buffer);
|
let start = self.start.to_point(buffer);
|
||||||
let end = self.end.to_point(buffer);
|
let end = self.end.to_point(buffer);
|
||||||
if self.reversed {
|
if self.reversed {
|
||||||
|
@ -63,7 +63,7 @@ impl Selection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn offset_range(&self, buffer: &TextBuffer) -> Range<usize> {
|
pub fn offset_range(&self, buffer: &Buffer) -> Range<usize> {
|
||||||
let start = self.start.to_offset(buffer);
|
let start = self.start.to_offset(buffer);
|
||||||
let end = self.end.to_offset(buffer);
|
let end = self.end.to_offset(buffer);
|
||||||
if self.reversed {
|
if self.reversed {
|
||||||
|
|
|
@ -10,7 +10,7 @@ use std::{
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_edit() {
|
fn test_edit() {
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new("abc".into()));
|
let mut buffer = Buffer::new(0, 0, History::new("abc".into()));
|
||||||
assert_eq!(buffer.text(), "abc");
|
assert_eq!(buffer.text(), "abc");
|
||||||
buffer.edit(vec![3..3], "def");
|
buffer.edit(vec![3..3], "def");
|
||||||
assert_eq!(buffer.text(), "abcdef");
|
assert_eq!(buffer.text(), "abcdef");
|
||||||
|
@ -34,7 +34,7 @@ fn test_random_edits(mut rng: StdRng) {
|
||||||
let mut reference_string = RandomCharIter::new(&mut rng)
|
let mut reference_string = RandomCharIter::new(&mut rng)
|
||||||
.take(reference_string_len)
|
.take(reference_string_len)
|
||||||
.collect::<String>();
|
.collect::<String>();
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new(reference_string.clone().into()));
|
let mut buffer = Buffer::new(0, 0, History::new(reference_string.clone().into()));
|
||||||
buffer.history.group_interval = Duration::from_millis(rng.gen_range(0..=200));
|
buffer.history.group_interval = Duration::from_millis(rng.gen_range(0..=200));
|
||||||
let mut buffer_versions = Vec::new();
|
let mut buffer_versions = Vec::new();
|
||||||
log::info!(
|
log::info!(
|
||||||
|
@ -101,7 +101,7 @@ fn test_random_edits(mut rng: StdRng) {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_line_len() {
|
fn test_line_len() {
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new("".into()));
|
let mut buffer = Buffer::new(0, 0, History::new("".into()));
|
||||||
buffer.edit(vec![0..0], "abcd\nefg\nhij");
|
buffer.edit(vec![0..0], "abcd\nefg\nhij");
|
||||||
buffer.edit(vec![12..12], "kl\nmno");
|
buffer.edit(vec![12..12], "kl\nmno");
|
||||||
buffer.edit(vec![18..18], "\npqrs\n");
|
buffer.edit(vec![18..18], "\npqrs\n");
|
||||||
|
@ -117,7 +117,7 @@ fn test_line_len() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_text_summary_for_range() {
|
fn test_text_summary_for_range() {
|
||||||
let buffer = TextBuffer::new(0, 0, History::new("ab\nefg\nhklm\nnopqrs\ntuvwxyz".into()));
|
let buffer = Buffer::new(0, 0, History::new("ab\nefg\nhklm\nnopqrs\ntuvwxyz".into()));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
buffer.text_summary_for_range(1..3),
|
buffer.text_summary_for_range(1..3),
|
||||||
TextSummary {
|
TextSummary {
|
||||||
|
@ -177,7 +177,7 @@ fn test_text_summary_for_range() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_chars_at() {
|
fn test_chars_at() {
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new("".into()));
|
let mut buffer = Buffer::new(0, 0, History::new("".into()));
|
||||||
buffer.edit(vec![0..0], "abcd\nefgh\nij");
|
buffer.edit(vec![0..0], "abcd\nefgh\nij");
|
||||||
buffer.edit(vec![12..12], "kl\nmno");
|
buffer.edit(vec![12..12], "kl\nmno");
|
||||||
buffer.edit(vec![18..18], "\npqrs");
|
buffer.edit(vec![18..18], "\npqrs");
|
||||||
|
@ -199,7 +199,7 @@ fn test_chars_at() {
|
||||||
assert_eq!(chars.collect::<String>(), "PQrs");
|
assert_eq!(chars.collect::<String>(), "PQrs");
|
||||||
|
|
||||||
// Regression test:
|
// Regression test:
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new("".into()));
|
let mut buffer = Buffer::new(0, 0, History::new("".into()));
|
||||||
buffer.edit(vec![0..0], "[workspace]\nmembers = [\n \"xray_core\",\n \"xray_server\",\n \"xray_cli\",\n \"xray_wasm\",\n]\n");
|
buffer.edit(vec![0..0], "[workspace]\nmembers = [\n \"xray_core\",\n \"xray_server\",\n \"xray_cli\",\n \"xray_wasm\",\n]\n");
|
||||||
buffer.edit(vec![60..60], "\n");
|
buffer.edit(vec![60..60], "\n");
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ fn test_chars_at() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_anchors() {
|
fn test_anchors() {
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new("".into()));
|
let mut buffer = Buffer::new(0, 0, History::new("".into()));
|
||||||
buffer.edit(vec![0..0], "abc");
|
buffer.edit(vec![0..0], "abc");
|
||||||
let left_anchor = buffer.anchor_before(2);
|
let left_anchor = buffer.anchor_before(2);
|
||||||
let right_anchor = buffer.anchor_after(2);
|
let right_anchor = buffer.anchor_after(2);
|
||||||
|
@ -345,7 +345,7 @@ fn test_anchors() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_anchors_at_start_and_end() {
|
fn test_anchors_at_start_and_end() {
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new("".into()));
|
let mut buffer = Buffer::new(0, 0, History::new("".into()));
|
||||||
let before_start_anchor = buffer.anchor_before(0);
|
let before_start_anchor = buffer.anchor_before(0);
|
||||||
let after_end_anchor = buffer.anchor_after(0);
|
let after_end_anchor = buffer.anchor_after(0);
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ fn test_anchors_at_start_and_end() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_undo_redo() {
|
fn test_undo_redo() {
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new("1234".into()));
|
let mut buffer = Buffer::new(0, 0, History::new("1234".into()));
|
||||||
// Set group interval to zero so as to not group edits in the undo stack.
|
// Set group interval to zero so as to not group edits in the undo stack.
|
||||||
buffer.history.group_interval = Duration::from_secs(0);
|
buffer.history.group_interval = Duration::from_secs(0);
|
||||||
|
|
||||||
|
@ -405,7 +405,7 @@ fn test_undo_redo() {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_history() {
|
fn test_history() {
|
||||||
let mut now = Instant::now();
|
let mut now = Instant::now();
|
||||||
let mut buffer = TextBuffer::new(0, 0, History::new("123456".into()));
|
let mut buffer = Buffer::new(0, 0, History::new("123456".into()));
|
||||||
|
|
||||||
let set_id = if let Operation::UpdateSelections { set_id, .. } =
|
let set_id = if let Operation::UpdateSelections { set_id, .. } =
|
||||||
buffer.add_selection_set(buffer.selections_from_ranges(vec![4..4]).unwrap())
|
buffer.add_selection_set(buffer.selections_from_ranges(vec![4..4]).unwrap())
|
||||||
|
@ -472,9 +472,9 @@ fn test_history() {
|
||||||
fn test_concurrent_edits() {
|
fn test_concurrent_edits() {
|
||||||
let text = "abcdef";
|
let text = "abcdef";
|
||||||
|
|
||||||
let mut buffer1 = TextBuffer::new(1, 0, History::new(text.into()));
|
let mut buffer1 = Buffer::new(1, 0, History::new(text.into()));
|
||||||
let mut buffer2 = TextBuffer::new(2, 0, History::new(text.into()));
|
let mut buffer2 = Buffer::new(2, 0, History::new(text.into()));
|
||||||
let mut buffer3 = TextBuffer::new(3, 0, History::new(text.into()));
|
let mut buffer3 = Buffer::new(3, 0, History::new(text.into()));
|
||||||
|
|
||||||
let buf1_op = buffer1.edit(vec![1..2], "12");
|
let buf1_op = buffer1.edit(vec![1..2], "12");
|
||||||
assert_eq!(buffer1.text(), "a12cdef");
|
assert_eq!(buffer1.text(), "a12cdef");
|
||||||
|
@ -513,7 +513,7 @@ fn test_random_concurrent_edits(mut rng: StdRng) {
|
||||||
let mut network = Network::new(rng.clone());
|
let mut network = Network::new(rng.clone());
|
||||||
|
|
||||||
for i in 0..peers {
|
for i in 0..peers {
|
||||||
let mut buffer = TextBuffer::new(i as ReplicaId, 0, History::new(base_text.clone().into()));
|
let mut buffer = Buffer::new(i as ReplicaId, 0, History::new(base_text.clone().into()));
|
||||||
buffer.history.group_interval = Duration::from_millis(rng.gen_range(0..=200));
|
buffer.history.group_interval = Duration::from_millis(rng.gen_range(0..=200));
|
||||||
buffers.push(buffer);
|
buffers.push(buffer);
|
||||||
replica_ids.push(i as u16);
|
replica_ids.push(i as u16);
|
||||||
|
|
|
@ -8,7 +8,7 @@ pub use self::{
|
||||||
language::{BracketPair, Language, LanguageConfig, LanguageRegistry},
|
language::{BracketPair, Language, LanguageConfig, LanguageRegistry},
|
||||||
};
|
};
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
pub use buffer::*;
|
pub use buffer::{Buffer as TextBuffer, *};
|
||||||
use clock::ReplicaId;
|
use clock::ReplicaId;
|
||||||
use gpui::{AppContext, Entity, ModelContext, MutableAppContext, Task};
|
use gpui::{AppContext, Entity, ModelContext, MutableAppContext, Task};
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
|
@ -44,7 +44,7 @@ lazy_static! {
|
||||||
const INDENT_SIZE: u32 = 4;
|
const INDENT_SIZE: u32 = 4;
|
||||||
|
|
||||||
pub struct Buffer {
|
pub struct Buffer {
|
||||||
buffer: TextBuffer,
|
text: TextBuffer,
|
||||||
file: Option<Box<dyn File>>,
|
file: Option<Box<dyn File>>,
|
||||||
saved_version: clock::Global,
|
saved_version: clock::Global,
|
||||||
saved_mtime: SystemTime,
|
saved_mtime: SystemTime,
|
||||||
|
@ -223,7 +223,7 @@ impl Buffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut result = Self {
|
let mut result = Self {
|
||||||
buffer,
|
text: buffer,
|
||||||
saved_mtime,
|
saved_mtime,
|
||||||
saved_version: clock::Global::new(),
|
saved_version: clock::Global::new(),
|
||||||
file,
|
file,
|
||||||
|
@ -244,7 +244,7 @@ impl Buffer {
|
||||||
|
|
||||||
pub fn snapshot(&self) -> Snapshot {
|
pub fn snapshot(&self) -> Snapshot {
|
||||||
Snapshot {
|
Snapshot {
|
||||||
text: self.buffer.snapshot(),
|
text: self.text.snapshot(),
|
||||||
tree: self.syntax_tree(),
|
tree: self.syntax_tree(),
|
||||||
is_parsing: self.parsing_in_background,
|
is_parsing: self.parsing_in_background,
|
||||||
language: self.language.clone(),
|
language: self.language.clone(),
|
||||||
|
@ -630,9 +630,9 @@ impl Buffer {
|
||||||
.selections
|
.selections
|
||||||
.iter()
|
.iter()
|
||||||
.map(|selection| {
|
.map(|selection| {
|
||||||
let start_point = selection.start.to_point(&self.buffer);
|
let start_point = selection.start.to_point(&self.text);
|
||||||
if start_point.column == 0 {
|
if start_point.column == 0 {
|
||||||
let end_point = selection.end.to_point(&self.buffer);
|
let end_point = selection.end.to_point(&self.text);
|
||||||
let delta = Point::new(
|
let delta = Point::new(
|
||||||
0,
|
0,
|
||||||
indent_columns.get(&start_point.row).copied().unwrap_or(0),
|
indent_columns.get(&start_point.row).copied().unwrap_or(0),
|
||||||
|
@ -801,7 +801,7 @@ impl Buffer {
|
||||||
selection_set_ids: impl IntoIterator<Item = SelectionSetId>,
|
selection_set_ids: impl IntoIterator<Item = SelectionSetId>,
|
||||||
now: Instant,
|
now: Instant,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
self.buffer.start_transaction_at(selection_set_ids, now)
|
self.text.start_transaction_at(selection_set_ids, now)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn end_transaction(
|
pub fn end_transaction(
|
||||||
|
@ -818,7 +818,7 @@ impl Buffer {
|
||||||
now: Instant,
|
now: Instant,
|
||||||
cx: &mut ModelContext<Self>,
|
cx: &mut ModelContext<Self>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
if let Some(start_version) = self.buffer.end_transaction_at(selection_set_ids, now) {
|
if let Some(start_version) = self.text.end_transaction_at(selection_set_ids, now) {
|
||||||
cx.notify();
|
cx.notify();
|
||||||
let was_dirty = start_version != self.saved_version;
|
let was_dirty = start_version != self.saved_version;
|
||||||
let edited = self.edits_since(start_version).next().is_some();
|
let edited = self.edits_since(start_version).next().is_some();
|
||||||
|
@ -905,7 +905,7 @@ impl Buffer {
|
||||||
let first_newline_ix = new_text.find('\n');
|
let first_newline_ix = new_text.find('\n');
|
||||||
let new_text_len = new_text.len();
|
let new_text_len = new_text.len();
|
||||||
|
|
||||||
let edit = self.buffer.edit(ranges.iter().cloned(), new_text);
|
let edit = self.text.edit(ranges.iter().cloned(), new_text);
|
||||||
|
|
||||||
if let Some((before_edit, edited)) = autoindent_request {
|
if let Some((before_edit, edited)) = autoindent_request {
|
||||||
let mut inserted = None;
|
let mut inserted = None;
|
||||||
|
@ -920,7 +920,7 @@ impl Buffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
let selection_set_ids = self
|
let selection_set_ids = self
|
||||||
.buffer
|
.text
|
||||||
.peek_undo_stack()
|
.peek_undo_stack()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.starting_selection_set_ids()
|
.starting_selection_set_ids()
|
||||||
|
@ -949,7 +949,7 @@ impl Buffer {
|
||||||
selections: impl Into<Arc<[Selection]>>,
|
selections: impl Into<Arc<[Selection]>>,
|
||||||
cx: &mut ModelContext<Self>,
|
cx: &mut ModelContext<Self>,
|
||||||
) -> SelectionSetId {
|
) -> SelectionSetId {
|
||||||
let operation = self.buffer.add_selection_set(selections);
|
let operation = self.text.add_selection_set(selections);
|
||||||
if let Operation::UpdateSelections { set_id, .. } = &operation {
|
if let Operation::UpdateSelections { set_id, .. } = &operation {
|
||||||
let set_id = *set_id;
|
let set_id = *set_id;
|
||||||
cx.notify();
|
cx.notify();
|
||||||
|
@ -966,7 +966,7 @@ impl Buffer {
|
||||||
selections: impl Into<Arc<[Selection]>>,
|
selections: impl Into<Arc<[Selection]>>,
|
||||||
cx: &mut ModelContext<Self>,
|
cx: &mut ModelContext<Self>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let operation = self.buffer.update_selection_set(set_id, selections)?;
|
let operation = self.text.update_selection_set(set_id, selections)?;
|
||||||
cx.notify();
|
cx.notify();
|
||||||
self.send_operation(operation, cx);
|
self.send_operation(operation, cx);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -977,7 +977,7 @@ impl Buffer {
|
||||||
set_id: Option<SelectionSetId>,
|
set_id: Option<SelectionSetId>,
|
||||||
cx: &mut ModelContext<Self>,
|
cx: &mut ModelContext<Self>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let operation = self.buffer.set_active_selection_set(set_id)?;
|
let operation = self.text.set_active_selection_set(set_id)?;
|
||||||
self.send_operation(operation, cx);
|
self.send_operation(operation, cx);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -987,7 +987,7 @@ impl Buffer {
|
||||||
set_id: SelectionSetId,
|
set_id: SelectionSetId,
|
||||||
cx: &mut ModelContext<Self>,
|
cx: &mut ModelContext<Self>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let operation = self.buffer.remove_selection_set(set_id)?;
|
let operation = self.text.remove_selection_set(set_id)?;
|
||||||
cx.notify();
|
cx.notify();
|
||||||
self.send_operation(operation, cx);
|
self.send_operation(operation, cx);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1003,7 +1003,7 @@ impl Buffer {
|
||||||
let was_dirty = self.is_dirty();
|
let was_dirty = self.is_dirty();
|
||||||
let old_version = self.version.clone();
|
let old_version = self.version.clone();
|
||||||
|
|
||||||
self.buffer.apply_ops(ops)?;
|
self.text.apply_ops(ops)?;
|
||||||
|
|
||||||
cx.notify();
|
cx.notify();
|
||||||
if self.edits_since(old_version).next().is_some() {
|
if self.edits_since(old_version).next().is_some() {
|
||||||
|
@ -1027,7 +1027,7 @@ impl Buffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remove_peer(&mut self, replica_id: ReplicaId, cx: &mut ModelContext<Self>) {
|
pub fn remove_peer(&mut self, replica_id: ReplicaId, cx: &mut ModelContext<Self>) {
|
||||||
self.buffer.remove_peer(replica_id);
|
self.text.remove_peer(replica_id);
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1035,7 +1035,7 @@ impl Buffer {
|
||||||
let was_dirty = self.is_dirty();
|
let was_dirty = self.is_dirty();
|
||||||
let old_version = self.version.clone();
|
let old_version = self.version.clone();
|
||||||
|
|
||||||
for operation in self.buffer.undo() {
|
for operation in self.text.undo() {
|
||||||
self.send_operation(operation, cx);
|
self.send_operation(operation, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1050,7 +1050,7 @@ impl Buffer {
|
||||||
let was_dirty = self.is_dirty();
|
let was_dirty = self.is_dirty();
|
||||||
let old_version = self.version.clone();
|
let old_version = self.version.clone();
|
||||||
|
|
||||||
for operation in self.buffer.redo() {
|
for operation in self.text.redo() {
|
||||||
self.send_operation(operation, cx);
|
self.send_operation(operation, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1068,14 +1068,14 @@ impl Buffer {
|
||||||
where
|
where
|
||||||
T: rand::Rng,
|
T: rand::Rng,
|
||||||
{
|
{
|
||||||
self.buffer.randomly_edit(rng, old_range_count);
|
self.text.randomly_edit(rng, old_range_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn randomly_mutate<T>(&mut self, rng: &mut T)
|
pub fn randomly_mutate<T>(&mut self, rng: &mut T)
|
||||||
where
|
where
|
||||||
T: rand::Rng,
|
T: rand::Rng,
|
||||||
{
|
{
|
||||||
self.buffer.randomly_mutate(rng);
|
self.text.randomly_mutate(rng);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1092,7 +1092,7 @@ impl Entity for Buffer {
|
||||||
impl Clone for Buffer {
|
impl Clone for Buffer {
|
||||||
fn clone(&self) -> Self {
|
fn clone(&self) -> Self {
|
||||||
Self {
|
Self {
|
||||||
buffer: self.buffer.clone(),
|
text: self.text.clone(),
|
||||||
saved_version: self.saved_version.clone(),
|
saved_version: self.saved_version.clone(),
|
||||||
saved_mtime: self.saved_mtime,
|
saved_mtime: self.saved_mtime,
|
||||||
file: self.file.as_ref().map(|f| f.boxed_clone()),
|
file: self.file.as_ref().map(|f| f.boxed_clone()),
|
||||||
|
@ -1114,19 +1114,19 @@ impl Deref for Buffer {
|
||||||
type Target = TextBuffer;
|
type Target = TextBuffer;
|
||||||
|
|
||||||
fn deref(&self) -> &Self::Target {
|
fn deref(&self) -> &Self::Target {
|
||||||
&self.buffer
|
&self.text
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> From<&'a Buffer> for Content<'a> {
|
impl<'a> From<&'a Buffer> for Content<'a> {
|
||||||
fn from(buffer: &'a Buffer) -> Self {
|
fn from(buffer: &'a Buffer) -> Self {
|
||||||
Self::from(&buffer.buffer)
|
Self::from(&buffer.text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> From<&'a mut Buffer> for Content<'a> {
|
impl<'a> From<&'a mut Buffer> for Content<'a> {
|
||||||
fn from(buffer: &'a mut Buffer) -> Self {
|
fn from(buffer: &'a mut Buffer) -> Self {
|
||||||
Self::from(&buffer.buffer)
|
Self::from(&buffer.text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue