Rename buffer crate to text and name its entrypoint after the crate

Nathan Sobo and Max Brunsfeld created

Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>

Change summary

Cargo.lock                                 | 40 ++++++++++++------------
crates/editor/Cargo.toml                   |  6 +-
crates/editor/src/display_map.rs           |  2 
crates/editor/src/display_map/block_map.rs |  4 +-
crates/editor/src/display_map/fold_map.rs  | 26 ++++++---------
crates/editor/src/display_map/patch.rs     |  2 
crates/editor/src/display_map/tab_map.rs   |  4 +-
crates/editor/src/display_map/wrap_map.rs  |  4 +-
crates/editor/src/element.rs               |  2 
crates/editor/src/items.rs                 |  2 
crates/editor/src/lib.rs                   |  4 +-
crates/editor/src/movement.rs              |  2 
crates/go_to_line/Cargo.toml               |  2 
crates/go_to_line/src/lib.rs               |  2 
crates/language/Cargo.toml                 |  6 +-
crates/language/src/lib.rs                 | 18 +++++-----
crates/language/src/proto.rs               | 22 ++++++------
crates/project/Cargo.toml                  |  4 +-
crates/project/src/fs.rs                   |  2 
crates/project/src/worktree.rs             |  4 +-
crates/text/Cargo.toml                     |  5 ++
crates/text/src/anchor.rs                  |  0 
crates/text/src/operation_queue.rs         |  0 
crates/text/src/point.rs                   |  0 
crates/text/src/point_utf16.rs             |  0 
crates/text/src/random_char_iter.rs        |  0 
crates/text/src/rope.rs                    |  0 
crates/text/src/selection.rs               |  0 
crates/text/src/tests.rs                   |  0 
crates/text/src/text.rs                    |  0 
crates/zed/Cargo.toml                      |  6 +-
31 files changed, 84 insertions(+), 85 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -739,21 +739,6 @@ dependencies = [
  "memchr",
 ]
 
-[[package]]
-name = "buffer"
-version = "0.1.0"
-dependencies = [
- "anyhow",
- "arrayvec 0.7.1",
- "clock",
- "collections",
- "gpui",
- "log",
- "rand 0.8.3",
- "smallvec",
- "sum_tree",
-]
-
 [[package]]
 name = "build_const"
 version = "0.2.2"
