Detailed changes
@@ -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",
@@ -3,6 +3,9 @@ name = "chat_panel"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/chat_panel.rs"
+
[dependencies]
client = { path = "../client" }
editor = { path = "../editor" }
@@ -3,6 +3,9 @@ name = "client"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/client.rs"
+
[features]
test-support = ["rpc/test-support"]
@@ -3,6 +3,9 @@ name = "clock"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/clock.rs"
+
[dependencies]
smallvec = { version = "1.6", features = ["union"] }
rpc = { path = "../rpc" }
@@ -3,6 +3,9 @@ name = "collections"
version = "0.1.0"
edition = "2021"
+[lib]
+path = "src/collections.rs"
+
[features]
test-support = ["seahash"]
@@ -3,6 +3,9 @@ name = "contacts_panel"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/contacts_panel.rs"
+
[dependencies]
client = { path = "../client" }
gpui = { path = "../gpui" }
@@ -3,15 +3,18 @@ name = "editor"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/editor.rs"
+
[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 +34,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"
@@ -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;
@@ -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() {
@@ -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]
@@ -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>);
@@ -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() {
@@ -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) {
@@ -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]
@@ -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,
@@ -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,
@@ -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 {
@@ -3,6 +3,9 @@ name = "file_finder"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/file_finder.rs"
+
[dependencies]
editor = { path = "../editor" }
fuzzy = { path = "../fuzzy" }
@@ -4,6 +4,9 @@ version = "2.0.2"
license = "MIT"
edition = "2018"
+[lib]
+path = "src/fsevent.rs"
+
[dependencies]
bitflags = "1"
fsevent-sys = "3.0.2"
@@ -3,6 +3,9 @@ name = "fuzzy"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/fuzzy.rs"
+
[dependencies]
gpui = { path = "../gpui" }
util = { path = "../util" }
@@ -3,8 +3,11 @@ name = "go_to_line"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/go_to_line.rs"
+
[dependencies]
-buffer = { path = "../buffer" }
+text = { path = "../text" }
editor = { path = "../editor" }
gpui = { path = "../gpui" }
workspace = { path = "../workspace" }
@@ -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,
@@ -4,6 +4,9 @@ edition = "2018"
name = "gpui"
version = "0.1.0"
+[lib]
+path = "src/gpui.rs"
+
[features]
test-support = ["env_logger"]
@@ -4,6 +4,7 @@ version = "0.1.0"
edition = "2018"
[lib]
+path = "src/gpui_macros.rs"
proc-macro = true
[dependencies]
@@ -3,16 +3,19 @@ name = "language"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/language.rs"
+
[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 +36,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"
@@ -1,18 +1,9 @@
-mod highlight_map;
-mod language;
-pub mod proto;
-#[cfg(test)]
-mod tests;
-
-pub use self::{
+pub use crate::{
highlight_map::{HighlightId, HighlightMap},
- language::{
- BracketPair, Grammar, Language, LanguageConfig, LanguageRegistry, LanguageServerConfig,
- PLAIN_TEXT,
- },
+ proto, BracketPair, Grammar, Language, LanguageConfig, LanguageRegistry, LanguageServerConfig,
+ PLAIN_TEXT,
};
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 +28,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 _};
@@ -73,11 +65,11 @@ pub struct Buffer {
diagnostics_update_count: usize,
language_server: Option<LanguageServerState>,
#[cfg(test)]
- operations: Vec<Operation>,
+ pub(crate) operations: Vec<Operation>,
}
pub struct Snapshot {
- text: buffer::Snapshot,
+ text: text::Snapshot,
tree: Option<Tree>,
diagnostics: AnchorRangeMultimap<Diagnostic>,
is_parsing: bool,
@@ -102,14 +94,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>),
}
@@ -217,7 +209,7 @@ pub struct Chunk<'a> {
pub diagnostic: Option<DiagnosticSeverity>,
}
-struct Diff {
+pub(crate) struct Diff {
base_version: clock::Global,
new_text: Arc<str>,
changes: Vec<(ChangeTag, usize)>,
@@ -269,11 +261,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);
@@ -573,7 +565,7 @@ impl Buffer {
self.parse_count
}
- fn syntax_tree(&self) -> Option<Tree> {
+ pub(crate) fn syntax_tree(&self) -> Option<Tree> {
if let Some(syntax_tree) = self.syntax_tree.lock().as_mut() {
self.interpolate_tree(syntax_tree);
Some(syntax_tree.tree.clone())
@@ -1094,7 +1086,7 @@ impl Buffer {
.min_by_key(|(open_range, close_range)| close_range.end - open_range.start)
}
- fn diff(&self, new_text: Arc<str>, cx: &AppContext) -> Task<Diff> {
+ pub(crate) fn diff(&self, new_text: Arc<str>, cx: &AppContext) -> Task<Diff> {
// TODO: it would be nice to not allocate here.
let old_text = self.text();
let base_version = self.version();
@@ -1111,7 +1103,7 @@ impl Buffer {
})
}
- fn apply_diff(&mut self, diff: Diff, cx: &mut ModelContext<Self>) -> bool {
+ pub(crate) fn apply_diff(&mut self, diff: Diff, cx: &mut ModelContext<Self>) -> bool {
if self.version == diff.base_version {
self.start_transaction(None).unwrap();
let mut offset = 0;
@@ -1153,7 +1145,7 @@ impl Buffer {
self.start_transaction_at(selection_set_ids, Instant::now())
}
- fn start_transaction_at(
+ pub(crate) fn start_transaction_at(
&mut self,
selection_set_ids: impl IntoIterator<Item = SelectionSetId>,
now: Instant,
@@ -1169,7 +1161,7 @@ impl Buffer {
self.end_transaction_at(selection_set_ids, Instant::now(), cx)
}
- fn end_transaction_at(
+ pub(crate) fn end_transaction_at(
&mut self,
selection_set_ids: impl IntoIterator<Item = SelectionSetId>,
now: Instant,
@@ -1321,7 +1313,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 +1346,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 +1738,7 @@ impl Clone for Snapshot {
}
impl Deref for Snapshot {
- type Target = buffer::Snapshot;
+ type Target = text::Snapshot;
fn deref(&self) -> &Self::Target {
&self.text
@@ -1995,7 +1987,7 @@ fn diagnostic_ranges<'a>(
))
}
-fn contiguous_ranges(
+pub fn contiguous_ranges(
values: impl IntoIterator<Item = u32>,
max_len: usize,
) -> impl Iterator<Item = Range<u32>> {
@@ -1,6 +1,14 @@
-use crate::HighlightMap;
+mod buffer;
+mod highlight_map;
+pub mod proto;
+#[cfg(test)]
+mod tests;
+
use anyhow::{anyhow, Result};
+pub use buffer::Operation;
+pub use buffer::*;
use gpui::{executor::Background, AppContext};
+use highlight_map::HighlightMap;
use lazy_static::lazy_static;
use lsp::LanguageServer;
use parking_lot::Mutex;
@@ -223,56 +231,3 @@ impl LanguageServerConfig {
)
}
}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_select_language() {
- let registry = LanguageRegistry {
- languages: vec![
- Arc::new(Language::new(
- LanguageConfig {
- name: "Rust".to_string(),
- path_suffixes: vec!["rs".to_string()],
- ..Default::default()
- },
- Some(tree_sitter_rust::language()),
- )),
- Arc::new(Language::new(
- LanguageConfig {
- name: "Make".to_string(),
- path_suffixes: vec!["Makefile".to_string(), "mk".to_string()],
- ..Default::default()
- },
- Some(tree_sitter_rust::language()),
- )),
- ],
- };
-
- // matching file extension
- assert_eq!(
- registry.select_language("zed/lib.rs").map(|l| l.name()),
- Some("Rust")
- );
- assert_eq!(
- registry.select_language("zed/lib.mk").map(|l| l.name()),
- Some("Make")
- );
-
- // matching filename
- assert_eq!(
- registry.select_language("zed/Makefile").map(|l| l.name()),
- Some("Make")
- );
-
- // matching suffix that is not the full file extension or filename
- assert_eq!(registry.select_language("zed/cars").map(|l| l.name()), None);
- assert_eq!(
- registry.select_language("zed/a.cars").map(|l| l.name()),
- None
- );
- assert_eq!(registry.select_language("zed/sumk").map(|l| l.name()), None);
- }
-}
@@ -1,23 +1,21 @@
use std::sync::Arc;
-use crate::Diagnostic;
-
-use super::Operation;
+use crate::{Diagnostic, 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 +41,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 +60,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 +68,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 +153,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 +209,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 +222,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 +234,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,
@@ -1,8 +1,56 @@
use super::*;
-use gpui::{ModelHandle, MutableAppContext};
-use std::{iter::FromIterator, rc::Rc};
+use gpui::{ModelHandle, MutableAppContext, Task};
+use std::{any::Any, cell::RefCell, ffi::OsString, iter::FromIterator, ops::Range, path::PathBuf, rc::Rc, time::{Duration, Instant, SystemTime}};
use unindent::Unindent as _;
+#[test]
+fn test_select_language() {
+ let registry = LanguageRegistry {
+ languages: vec![
+ Arc::new(Language::new(
+ LanguageConfig {
+ name: "Rust".to_string(),
+ path_suffixes: vec!["rs".to_string()],
+ ..Default::default()
+ },
+ Some(tree_sitter_rust::language()),
+ )),
+ Arc::new(Language::new(
+ LanguageConfig {
+ name: "Make".to_string(),
+ path_suffixes: vec!["Makefile".to_string(), "mk".to_string()],
+ ..Default::default()
+ },
+ Some(tree_sitter_rust::language()),
+ )),
+ ],
+ };
+
+ // matching file extension
+ assert_eq!(
+ registry.select_language("zed/lib.rs").map(|l| l.name()),
+ Some("Rust")
+ );
+ assert_eq!(
+ registry.select_language("zed/lib.mk").map(|l| l.name()),
+ Some("Make")
+ );
+
+ // matching filename
+ assert_eq!(
+ registry.select_language("zed/Makefile").map(|l| l.name()),
+ Some("Make")
+ );
+
+ // matching suffix that is not the full file extension or filename
+ assert_eq!(registry.select_language("zed/cars").map(|l| l.name()), None);
+ assert_eq!(
+ registry.select_language("zed/a.cars").map(|l| l.name()),
+ None
+ );
+ assert_eq!(registry.select_language("zed/sumk").map(|l| l.name()), None);
+}
+
#[gpui::test]
fn test_edit_events(cx: &mut gpui::MutableAppContext) {
let mut now = Instant::now();
@@ -3,6 +3,9 @@ name = "lsp"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/lsp.rs"
+
[features]
test-support = ["async-pipe"]
@@ -3,11 +3,14 @@ name = "project"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/project.rs"
+
[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" }
@@ -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 {
@@ -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 }));
@@ -3,6 +3,9 @@ name = "project_panel"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/project_panel.rs"
+
[dependencies]
gpui = { path = "../gpui" }
project = { path = "../project" }
@@ -4,6 +4,9 @@ edition = "2018"
name = "rpc"
version = "0.1.0"
+[lib]
+path = "src/rpc.rs"
+
[features]
test-support = []
@@ -2233,7 +2233,7 @@ mod tests {
.await;
worktree_a
- .condition(&cx_a, |worktree, cx| {
+ .condition(&cx_a, |worktree, _| {
worktree.collaborators().contains_key(&client_b.peer_id)
})
.await;
@@ -3,6 +3,9 @@ name = "sum_tree"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/sum_tree.rs"
+
[dependencies]
arrayvec = "0.7.1"
@@ -1,8 +1,11 @@
[package]
-name = "buffer"
+name = "text"
version = "0.1.0"
edition = "2021"
+[lib]
+path = "src/text.rs"
+
[features]
test-support = ["rand"]
@@ -3,6 +3,9 @@ name = "theme"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/theme.rs"
+
[dependencies]
gpui = { path = "../gpui" }
anyhow = "1.0.38"
@@ -3,6 +3,9 @@ name = "theme_selector"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/theme_selector.rs"
+
[dependencies]
editor = { path = "../editor" }
fuzzy = { path = "../fuzzy" }
@@ -3,6 +3,9 @@ name = "workspace"
version = "0.1.0"
edition = "2018"
+[lib]
+path = "src/workspace.rs"
+
[features]
test-support = [
"client/test-support",
@@ -7,7 +7,7 @@ version = "0.9.0"
[lib]
name = "zed"
-path = "src/lib.rs"
+path = "src/zed.rs"
[[bin]]
name = "Zed"
@@ -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"] }