From c8b43e30784fe51e01390e90d96d46de6a9c9855 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Fri, 10 Dec 2021 17:37:53 -0700 Subject: [PATCH] Move multi_buffer to editor crate --- Cargo.lock | 1 + crates/editor/Cargo.toml | 3 +++ crates/editor/src/display_map.rs | 6 ++---- crates/editor/src/display_map/block_map.rs | 8 +++----- crates/editor/src/display_map/fold_map.rs | 9 +++------ crates/editor/src/display_map/tab_map.rs | 6 +++--- crates/editor/src/display_map/wrap_map.rs | 6 ++++-- crates/editor/src/editor.rs | 9 ++++++--- crates/editor/src/element.rs | 6 +++--- crates/editor/src/items.rs | 6 ++---- crates/editor/src/movement.rs | 5 ++--- .../{language => editor}/src/multi_buffer.rs | 20 +++++++++---------- .../src/multi_buffer/anchor.rs | 0 .../src/multi_buffer/selection.rs | 0 crates/language/src/language.rs | 2 -- crates/server/src/rpc.rs | 4 ++-- 16 files changed, 44 insertions(+), 47 deletions(-) rename crates/{language => editor}/src/multi_buffer.rs (99%) rename crates/{language => editor}/src/multi_buffer/anchor.rs (100%) rename crates/{language => editor}/src/multi_buffer/selection.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 3fd01281a5..35d21eb786 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1527,6 +1527,7 @@ dependencies = [ "aho-corasick", "anyhow", "clock", + "collections", "ctor", "env_logger", "gpui", diff --git a/crates/editor/Cargo.toml b/crates/editor/Cargo.toml index f87ec63b3e..24dbcff3da 100644 --- a/crates/editor/Cargo.toml +++ b/crates/editor/Cargo.toml @@ -8,6 +8,7 @@ path = "src/editor.rs" [features] test-support = [ + "rand", "text/test-support", "language/test-support", "gpui/test-support", @@ -17,6 +18,7 @@ test-support = [ [dependencies] text = { path = "../text" } clock = { path = "../clock" } +collections = { path = "../collections" } gpui = { path = "../gpui" } language = { path = "../language" } project = { path = "../project" } @@ -30,6 +32,7 @@ lazy_static = "1.4" log = "0.4" parking_lot = "0.11" postage = { version = "0.4", features = ["futures-traits"] } +rand = { version = "0.8.3", optional = true } serde = { version = "1", features = ["derive", "rc"] } smallvec = { version = "1.6", features = ["union"] } smol = "1.2" diff --git a/crates/editor/src/display_map.rs b/crates/editor/src/display_map.rs index 35d859709c..1f420681a1 100644 --- a/crates/editor/src/display_map.rs +++ b/crates/editor/src/display_map.rs @@ -3,13 +3,11 @@ mod fold_map; mod tab_map; mod wrap_map; +use crate::{Anchor, MultiBuffer, MultiBufferSnapshot, ToOffset, ToPoint}; use block_map::{BlockMap, BlockPoint}; use fold_map::{FoldMap, ToFoldPoint as _}; use gpui::{fonts::FontId, ElementBox, Entity, ModelContext, ModelHandle}; -use language::{ - multi_buffer::{Anchor, MultiBuffer, MultiBufferSnapshot, ToOffset, ToPoint}, - Point, Subscription as BufferSubscription, -}; +use language::{Point, Subscription as BufferSubscription}; use std::{ collections::{HashMap, HashSet}, ops::Range, diff --git a/crates/editor/src/display_map/block_map.rs b/crates/editor/src/display_map/block_map.rs index 58ac3d7308..cd25e58899 100644 --- a/crates/editor/src/display_map/block_map.rs +++ b/crates/editor/src/display_map/block_map.rs @@ -1,9 +1,7 @@ use super::wrap_map::{self, WrapEdit, WrapPoint, WrapSnapshot}; +use crate::{Anchor, ToOffset, ToPoint as _}; use gpui::{AppContext, ElementBox}; -use language::{ - multi_buffer::{Anchor, ToOffset, ToPoint as _}, - Chunk, -}; +use language::Chunk; use parking_lot::Mutex; use std::{ cmp::{self, Ordering}, @@ -866,8 +864,8 @@ 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 crate::multi_buffer::MultiBuffer; use gpui::{elements::Empty, Element}; - use language::multi_buffer::MultiBuffer; use rand::prelude::*; use std::env; use text::RandomCharIter; diff --git a/crates/editor/src/display_map/fold_map.rs b/crates/editor/src/display_map/fold_map.rs index f2dfcb5385..662c381f61 100644 --- a/crates/editor/src/display_map/fold_map.rs +++ b/crates/editor/src/display_map/fold_map.rs @@ -1,7 +1,5 @@ -use language::{ - multi_buffer::{Anchor, AnchorRangeExt, MultiBufferChunks, MultiBufferSnapshot, ToOffset}, - Chunk, Edit, Point, PointUtf16, TextSummary, -}; +use crate::{Anchor, AnchorRangeExt, MultiBufferChunks, MultiBufferSnapshot, ToOffset}; +use language::{Chunk, Edit, Point, PointUtf16, TextSummary}; use parking_lot::Mutex; use std::{ cmp::{self, Ordering}, @@ -1057,8 +1055,7 @@ pub type FoldEdit = Edit; #[cfg(test)] mod tests { use super::*; - use crate::ToPoint; - use language::multi_buffer::MultiBuffer; + use crate::{MultiBuffer, ToPoint}; use rand::prelude::*; use std::{env, mem}; use text::RandomCharIter; diff --git a/crates/editor/src/display_map/tab_map.rs b/crates/editor/src/display_map/tab_map.rs index 2786c594b6..5f62582581 100644 --- a/crates/editor/src/display_map/tab_map.rs +++ b/crates/editor/src/display_map/tab_map.rs @@ -1,5 +1,6 @@ use super::fold_map::{self, FoldEdit, FoldPoint, FoldSnapshot, ToFoldPoint}; -use language::{multi_buffer::MultiBufferSnapshot, rope, Chunk}; +use crate::MultiBufferSnapshot; +use language::{rope, Chunk}; use parking_lot::Mutex; use std::{cmp, mem, ops::Range}; use sum_tree::Bias; @@ -438,8 +439,7 @@ impl<'a> Iterator for TabChunks<'a> { #[cfg(test)] mod tests { use super::*; - use crate::display_map::fold_map::FoldMap; - use language::multi_buffer::MultiBuffer; + use crate::{display_map::fold_map::FoldMap, MultiBuffer}; use rand::{prelude::StdRng, Rng}; use text::{RandomCharIter, Rope}; diff --git a/crates/editor/src/display_map/wrap_map.rs b/crates/editor/src/display_map/wrap_map.rs index d5c11f61dc..d1efb09ff7 100644 --- a/crates/editor/src/display_map/wrap_map.rs +++ b/crates/editor/src/display_map/wrap_map.rs @@ -2,11 +2,12 @@ use super::{ fold_map, tab_map::{self, TabEdit, TabPoint, TabSnapshot}, }; +use crate::{MultiBufferSnapshot, Point}; use gpui::{ fonts::FontId, text_layout::LineWrapper, Entity, ModelContext, ModelHandle, MutableAppContext, Task, }; -use language::{multi_buffer::MultiBufferSnapshot, Chunk, Point}; +use language::Chunk; use lazy_static::lazy_static; use smol::future::yield_now; use std::{collections::VecDeque, mem, ops::Range, time::Duration}; @@ -977,8 +978,9 @@ mod tests { use crate::{ display_map::{fold_map::FoldMap, tab_map::TabMap}, test::Observer, + MultiBuffer, }; - use language::{multi_buffer::MultiBuffer, RandomCharIter}; + use language::RandomCharIter; use rand::prelude::*; use std::{cmp, env}; use text::Rope; diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 3467d55771..ff569562d0 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -2,6 +2,7 @@ pub mod display_map; mod element; pub mod items; pub mod movement; +mod multi_buffer; #[cfg(test)] mod test; @@ -21,12 +22,14 @@ use gpui::{ }; use items::BufferItemHandle; use language::{ - multi_buffer::{ - Anchor, AnchorRangeExt, MultiBuffer, MultiBufferSnapshot, SelectionSet, ToOffset, ToPoint, - }, BracketPair, Buffer, Diagnostic, DiagnosticSeverity, Language, Point, Selection, SelectionGoal, SelectionSetId, }; +use multi_buffer::{ + Anchor, AnchorRangeExt, MultiBufferChunks, MultiBufferSnapshot, + SelectionSet, ToOffset, ToPoint, +}; +pub use multi_buffer::MultiBuffer; use serde::{Deserialize, Serialize}; use smallvec::SmallVec; use smol::Timer; diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index a878bc4a17..89c324a1ec 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -4,6 +4,7 @@ use super::{ DisplayPoint, Editor, EditorMode, EditorSettings, EditorSnapshot, EditorStyle, Input, Scroll, Select, SelectPhase, SoftWrap, MAX_LINE_LEN, }; +use crate::ToPoint; use clock::ReplicaId; use gpui::{ color::Color, @@ -19,7 +20,7 @@ use gpui::{ MutableAppContext, PaintContext, Quad, Scene, SizeConstraint, ViewContext, WeakViewHandle, }; use json::json; -use language::{multi_buffer::ToPoint, Chunk}; +use language::Chunk; use smallvec::SmallVec; use std::{ cmp::{self, Ordering}, @@ -1162,8 +1163,7 @@ fn scale_horizontal_mouse_autoscroll_delta(delta: f32) -> f32 { #[cfg(test)] mod tests { use super::*; - use crate::{Editor, EditorSettings}; - use language::{MultiBuffer}; + use crate::{Editor, EditorSettings, MultiBuffer}; use util::test::sample_text; #[gpui::test] diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 9a80456255..2ecfac3646 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -1,14 +1,12 @@ use crate::{Editor, EditorSettings, Event}; +use crate::{MultiBuffer, ToPoint as _}; use anyhow::Result; use gpui::{ elements::*, fonts::TextStyle, AppContext, Entity, ModelContext, ModelHandle, MutableAppContext, RenderContext, Subscription, Task, View, ViewContext, ViewHandle, WeakModelHandle, }; -use language::{ - multi_buffer::{MultiBuffer, ToPoint as _}, - Diagnostic, File as _, -}; +use language::{Diagnostic, File as _}; use postage::watch; use project::{ProjectPath, Worktree}; use std::fmt::Write; diff --git a/crates/editor/src/movement.rs b/crates/editor/src/movement.rs index 44cb1ebcf5..6c7525cb00 100644 --- a/crates/editor/src/movement.rs +++ b/crates/editor/src/movement.rs @@ -1,6 +1,6 @@ use super::{Bias, DisplayPoint, DisplaySnapshot, SelectionGoal, ToDisplayPoint}; +use crate::ToPoint; use anyhow::Result; -use language::multi_buffer::ToPoint; use std::{cmp, ops::Range}; pub fn left(map: &DisplaySnapshot, mut point: DisplayPoint) -> Result { @@ -244,8 +244,7 @@ fn char_kind(c: char) -> CharKind { #[cfg(test)] mod tests { use super::*; - use crate::display_map::DisplayMap; - use language::MultiBuffer; + use crate::{DisplayMap, MultiBuffer}; #[gpui::test] fn test_prev_next_word_boundary_multibyte(cx: &mut gpui::MutableAppContext) { diff --git a/crates/language/src/multi_buffer.rs b/crates/editor/src/multi_buffer.rs similarity index 99% rename from crates/language/src/multi_buffer.rs rename to crates/editor/src/multi_buffer.rs index e54cb009f9..82b7f0aafb 100644 --- a/crates/language/src/multi_buffer.rs +++ b/crates/editor/src/multi_buffer.rs @@ -1,15 +1,15 @@ mod anchor; mod selection; -use crate::{ - buffer::{self, Buffer, Chunk, ToOffset as _, ToPoint as _}, - BufferSnapshot, DiagnosticEntry, Event, File, Language, -}; pub use anchor::{Anchor, AnchorRangeExt}; use anyhow::Result; use clock::ReplicaId; use collections::HashMap; use gpui::{AppContext, Entity, ModelContext, ModelHandle, MutableAppContext, Task}; +use language::{ + Buffer, BufferChunks, BufferSnapshot, Chunk, DiagnosticEntry, Event, File, Language, + ToOffset as _, ToPoint as _, +}; pub use selection::SelectionSet; use std::{ cell::{Ref, RefCell}, @@ -72,7 +72,7 @@ pub struct ExcerptProperties<'a, T> { #[derive(Clone)] struct Excerpt { id: ExcerptId, - buffer: buffer::BufferSnapshot, + buffer: BufferSnapshot, range: Range, text_summary: TextSummary, header_height: u8, @@ -90,7 +90,7 @@ pub struct MultiBufferChunks<'a> { cursor: Cursor<'a, Excerpt, usize>, header_height: u8, has_trailing_newline: bool, - excerpt_chunks: Option>, + excerpt_chunks: Option>, theme: Option<&'a SyntaxTheme>, } @@ -394,7 +394,7 @@ impl MultiBuffer { cx.subscribe(buffer, Self::on_buffer_event).detach(); let buffer = props.buffer.read(cx); - let range = buffer.anchor_before(props.range.start)..buffer.anchor_after(props.range.end); + let range = buffer.anchor_before(&props.range.start)..buffer.anchor_after(&props.range.end); let mut snapshot = self.snapshot.borrow_mut(); let prev_id = snapshot.excerpts.last().map(|e| &e.id); let id = ExcerptId::between(prev_id.unwrap_or(&ExcerptId::min()), &ExcerptId::max()); @@ -565,7 +565,7 @@ impl MultiBuffer { } impl Entity for MultiBuffer { - type Event = super::Event; + type Event = language::Event; } impl MultiBufferSnapshot { @@ -1099,7 +1099,7 @@ impl MultiBufferSnapshot { impl Excerpt { fn new( id: ExcerptId, - buffer: buffer::BufferSnapshot, + buffer: BufferSnapshot, range: Range, header_height: u8, has_trailing_newline: bool, @@ -1357,8 +1357,8 @@ impl ToPoint for Point { #[cfg(test)] mod tests { use super::*; - use crate::buffer::Buffer; use gpui::MutableAppContext; + use language::Buffer; use rand::prelude::*; use std::env; use text::{Point, RandomCharIter}; diff --git a/crates/language/src/multi_buffer/anchor.rs b/crates/editor/src/multi_buffer/anchor.rs similarity index 100% rename from crates/language/src/multi_buffer/anchor.rs rename to crates/editor/src/multi_buffer/anchor.rs diff --git a/crates/language/src/multi_buffer/selection.rs b/crates/editor/src/multi_buffer/selection.rs similarity index 100% rename from crates/language/src/multi_buffer/selection.rs rename to crates/editor/src/multi_buffer/selection.rs diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 001317ea12..99161d1f5c 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -1,7 +1,6 @@ mod buffer; mod diagnostic_set; mod highlight_map; -pub mod multi_buffer; pub mod proto; #[cfg(test)] mod tests; @@ -14,7 +13,6 @@ use gpui::{executor::Background, AppContext}; use highlight_map::HighlightMap; use lazy_static::lazy_static; use lsp::LanguageServer; -pub use multi_buffer::MultiBuffer; use parking_lot::Mutex; use serde::Deserialize; use std::{collections::HashSet, path::Path, str, sync::Arc}; diff --git a/crates/server/src/rpc.rs b/crates/server/src/rpc.rs index 0c8dd4b458..54f2432b21 100644 --- a/crates/server/src/rpc.rs +++ b/crates/server/src/rpc.rs @@ -944,11 +944,11 @@ mod tests { EstablishConnectionError, UserStore, }, contacts_panel::JoinWorktree, - editor::{Editor, EditorSettings, Input}, + editor::{Editor, EditorSettings, Input, MultiBuffer}, fs::{FakeFs, Fs as _}, language::{ tree_sitter_rust, Diagnostic, DiagnosticEntry, Language, LanguageConfig, - LanguageRegistry, LanguageServerConfig, MultiBuffer, Point, + LanguageRegistry, LanguageServerConfig, Point, }, lsp, project::{ProjectPath, Worktree},