@@ -1541,7 +1526,6 @@ version = "0.1.0"
 dependencies = [
  "aho-corasick",
  "anyhow",
- "buffer",
  "clock",
  "ctor",
  "env_logger",
@@ -1557,6 +1541,7 @@ dependencies = [
  "smallvec",
  "smol",
  "sum_tree",
+ "text",
  "theme",
  "tree-sitter",
  "tree-sitter-rust",
@@ -2107,10 +2092,10 @@ dependencies = [
 name = "go_to_line"
 version = "0.1.0"
 dependencies = [
- "buffer",
  "editor",
  "gpui",
  "postage",
+ "text",
  "workspace",
 ]
 
@@ -2589,7 +2574,6 @@ name = "language"
 version = "0.1.0"
 dependencies = [
  "anyhow",
- "buffer",
  "clock",
  "futures",
  "gpui",
@@ -2603,6 +2587,7 @@ dependencies = [
  "serde",
  "similar",
  "smol",
+ "text",
  "theme",
  "tree-sitter",
  "tree-sitter-rust",
@@ -3451,7 +3436,6 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "async-trait",
- "buffer",
  "client",
  "clock",
  "fsevent",
@@ -3474,6 +3458,7 @@ dependencies = [
  "smol",
  "sum_tree",
  "tempdir",
+ "text",
  "toml",
  "unindent",
  "util",
@@ -4856,6 +4841,21 @@ dependencies = [
  "winapi-util",
 ]
 
+[[package]]
+name = "text"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "arrayvec 0.7.1",
+ "clock",
+ "collections",
+ "gpui",
+ "log",
+ "rand 0.8.3",
+ "smallvec",
+ "sum_tree",
+]
+
 [[package]]
 name = "textwrap"
 version = "0.11.0"
@@ -5676,7 +5676,6 @@ dependencies = [
  "async-recursion",
  "async-trait",
  "async-tungstenite",
- "buffer",
  "chat_panel",
  "client",
  "clock",
@@ -5721,6 +5720,7 @@ dependencies = [
  "sum_tree",
  "surf",
  "tempdir",
+ "text",
  "theme",
  "theme_selector",
  "thiserror",

crates/editor/Cargo.toml 🔗

@@ -5,13 +5,13 @@ edition = "2018"
 
 [features]
 test-support = [
-    "buffer/test-support",
+    "text/test-support",
     "language/test-support",
     "gpui/test-support",
 ]
 
 [dependencies]
-buffer = { path = "../buffer" }
+text = { path = "../text" }
 clock = { path = "../clock" }
 gpui = { path = "../gpui" }
 language = { path = "../language" }
@@ -31,7 +31,7 @@ smallvec = { version = "1.6", features = ["union"] }
 smol = "1.2"
 
 [dev-dependencies]
-buffer = { path = "../buffer", features = ["test-support"] }
+text = { path = "../text", features = ["test-support"] }
 language = { path = "../language", features = ["test-support"] }
 gpui = { path = "../gpui", features = ["test-support"] }
 ctor = "0.1"

crates/editor/src/display_map.rs 🔗

@@ -6,7 +6,6 @@ mod wrap_map;
 
 pub use block_map::{BlockDisposition, BlockId, BlockProperties, BufferRows, Chunks};
 use block_map::{BlockMap, BlockPoint};
-use buffer::Rope;
 use fold_map::{FoldMap, ToFoldPoint as _};
 use gpui::{
     fonts::{FontId, HighlightStyle},
@@ -19,6 +18,7 @@ use std::{
 };
 use sum_tree::Bias;
 use tab_map::TabMap;
+use text::Rope;
 use theme::{BlockStyle, SyntaxTheme};
 use wrap_map::WrapMap;
 

crates/editor/src/display_map/block_map.rs 🔗

@@ -2,7 +2,6 @@ use super::{
     wrap_map::{self, Edit as WrapEdit, Snapshot as WrapSnapshot, WrapPoint},
     BlockStyle, DisplayRow,
 };
-use buffer::{rope, Anchor, Bias, Edit, Point, Rope, ToOffset, ToPoint as _};
 use gpui::{fonts::HighlightStyle, AppContext, ModelHandle};
 use language::{Buffer, Chunk};
 use parking_lot::Mutex;
@@ -19,6 +18,7 @@ use std::{
     vec,
 };
 use sum_tree::SumTree;
+use text::{rope, Anchor, Bias, Edit, Point, Rope, ToOffset, ToPoint as _};
 use theme::SyntaxTheme;
 
 pub struct BlockMap {
@@ -1003,11 +1003,11 @@ fn offset_for_row(s: &str, target: u32) -> (u32, usize) {
 mod tests {
     use super::*;
     use crate::display_map::{fold_map::FoldMap, tab_map::TabMap, wrap_map::WrapMap};
-    use buffer::RandomCharIter;
     use gpui::color::Color;
     use language::Buffer;
     use rand::prelude::*;
     use std::env;
+    use text::RandomCharIter;
 
     #[gpui::test]
     fn test_offset_for_row() {

crates/editor/src/display_map/fold_map.rs 🔗

@@ -110,7 +110,7 @@ impl<'a> FoldMapWriter<'a> {
             if range.start != range.end {
                 let fold = Fold(buffer.anchor_after(range.start)..buffer.anchor_before(range.end));
                 folds.push(fold);
-                edits.push(buffer::Edit {
+                edits.push(text::Edit {
                     old: range.clone(),
                     new: range,
                 });
@@ -154,7 +154,7 @@ impl<'a> FoldMapWriter<'a> {
             let mut folds_cursor = intersecting_folds(&buffer, &self.0.folds, range, true);
             while let Some(fold) = folds_cursor.item() {
                 let offset_range = fold.0.start.to_offset(&buffer)..fold.0.end.to_offset(&buffer);
-                edits.push(buffer::Edit {
+                edits.push(text::Edit {
                     old: offset_range.clone(),
                     new: offset_range,
                 });
@@ -285,11 +285,7 @@ impl FoldMap {
         }
     }
 
-    fn apply_edits(
-        &self,
-        buffer_edits: Vec<buffer::Edit<usize>>,
-        cx: &AppContext,
-    ) -> Vec<FoldEdit> {
+    fn apply_edits(&self, buffer_edits: Vec<text::Edit<usize>>, cx: &AppContext) -> Vec<FoldEdit> {
         let buffer = self.buffer.read(cx).snapshot();
         let mut buffer_edits_iter = buffer_edits.iter().cloned().peekable();
 
@@ -713,7 +709,7 @@ impl Snapshot {
 }
 
 fn intersecting_folds<'a, T>(
-    buffer: &'a buffer::Snapshot,
+    buffer: &'a text::Snapshot,
     folds: &'a SumTree<Fold>,
     range: Range<T>,
     inclusive: bool,
@@ -738,7 +734,7 @@ where
     )
 }
 
-fn consolidate_buffer_edits(edits: &mut Vec<buffer::Edit<usize>>) {
+fn consolidate_buffer_edits(edits: &mut Vec<text::Edit<usize>>) {
     edits.sort_unstable_by(|a, b| {
         a.old
             .start
@@ -864,9 +860,9 @@ impl Default for FoldSummary {
 }
 
 impl sum_tree::Summary for FoldSummary {
-    type Context = buffer::Snapshot;
+    type Context = text::Snapshot;
 
-    fn add_summary(&mut self, other: &Self, buffer: &buffer::Snapshot) {
+    fn add_summary(&mut self, other: &Self, buffer: &text::Snapshot) {
         if other.min_start.cmp(&self.min_start, buffer).unwrap() == Ordering::Less {
             self.min_start = other.min_start.clone();
         }
@@ -890,20 +886,20 @@ impl sum_tree::Summary for FoldSummary {
 }
 
 impl<'a> sum_tree::Dimension<'a, FoldSummary> for Fold {
-    fn add_summary(&mut self, summary: &'a FoldSummary, _: &buffer::Snapshot) {
+    fn add_summary(&mut self, summary: &'a FoldSummary, _: &text::Snapshot) {
         self.0.start = summary.start.clone();
         self.0.end = summary.end.clone();
     }
 }
 
 impl<'a> sum_tree::SeekTarget<'a, FoldSummary, Fold> for Fold {
-    fn cmp(&self, other: &Self, buffer: &buffer::Snapshot) -> Ordering {
+    fn cmp(&self, other: &Self, buffer: &text::Snapshot) -> Ordering {
         self.0.cmp(&other.0, buffer).unwrap()
     }
 }
 
 impl<'a> sum_tree::Dimension<'a, FoldSummary> for usize {
-    fn add_summary(&mut self, summary: &'a FoldSummary, _: &buffer::Snapshot) {
+    fn add_summary(&mut self, summary: &'a FoldSummary, _: &text::Snapshot) {
         *self += summary.count;
     }
 }
@@ -1078,9 +1074,9 @@ impl FoldEdit {
 mod tests {
     use super::*;
     use crate::{test::sample_text, ToPoint};
-    use buffer::RandomCharIter;
     use rand::prelude::*;
     use std::{env, mem};
+    use text::RandomCharIter;
     use Bias::{Left, Right};
 
     #[gpui::test]

crates/editor/src/display_map/patch.rs 🔗

@@ -1,6 +1,6 @@
 use std::{cmp, mem};
 
-type Edit = buffer::Edit<u32>;
+type Edit = text::Edit<u32>;
 
 #[derive(Default, Debug, PartialEq, Eq)]
 pub struct Patch(Vec<Edit>);

crates/editor/src/display_map/tab_map.rs 🔗

@@ -1,9 +1,9 @@
 use super::fold_map::{self, FoldEdit, FoldPoint, Snapshot as FoldSnapshot, ToFoldPoint};
-use buffer::Point;
 use language::{rope, Chunk};
 use parking_lot::Mutex;
 use std::{cmp, mem, ops::Range};
 use sum_tree::Bias;
+use text::Point;
 use theme::SyntaxTheme;
 
 pub struct TabMap(Mutex<Snapshot>);
@@ -451,9 +451,9 @@ impl<'a> Iterator for Chunks<'a> {
 mod tests {
     use super::*;
     use crate::display_map::fold_map::FoldMap;
-    use buffer::{RandomCharIter, Rope};
     use language::Buffer;
     use rand::{prelude::StdRng, Rng};
+    use text::{RandomCharIter, Rope};
 
     #[test]
     fn test_expand_tabs() {

crates/editor/src/display_map/wrap_map.rs 🔗

@@ -16,7 +16,7 @@ use sum_tree::{Bias, Cursor, SumTree};
 use theme::SyntaxTheme;
 
 pub use super::tab_map::TextSummary;
-pub type Edit = buffer::Edit<u32>;
+pub type Edit = text::Edit<u32>;
 
 pub struct WrapMap {
     snapshot: Snapshot,
@@ -991,10 +991,10 @@ mod tests {
         display_map::{fold_map::FoldMap, tab_map::TabMap},
         test::Observer,
     };
-    use buffer::Rope;
     use language::{Buffer, RandomCharIter};
     use rand::prelude::*;
     use std::{cmp, env};
+    use text::Rope;
 
     #[gpui::test(iterations = 100)]
     async fn test_random_wraps(mut cx: gpui::TestAppContext, mut rng: StdRng) {

crates/editor/src/element.rs 🔗

@@ -931,7 +931,7 @@ pub struct LayoutState {
     line_height: f32,
     em_width: f32,
     em_advance: f32,
-    selections: HashMap<ReplicaId, Vec<buffer::Selection<DisplayPoint>>>,
+    selections: HashMap<ReplicaId, Vec<text::Selection<DisplayPoint>>>,
     overscroll: Vector2F,
     text_offset: Vector2F,
     max_visible_line_width: f32,

crates/editor/src/items.rs 🔗

@@ -1,6 +1,5 @@
 use crate::{Editor, EditorSettings, Event};
 use anyhow::Result;
-use buffer::{Point, Selection, ToPoint};
 use gpui::{
     elements::*, fonts::TextStyle, AppContext, Entity, ModelContext, ModelHandle,
     MutableAppContext, RenderContext, Subscription, Task, View, ViewContext, ViewHandle,
@@ -11,6 +10,7 @@ use postage::watch;
 use project::{ProjectPath, Worktree};
 use std::fmt::Write;
 use std::path::Path;
+use text::{Point, Selection, ToPoint};
 use workspace::{
     settings, EntryOpener, ItemHandle, ItemView, ItemViewHandle, Settings, StatusItemView,
     WeakItemHandle,

crates/editor/src/lib.rs 🔗

@@ -7,7 +7,6 @@ pub mod movement;
 mod test;
 
 use aho_corasick::AhoCorasick;
-use buffer::rope::TextDimension;
 use clock::ReplicaId;
 use display_map::*;
 pub use display_map::{DisplayPoint, DisplayRow};
@@ -35,6 +34,7 @@ use std::{
     time::Duration,
 };
 use sum_tree::Bias;
+use text::rope::TextDimension;
 use theme::{DiagnosticStyle, EditorStyle, SyntaxTheme};
 use util::post_inc;
 use workspace::{EntryOpener, Workspace};
@@ -3731,7 +3731,7 @@ pub fn diagnostic_style(
 mod tests {
     use super::*;
     use crate::test::sample_text;
-    use buffer::Point;
+    use text::Point;
     use unindent::Unindent;
 
     #[gpui::test]

crates/editor/src/movement.rs 🔗

@@ -1,7 +1,7 @@
 use super::{Bias, DisplayMapSnapshot, DisplayPoint, SelectionGoal, ToDisplayPoint};
 use anyhow::Result;
-use buffer::ToPoint;
 use std::{cmp, ops::Range};
+use text::ToPoint;
 
 pub fn left(map: &DisplayMapSnapshot, mut point: DisplayPoint) -> Result<DisplayPoint> {
     if point.column() > 0 {

crates/go_to_line/Cargo.toml 🔗

@@ -4,7 +4,7 @@ version = "0.1.0"
 edition = "2018"
 
 [dependencies]
-buffer = { path = "../buffer" }
+text = { path = "../text" }
 editor = { path = "../editor" }
 gpui = { path = "../gpui" }
 workspace = { path = "../workspace" }

crates/go_to_line/src/lib.rs 🔗

@@ -1,4 +1,4 @@
-use buffer::{Bias, Point, Selection};
+use text::{Bias, Point, Selection};
 use editor::{display_map::ToDisplayPoint, Autoscroll, Editor, EditorSettings};
 use gpui::{
     action, elements::*, geometry::vector::Vector2F, keymap::Binding, Axis, Entity,

crates/language/Cargo.toml 🔗

@@ -6,13 +6,13 @@ edition = "2018"
 [features]
 test-support = [
     "rand",
-    "buffer/test-support",
+    "text/test-support",
     "lsp/test-support",
     "tree-sitter-rust",
 ]
 
 [dependencies]
-buffer = { path = "../buffer" }
+text = { path = "../text" }
 clock = { path = "../clock" }
 gpui = { path = "../gpui" }
 lsp = { path = "../lsp" }
@@ -33,7 +33,7 @@ tree-sitter = "0.19.5"
 tree-sitter-rust = { version = "0.19.0", optional = true }
 
 [dev-dependencies]
-buffer = { path = "../buffer", features = ["test-support"] }
+text = { path = "../text", features = ["test-support"] }
 gpui = { path = "../gpui", features = ["test-support"] }
 lsp = { path = "../lsp", features = ["test-support"] }
 rand = "0.8.3"

crates/language/src/lib.rs 🔗

@@ -12,7 +12,6 @@ pub use self::{
     },
 };
 use anyhow::{anyhow, Result};
-pub use buffer::{Buffer as TextBuffer, Operation as _, *};
 use clock::ReplicaId;
 use futures::FutureExt as _;
 use gpui::{fonts::HighlightStyle, AppContext, Entity, ModelContext, MutableAppContext, Task};
@@ -37,6 +36,7 @@ use std::{
     time::{Duration, Instant, SystemTime, UNIX_EPOCH},
     vec,
 };
+pub use text::{Buffer as TextBuffer, Operation as _, *};
 use theme::SyntaxTheme;
 use tree_sitter::{InputEdit, Parser, QueryCursor, Tree};
 use util::{post_inc, TryFutureExt as _};
@@ -77,7 +77,7 @@ pub struct Buffer {
 }
 
 pub struct Snapshot {
-    text: buffer::Snapshot,
+    text: text::Snapshot,
     tree: Option<Tree>,
     diagnostics: AnchorRangeMultimap<Diagnostic>,
     is_parsing: bool,
@@ -102,14 +102,14 @@ struct LanguageServerState {
 
 #[derive(Clone)]
 struct LanguageServerSnapshot {
-    buffer_snapshot: buffer::Snapshot,
+    buffer_snapshot: text::Snapshot,
     version: usize,
     path: Arc<Path>,
 }
 
 #[derive(Clone)]
 pub enum Operation {
-    Buffer(buffer::Operation),
+    Buffer(text::Operation),
     UpdateDiagnostics(AnchorRangeMultimap<Diagnostic>),
 }
 
@@ -269,11 +269,11 @@ impl Buffer {
         cx: &mut ModelContext<Self>,
     ) -> Result<Self> {
         let mut buffer =
-            buffer::Buffer::new(replica_id, message.id, History::new(message.content.into()));
+            text::Buffer::new(replica_id, message.id, History::new(message.content.into()));
         let ops = message
             .history
             .into_iter()
-            .map(|op| buffer::Operation::Edit(proto::deserialize_edit_operation(op)));
+            .map(|op| text::Operation::Edit(proto::deserialize_edit_operation(op)));
         buffer.apply_ops(ops)?;
         for set in message.selections {
             let set = proto::deserialize_selection_set(set);
@@ -1321,7 +1321,7 @@ impl Buffer {
         }
 
         self.end_transaction(None, cx).unwrap();
-        self.send_operation(Operation::Buffer(buffer::Operation::Edit(edit)), cx);
+        self.send_operation(Operation::Buffer(text::Operation::Edit(edit)), cx);
     }
 
     fn did_edit(
@@ -1354,7 +1354,7 @@ impl Buffer {
         cx: &mut ModelContext<Self>,
     ) -> SelectionSetId {
         let operation = self.text.add_selection_set(selections);
-        if let buffer::Operation::UpdateSelections { set_id, .. } = &operation {
+        if let text::Operation::UpdateSelections { set_id, .. } = &operation {
             let set_id = *set_id;
             cx.notify();
             self.send_operation(Operation::Buffer(operation), cx);
@@ -1746,7 +1746,7 @@ impl Clone for Snapshot {
 }
 
 impl Deref for Snapshot {
-    type Target = buffer::Snapshot;
+    type Target = text::Snapshot;
 
     fn deref(&self) -> &Self::Target {
         &self.text

crates/language/src/proto.rs 🔗

@@ -4,20 +4,20 @@ use crate::Diagnostic;
 
 use super::Operation;
 use anyhow::{anyhow, Result};
-use buffer::*;
 use clock::ReplicaId;
 use lsp::DiagnosticSeverity;
 use rpc::proto;
+use text::*;
 
 pub use proto::Buffer;
 
 pub fn serialize_operation(operation: &Operation) -> proto::Operation {
     proto::Operation {
         variant: Some(match operation {
-            Operation::Buffer(buffer::Operation::Edit(edit)) => {
+            Operation::Buffer(text::Operation::Edit(edit)) => {
                 proto::operation::Variant::Edit(serialize_edit_operation(edit))
             }
-            Operation::Buffer(buffer::Operation::Undo {
+            Operation::Buffer(text::Operation::Undo {
                 undo,
                 lamport_timestamp,
             }) => proto::operation::Variant::Undo(proto::operation::Undo {
@@ -43,7 +43,7 @@ pub fn serialize_operation(operation: &Operation) -> proto::Operation {
                     .collect(),
                 version: From::from(&undo.version),
             }),
-            Operation::Buffer(buffer::Operation::UpdateSelections {
+            Operation::Buffer(text::Operation::UpdateSelections {
                 set_id,
                 selections,
                 lamport_timestamp,
@@ -62,7 +62,7 @@ pub fn serialize_operation(operation: &Operation) -> proto::Operation {
                     })
                     .collect(),
             }),
-            Operation::Buffer(buffer::Operation::RemoveSelections {
+            Operation::Buffer(text::Operation::RemoveSelections {
                 set_id,
                 lamport_timestamp,
             }) => proto::operation::Variant::RemoveSelections(proto::operation::RemoveSelections {
@@ -70,7 +70,7 @@ pub fn serialize_operation(operation: &Operation) -> proto::Operation {
                 local_timestamp: set_id.value,
                 lamport_timestamp: lamport_timestamp.value,
             }),
-            Operation::Buffer(buffer::Operation::SetActiveSelections {
+            Operation::Buffer(text::Operation::SetActiveSelections {
                 set_id,
                 lamport_timestamp,
             }) => proto::operation::Variant::SetActiveSelections(
@@ -155,9 +155,9 @@ pub fn deserialize_operation(message: proto::Operation) -> Result<Operation> {
             .ok_or_else(|| anyhow!("missing operation variant"))?
         {
             proto::operation::Variant::Edit(edit) => {
-                Operation::Buffer(buffer::Operation::Edit(deserialize_edit_operation(edit)))
+                Operation::Buffer(text::Operation::Edit(deserialize_edit_operation(edit)))
             }
-            proto::operation::Variant::Undo(undo) => Operation::Buffer(buffer::Operation::Undo {
+            proto::operation::Variant::Undo(undo) => Operation::Buffer(text::Operation::Undo {
                 lamport_timestamp: clock::Lamport {
                     replica_id: undo.replica_id as ReplicaId,
                     value: undo.lamport_timestamp,
@@ -211,7 +211,7 @@ pub fn deserialize_operation(message: proto::Operation) -> Result<Operation> {
                     entries,
                 );
 
-                Operation::Buffer(buffer::Operation::UpdateSelections {
+                Operation::Buffer(text::Operation::UpdateSelections {
                     set_id: clock::Lamport {
                         replica_id: message.replica_id as ReplicaId,
                         value: message.local_timestamp,
@@ -224,7 +224,7 @@ pub fn deserialize_operation(message: proto::Operation) -> Result<Operation> {
                 })
             }
             proto::operation::Variant::RemoveSelections(message) => {
-                Operation::Buffer(buffer::Operation::RemoveSelections {
+                Operation::Buffer(text::Operation::RemoveSelections {
                     set_id: clock::Lamport {
                         replica_id: message.replica_id as ReplicaId,
                         value: message.local_timestamp,
@@ -236,7 +236,7 @@ pub fn deserialize_operation(message: proto::Operation) -> Result<Operation> {
                 })
             }
             proto::operation::Variant::SetActiveSelections(message) => {
-                Operation::Buffer(buffer::Operation::SetActiveSelections {
+                Operation::Buffer(text::Operation::SetActiveSelections {
                     set_id: message.local_timestamp.map(|value| clock::Lamport {
                         replica_id: message.replica_id as ReplicaId,
                         value,

crates/project/Cargo.toml 🔗

@@ -4,10 +4,10 @@ version = "0.1.0"
 edition = "2018"
 
 [features]
-test-support = ["language/test-support", "buffer/test-support"]
+test-support = ["language/test-support", "text/test-support"]
 
 [dependencies]
-buffer = { path = "../buffer" }
+text = { path = "../text" }
 client = { path = "../client" }
 clock = { path = "../clock" }
 fsevent = { path = "../fsevent" }

crates/project/src/fs.rs 🔗

@@ -1,5 +1,4 @@
 use anyhow::{anyhow, Result};
-use buffer::Rope;
 use fsevent::EventStream;
 use futures::{Stream, StreamExt};
 use postage::prelude::Sink as _;
@@ -11,6 +10,7 @@ use std::{
     pin::Pin,
     time::{Duration, SystemTime},
 };
+use text::Rope;
 
 #[async_trait::async_trait]
 pub trait Fs: Send + Sync {

crates/project/src/worktree.rs 🔗

@@ -3004,7 +3004,6 @@ mod tests {
     use super::*;
     use crate::fs::FakeFs;
     use anyhow::Result;
-    use buffer::Point;
     use client::test::{FakeHttpClient, FakeServer};
     use fs::RealFs;
     use language::{tree_sitter_rust, LanguageServerConfig};
@@ -3018,6 +3017,7 @@ mod tests {
         fmt::Write,
         time::{SystemTime, UNIX_EPOCH},
     };
+    use text::Point;
     use util::test::temp_tree;
 
     #[gpui::test]
@@ -3559,8 +3559,8 @@ mod tests {
 
     #[gpui::test]
     async fn test_buffer_file_changes_on_disk(mut cx: gpui::TestAppContext) {
-        use buffer::{Point, Selection, SelectionGoal};
         use std::fs;
+        use text::{Point, Selection, SelectionGoal};
 
         let initial_contents = "aaa\nbbbbb\nc\n";
         let dir = temp_tree(json!({ "the-file": initial_contents }));

crates/buffer/Cargo.toml → crates/text/Cargo.toml 🔗

@@ -1,8 +1,11 @@
 [package]
-name = "buffer"
+name = "text"
 version = "0.1.0"
 edition = "2021"
 
+[lib]
+path = "src/text.rs"
+
 [features]
 test-support = ["rand"]
 

crates/zed/Cargo.toml 🔗

@@ -15,7 +15,7 @@ path = "src/main.rs"
 
 [features]
 test-support = [
-    "buffer/test-support",
+    "text/test-support",
     "client/test-support",
     "editor/test-support",
     "gpui/test-support",
@@ -28,7 +28,7 @@ test-support = [
 ]
 
 [dependencies]
-buffer = { path = "../buffer" }
+text = { path = "../text" }
 chat_panel = { path = "../chat_panel" }
 client = { path = "../client" }
 clock = { path = "../clock" }
@@ -89,7 +89,7 @@ tree-sitter-rust = "0.19.0"
 url = "2.2"
 
 [dev-dependencies]
-buffer = { path = "../buffer", features = ["test-support"] }
+text = { path = "../text", features = ["test-support"] }
 editor = { path = "../editor", features = ["test-support"] }
 gpui = { path = "../gpui", features = ["test-support"] }
 language = { path = "../language", features = ["test-support"] }