From 6e53deb1b2678a7b3ae48f054b812d206bcd703a Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sun, 16 Oct 2022 10:36:35 -0600 Subject: [PATCH 01/38] Refine mouse event naming --- crates/drag_and_drop/src/drag_and_drop.rs | 4 +- .../gpui/src/elements/mouse_event_handler.rs | 29 +-- crates/gpui/src/elements/resizable.rs | 4 +- crates/gpui/src/elements/uniform_list.rs | 4 +- crates/gpui/src/presenter.rs | 72 +++--- crates/gpui/src/scene.rs | 4 +- crates/gpui/src/scene/mouse_event.rs | 233 ++++++++++++++++++ crates/gpui/src/scene/mouse_region.rs | 139 +++++------ crates/gpui/src/scene/mouse_region_event.rs | 233 ------------------ crates/terminal/src/mappings/mouse.rs | 4 +- crates/terminal/src/terminal.rs | 20 +- 11 files changed, 353 insertions(+), 393 deletions(-) create mode 100644 crates/gpui/src/scene/mouse_event.rs delete mode 100644 crates/gpui/src/scene/mouse_region_event.rs diff --git a/crates/drag_and_drop/src/drag_and_drop.rs b/crates/drag_and_drop/src/drag_and_drop.rs index 7a16acae07d6dd24dd506736c5fa01861fa17dd1..31265a16972267a57b15bc5683d0e1f47c6bb656 100644 --- a/crates/drag_and_drop/src/drag_and_drop.rs +++ b/crates/drag_and_drop/src/drag_and_drop.rs @@ -4,7 +4,7 @@ use collections::HashSet; use gpui::{ elements::{MouseEventHandler, Overlay}, geometry::vector::Vector2F, - scene::DragRegionEvent, + scene::MouseDrag, CursorStyle, Element, ElementBox, EventContext, MouseButton, MutableAppContext, RenderContext, View, WeakViewHandle, }; @@ -70,7 +70,7 @@ impl DragAndDrop { } pub fn dragging( - event: DragRegionEvent, + event: MouseDrag, payload: Rc, cx: &mut EventContext, render: Rc) -> ElementBox>, diff --git a/crates/gpui/src/elements/mouse_event_handler.rs b/crates/gpui/src/elements/mouse_event_handler.rs index ab5aeb562bbf29bb13862d1f2bc52f2a05b8a8f6..bb64e70f8cb31579bf1ecc4e86143f2387bc89ed 100644 --- a/crates/gpui/src/elements/mouse_event_handler.rs +++ b/crates/gpui/src/elements/mouse_event_handler.rs @@ -6,9 +6,8 @@ use crate::{ }, platform::CursorStyle, scene::{ - ClickRegionEvent, CursorRegion, DownOutRegionEvent, DownRegionEvent, DragRegionEvent, - HandlerSet, HoverRegionEvent, MoveRegionEvent, ScrollWheelRegionEvent, UpOutRegionEvent, - UpRegionEvent, + CursorRegion, HandlerSet, MouseClick, MouseDown, MouseDownOut, MouseDrag, MouseHover, + MouseMove, MouseScrollWheel, MouseUp, MouseUpOut, }, DebugContext, Element, ElementBox, Event, EventContext, LayoutContext, MeasurementContext, MouseButton, MouseRegion, MouseState, PaintContext, RenderContext, SizeConstraint, View, @@ -61,10 +60,7 @@ impl MouseEventHandler { self } - pub fn on_move( - mut self, - handler: impl Fn(MoveRegionEvent, &mut EventContext) + 'static, - ) -> Self { + pub fn on_move(mut self, handler: impl Fn(MouseMove, &mut EventContext) + 'static) -> Self { self.handlers = self.handlers.on_move(handler); self } @@ -72,7 +68,7 @@ impl MouseEventHandler { pub fn on_down( mut self, button: MouseButton, - handler: impl Fn(DownRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDown, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_down(button, handler); self @@ -81,7 +77,7 @@ impl MouseEventHandler { pub fn on_up( mut self, button: MouseButton, - handler: impl Fn(UpRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseUp, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_up(button, handler); self @@ -90,7 +86,7 @@ impl MouseEventHandler { pub fn on_click( mut self, button: MouseButton, - handler: impl Fn(ClickRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseClick, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_click(button, handler); self @@ -99,7 +95,7 @@ impl MouseEventHandler { pub fn on_down_out( mut self, button: MouseButton, - handler: impl Fn(DownOutRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDownOut, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_down_out(button, handler); self @@ -108,7 +104,7 @@ impl MouseEventHandler { pub fn on_up_out( mut self, button: MouseButton, - handler: impl Fn(UpOutRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseUpOut, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_up_out(button, handler); self @@ -117,23 +113,20 @@ impl MouseEventHandler { pub fn on_drag( mut self, button: MouseButton, - handler: impl Fn(DragRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDrag, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_drag(button, handler); self } - pub fn on_hover( - mut self, - handler: impl Fn(HoverRegionEvent, &mut EventContext) + 'static, - ) -> Self { + pub fn on_hover(mut self, handler: impl Fn(MouseHover, &mut EventContext) + 'static) -> Self { self.handlers = self.handlers.on_hover(handler); self } pub fn on_scroll( mut self, - handler: impl Fn(ScrollWheelRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseScrollWheel, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_scroll(handler); self diff --git a/crates/gpui/src/elements/resizable.rs b/crates/gpui/src/elements/resizable.rs index 802452790300cf94f41b39f4e103382c25a3ea86..8cccc9fa1fec5377ed5c5727ea03954fdd062acb 100644 --- a/crates/gpui/src/elements/resizable.rs +++ b/crates/gpui/src/elements/resizable.rs @@ -4,7 +4,7 @@ use pathfinder_geometry::vector::{vec2f, Vector2F}; use serde_json::json; use crate::{ - geometry::rect::RectF, scene::DragRegionEvent, Axis, CursorStyle, Element, ElementBox, + geometry::rect::RectF, scene::MouseDrag, Axis, CursorStyle, Element, ElementBox, ElementStateHandle, MouseButton, MouseRegion, RenderContext, View, }; @@ -42,7 +42,7 @@ impl Side { } } - fn compute_delta(&self, e: DragRegionEvent) -> f32 { + fn compute_delta(&self, e: MouseDrag) -> f32 { if self.before_content() { self.relevant_component(e.prev_mouse_position) - self.relevant_component(e.position) } else { diff --git a/crates/gpui/src/elements/uniform_list.rs b/crates/gpui/src/elements/uniform_list.rs index c9cdbc1b2c90f76f8ac9ba3c6014d2d68e3e06f6..0604110abcdc972cb14906e917bd48fa292132f9 100644 --- a/crates/gpui/src/elements/uniform_list.rs +++ b/crates/gpui/src/elements/uniform_list.rs @@ -6,7 +6,7 @@ use crate::{ }, json::{self, json}, presenter::MeasurementContext, - scene::ScrollWheelRegionEvent, + scene::MouseScrollWheel, ElementBox, MouseRegion, RenderContext, ScrollWheelEvent, View, }; use json::ToJson; @@ -292,7 +292,7 @@ impl Element for UniformList { MouseRegion::new::(self.view_id, 0, visible_bounds).on_scroll({ let scroll_max = layout.scroll_max; let state = self.state.clone(); - move |ScrollWheelRegionEvent { + move |MouseScrollWheel { platform_event: ScrollWheelEvent { position, diff --git a/crates/gpui/src/presenter.rs b/crates/gpui/src/presenter.rs index d082ebd095a503e8e312530a94e934d14c0d003a..9299a5c1fbff220e6f475dfcfc5e02eff9e43300 100644 --- a/crates/gpui/src/presenter.rs +++ b/crates/gpui/src/presenter.rs @@ -7,9 +7,8 @@ use crate::{ keymap::Keystroke, platform::{CursorStyle, Event}, scene::{ - ClickRegionEvent, CursorRegion, DownOutRegionEvent, DownRegionEvent, DragRegionEvent, - HoverRegionEvent, MouseRegionEvent, MoveRegionEvent, ScrollWheelRegionEvent, - UpOutRegionEvent, UpRegionEvent, + CursorRegion, MouseClick, MouseDown, MouseDownOut, MouseDrag, MouseEvent, MouseHover, + MouseMove, MouseScrollWheel, MouseUp, MouseUpOut, }, text_layout::TextLayoutCache, Action, AnyModelHandle, AnyViewHandle, AnyWeakModelHandle, AnyWeakViewHandle, Appearance, @@ -230,12 +229,12 @@ impl Presenter { cx: &mut MutableAppContext, ) -> bool { if let Some(root_view_id) = cx.root_view_id(self.window_id) { - let mut events_to_send = Vec::new(); + let mut mouse_events = SmallVec::<[_; 2]>::new(); let mut notified_views: HashSet = Default::default(); - // 1. Allocate the correct set of GPUI events generated from the platform events + // 1. Map the platform event into mouse events, which interact with mouse regions. // -> These are usually small: [Mouse Down] or [Mouse up, Click] or [Mouse Moved, Mouse Dragged?] - // -> Also moves around mouse related state + // -> Also updates mouse-related state match &event { Event::MouseDown(e) => { // Click events are weird because they can be fired after a drag event. @@ -260,28 +259,28 @@ impl Presenter { self.clicked_button = Some(e.button); } - events_to_send.push(MouseRegionEvent::Down(DownRegionEvent { + mouse_events.push(MouseEvent::Down(MouseDown { region: Default::default(), platform_event: e.clone(), })); - events_to_send.push(MouseRegionEvent::DownOut(DownOutRegionEvent { + mouse_events.push(MouseEvent::DownOut(MouseDownOut { region: Default::default(), platform_event: e.clone(), })); } Event::MouseUp(e) => { // NOTE: The order of event pushes is important! MouseUp events MUST be fired - // before click events, and so the UpRegionEvent events need to be pushed before - // ClickRegionEvents - events_to_send.push(MouseRegionEvent::Up(UpRegionEvent { + // before click events, and so the MouseUp events need to be pushed before + // MouseClick events. + mouse_events.push(MouseEvent::Up(MouseUp { region: Default::default(), platform_event: e.clone(), })); - events_to_send.push(MouseRegionEvent::UpOut(UpOutRegionEvent { + mouse_events.push(MouseEvent::UpOut(MouseUpOut { region: Default::default(), platform_event: e.clone(), })); - events_to_send.push(MouseRegionEvent::Click(ClickRegionEvent { + mouse_events.push(MouseEvent::Click(MouseClick { region: Default::default(), platform_event: e.clone(), })); @@ -304,7 +303,7 @@ impl Presenter { if !event_reused { if pressed_button.is_some() { - events_to_send.push(MouseRegionEvent::Drag(DragRegionEvent { + mouse_events.push(MouseEvent::Drag(MouseDrag { region: Default::default(), prev_mouse_position: self.mouse_position, platform_event: e.clone(), @@ -312,27 +311,27 @@ impl Presenter { } else if let Some(clicked_button) = self.clicked_button { // Mouse up event happened outside the current window. Simulate mouse up button event let button_event = e.to_button_event(clicked_button); - events_to_send.push(MouseRegionEvent::Up(UpRegionEvent { + mouse_events.push(MouseEvent::Up(MouseUp { region: Default::default(), platform_event: button_event.clone(), })); - events_to_send.push(MouseRegionEvent::UpOut(UpOutRegionEvent { + mouse_events.push(MouseEvent::UpOut(MouseUpOut { region: Default::default(), platform_event: button_event.clone(), })); - events_to_send.push(MouseRegionEvent::Click(ClickRegionEvent { + mouse_events.push(MouseEvent::Click(MouseClick { region: Default::default(), platform_event: button_event.clone(), })); } - events_to_send.push(MouseRegionEvent::Move(MoveRegionEvent { + mouse_events.push(MouseEvent::Move(MouseMove { region: Default::default(), platform_event: e.clone(), })); } - events_to_send.push(MouseRegionEvent::Hover(HoverRegionEvent { + mouse_events.push(MouseEvent::Hover(MouseHover { region: Default::default(), platform_event: e.clone(), started: false, @@ -341,7 +340,7 @@ impl Presenter { self.last_mouse_moved_event = Some(event.clone()); } Event::ScrollWheel(e) => { - events_to_send.push(MouseRegionEvent::ScrollWheel(ScrollWheelRegionEvent { + mouse_events.push(MouseEvent::ScrollWheel(MouseScrollWheel { region: Default::default(), platform_event: e.clone(), })) @@ -354,17 +353,16 @@ impl Presenter { self.mouse_position = position; } + // 2. Dispatch mouse events on regions let mut any_event_handled = false; - // 2. Process the raw mouse events into region events - for mut region_event in events_to_send { + for mut mouse_event in mouse_events { let mut valid_regions = Vec::new(); // GPUI elements are arranged by depth but sibling elements can register overlapping // mouse regions. As such, hover events are only fired on overlapping elements which // are at the same depth as the topmost element which overlaps with the mouse. - - match ®ion_event { - MouseRegionEvent::Hover(_) => { + match &mouse_event { + MouseEvent::Hover(_) => { let mut top_most_depth = None; let mouse_position = self.mouse_position.clone(); for (region, depth) in self.mouse_regions.iter().rev() { @@ -402,7 +400,7 @@ impl Presenter { } } } - MouseRegionEvent::Down(_) | MouseRegionEvent::Up(_) => { + MouseEvent::Down(_) | MouseEvent::Up(_) => { for (region, _) in self.mouse_regions.iter().rev() { if region.bounds.contains_point(self.mouse_position) { if region.notify_on_click { @@ -412,7 +410,7 @@ impl Presenter { } } } - MouseRegionEvent::Click(e) => { + MouseEvent::Click(e) => { // Only raise click events if the released button is the same as the one stored if self .clicked_button @@ -434,7 +432,7 @@ impl Presenter { } } } - MouseRegionEvent::Drag(_) => { + MouseEvent::Drag(_) => { for (mouse_region, _) in self.mouse_regions.iter().rev() { if self.clicked_region_ids.contains(&mouse_region.id()) { valid_regions.push(mouse_region.clone()); @@ -442,7 +440,7 @@ impl Presenter { } } - MouseRegionEvent::UpOut(_) | MouseRegionEvent::DownOut(_) => { + MouseEvent::UpOut(_) | MouseEvent::DownOut(_) => { for (mouse_region, _) in self.mouse_regions.iter().rev() { // NOT contains if !mouse_region.bounds.contains_point(self.mouse_position) { @@ -465,29 +463,29 @@ impl Presenter { for valid_region in valid_regions.into_iter() { let mut event_cx = self.build_event_context(&mut notified_views, cx); - region_event.set_region(valid_region.bounds); - if let MouseRegionEvent::Hover(e) = &mut region_event { + mouse_event.set_region(valid_region.bounds); + if let MouseEvent::Hover(e) = &mut mouse_event { e.started = hovered_region_ids.contains(&valid_region.id()) } // Handle Down events if the MouseRegion has a Click or Drag handler. This makes the api more intuitive as you would // not expect a MouseRegion to be transparent to Down events if it also has a Click handler. // This behavior can be overridden by adding a Down handler that calls cx.propogate_event - if let MouseRegionEvent::Down(e) = ®ion_event { + if let MouseEvent::Down(e) = &mouse_event { if valid_region .handlers - .contains_handler(MouseRegionEvent::click_disc(), Some(e.button)) + .contains_handler(MouseEvent::click_disc(), Some(e.button)) || valid_region .handlers - .contains_handler(MouseRegionEvent::drag_disc(), Some(e.button)) + .contains_handler(MouseEvent::drag_disc(), Some(e.button)) { event_cx.handled = true; } } - if let Some(callback) = valid_region.handlers.get(®ion_event.handler_key()) { + if let Some(callback) = valid_region.handlers.get(&mouse_event.handler_key()) { event_cx.handled = true; event_cx.with_current_view(valid_region.id().view_id(), { - let region_event = region_event.clone(); + let region_event = mouse_event.clone(); |cx| { callback(region_event, cx); } @@ -497,7 +495,7 @@ impl Presenter { any_event_handled = any_event_handled || event_cx.handled; // For bubbling events, if the event was handled, don't continue dispatching // This only makes sense for local events. - if event_cx.handled && region_event.is_capturable() { + if event_cx.handled && mouse_event.is_capturable() { break; } } diff --git a/crates/gpui/src/scene.rs b/crates/gpui/src/scene.rs index 4ef17a3f8f5d384723ed1d94a13019bb495e4d0e..99b38a185277731a389771d531ef5b3ca9fc0187 100644 --- a/crates/gpui/src/scene.rs +++ b/crates/gpui/src/scene.rs @@ -1,5 +1,5 @@ +mod mouse_event; mod mouse_region; -mod mouse_region_event; #[cfg(debug_assertions)] use collections::HashSet; @@ -15,8 +15,8 @@ use crate::{ platform::{current::Surface, CursorStyle}, ImageData, }; +pub use mouse_event::*; pub use mouse_region::*; -pub use mouse_region_event::*; pub struct Scene { scale_factor: f32, diff --git a/crates/gpui/src/scene/mouse_event.rs b/crates/gpui/src/scene/mouse_event.rs new file mode 100644 index 0000000000000000000000000000000000000000..d7370ac75f8b5e332e320ad5cf6a95cc781828af --- /dev/null +++ b/crates/gpui/src/scene/mouse_event.rs @@ -0,0 +1,233 @@ +use std::{ + mem::{discriminant, Discriminant}, + ops::Deref, +}; + +use pathfinder_geometry::{rect::RectF, vector::Vector2F}; + +use crate::{MouseButton, MouseButtonEvent, MouseMovedEvent, ScrollWheelEvent}; + +#[derive(Debug, Default, Clone)] +pub struct MouseMove { + pub region: RectF, + pub platform_event: MouseMovedEvent, +} + +impl Deref for MouseMove { + type Target = MouseMovedEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Default, Clone)] +pub struct MouseDrag { + pub region: RectF, + pub prev_mouse_position: Vector2F, + pub platform_event: MouseMovedEvent, +} + +impl Deref for MouseDrag { + type Target = MouseMovedEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Default, Clone)] +pub struct MouseHover { + pub region: RectF, + pub started: bool, + pub platform_event: MouseMovedEvent, +} + +impl Deref for MouseHover { + type Target = MouseMovedEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Default, Clone)] +pub struct MouseDown { + pub region: RectF, + pub platform_event: MouseButtonEvent, +} + +impl Deref for MouseDown { + type Target = MouseButtonEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Default, Clone)] +pub struct MouseUp { + pub region: RectF, + pub platform_event: MouseButtonEvent, +} + +impl Deref for MouseUp { + type Target = MouseButtonEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Default, Clone)] +pub struct MouseClick { + pub region: RectF, + pub platform_event: MouseButtonEvent, +} + +impl Deref for MouseClick { + type Target = MouseButtonEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Default, Clone)] +pub struct MouseDownOut { + pub region: RectF, + pub platform_event: MouseButtonEvent, +} + +impl Deref for MouseDownOut { + type Target = MouseButtonEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Default, Clone)] +pub struct MouseUpOut { + pub region: RectF, + pub platform_event: MouseButtonEvent, +} + +impl Deref for MouseUpOut { + type Target = MouseButtonEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Default, Clone)] +pub struct MouseScrollWheel { + pub region: RectF, + pub platform_event: ScrollWheelEvent, +} + +impl Deref for MouseScrollWheel { + type Target = ScrollWheelEvent; + + fn deref(&self) -> &Self::Target { + &self.platform_event + } +} + +#[derive(Debug, Clone)] +pub enum MouseEvent { + Move(MouseMove), + Drag(MouseDrag), + Hover(MouseHover), + Down(MouseDown), + Up(MouseUp), + Click(MouseClick), + DownOut(MouseDownOut), + UpOut(MouseUpOut), + ScrollWheel(MouseScrollWheel), +} + +impl MouseEvent { + pub fn set_region(&mut self, region: RectF) { + match self { + MouseEvent::Move(r) => r.region = region, + MouseEvent::Drag(r) => r.region = region, + MouseEvent::Hover(r) => r.region = region, + MouseEvent::Down(r) => r.region = region, + MouseEvent::Up(r) => r.region = region, + MouseEvent::Click(r) => r.region = region, + MouseEvent::DownOut(r) => r.region = region, + MouseEvent::UpOut(r) => r.region = region, + MouseEvent::ScrollWheel(r) => r.region = region, + } + } + + /// When true, mouse event handlers must call cx.propagate_event() to bubble + /// the event to handlers they are painted on top of. + pub fn is_capturable(&self) -> bool { + match self { + MouseEvent::Move(_) => true, + MouseEvent::Drag(_) => true, + MouseEvent::Hover(_) => false, + MouseEvent::Down(_) => true, + MouseEvent::Up(_) => true, + MouseEvent::Click(_) => true, + MouseEvent::DownOut(_) => false, + MouseEvent::UpOut(_) => false, + MouseEvent::ScrollWheel(_) => true, + } + } +} + +impl MouseEvent { + pub fn move_disc() -> Discriminant { + discriminant(&MouseEvent::Move(Default::default())) + } + + pub fn drag_disc() -> Discriminant { + discriminant(&MouseEvent::Drag(Default::default())) + } + + pub fn hover_disc() -> Discriminant { + discriminant(&MouseEvent::Hover(Default::default())) + } + + pub fn down_disc() -> Discriminant { + discriminant(&MouseEvent::Down(Default::default())) + } + + pub fn up_disc() -> Discriminant { + discriminant(&MouseEvent::Up(Default::default())) + } + + pub fn up_out_disc() -> Discriminant { + discriminant(&MouseEvent::UpOut(Default::default())) + } + + pub fn click_disc() -> Discriminant { + discriminant(&MouseEvent::Click(Default::default())) + } + + pub fn down_out_disc() -> Discriminant { + discriminant(&MouseEvent::DownOut(Default::default())) + } + + pub fn scroll_wheel_disc() -> Discriminant { + discriminant(&MouseEvent::ScrollWheel(Default::default())) + } + + pub fn handler_key(&self) -> (Discriminant, Option) { + match self { + MouseEvent::Move(_) => (Self::move_disc(), None), + MouseEvent::Drag(e) => (Self::drag_disc(), e.pressed_button), + MouseEvent::Hover(_) => (Self::hover_disc(), None), + MouseEvent::Down(e) => (Self::down_disc(), Some(e.button)), + MouseEvent::Up(e) => (Self::up_disc(), Some(e.button)), + MouseEvent::Click(e) => (Self::click_disc(), Some(e.button)), + MouseEvent::UpOut(e) => (Self::up_out_disc(), Some(e.button)), + MouseEvent::DownOut(e) => (Self::down_out_disc(), Some(e.button)), + MouseEvent::ScrollWheel(_) => (Self::scroll_wheel_disc(), None), + } + } +} diff --git a/crates/gpui/src/scene/mouse_region.rs b/crates/gpui/src/scene/mouse_region.rs index e84508622b8d7b0130d43ebb9f20a9122f487c92..4b5217cc2dec1355d350f921fa66233d8be39591 100644 --- a/crates/gpui/src/scene/mouse_region.rs +++ b/crates/gpui/src/scene/mouse_region.rs @@ -7,11 +7,11 @@ use pathfinder_geometry::rect::RectF; use crate::{EventContext, MouseButton}; use super::{ - mouse_region_event::{ - ClickRegionEvent, DownOutRegionEvent, DownRegionEvent, DragRegionEvent, HoverRegionEvent, - MouseRegionEvent, MoveRegionEvent, UpOutRegionEvent, UpRegionEvent, + mouse_event::{ + MouseClick, MouseDown, MouseDownOut, MouseDrag, MouseEvent, MouseHover, MouseMove, MouseUp, + MouseUpOut, }, - ScrollWheelRegionEvent, + MouseScrollWheel, }; #[derive(Clone)] @@ -62,7 +62,7 @@ impl MouseRegion { pub fn on_down( mut self, button: MouseButton, - handler: impl Fn(DownRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDown, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_down(button, handler); self @@ -71,7 +71,7 @@ impl MouseRegion { pub fn on_up( mut self, button: MouseButton, - handler: impl Fn(UpRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseUp, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_up(button, handler); self @@ -80,7 +80,7 @@ impl MouseRegion { pub fn on_click( mut self, button: MouseButton, - handler: impl Fn(ClickRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseClick, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_click(button, handler); self @@ -89,7 +89,7 @@ impl MouseRegion { pub fn on_down_out( mut self, button: MouseButton, - handler: impl Fn(DownOutRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDownOut, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_down_out(button, handler); self @@ -98,7 +98,7 @@ impl MouseRegion { pub fn on_up_out( mut self, button: MouseButton, - handler: impl Fn(UpOutRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseUpOut, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_up_out(button, handler); self @@ -107,31 +107,25 @@ impl MouseRegion { pub fn on_drag( mut self, button: MouseButton, - handler: impl Fn(DragRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDrag, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_drag(button, handler); self } - pub fn on_hover( - mut self, - handler: impl Fn(HoverRegionEvent, &mut EventContext) + 'static, - ) -> Self { + pub fn on_hover(mut self, handler: impl Fn(MouseHover, &mut EventContext) + 'static) -> Self { self.handlers = self.handlers.on_hover(handler); self } - pub fn on_move( - mut self, - handler: impl Fn(MoveRegionEvent, &mut EventContext) + 'static, - ) -> Self { + pub fn on_move(mut self, handler: impl Fn(MouseMove, &mut EventContext) + 'static) -> Self { self.handlers = self.handlers.on_move(handler); self } pub fn on_scroll( mut self, - handler: impl Fn(ScrollWheelRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseScrollWheel, &mut EventContext) + 'static, ) -> Self { self.handlers = self.handlers.on_scroll(handler); self @@ -187,8 +181,8 @@ impl MouseRegionId { pub struct HandlerSet { #[allow(clippy::type_complexity)] pub set: HashMap< - (Discriminant, Option), - Rc, + (Discriminant, Option), + Rc, >, } @@ -196,68 +190,50 @@ impl HandlerSet { pub fn capture_all() -> Self { #[allow(clippy::type_complexity)] let mut set: HashMap< - (Discriminant, Option), - Rc, + (Discriminant, Option), + Rc, > = Default::default(); - set.insert((MouseRegionEvent::move_disc(), None), Rc::new(|_, _| {})); - set.insert((MouseRegionEvent::hover_disc(), None), Rc::new(|_, _| {})); + set.insert((MouseEvent::move_disc(), None), Rc::new(|_, _| {})); + set.insert((MouseEvent::hover_disc(), None), Rc::new(|_, _| {})); for button in MouseButton::all() { + set.insert((MouseEvent::drag_disc(), Some(button)), Rc::new(|_, _| {})); + set.insert((MouseEvent::down_disc(), Some(button)), Rc::new(|_, _| {})); + set.insert((MouseEvent::up_disc(), Some(button)), Rc::new(|_, _| {})); + set.insert((MouseEvent::click_disc(), Some(button)), Rc::new(|_, _| {})); set.insert( - (MouseRegionEvent::drag_disc(), Some(button)), - Rc::new(|_, _| {}), - ); - set.insert( - (MouseRegionEvent::down_disc(), Some(button)), - Rc::new(|_, _| {}), - ); - set.insert( - (MouseRegionEvent::up_disc(), Some(button)), + (MouseEvent::down_out_disc(), Some(button)), Rc::new(|_, _| {}), ); set.insert( - (MouseRegionEvent::click_disc(), Some(button)), - Rc::new(|_, _| {}), - ); - set.insert( - (MouseRegionEvent::down_out_disc(), Some(button)), - Rc::new(|_, _| {}), - ); - set.insert( - (MouseRegionEvent::up_out_disc(), Some(button)), + (MouseEvent::up_out_disc(), Some(button)), Rc::new(|_, _| {}), ); } - set.insert( - (MouseRegionEvent::scroll_wheel_disc(), None), - Rc::new(|_, _| {}), - ); + set.insert((MouseEvent::scroll_wheel_disc(), None), Rc::new(|_, _| {})); HandlerSet { set } } pub fn get( &self, - key: &(Discriminant, Option), - ) -> Option> { + key: &(Discriminant, Option), + ) -> Option> { self.set.get(key).cloned() } pub fn contains_handler( &self, - event: Discriminant, + event: Discriminant, button: Option, ) -> bool { self.set.contains_key(&(event, button)) } - pub fn on_move( - mut self, - handler: impl Fn(MoveRegionEvent, &mut EventContext) + 'static, - ) -> Self { - self.set.insert((MouseRegionEvent::move_disc(), None), + pub fn on_move(mut self, handler: impl Fn(MouseMove, &mut EventContext) + 'static) -> Self { + self.set.insert((MouseEvent::move_disc(), None), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::Move(e) = region_event { + if let MouseEvent::Move(e) = region_event { handler(e, cx); } else { panic!( @@ -271,11 +247,11 @@ impl HandlerSet { pub fn on_down( mut self, button: MouseButton, - handler: impl Fn(DownRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDown, &mut EventContext) + 'static, ) -> Self { - self.set.insert((MouseRegionEvent::down_disc(), Some(button)), + self.set.insert((MouseEvent::down_disc(), Some(button)), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::Down(e) = region_event { + if let MouseEvent::Down(e) = region_event { handler(e, cx); } else { panic!( @@ -289,11 +265,11 @@ impl HandlerSet { pub fn on_up( mut self, button: MouseButton, - handler: impl Fn(UpRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseUp, &mut EventContext) + 'static, ) -> Self { - self.set.insert((MouseRegionEvent::up_disc(), Some(button)), + self.set.insert((MouseEvent::up_disc(), Some(button)), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::Up(e) = region_event { + if let MouseEvent::Up(e) = region_event { handler(e, cx); } else { panic!( @@ -307,11 +283,11 @@ impl HandlerSet { pub fn on_click( mut self, button: MouseButton, - handler: impl Fn(ClickRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseClick, &mut EventContext) + 'static, ) -> Self { - self.set.insert((MouseRegionEvent::click_disc(), Some(button)), + self.set.insert((MouseEvent::click_disc(), Some(button)), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::Click(e) = region_event { + if let MouseEvent::Click(e) = region_event { handler(e, cx); } else { panic!( @@ -325,11 +301,11 @@ impl HandlerSet { pub fn on_down_out( mut self, button: MouseButton, - handler: impl Fn(DownOutRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDownOut, &mut EventContext) + 'static, ) -> Self { - self.set.insert((MouseRegionEvent::down_out_disc(), Some(button)), + self.set.insert((MouseEvent::down_out_disc(), Some(button)), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::DownOut(e) = region_event { + if let MouseEvent::DownOut(e) = region_event { handler(e, cx); } else { panic!( @@ -343,11 +319,11 @@ impl HandlerSet { pub fn on_up_out( mut self, button: MouseButton, - handler: impl Fn(UpOutRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseUpOut, &mut EventContext) + 'static, ) -> Self { - self.set.insert((MouseRegionEvent::up_out_disc(), Some(button)), + self.set.insert((MouseEvent::up_out_disc(), Some(button)), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::UpOut(e) = region_event { + if let MouseEvent::UpOut(e) = region_event { handler(e, cx); } else { panic!( @@ -361,11 +337,11 @@ impl HandlerSet { pub fn on_drag( mut self, button: MouseButton, - handler: impl Fn(DragRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseDrag, &mut EventContext) + 'static, ) -> Self { - self.set.insert((MouseRegionEvent::drag_disc(), Some(button)), + self.set.insert((MouseEvent::drag_disc(), Some(button)), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::Drag(e) = region_event { + if let MouseEvent::Drag(e) = region_event { handler(e, cx); } else { panic!( @@ -376,13 +352,10 @@ impl HandlerSet { self } - pub fn on_hover( - mut self, - handler: impl Fn(HoverRegionEvent, &mut EventContext) + 'static, - ) -> Self { - self.set.insert((MouseRegionEvent::hover_disc(), None), + pub fn on_hover(mut self, handler: impl Fn(MouseHover, &mut EventContext) + 'static) -> Self { + self.set.insert((MouseEvent::hover_disc(), None), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::Hover(e) = region_event { + if let MouseEvent::Hover(e) = region_event { handler(e, cx); } else { panic!( @@ -395,11 +368,11 @@ impl HandlerSet { pub fn on_scroll( mut self, - handler: impl Fn(ScrollWheelRegionEvent, &mut EventContext) + 'static, + handler: impl Fn(MouseScrollWheel, &mut EventContext) + 'static, ) -> Self { - self.set.insert((MouseRegionEvent::scroll_wheel_disc(), None), + self.set.insert((MouseEvent::scroll_wheel_disc(), None), Rc::new(move |region_event, cx| { - if let MouseRegionEvent::ScrollWheel(e) = region_event { + if let MouseEvent::ScrollWheel(e) = region_event { handler(e, cx); } else { panic!( diff --git a/crates/gpui/src/scene/mouse_region_event.rs b/crates/gpui/src/scene/mouse_region_event.rs deleted file mode 100644 index 4d89cd5b6f06a9aafd98d168a0c1defbd55fd801..0000000000000000000000000000000000000000 --- a/crates/gpui/src/scene/mouse_region_event.rs +++ /dev/null @@ -1,233 +0,0 @@ -use std::{ - mem::{discriminant, Discriminant}, - ops::Deref, -}; - -use pathfinder_geometry::{rect::RectF, vector::Vector2F}; - -use crate::{MouseButton, MouseButtonEvent, MouseMovedEvent, ScrollWheelEvent}; - -#[derive(Debug, Default, Clone)] -pub struct MoveRegionEvent { - pub region: RectF, - pub platform_event: MouseMovedEvent, -} - -impl Deref for MoveRegionEvent { - type Target = MouseMovedEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Default, Clone)] -pub struct DragRegionEvent { - pub region: RectF, - pub prev_mouse_position: Vector2F, - pub platform_event: MouseMovedEvent, -} - -impl Deref for DragRegionEvent { - type Target = MouseMovedEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Default, Clone)] -pub struct HoverRegionEvent { - pub region: RectF, - pub started: bool, - pub platform_event: MouseMovedEvent, -} - -impl Deref for HoverRegionEvent { - type Target = MouseMovedEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Default, Clone)] -pub struct DownRegionEvent { - pub region: RectF, - pub platform_event: MouseButtonEvent, -} - -impl Deref for DownRegionEvent { - type Target = MouseButtonEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Default, Clone)] -pub struct UpRegionEvent { - pub region: RectF, - pub platform_event: MouseButtonEvent, -} - -impl Deref for UpRegionEvent { - type Target = MouseButtonEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Default, Clone)] -pub struct ClickRegionEvent { - pub region: RectF, - pub platform_event: MouseButtonEvent, -} - -impl Deref for ClickRegionEvent { - type Target = MouseButtonEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Default, Clone)] -pub struct DownOutRegionEvent { - pub region: RectF, - pub platform_event: MouseButtonEvent, -} - -impl Deref for DownOutRegionEvent { - type Target = MouseButtonEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Default, Clone)] -pub struct UpOutRegionEvent { - pub region: RectF, - pub platform_event: MouseButtonEvent, -} - -impl Deref for UpOutRegionEvent { - type Target = MouseButtonEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Default, Clone)] -pub struct ScrollWheelRegionEvent { - pub region: RectF, - pub platform_event: ScrollWheelEvent, -} - -impl Deref for ScrollWheelRegionEvent { - type Target = ScrollWheelEvent; - - fn deref(&self) -> &Self::Target { - &self.platform_event - } -} - -#[derive(Debug, Clone)] -pub enum MouseRegionEvent { - Move(MoveRegionEvent), - Drag(DragRegionEvent), - Hover(HoverRegionEvent), - Down(DownRegionEvent), - Up(UpRegionEvent), - Click(ClickRegionEvent), - DownOut(DownOutRegionEvent), - UpOut(UpOutRegionEvent), - ScrollWheel(ScrollWheelRegionEvent), -} - -impl MouseRegionEvent { - pub fn set_region(&mut self, region: RectF) { - match self { - MouseRegionEvent::Move(r) => r.region = region, - MouseRegionEvent::Drag(r) => r.region = region, - MouseRegionEvent::Hover(r) => r.region = region, - MouseRegionEvent::Down(r) => r.region = region, - MouseRegionEvent::Up(r) => r.region = region, - MouseRegionEvent::Click(r) => r.region = region, - MouseRegionEvent::DownOut(r) => r.region = region, - MouseRegionEvent::UpOut(r) => r.region = region, - MouseRegionEvent::ScrollWheel(r) => r.region = region, - } - } - - /// When true, mouse event handlers must call cx.propagate_event() to bubble - /// the event to handlers they are painted on top of. - pub fn is_capturable(&self) -> bool { - match self { - MouseRegionEvent::Move(_) => true, - MouseRegionEvent::Drag(_) => true, - MouseRegionEvent::Hover(_) => false, - MouseRegionEvent::Down(_) => true, - MouseRegionEvent::Up(_) => true, - MouseRegionEvent::Click(_) => true, - MouseRegionEvent::DownOut(_) => false, - MouseRegionEvent::UpOut(_) => false, - MouseRegionEvent::ScrollWheel(_) => true, - } - } -} - -impl MouseRegionEvent { - pub fn move_disc() -> Discriminant { - discriminant(&MouseRegionEvent::Move(Default::default())) - } - - pub fn drag_disc() -> Discriminant { - discriminant(&MouseRegionEvent::Drag(Default::default())) - } - - pub fn hover_disc() -> Discriminant { - discriminant(&MouseRegionEvent::Hover(Default::default())) - } - - pub fn down_disc() -> Discriminant { - discriminant(&MouseRegionEvent::Down(Default::default())) - } - - pub fn up_disc() -> Discriminant { - discriminant(&MouseRegionEvent::Up(Default::default())) - } - - pub fn up_out_disc() -> Discriminant { - discriminant(&MouseRegionEvent::UpOut(Default::default())) - } - - pub fn click_disc() -> Discriminant { - discriminant(&MouseRegionEvent::Click(Default::default())) - } - - pub fn down_out_disc() -> Discriminant { - discriminant(&MouseRegionEvent::DownOut(Default::default())) - } - - pub fn scroll_wheel_disc() -> Discriminant { - discriminant(&MouseRegionEvent::ScrollWheel(Default::default())) - } - - pub fn handler_key(&self) -> (Discriminant, Option) { - match self { - MouseRegionEvent::Move(_) => (Self::move_disc(), None), - MouseRegionEvent::Drag(e) => (Self::drag_disc(), e.pressed_button), - MouseRegionEvent::Hover(_) => (Self::hover_disc(), None), - MouseRegionEvent::Down(e) => (Self::down_disc(), Some(e.button)), - MouseRegionEvent::Up(e) => (Self::up_disc(), Some(e.button)), - MouseRegionEvent::Click(e) => (Self::click_disc(), Some(e.button)), - MouseRegionEvent::UpOut(e) => (Self::up_out_disc(), Some(e.button)), - MouseRegionEvent::DownOut(e) => (Self::down_out_disc(), Some(e.button)), - MouseRegionEvent::ScrollWheel(_) => (Self::scroll_wheel_disc(), None), - } - } -} diff --git a/crates/terminal/src/mappings/mouse.rs b/crates/terminal/src/mappings/mouse.rs index 1616540cff65aaa245551ef7a2da37f7da2b4613..2254eea5af0965351c61adc7e0fe1e7baab40097 100644 --- a/crates/terminal/src/mappings/mouse.rs +++ b/crates/terminal/src/mappings/mouse.rs @@ -6,7 +6,7 @@ use alacritty_terminal::grid::Dimensions; /// with modifications for our circumstances use alacritty_terminal::index::{Column as GridCol, Line as GridLine, Point, Side}; use alacritty_terminal::term::TermMode; -use gpui::scene::ScrollWheelRegionEvent; +use gpui::scene::MouseScrollWheel; use gpui::{geometry::vector::Vector2F, MouseButtonEvent, MouseMovedEvent, ScrollWheelEvent}; use crate::TerminalSize; @@ -115,7 +115,7 @@ impl MouseButton { pub fn scroll_report( point: Point, scroll_lines: i32, - e: &ScrollWheelRegionEvent, + e: &MouseScrollWheel, mode: TermMode, ) -> Option>> { if mode.intersects(TermMode::MOUSE_MODE) { diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index 5485fb50ca2a94ad43d6e5dab5e7423be4946e3c..5702d2a4e3c1320e07de6c9df3e5922be72b7c92 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -53,7 +53,7 @@ use thiserror::Error; use gpui::{ geometry::vector::{vec2f, Vector2F}, keymap::Keystroke, - scene::{DownRegionEvent, DragRegionEvent, ScrollWheelRegionEvent, UpRegionEvent}, + scene::{MouseDown, MouseDrag, MouseScrollWheel, MouseUp}, ClipboardItem, Entity, ModelContext, MouseButton, MouseMovedEvent, MutableAppContext, Task, }; @@ -971,7 +971,7 @@ impl Terminal { } } - pub fn mouse_drag(&mut self, e: DragRegionEvent, origin: Vector2F) { + pub fn mouse_drag(&mut self, e: MouseDrag, origin: Vector2F) { let position = e.position.sub(origin); self.last_mouse_position = Some(position); @@ -997,7 +997,7 @@ impl Terminal { } } - fn drag_line_delta(&mut self, e: DragRegionEvent) -> Option { + fn drag_line_delta(&mut self, e: MouseDrag) -> Option { //TODO: Why do these need to be doubled? Probably the same problem that the IME has let top = e.region.origin_y() + (self.last_content.size.line_height * 2.); let bottom = e.region.lower_left().y() - (self.last_content.size.line_height * 2.); @@ -1011,7 +1011,7 @@ impl Terminal { Some(scroll_delta) } - pub fn mouse_down(&mut self, e: &DownRegionEvent, origin: Vector2F) { + pub fn mouse_down(&mut self, e: &MouseDown, origin: Vector2F) { let position = e.position.sub(origin); let point = grid_point( position, @@ -1029,7 +1029,7 @@ impl Terminal { } } - pub fn left_click(&mut self, e: &DownRegionEvent, origin: Vector2F) { + pub fn left_click(&mut self, e: &MouseDown, origin: Vector2F) { let position = e.position.sub(origin); if !self.mouse_mode(e.shift) { //Hyperlinks @@ -1071,7 +1071,7 @@ impl Terminal { } } - pub fn mouse_up(&mut self, e: &UpRegionEvent, origin: Vector2F, cx: &mut ModelContext) { + pub fn mouse_up(&mut self, e: &MouseUp, origin: Vector2F, cx: &mut ModelContext) { let settings = cx.global::(); let copy_on_select = settings .terminal_overrides @@ -1103,7 +1103,7 @@ impl Terminal { } ///Scroll the terminal - pub fn scroll_wheel(&mut self, e: ScrollWheelRegionEvent, origin: Vector2F) { + pub fn scroll_wheel(&mut self, e: MouseScrollWheel, origin: Vector2F) { let mouse_mode = self.mouse_mode(e.shift); if let Some(scroll_lines) = self.determine_scroll_lines(&e, mouse_mode) { @@ -1142,11 +1142,7 @@ impl Terminal { self.hyperlink_from_position(self.last_mouse_position); } - fn determine_scroll_lines( - &mut self, - e: &ScrollWheelRegionEvent, - mouse_mode: bool, - ) -> Option { + fn determine_scroll_lines(&mut self, e: &MouseScrollWheel, mouse_mode: bool) -> Option { let scroll_multiplier = if mouse_mode { 1. } else { SCROLL_MULTIPLIER }; match e.phase { From 6e363e464c9d0adc6153d76a1002fbebf3281215 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sun, 16 Oct 2022 11:46:31 -0600 Subject: [PATCH 02/38] Start on view-level dispatch approach for keyboard events --- crates/chat_panel/src/chat_panel.rs | 2 +- crates/collab_ui/src/contact_finder.rs | 2 +- crates/collab_ui/src/contact_list.rs | 4 +- crates/collab_ui/src/contacts_popover.rs | 2 +- crates/command_palette/src/command_palette.rs | 2 +- crates/context_menu/src/context_menu.rs | 2 +- crates/diagnostics/src/diagnostics.rs | 2 +- crates/editor/src/editor.rs | 4 +- crates/file_finder/src/file_finder.rs | 2 +- crates/go_to_line/src/go_to_line.rs | 2 +- crates/gpui/src/app.rs | 188 +++++++++++++++--- crates/gpui/src/presenter.rs | 10 +- crates/outline/src/outline.rs | 2 +- crates/picker/src/picker.rs | 2 +- crates/project_symbols/src/project_symbols.rs | 2 +- crates/search/src/buffer_search.rs | 2 +- crates/search/src/project_search.rs | 2 +- .../terminal/src/terminal_container_view.rs | 2 +- crates/terminal/src/terminal_view.rs | 4 +- crates/theme_selector/src/theme_selector.rs | 2 +- crates/workspace/src/pane.rs | 2 +- crates/workspace/src/workspace.rs | 2 +- 22 files changed, 191 insertions(+), 53 deletions(-) diff --git a/crates/chat_panel/src/chat_panel.rs b/crates/chat_panel/src/chat_panel.rs index 0c22c21c7117ba59543d87dff65ebfe143b28a7c..ccd33db3abe4b8eb42f9ac5abf612cfa947303b0 100644 --- a/crates/chat_panel/src/chat_panel.rs +++ b/crates/chat_panel/src/chat_panel.rs @@ -397,7 +397,7 @@ impl View for ChatPanel { .boxed() } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if matches!( *self.rpc.status().borrow(), client::Status::Connected { .. } diff --git a/crates/collab_ui/src/contact_finder.rs b/crates/collab_ui/src/contact_finder.rs index a4ec02d2f00f20631206a3d0a2b868e4f226ae22..5165c3b1f690cc9eeeca491f4ebad7bb897be89e 100644 --- a/crates/collab_ui/src/contact_finder.rs +++ b/crates/collab_ui/src/contact_finder.rs @@ -36,7 +36,7 @@ impl View for ContactFinder { ChildView::new(self.picker.clone(), cx).boxed() } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.picker); } diff --git a/crates/collab_ui/src/contact_list.rs b/crates/collab_ui/src/contact_list.rs index cf8a8f8223e7ba5a0f06e548a59c4c34d3620ae8..7a51cc83ec5877e9b5485edfcbb5fc78515d6476 100644 --- a/crates/collab_ui/src/contact_list.rs +++ b/crates/collab_ui/src/contact_list.rs @@ -1121,13 +1121,13 @@ impl View for ContactList { .boxed() } - fn on_focus_in(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext) { if !self.filter_editor.is_focused(cx) { cx.focus(&self.filter_editor); } } - fn on_focus_out(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext) { + fn focus_out(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext) { if !self.filter_editor.is_focused(cx) { cx.emit(Event::Dismissed); } diff --git a/crates/collab_ui/src/contacts_popover.rs b/crates/collab_ui/src/contacts_popover.rs index 075255d72750bee57f8372b39570013b15d3a8a2..37280f929e7c9a5536588a4543d26f8fb8214282 100644 --- a/crates/collab_ui/src/contacts_popover.rs +++ b/crates/collab_ui/src/contacts_popover.rs @@ -160,7 +160,7 @@ impl View for ContactsPopover { .boxed() } - fn on_focus_in(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { match &self.child { Child::ContactList(child) => cx.focus(child), diff --git a/crates/command_palette/src/command_palette.rs b/crates/command_palette/src/command_palette.rs index 7702aaaf2a414e1c6791131aedafff11d27f099a..51474be1bed9ac13a57e5c05f54561d5a31a040d 100644 --- a/crates/command_palette/src/command_palette.rs +++ b/crates/command_palette/src/command_palette.rs @@ -135,7 +135,7 @@ impl View for CommandPalette { ChildView::new(self.picker.clone(), cx).boxed() } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.picker); } diff --git a/crates/context_menu/src/context_menu.rs b/crates/context_menu/src/context_menu.rs index c28437596669ea8453a8f714c62a81657015e71a..94031b4f6e8f30623b2a550629fb2d2dac910626 100644 --- a/crates/context_menu/src/context_menu.rs +++ b/crates/context_menu/src/context_menu.rs @@ -107,7 +107,7 @@ impl View for ContextMenu { .boxed() } - fn on_focus_out(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_out(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { self.reset(cx); } } diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 8180a6c9f61169502ac9a7114cee422da68d6329..4409fa17ad3669806ca1556a83a69d6a5e58fd87 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -99,7 +99,7 @@ impl View for ProjectDiagnosticsEditor { } } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if !self.path_states.is_empty() { cx.focus(&self.editor); } diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 070fc69f7ebcfe1d974b2db2bccf5d45c19af200..670ec54933e6916bee31f1a9f8073ed17b7bf384 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -6477,7 +6477,7 @@ impl View for Editor { "Editor" } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { let focused_event = EditorFocused(cx.handle()); cx.emit_global(focused_event); if let Some(rename) = self.pending_rename.as_ref() { @@ -6498,7 +6498,7 @@ impl View for Editor { } } - fn on_focus_out(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_out(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { let blurred_event = EditorBlurred(cx.handle()); cx.emit_global(blurred_event); self.focused = false; diff --git a/crates/file_finder/src/file_finder.rs b/crates/file_finder/src/file_finder.rs index e787e3c1a63c882398069c8efc81aa4515e826da..1a82613b84329eea6c214073185e26f886110fd2 100644 --- a/crates/file_finder/src/file_finder.rs +++ b/crates/file_finder/src/file_finder.rs @@ -53,7 +53,7 @@ impl View for FileFinder { ChildView::new(self.picker.clone(), cx).boxed() } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.picker); } diff --git a/crates/go_to_line/src/go_to_line.rs b/crates/go_to_line/src/go_to_line.rs index eddb014b63a4715e6268070ccc9f96897f0e50d5..ad1dacf7434e5bb30e7d4b04170aa0828e911b59 100644 --- a/crates/go_to_line/src/go_to_line.rs +++ b/crates/go_to_line/src/go_to_line.rs @@ -183,7 +183,7 @@ impl View for GoToLine { .named("go to line") } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { cx.focus(&self.line_editor); } } diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index a9529f3f9fccb67200aa944dd3509fda67432bc9..a9020cf35088a30488a8fb62ed1d0a547d37227b 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -41,8 +41,8 @@ use crate::{ platform::{self, KeyDownEvent, Platform, PromptLevel, WindowOptions}, presenter::Presenter, util::post_inc, - Appearance, AssetCache, AssetSource, ClipboardItem, FontCache, InputHandler, MouseButton, - MouseRegionId, PathPromptOptions, TextLayoutCache, + Appearance, AssetCache, AssetSource, ClipboardItem, FontCache, InputHandler, KeyUpEvent, + ModifiersChangedEvent, MouseButton, MouseRegionId, PathPromptOptions, TextLayoutCache, }; pub trait Entity: 'static { @@ -60,8 +60,18 @@ pub trait Entity: 'static { pub trait View: Entity + Sized { fn ui_name() -> &'static str; fn render(&mut self, cx: &mut RenderContext<'_, Self>) -> ElementBox; - fn on_focus_in(&mut self, _: AnyViewHandle, _: &mut ViewContext) {} - fn on_focus_out(&mut self, _: AnyViewHandle, _: &mut ViewContext) {} + fn focus_in(&mut self, _: AnyViewHandle, _: &mut ViewContext) {} + fn focus_out(&mut self, _: AnyViewHandle, _: &mut ViewContext) {} + fn key_down(&mut self, _: &KeyDownEvent, _: &mut ViewContext) -> bool { + false + } + fn key_up(&mut self, _: &KeyUpEvent, _: &mut ViewContext) -> bool { + false + } + fn modifiers_changed(&mut self, _: &ModifiersChangedEvent, _: &mut ViewContext) -> bool { + false + } + fn keymap_context(&self, _: &AppContext) -> keymap::Context { Self::default_keymap_context() } @@ -1297,7 +1307,7 @@ impl MutableAppContext { ) -> impl Iterator, SmallVec<[&Binding; 1]>)> { let mut action_types: HashSet<_> = self.global_actions.keys().copied().collect(); - for view_id in self.parents(window_id, view_id) { + for view_id in self.ancestors(window_id, view_id) { if let Some(view) = self.views.get(&(window_id, view_id)) { let view_type = view.as_any().type_id(); if let Some(actions) = self.actions.get(&view_type) { @@ -1327,7 +1337,7 @@ impl MutableAppContext { let action_type = action.as_any().type_id(); if let Some(window_id) = self.cx.platform.key_window_id() { if let Some(focused_view_id) = self.focused_view_id(window_id) { - for view_id in self.parents(window_id, focused_view_id) { + for view_id in self.ancestors(window_id, focused_view_id) { if let Some(view) = self.views.get(&(window_id, view_id)) { let view_type = view.as_any().type_id(); if let Some(actions) = self.actions.get(&view_type) { @@ -1376,7 +1386,7 @@ impl MutableAppContext { mut visit: impl FnMut(usize, bool, &mut MutableAppContext) -> bool, ) -> bool { // List of view ids from the leaf to the root of the window - let path = self.parents(window_id, view_id).collect::>(); + let path = self.ancestors(window_id, view_id).collect::>(); // Walk down from the root to the leaf calling visit with capture_phase = true for view_id in path.iter().rev() { @@ -1397,7 +1407,7 @@ impl MutableAppContext { // Returns an iterator over all of the view ids from the passed view up to the root of the window // Includes the passed view itself - fn parents(&self, window_id: usize, mut view_id: usize) -> impl Iterator + '_ { + fn ancestors(&self, window_id: usize, mut view_id: usize) -> impl Iterator + '_ { std::iter::once(view_id) .into_iter() .chain(std::iter::from_fn(move || { @@ -1445,11 +1455,81 @@ impl MutableAppContext { self.keystroke_matcher.clear_bindings(); } + pub fn dispatch_key_down(&mut self, window_id: usize, event: &KeyDownEvent) -> bool { + if let Some(focused_view_id) = self.focused_view_id(window_id) { + for view_id in self + .ancestors(window_id, focused_view_id) + .collect::>() + { + if let Some(mut view) = self.cx.views.remove(&(window_id, view_id)) { + let handled = view.key_down(event, self, window_id, view_id); + self.cx.views.insert((window_id, view_id), view); + if handled { + return true; + } + } else { + log::error!("view {} does not exist", view_id) + } + } + } + + false + } + + pub fn dispatch_key_up(&mut self, window_id: usize, event: &KeyUpEvent) -> bool { + if let Some(focused_view_id) = self.focused_view_id(window_id) { + for view_id in self + .ancestors(window_id, focused_view_id) + .collect::>() + { + if let Some(mut view) = self.cx.views.remove(&(window_id, view_id)) { + let handled = view.key_up(event, self, window_id, view_id); + self.cx.views.insert((window_id, view_id), view); + if handled { + return true; + } + } else { + log::error!("view {} does not exist", view_id) + } + } + } + + false + } + + pub fn dispatch_modifiers_changed( + &mut self, + window_id: usize, + event: &ModifiersChangedEvent, + ) -> bool { + if let Some(focused_view_id) = self.focused_view_id(window_id) { + for view_id in self + .ancestors(window_id, focused_view_id) + .collect::>() + { + if let Some(mut view) = self.cx.views.remove(&(window_id, view_id)) { + let handled = view.modifiers_changed(event, self, window_id, view_id); + self.cx.views.insert((window_id, view_id), view); + if handled { + return true; + } + } else { + log::error!("view {} does not exist", view_id) + } + } + } + + false + } + pub fn dispatch_keystroke(&mut self, window_id: usize, keystroke: &Keystroke) -> bool { let mut pending = false; if let Some(focused_view_id) = self.focused_view_id(window_id) { - for view_id in self.parents(window_id, focused_view_id).collect::>() { + for view_id in self + .ancestors(window_id, focused_view_id) + .collect::>() + { let keymap_context = self .cx .views @@ -1580,7 +1660,7 @@ impl MutableAppContext { is_fullscreen: false, }, ); - root_view.update(this, |view, cx| view.on_focus_in(cx.handle().into(), cx)); + root_view.update(this, |view, cx| view.focus_in(cx.handle().into(), cx)); let window = this.cx @@ -1612,7 +1692,7 @@ impl MutableAppContext { is_fullscreen: false, }, ); - root_view.update(this, |view, cx| view.on_focus_in(cx.handle().into(), cx)); + root_view.update(this, |view, cx| view.focus_in(cx.handle().into(), cx)); let status_item = this.cx.platform.add_status_item(); this.register_platform_window(window_id, status_item); @@ -2235,12 +2315,12 @@ impl MutableAppContext { //Handle focus let focused_id = window.focused_view_id?; - for view_id in this.parents(window_id, focused_id).collect::>() { + for view_id in this.ancestors(window_id, focused_id).collect::>() { if let Some(mut view) = this.cx.views.remove(&(window_id, view_id)) { if active { - view.on_focus_in(this, window_id, view_id, focused_id); + view.focus_in(this, window_id, view_id, focused_id); } else { - view.on_focus_out(this, window_id, view_id, focused_id); + view.focus_out(this, window_id, view_id, focused_id); } this.cx.views.insert((window_id, view_id), view); } @@ -2272,16 +2352,16 @@ impl MutableAppContext { }); let blurred_parents = blurred_id - .map(|blurred_id| this.parents(window_id, blurred_id).collect::>()) + .map(|blurred_id| this.ancestors(window_id, blurred_id).collect::>()) .unwrap_or_default(); let focused_parents = focused_id - .map(|focused_id| this.parents(window_id, focused_id).collect::>()) + .map(|focused_id| this.ancestors(window_id, focused_id).collect::>()) .unwrap_or_default(); if let Some(blurred_id) = blurred_id { for view_id in blurred_parents.iter().copied() { if let Some(mut view) = this.cx.views.remove(&(window_id, view_id)) { - view.on_focus_out(this, window_id, view_id, blurred_id); + view.focus_out(this, window_id, view_id, blurred_id); this.cx.views.insert((window_id, view_id), view); } } @@ -2294,7 +2374,7 @@ impl MutableAppContext { if let Some(focused_id) = focused_id { for view_id in focused_parents { if let Some(mut view) = this.cx.views.remove(&(window_id, view_id)) { - view.on_focus_in(this, window_id, view_id, focused_id); + view.focus_in(this, window_id, view_id, focused_id); this.cx.views.insert((window_id, view_id), view); } } @@ -2961,20 +3041,41 @@ pub trait AnyView { ) -> Option>>>; fn ui_name(&self) -> &'static str; fn render(&mut self, params: RenderParams, cx: &mut MutableAppContext) -> ElementBox; - fn on_focus_in( + fn focus_in( &mut self, cx: &mut MutableAppContext, window_id: usize, view_id: usize, focused_id: usize, ); - fn on_focus_out( + fn focus_out( &mut self, cx: &mut MutableAppContext, window_id: usize, view_id: usize, focused_id: usize, ); + fn key_down( + &mut self, + event: &KeyDownEvent, + cx: &mut MutableAppContext, + window_id: usize, + view_id: usize, + ) -> bool; + fn key_up( + &mut self, + event: &KeyUpEvent, + cx: &mut MutableAppContext, + window_id: usize, + view_id: usize, + ) -> bool; + fn modifiers_changed( + &mut self, + event: &ModifiersChangedEvent, + cx: &mut MutableAppContext, + window_id: usize, + view_id: usize, + ) -> bool; fn keymap_context(&self, cx: &AppContext) -> keymap::Context; fn debug_json(&self, cx: &AppContext) -> serde_json::Value; @@ -3040,7 +3141,7 @@ where View::render(self, &mut RenderContext::new(params, cx)) } - fn on_focus_in( + fn focus_in( &mut self, cx: &mut MutableAppContext, window_id: usize, @@ -3059,10 +3160,10 @@ where .type_id(); AnyViewHandle::new(window_id, focused_id, focused_type, cx.ref_counts.clone()) }; - View::on_focus_in(self, focused_view_handle, &mut cx); + View::focus_in(self, focused_view_handle, &mut cx); } - fn on_focus_out( + fn focus_out( &mut self, cx: &mut MutableAppContext, window_id: usize, @@ -3081,7 +3182,40 @@ where .type_id(); AnyViewHandle::new(window_id, blurred_id, blurred_type, cx.ref_counts.clone()) }; - View::on_focus_out(self, blurred_view_handle, &mut cx); + View::focus_out(self, blurred_view_handle, &mut cx); + } + + fn key_down( + &mut self, + event: &KeyDownEvent, + cx: &mut MutableAppContext, + window_id: usize, + view_id: usize, + ) -> bool { + let mut cx = ViewContext::new(cx, window_id, view_id); + View::key_down(self, event, &mut cx) + } + + fn key_up( + &mut self, + event: &KeyUpEvent, + cx: &mut MutableAppContext, + window_id: usize, + view_id: usize, + ) -> bool { + let mut cx = ViewContext::new(cx, window_id, view_id); + View::key_up(self, event, &mut cx) + } + + fn modifiers_changed( + &mut self, + event: &ModifiersChangedEvent, + cx: &mut MutableAppContext, + window_id: usize, + view_id: usize, + ) -> bool { + let mut cx = ViewContext::new(cx, window_id, view_id); + View::modifiers_changed(self, event, &mut cx) } fn keymap_context(&self, cx: &AppContext) -> keymap::Context { @@ -3463,7 +3597,7 @@ impl<'a, T: View> ViewContext<'a, T> { if self.window_id != view.window_id { return false; } - self.parents(view.window_id, view.view_id) + self.ancestors(view.window_id, view.view_id) .any(|parent| parent == self.view_id) } @@ -6354,13 +6488,13 @@ mod tests { "View" } - fn on_focus_in(&mut self, focused: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, focused: AnyViewHandle, cx: &mut ViewContext) { if cx.handle().id() == focused.id() { self.events.lock().push(format!("{} focused", &self.name)); } } - fn on_focus_out(&mut self, blurred: AnyViewHandle, cx: &mut ViewContext) { + fn focus_out(&mut self, blurred: AnyViewHandle, cx: &mut ViewContext) { if cx.handle().id() == blurred.id() { self.events.lock().push(format!("{} blurred", &self.name)); } diff --git a/crates/gpui/src/presenter.rs b/crates/gpui/src/presenter.rs index 9299a5c1fbff220e6f475dfcfc5e02eff9e43300..6e564414d33bce8b086c9d9dda3078f84199d348 100644 --- a/crates/gpui/src/presenter.rs +++ b/crates/gpui/src/presenter.rs @@ -232,10 +232,16 @@ impl Presenter { let mut mouse_events = SmallVec::<[_; 2]>::new(); let mut notified_views: HashSet = Default::default(); - // 1. Map the platform event into mouse events, which interact with mouse regions. + // 1. Handle platform event. Keyboard events get dispatched immediately, while mouse events + // get mapped into the mouse-specific MouseEvent type. // -> These are usually small: [Mouse Down] or [Mouse up, Click] or [Mouse Moved, Mouse Dragged?] // -> Also updates mouse-related state match &event { + Event::KeyDown(e) => return cx.dispatch_key_down(self.window_id, e), + Event::KeyUp(e) => return cx.dispatch_key_up(self.window_id, e), + Event::ModifiersChanged(e) => { + return cx.dispatch_modifiers_changed(self.window_id, e) + } Event::MouseDown(e) => { // Click events are weird because they can be fired after a drag event. // MDN says that browsers handle this by starting from 'the most @@ -345,8 +351,6 @@ impl Presenter { platform_event: e.clone(), })) } - - _ => {} } if let Some(position) = event.position() { diff --git a/crates/outline/src/outline.rs b/crates/outline/src/outline.rs index a677ab5b675a57bd4731bd760401ccfe1fafb248..cee5388800ab3a84c749dfc96cdbf371b551d61c 100644 --- a/crates/outline/src/outline.rs +++ b/crates/outline/src/outline.rs @@ -52,7 +52,7 @@ impl View for OutlineView { ChildView::new(self.picker.clone(), cx).boxed() } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.picker); } diff --git a/crates/picker/src/picker.rs b/crates/picker/src/picker.rs index 30ad7827efce472959d3c833fc492bd1d45d8c3a..0945f6771bc6d640fb05a7df6233cbc6d71d71e7 100644 --- a/crates/picker/src/picker.rs +++ b/crates/picker/src/picker.rs @@ -116,7 +116,7 @@ impl View for Picker { cx } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.query_editor); } diff --git a/crates/project_symbols/src/project_symbols.rs b/crates/project_symbols/src/project_symbols.rs index a81231b98f38395c7ed67cef227fec407807b112..e4a251de00cdfc5de619c6e8d2beb305fadd1ea1 100644 --- a/crates/project_symbols/src/project_symbols.rs +++ b/crates/project_symbols/src/project_symbols.rs @@ -51,7 +51,7 @@ impl View for ProjectSymbolsView { ChildView::new(self.picker.clone(), cx).boxed() } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.picker); } diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index a43f3eb4867c7c9b1e27f1db278009cce26a6fcf..cd7a74ce8e3233f0d5b4404a3bc597ae4271b6a6 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -82,7 +82,7 @@ impl View for BufferSearchBar { "BufferSearchBar" } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.query_editor); } diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index eb5bf7d699480e9a240f93718f169f1979d0549f..8eb8e110e460972ada29f41f38150d5f8c08785f 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -195,7 +195,7 @@ impl View for ProjectSearchView { } } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { let handle = cx.weak_handle(); cx.update_global(|state: &mut ActiveSearches, cx| { state diff --git a/crates/terminal/src/terminal_container_view.rs b/crates/terminal/src/terminal_container_view.rs index 5cad16774d9f54ab2f173fb44678527bffaf55a5..d56631fd4f2fac5776a807f7bc657addd5347478 100644 --- a/crates/terminal/src/terminal_container_view.rs +++ b/crates/terminal/src/terminal_container_view.rs @@ -174,7 +174,7 @@ impl View for TerminalContainer { } } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(self.content.handle()); } diff --git a/crates/terminal/src/terminal_view.rs b/crates/terminal/src/terminal_view.rs index 732c0a717edddab1d42532252692aa57c814477c..0058198dc20932724d8e8428159d2df02643c459 100644 --- a/crates/terminal/src/terminal_view.rs +++ b/crates/terminal/src/terminal_view.rs @@ -343,14 +343,14 @@ impl View for TerminalView { .boxed() } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { self.has_new_content = false; self.terminal.read(cx).focus_in(); self.blink_cursors(self.blink_epoch, cx); cx.notify(); } - fn on_focus_out(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_out(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { self.terminal.update(cx, |terminal, _| { terminal.focus_out(); }); diff --git a/crates/theme_selector/src/theme_selector.rs b/crates/theme_selector/src/theme_selector.rs index 3236120857e229514eef37c251fa42aca8ec8b37..1caeae75f597050f145b8ebc36aa3a0b827261fc 100644 --- a/crates/theme_selector/src/theme_selector.rs +++ b/crates/theme_selector/src/theme_selector.rs @@ -266,7 +266,7 @@ impl View for ThemeSelector { ChildView::new(self.picker.clone(), cx).boxed() } - fn on_focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, _: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.picker); } diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index b7ae7f2ba0b867dd7b57b9c9ed77fd2a9077ef29..882b501d2e59c3414589713d17c6752a9f69351c 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -1485,7 +1485,7 @@ impl View for Pane { .named("pane") } - fn on_focus_in(&mut self, focused: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, focused: AnyViewHandle, cx: &mut ViewContext) { if let Some(active_item) = self.active_item() { if cx.is_self_focused() { // Pane was focused directly. We need to either focus a view inside the active item, diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index ece8cedfb1e516f8ff66fc8c76b3814c0fabd85b..82098a9d0649a45956008e964d080b660aa4cf74 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -2656,7 +2656,7 @@ impl View for Workspace { .named("workspace") } - fn on_focus_in(&mut self, view: AnyViewHandle, cx: &mut ViewContext) { + fn focus_in(&mut self, view: AnyViewHandle, cx: &mut ViewContext) { if cx.is_self_focused() { cx.focus(&self.active_pane); } else { From b9308ad80ddca96ae9357a1a4cf6869b807b3422 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sun, 16 Oct 2022 12:47:48 -0600 Subject: [PATCH 03/38] Move handling of modifier changes to new View hook --- crates/editor/src/editor.rs | 42 +++++++++++++- crates/editor/src/element.rs | 23 ++------ crates/editor/src/link_go_to_definition.rs | 67 ++++------------------ crates/gpui/src/platform/event.rs | 2 +- 4 files changed, 57 insertions(+), 77 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 670ec54933e6916bee31f1a9f8073ed17b7bf384..e1e9d6ead544a5ec582aadb1e1e8a360984b344b 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -46,7 +46,9 @@ use language::{ DiagnosticSeverity, IndentKind, IndentSize, Language, OffsetRangeExt, OffsetUtf16, Point, Selection, SelectionGoal, TransactionId, }; -use link_go_to_definition::{hide_link_definition, LinkGoToDefinitionState}; +use link_go_to_definition::{ + hide_link_definition, show_link_definition, LinkDefinitionKind, LinkGoToDefinitionState, +}; pub use multi_buffer::{ Anchor, AnchorRangeExt, ExcerptId, ExcerptRange, MultiBuffer, MultiBufferSnapshot, ToOffset, ToPoint, @@ -6510,6 +6512,44 @@ impl View for Editor { cx.notify(); } + fn modifiers_changed( + &mut self, + event: &gpui::ModifiersChangedEvent, + cx: &mut ViewContext, + ) -> bool { + let pending_selection = self.has_pending_selection(); + + if let Some(point) = self.link_go_to_definition_state.last_mouse_location.clone() { + if event.cmd && !pending_selection { + let snapshot = self.snapshot(cx); + let kind = if event.shift { + LinkDefinitionKind::Type + } else { + LinkDefinitionKind::Symbol + }; + + show_link_definition(kind, self, point, snapshot, cx); + return false; + } + } + + { + if self.link_go_to_definition_state.symbol_range.is_some() + || !self.link_go_to_definition_state.definitions.is_empty() + { + self.link_go_to_definition_state.symbol_range.take(); + self.link_go_to_definition_state.definitions.clear(); + cx.notify(); + } + + self.link_go_to_definition_state.task = None; + + self.clear_text_highlights::(cx); + } + + false + } + fn keymap_context(&self, _: &AppContext) -> gpui::keymap::Context { let mut context = Self::default_keymap_context(); let mode = match self.mode { diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index afc9bdd49450227ca1f04b5d5ebe3fed7e088fc2..794bfb30cdcdb2e76c477d016812c8acbaacb690 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -9,7 +9,7 @@ use crate::{ HoverAt, HOVER_POPOVER_GAP, MIN_POPOVER_CHARACTER_WIDTH, MIN_POPOVER_LINE_HEIGHT, }, link_go_to_definition::{ - CmdShiftChanged, GoToFetchedDefinition, GoToFetchedTypeDefinition, UpdateGoToDefinitionLink, + GoToFetchedDefinition, GoToFetchedTypeDefinition, UpdateGoToDefinitionLink, }, mouse_context_menu::DeployMouseContextMenu, EditorStyle, @@ -30,9 +30,8 @@ use gpui::{ platform::CursorStyle, text_layout::{self, Line, RunStyle, TextLayoutCache}, AppContext, Axis, Border, CursorRegion, Element, ElementBox, Event, EventContext, - LayoutContext, ModifiersChangedEvent, MouseButton, MouseButtonEvent, MouseMovedEvent, - MouseRegion, MutableAppContext, PaintContext, Quad, Scene, SizeConstraint, ViewContext, - WeakViewHandle, + LayoutContext, MouseButton, MouseButtonEvent, MouseMovedEvent, MouseRegion, MutableAppContext, + PaintContext, Quad, Scene, SizeConstraint, ViewContext, WeakViewHandle, }; use json::json; use language::{Bias, DiagnosticSeverity, OffsetUtf16, Selection}; @@ -408,14 +407,6 @@ impl EditorElement { true } - fn modifiers_changed(&self, event: ModifiersChangedEvent, cx: &mut EventContext) -> bool { - cx.dispatch_action(CmdShiftChanged { - cmd_down: event.cmd, - shift_down: event.shift, - }); - false - } - fn scroll( position: Vector2F, mut delta: Vector2F, @@ -1889,17 +1880,13 @@ impl Element for EditorElement { fn dispatch_event( &mut self, - event: &Event, + _: &Event, _: RectF, _: RectF, _: &mut LayoutState, _: &mut (), - cx: &mut EventContext, + _: &mut EventContext, ) -> bool { - if let Event::ModifiersChanged(event) = event { - self.modifiers_changed(*event, cx); - } - false } diff --git a/crates/editor/src/link_go_to_definition.rs b/crates/editor/src/link_go_to_definition.rs index c8294ddb43744ccf09a016739b8d2277645b4b48..705a1b276075eda3ebbf3f42b7a6e8c0664694cc 100644 --- a/crates/editor/src/link_go_to_definition.rs +++ b/crates/editor/src/link_go_to_definition.rs @@ -19,12 +19,6 @@ pub struct UpdateGoToDefinitionLink { pub shift_held: bool, } -#[derive(Clone, PartialEq)] -pub struct CmdShiftChanged { - pub cmd_down: bool, - pub shift_down: bool, -} - #[derive(Clone, PartialEq)] pub struct GoToFetchedDefinition { pub point: DisplayPoint, @@ -39,7 +33,6 @@ impl_internal_actions!( editor, [ UpdateGoToDefinitionLink, - CmdShiftChanged, GoToFetchedDefinition, GoToFetchedTypeDefinition ] @@ -47,7 +40,6 @@ impl_internal_actions!( pub fn init(cx: &mut MutableAppContext) { cx.add_action(update_go_to_definition_link); - cx.add_action(cmd_shift_changed); cx.add_action(go_to_fetched_definition); cx.add_action(go_to_fetched_type_definition); } @@ -113,37 +105,6 @@ pub fn update_go_to_definition_link( hide_link_definition(editor, cx); } -pub fn cmd_shift_changed( - editor: &mut Editor, - &CmdShiftChanged { - cmd_down, - shift_down, - }: &CmdShiftChanged, - cx: &mut ViewContext, -) { - let pending_selection = editor.has_pending_selection(); - - if let Some(point) = editor - .link_go_to_definition_state - .last_mouse_location - .clone() - { - if cmd_down && !pending_selection { - let snapshot = editor.snapshot(cx); - let kind = if shift_down { - LinkDefinitionKind::Type - } else { - LinkDefinitionKind::Symbol - }; - - show_link_definition(kind, editor, point, snapshot, cx); - return; - } - } - - hide_link_definition(editor, cx) -} - #[derive(Debug, Clone, Copy, PartialEq)] pub enum LinkDefinitionKind { Symbol, @@ -397,6 +358,7 @@ fn go_to_fetched_definition_of_kind( #[cfg(test)] mod tests { use futures::StreamExt; + use gpui::{ModifiersChangedEvent, View}; use indoc::indoc; use lsp::request::{GotoDefinition, GotoTypeDefinition}; @@ -467,11 +429,10 @@ mod tests { // Unpress shift causes highlight to go away (normal goto-definition is not valid here) cx.update_editor(|editor, cx| { - cmd_shift_changed( - editor, - &CmdShiftChanged { - cmd_down: true, - shift_down: false, + editor.modifiers_changed( + &gpui::ModifiersChangedEvent { + cmd: true, + ..Default::default() }, cx, ); @@ -581,14 +542,7 @@ mod tests { // Unpress cmd causes highlight to go away cx.update_editor(|editor, cx| { - cmd_shift_changed( - editor, - &CmdShiftChanged { - cmd_down: false, - shift_down: false, - }, - cx, - ); + editor.modifiers_changed(&Default::default(), cx); }); // Assert no link highlights @@ -704,11 +658,10 @@ mod tests { ]))) }); cx.update_editor(|editor, cx| { - cmd_shift_changed( - editor, - &CmdShiftChanged { - cmd_down: true, - shift_down: false, + editor.modifiers_changed( + &ModifiersChangedEvent { + cmd: true, + ..Default::default() }, cx, ); diff --git a/crates/gpui/src/platform/event.rs b/crates/gpui/src/platform/event.rs index 48043ac9186b0701ab7d08fe86de30941ae56dda..7e4b95c9a1385fa3d3e566a8dd5bb8779775d1cd 100644 --- a/crates/gpui/src/platform/event.rs +++ b/crates/gpui/src/platform/event.rs @@ -11,7 +11,7 @@ pub struct KeyUpEvent { pub keystroke: Keystroke, } -#[derive(Clone, Copy, Debug)] +#[derive(Clone, Copy, Debug, Default)] pub struct ModifiersChangedEvent { pub ctrl: bool, pub alt: bool, From d25c6b15a69b2c3dcb3c78f61d7ef5ead8148f9f Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sun, 16 Oct 2022 12:55:02 -0600 Subject: [PATCH 04/38] Move Terminal key down event handling from element to View::key_down method --- crates/terminal/src/terminal_element.rs | 39 ++++--------------------- crates/terminal/src/terminal_view.rs | 15 ++++++++++ 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/crates/terminal/src/terminal_element.rs b/crates/terminal/src/terminal_element.rs index df745dae464459f0d53439b264e91036353a7f44..1568cf67d68fb5e6265e254f5decfbd3c3490b24 100644 --- a/crates/terminal/src/terminal_element.rs +++ b/crates/terminal/src/terminal_element.rs @@ -15,9 +15,8 @@ use gpui::{ }, serde_json::json, text_layout::{Line, RunStyle}, - Element, ElementBox, Event, EventContext, FontCache, KeyDownEvent, ModelContext, MouseButton, - MouseRegion, PaintContext, Quad, SizeConstraint, TextLayoutCache, WeakModelHandle, - WeakViewHandle, + Element, ElementBox, EventContext, FontCache, ModelContext, MouseButton, MouseRegion, + PaintContext, Quad, SizeConstraint, TextLayoutCache, WeakModelHandle, WeakViewHandle, }; use itertools::Itertools; use ordered_float::OrderedFloat; @@ -801,42 +800,14 @@ impl Element for TerminalElement { fn dispatch_event( &mut self, - event: &gpui::Event, + _: &gpui::Event, _bounds: gpui::geometry::rect::RectF, _visible_bounds: gpui::geometry::rect::RectF, _layout: &mut Self::LayoutState, _paint: &mut Self::PaintState, - cx: &mut gpui::EventContext, + _: &mut gpui::EventContext, ) -> bool { - if let Event::KeyDown(KeyDownEvent { keystroke, .. }) = event { - if !cx.is_parent_view_focused() { - return false; - } - - if let Some(view) = self.view.upgrade(cx.app) { - view.update(cx.app, |view, cx| { - view.clear_bel(cx); - view.pause_cursor_blinking(cx); - }) - } - - self.terminal - .upgrade(cx.app) - .map(|model_handle| { - model_handle.update(cx.app, |term, cx| { - term.try_keystroke( - keystroke, - cx.global::() - .terminal_overrides - .option_as_meta - .unwrap_or(false), - ) - }) - }) - .unwrap_or(false) - } else { - false - } + false } fn metadata(&self) -> Option<&dyn std::any::Any> { diff --git a/crates/terminal/src/terminal_view.rs b/crates/terminal/src/terminal_view.rs index 0058198dc20932724d8e8428159d2df02643c459..1e6788deeb846a515a7bf721b2bf14cd096c1f09 100644 --- a/crates/terminal/src/terminal_view.rs +++ b/crates/terminal/src/terminal_view.rs @@ -357,6 +357,21 @@ impl View for TerminalView { cx.notify(); } + fn key_down(&mut self, event: &gpui::KeyDownEvent, cx: &mut ViewContext) -> bool { + self.clear_bel(cx); + self.pause_cursor_blinking(cx); + + self.terminal.update(cx, |term, cx| { + term.try_keystroke( + &event.keystroke, + cx.global::() + .terminal_overrides + .option_as_meta + .unwrap_or(false), + ) + }) + } + //IME stuff fn selected_text_range(&self, cx: &AppContext) -> Option> { if self From 12eab6551fd871c0e61d5ba77c7df533ee62a4f7 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Sun, 16 Oct 2022 13:08:25 -0600 Subject: [PATCH 05/38] Remove dispatch_event from Element trait --- crates/collab_ui/src/collab_titlebar_item.rs | 12 - crates/editor/src/element.rs | 18 +- crates/gpui/examples/text.rs | 12 - crates/gpui/src/elements.rs | 35 +- crates/gpui/src/elements/align.rs | 15 +- crates/gpui/src/elements/canvas.rs | 12 - crates/gpui/src/elements/constrained_box.rs | 15 +- crates/gpui/src/elements/container.rs | 14 +- crates/gpui/src/elements/empty.rs | 14 +- crates/gpui/src/elements/expanded.rs | 15 +- crates/gpui/src/elements/flex.rs | 33 +- crates/gpui/src/elements/hook.rs | 15 +- crates/gpui/src/elements/image.rs | 15 +- crates/gpui/src/elements/keystroke_label.rs | 14 +- crates/gpui/src/elements/label.rs | 14 +- crates/gpui/src/elements/list.rs | 64 +-- .../gpui/src/elements/mouse_event_handler.rs | 14 +- crates/gpui/src/elements/overlay.rs | 16 +- crates/gpui/src/elements/resizable.rs | 12 - crates/gpui/src/elements/stack.rs | 20 +- crates/gpui/src/elements/svg.rs | 14 +- crates/gpui/src/elements/text.rs | 15 +- crates/gpui/src/elements/tooltip.rs | 12 - crates/gpui/src/elements/uniform_list.rs | 19 +- crates/gpui/src/presenter.rs | 499 ++++++++---------- crates/terminal/src/terminal_element.rs | 12 - 26 files changed, 251 insertions(+), 699 deletions(-) diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs index 702d8a9121e27b8ddaf6da7774807eed86b1b202..1279d3043748e7b8186364f926884faac0a3785b 100644 --- a/crates/collab_ui/src/collab_titlebar_item.rs +++ b/crates/collab_ui/src/collab_titlebar_item.rs @@ -526,18 +526,6 @@ impl Element for AvatarRibbon { cx.scene.push_path(path.build(self.color, None)); } - fn dispatch_event( - &mut self, - _: &gpui::Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - _: &mut gpui::EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 794bfb30cdcdb2e76c477d016812c8acbaacb690..92dc358460ffbf0bf641ed75b640290edb898485 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -29,9 +29,9 @@ use gpui::{ json::{self, ToJson}, platform::CursorStyle, text_layout::{self, Line, RunStyle, TextLayoutCache}, - AppContext, Axis, Border, CursorRegion, Element, ElementBox, Event, EventContext, - LayoutContext, MouseButton, MouseButtonEvent, MouseMovedEvent, MouseRegion, MutableAppContext, - PaintContext, Quad, Scene, SizeConstraint, ViewContext, WeakViewHandle, + AppContext, Axis, Border, CursorRegion, Element, ElementBox, EventContext, LayoutContext, + MouseButton, MouseButtonEvent, MouseMovedEvent, MouseRegion, MutableAppContext, PaintContext, + Quad, Scene, SizeConstraint, ViewContext, WeakViewHandle, }; use json::json; use language::{Bias, DiagnosticSeverity, OffsetUtf16, Selection}; @@ -1878,18 +1878,6 @@ impl Element for EditorElement { cx.scene.pop_layer(); } - fn dispatch_event( - &mut self, - _: &Event, - _: RectF, - _: RectF, - _: &mut LayoutState, - _: &mut (), - _: &mut EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/examples/text.rs b/crates/gpui/examples/text.rs index d4e873f039c7d907e71887e5b10325fa9ba41e37..4d84fefab62e30e86f25d72f06c7638bf72894f7 100644 --- a/crates/gpui/examples/text.rs +++ b/crates/gpui/examples/text.rs @@ -101,18 +101,6 @@ impl gpui::Element for TextElement { line.paint(bounds.origin(), visible_bounds, bounds.height(), cx); } - fn dispatch_event( - &mut self, - _: &gpui::Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - _: &mut gpui::EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/gpui/src/elements.rs b/crates/gpui/src/elements.rs index 59269f8af68ebc2819da7a63be996663e4379982..a648df6095820054ef52ce0a600af13a39ddeac7 100644 --- a/crates/gpui/src/elements.rs +++ b/crates/gpui/src/elements.rs @@ -33,8 +33,8 @@ use crate::{ }, json, presenter::MeasurementContext, - Action, DebugContext, Event, EventContext, LayoutContext, PaintContext, RenderContext, - SizeConstraint, View, + Action, DebugContext, EventContext, LayoutContext, PaintContext, RenderContext, SizeConstraint, + View, }; use core::panic; use json::ToJson; @@ -50,7 +50,6 @@ use std::{ trait AnyElement { fn layout(&mut self, constraint: SizeConstraint, cx: &mut LayoutContext) -> Vector2F; fn paint(&mut self, origin: Vector2F, visible_bounds: RectF, cx: &mut PaintContext); - fn dispatch_event(&mut self, event: &Event, cx: &mut EventContext) -> bool; fn rect_for_text_range( &self, range_utf16: Range, @@ -80,16 +79,6 @@ pub trait Element { cx: &mut PaintContext, ) -> Self::PaintState; - fn dispatch_event( - &mut self, - event: &Event, - bounds: RectF, - visible_bounds: RectF, - layout: &mut Self::LayoutState, - paint: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool; - fn rect_for_text_range( &self, range_utf16: Range, @@ -303,22 +292,6 @@ impl AnyElement for Lifecycle { } } - fn dispatch_event(&mut self, event: &Event, cx: &mut EventContext) -> bool { - if let Lifecycle::PostPaint { - element, - bounds, - visible_bounds, - layout, - paint, - .. - } = self - { - element.dispatch_event(event, *bounds, *visible_bounds, layout, paint, cx) - } else { - panic!("invalid element lifecycle state"); - } - } - fn rect_for_text_range( &self, range_utf16: Range, @@ -433,10 +406,6 @@ impl ElementRc { self.element.borrow_mut().paint(origin, visible_bounds, cx); } - pub fn dispatch_event(&mut self, event: &Event, cx: &mut EventContext) -> bool { - self.element.borrow_mut().dispatch_event(event, cx) - } - pub fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/align.rs b/crates/gpui/src/elements/align.rs index 5158b7229eda70897290fff516095ac21c7f0b8c..ec1a210f75cc7f810a840dffebd0216bbe304471 100644 --- a/crates/gpui/src/elements/align.rs +++ b/crates/gpui/src/elements/align.rs @@ -2,8 +2,7 @@ use crate::{ geometry::{rect::RectF, vector::Vector2F}, json, presenter::MeasurementContext, - DebugContext, Element, ElementBox, Event, EventContext, LayoutContext, PaintContext, - SizeConstraint, + DebugContext, Element, ElementBox, LayoutContext, PaintContext, SizeConstraint, }; use json::ToJson; @@ -84,18 +83,6 @@ impl Element for Align { ); } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: std::ops::Range, diff --git a/crates/gpui/src/elements/canvas.rs b/crates/gpui/src/elements/canvas.rs index 6fec2dd1dc1cfafa84c971487883a60abbc52681..31c56bb9874e9e19e340219a8e967a181dafbf56 100644 --- a/crates/gpui/src/elements/canvas.rs +++ b/crates/gpui/src/elements/canvas.rs @@ -56,18 +56,6 @@ where self.0(bounds, visible_bounds, cx) } - fn dispatch_event( - &mut self, - _: &crate::Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - _: &mut crate::EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, _: std::ops::Range, diff --git a/crates/gpui/src/elements/constrained_box.rs b/crates/gpui/src/elements/constrained_box.rs index 012bbe23dd05f5b542a541310b844aafe5ca0975..2e232c6197774861fd14a453e62a8efb5772ee53 100644 --- a/crates/gpui/src/elements/constrained_box.rs +++ b/crates/gpui/src/elements/constrained_box.rs @@ -7,8 +7,7 @@ use crate::{ geometry::{rect::RectF, vector::Vector2F}, json, presenter::MeasurementContext, - DebugContext, Element, ElementBox, Event, EventContext, LayoutContext, PaintContext, - SizeConstraint, + DebugContext, Element, ElementBox, LayoutContext, PaintContext, SizeConstraint, }; pub struct ConstrainedBox { @@ -157,18 +156,6 @@ impl Element for ConstrainedBox { self.child.paint(bounds.origin(), visible_bounds, cx); } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/container.rs b/crates/gpui/src/elements/container.rs index dc0d0bac1bda4044a6b9a3157b6734a6115b9876..8e17fdd60f2c16b50825896fdeac0674a89e8d4f 100644 --- a/crates/gpui/src/elements/container.rs +++ b/crates/gpui/src/elements/container.rs @@ -11,7 +11,7 @@ use crate::{ platform::CursorStyle, presenter::MeasurementContext, scene::{self, Border, CursorRegion, Quad}, - Element, ElementBox, Event, EventContext, LayoutContext, PaintContext, SizeConstraint, + Element, ElementBox, LayoutContext, PaintContext, SizeConstraint, }; use serde::Deserialize; use serde_json::json; @@ -285,18 +285,6 @@ impl Element for Container { } } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/empty.rs b/crates/gpui/src/elements/empty.rs index a7c2fc1d60ae62b1b2a77f00b14efabfb32c31e1..b0a0481c05caaf29741a0d36a2d37fc59329b6d4 100644 --- a/crates/gpui/src/elements/empty.rs +++ b/crates/gpui/src/elements/empty.rs @@ -9,7 +9,7 @@ use crate::{ presenter::MeasurementContext, DebugContext, }; -use crate::{Element, Event, EventContext, LayoutContext, PaintContext, SizeConstraint}; +use crate::{Element, LayoutContext, PaintContext, SizeConstraint}; #[derive(Default)] pub struct Empty { @@ -59,18 +59,6 @@ impl Element for Empty { ) -> Self::PaintState { } - fn dispatch_event( - &mut self, - _: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - _: &mut EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/gpui/src/elements/expanded.rs b/crates/gpui/src/elements/expanded.rs index d77bbdbfb9c8e33036b6e76b444aef64833bbdbc..89e9c7c7d8997ecdb7b4ddcf0c8c65afc27a3422 100644 --- a/crates/gpui/src/elements/expanded.rs +++ b/crates/gpui/src/elements/expanded.rs @@ -4,8 +4,7 @@ use crate::{ geometry::{rect::RectF, vector::Vector2F}, json, presenter::MeasurementContext, - DebugContext, Element, ElementBox, Event, EventContext, LayoutContext, PaintContext, - SizeConstraint, + DebugContext, Element, ElementBox, LayoutContext, PaintContext, SizeConstraint, }; use serde_json::json; @@ -66,18 +65,6 @@ impl Element for Expanded { self.child.paint(bounds.origin(), visible_bounds, cx); } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/flex.rs b/crates/gpui/src/elements/flex.rs index fd37b001feb7dbc5c209a8f369cc9e24caabf040..4360137d8903f8eb04c9a4050c2eb689c9ebb66b 100644 --- a/crates/gpui/src/elements/flex.rs +++ b/crates/gpui/src/elements/flex.rs @@ -3,8 +3,8 @@ use std::{any::Any, cell::Cell, f32::INFINITY, ops::Range, rc::Rc}; use crate::{ json::{self, ToJson, Value}, presenter::MeasurementContext, - Axis, DebugContext, Element, ElementBox, ElementStateHandle, Event, EventContext, - LayoutContext, PaintContext, RenderContext, SizeConstraint, Vector2FExt, View, + Axis, DebugContext, Element, ElementBox, ElementStateHandle, LayoutContext, PaintContext, + RenderContext, SizeConstraint, Vector2FExt, View, }; use pathfinder_geometry::{ rect::RectF, @@ -318,23 +318,6 @@ impl Element for Flex { } } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - let mut handled = false; - for child in &mut self.children { - handled = child.dispatch_event(event, cx) || handled; - } - - handled - } - fn rect_for_text_range( &self, range_utf16: Range, @@ -420,18 +403,6 @@ impl Element for FlexItem { self.child.paint(bounds.origin(), visible_bounds, cx) } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/hook.rs b/crates/gpui/src/elements/hook.rs index c620847372bed4963d49412809b4733e9515108e..b77fef4fae3d08abdfa69da2f345ef1a790d84fa 100644 --- a/crates/gpui/src/elements/hook.rs +++ b/crates/gpui/src/elements/hook.rs @@ -4,8 +4,7 @@ use crate::{ geometry::{rect::RectF, vector::Vector2F}, json::json, presenter::MeasurementContext, - DebugContext, Element, ElementBox, Event, EventContext, LayoutContext, PaintContext, - SizeConstraint, + DebugContext, Element, ElementBox, LayoutContext, PaintContext, SizeConstraint, }; pub struct Hook { @@ -56,18 +55,6 @@ impl Element for Hook { self.child.paint(bounds.origin(), visible_bounds, cx); } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/image.rs b/crates/gpui/src/elements/image.rs index 7e231e5e293f8660b5dc60b9e8a6ebcf32264429..37cb01ace8a6c43e0add3d366d888f06b4b0225e 100644 --- a/crates/gpui/src/elements/image.rs +++ b/crates/gpui/src/elements/image.rs @@ -6,8 +6,7 @@ use crate::{ }, json::{json, ToJson}, presenter::MeasurementContext, - scene, Border, DebugContext, Element, Event, EventContext, ImageData, LayoutContext, - PaintContext, SizeConstraint, + scene, Border, DebugContext, Element, ImageData, LayoutContext, PaintContext, SizeConstraint, }; use serde::Deserialize; use std::{ops::Range, sync::Arc}; @@ -81,18 +80,6 @@ impl Element for Image { }); } - fn dispatch_event( - &mut self, - _: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - _: &mut EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/gpui/src/elements/keystroke_label.rs b/crates/gpui/src/elements/keystroke_label.rs index 9b21a1b8a86e942da7d31dccf52b24d2a71d2bd2..ca317d9e114cdae9987d47e6ab073b08c90dd689 100644 --- a/crates/gpui/src/elements/keystroke_label.rs +++ b/crates/gpui/src/elements/keystroke_label.rs @@ -2,7 +2,7 @@ use crate::{ elements::*, fonts::TextStyle, geometry::{rect::RectF, vector::Vector2F}, - Action, ElementBox, Event, EventContext, LayoutContext, PaintContext, SizeConstraint, + Action, ElementBox, LayoutContext, PaintContext, SizeConstraint, }; use serde_json::json; @@ -64,18 +64,6 @@ impl Element for KeystrokeLabel { element.paint(bounds.origin(), visible_bounds, cx); } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - element: &mut ElementBox, - _: &mut (), - cx: &mut EventContext, - ) -> bool { - element.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/gpui/src/elements/label.rs b/crates/gpui/src/elements/label.rs index 18654808682bb181bd6c4557114782a649d9dda1..605a3cb7670444777f0482b59c3a066b7392bb7d 100644 --- a/crates/gpui/src/elements/label.rs +++ b/crates/gpui/src/elements/label.rs @@ -9,7 +9,7 @@ use crate::{ json::{ToJson, Value}, presenter::MeasurementContext, text_layout::{Line, RunStyle}, - DebugContext, Element, Event, EventContext, LayoutContext, PaintContext, SizeConstraint, + DebugContext, Element, LayoutContext, PaintContext, SizeConstraint, }; use serde::Deserialize; use serde_json::json; @@ -165,18 +165,6 @@ impl Element for Label { line.paint(bounds.origin(), visible_bounds, bounds.size().y(), cx) } - fn dispatch_event( - &mut self, - _: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - _: &mut EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/gpui/src/elements/list.rs b/crates/gpui/src/elements/list.rs index d0f87590fc53065a4d27849e947e24def56f28d7..a1b4ef0c796ad3a061916b2b2a871fe26bfe4b1a 100644 --- a/crates/gpui/src/elements/list.rs +++ b/crates/gpui/src/elements/list.rs @@ -5,7 +5,7 @@ use crate::{ }, json::json, presenter::MeasurementContext, - DebugContext, Element, ElementBox, ElementRc, Event, EventContext, LayoutContext, MouseRegion, + DebugContext, Element, ElementBox, ElementRc, EventContext, LayoutContext, MouseRegion, PaintContext, RenderContext, SizeConstraint, View, ViewContext, }; use std::{cell::RefCell, collections::VecDeque, ops::Range, rc::Rc}; @@ -13,7 +13,6 @@ use sum_tree::{Bias, SumTree}; pub struct List { state: ListState, - invalidated_elements: Vec, } #[derive(Clone)] @@ -82,10 +81,7 @@ struct Height(f32); impl List { pub fn new(state: ListState) -> Self { - Self { - state, - invalidated_elements: Default::default(), - } + Self { state } } } @@ -289,50 +285,6 @@ impl Element for List { cx.scene.pop_layer(); } - fn dispatch_event( - &mut self, - event: &Event, - bounds: RectF, - _: RectF, - scroll_top: &mut ListOffset, - _: &mut (), - cx: &mut EventContext, - ) -> bool { - let mut handled = false; - - let mut state = self.state.0.borrow_mut(); - let mut item_origin = bounds.origin() - vec2f(0., scroll_top.offset_in_item); - let mut cursor = state.items.cursor::(); - let mut new_items = cursor.slice(&Count(scroll_top.item_ix), Bias::Right, &()); - while let Some(item) = cursor.item() { - if item_origin.y() > bounds.max_y() { - break; - } - - if let ListItem::Rendered(element) = item { - let prev_notify_count = cx.notify_count(); - let mut element = element.clone(); - handled = element.dispatch_event(event, cx) || handled; - item_origin.set_y(item_origin.y() + element.size().y()); - if cx.notify_count() > prev_notify_count { - new_items.push(ListItem::Unrendered, &()); - self.invalidated_elements.push(element); - } else { - new_items.push(item.clone(), &()); - } - cursor.next(&()); - } else { - unreachable!(); - } - } - - new_items.push_tree(cursor.suffix(&()), &()); - drop(cursor); - state.items = new_items; - - handled - } - fn rect_for_text_range( &self, range_utf16: Range, @@ -964,18 +916,6 @@ mod tests { todo!() } - fn dispatch_event( - &mut self, - _: &Event, - _: RectF, - _: RectF, - _: &mut (), - _: &mut (), - _: &mut EventContext, - ) -> bool { - todo!() - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/gpui/src/elements/mouse_event_handler.rs b/crates/gpui/src/elements/mouse_event_handler.rs index bb64e70f8cb31579bf1ecc4e86143f2387bc89ed..c8ba330e70324fb8c11df4469810f19b38834d2b 100644 --- a/crates/gpui/src/elements/mouse_event_handler.rs +++ b/crates/gpui/src/elements/mouse_event_handler.rs @@ -9,7 +9,7 @@ use crate::{ CursorRegion, HandlerSet, MouseClick, MouseDown, MouseDownOut, MouseDrag, MouseHover, MouseMove, MouseScrollWheel, MouseUp, MouseUpOut, }, - DebugContext, Element, ElementBox, Event, EventContext, LayoutContext, MeasurementContext, + DebugContext, Element, ElementBox, EventContext, LayoutContext, MeasurementContext, MouseButton, MouseRegion, MouseState, PaintContext, RenderContext, SizeConstraint, View, }; use serde_json::json; @@ -194,18 +194,6 @@ impl Element for MouseEventHandler { self.child.paint(bounds.origin(), visible_bounds, cx); } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/overlay.rs b/crates/gpui/src/elements/overlay.rs index 07442d1140c2be8f992641bf447e0ede2aa157d3..253c88f703a36abc30162053fa42b3c586738b6d 100644 --- a/crates/gpui/src/elements/overlay.rs +++ b/crates/gpui/src/elements/overlay.rs @@ -4,8 +4,8 @@ use crate::{ geometry::{rect::RectF, vector::Vector2F}, json::ToJson, presenter::MeasurementContext, - Axis, DebugContext, Element, ElementBox, Event, EventContext, LayoutContext, MouseRegion, - PaintContext, SizeConstraint, + Axis, DebugContext, Element, ElementBox, LayoutContext, MouseRegion, PaintContext, + SizeConstraint, }; use serde_json::json; @@ -225,18 +225,6 @@ impl Element for Overlay { cx.scene.pop_stacking_context(); } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/resizable.rs b/crates/gpui/src/elements/resizable.rs index 8cccc9fa1fec5377ed5c5727ea03954fdd062acb..fb5bfa4a11643dbb351a9f7138b7fdb683f43ddb 100644 --- a/crates/gpui/src/elements/resizable.rs +++ b/crates/gpui/src/elements/resizable.rs @@ -187,18 +187,6 @@ impl Element for Resizable { self.child.paint(bounds.origin(), visible_bounds, cx); } - fn dispatch_event( - &mut self, - event: &crate::Event, - _bounds: pathfinder_geometry::rect::RectF, - _visible_bounds: pathfinder_geometry::rect::RectF, - _layout: &mut Self::LayoutState, - _paint: &mut Self::PaintState, - cx: &mut crate::EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range_utf16: std::ops::Range, diff --git a/crates/gpui/src/elements/stack.rs b/crates/gpui/src/elements/stack.rs index 5de53ff9e7f40712c5f36550434c6cce2058ad1a..f08ce04649a4219eba27040c7e9e43dbfebde2f8 100644 --- a/crates/gpui/src/elements/stack.rs +++ b/crates/gpui/src/elements/stack.rs @@ -4,8 +4,7 @@ use crate::{ geometry::{rect::RectF, vector::Vector2F}, json::{self, json, ToJson}, presenter::MeasurementContext, - DebugContext, Element, ElementBox, Event, EventContext, LayoutContext, PaintContext, - SizeConstraint, + DebugContext, Element, ElementBox, LayoutContext, PaintContext, SizeConstraint, }; #[derive(Default)] @@ -49,23 +48,6 @@ impl Element for Stack { } } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - for child in self.children.iter_mut().rev() { - if child.dispatch_event(event, cx) { - return true; - } - } - false - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/gpui/src/elements/svg.rs b/crates/gpui/src/elements/svg.rs index 544abb3314a526b72f674e01a213f5f4b75af334..5bd2759f7a47ecbda0bf5f2df23e5ebf87254c49 100644 --- a/crates/gpui/src/elements/svg.rs +++ b/crates/gpui/src/elements/svg.rs @@ -9,7 +9,7 @@ use crate::{ vector::{vec2f, Vector2F}, }, presenter::MeasurementContext, - scene, DebugContext, Element, Event, EventContext, LayoutContext, PaintContext, SizeConstraint, + scene, DebugContext, Element, LayoutContext, PaintContext, SizeConstraint, }; pub struct Svg { @@ -73,18 +73,6 @@ impl Element for Svg { } } - fn dispatch_event( - &mut self, - _: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - _: &mut EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/gpui/src/elements/text.rs b/crates/gpui/src/elements/text.rs index 45dc2dbae3343051e8b417fc6a12393757e125f7..073e343b9c3ddeb9a0b6ed7744f33fa5c02b15c3 100644 --- a/crates/gpui/src/elements/text.rs +++ b/crates/gpui/src/elements/text.rs @@ -8,8 +8,7 @@ use crate::{ json::{ToJson, Value}, presenter::MeasurementContext, text_layout::{Line, RunStyle, ShapedBoundary}, - DebugContext, Element, Event, EventContext, FontCache, LayoutContext, PaintContext, - SizeConstraint, TextLayoutCache, + DebugContext, Element, FontCache, LayoutContext, PaintContext, SizeConstraint, TextLayoutCache, }; use log::warn; use serde_json::json; @@ -178,18 +177,6 @@ impl Element for Text { } } - fn dispatch_event( - &mut self, - _: &Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - _: &mut EventContext, - ) -> bool { - false - } - fn rect_for_text_range( &self, _: Range, diff --git a/crates/gpui/src/elements/tooltip.rs b/crates/gpui/src/elements/tooltip.rs index c86230a5e158f30c5cef1716b67113a664b3a4df..f81b4af70115d71eef9c77f3c3a99ab198777164 100644 --- a/crates/gpui/src/elements/tooltip.rs +++ b/crates/gpui/src/elements/tooltip.rs @@ -186,18 +186,6 @@ impl Element for Tooltip { } } - fn dispatch_event( - &mut self, - event: &crate::Event, - _: RectF, - _: RectF, - _: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut crate::EventContext, - ) -> bool { - self.child.dispatch_event(event, cx) - } - fn rect_for_text_range( &self, range: Range, diff --git a/crates/gpui/src/elements/uniform_list.rs b/crates/gpui/src/elements/uniform_list.rs index 0604110abcdc972cb14906e917bd48fa292132f9..ca3601491ab2a507bef84fdcbcdd53bd72d209b1 100644 --- a/crates/gpui/src/elements/uniform_list.rs +++ b/crates/gpui/src/elements/uniform_list.rs @@ -1,4 +1,4 @@ -use super::{Element, Event, EventContext, LayoutContext, PaintContext, SizeConstraint}; +use super::{Element, EventContext, LayoutContext, PaintContext, SizeConstraint}; use crate::{ geometry::{ rect::RectF, @@ -324,23 +324,6 @@ impl Element for UniformList { cx.scene.pop_layer(); } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - layout: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - let mut handled = false; - for item in &mut layout.items { - handled = item.dispatch_event(event, cx) || handled; - } - - handled - } - fn rect_for_text_range( &self, range: Range, diff --git a/crates/gpui/src/presenter.rs b/crates/gpui/src/presenter.rs index 6e564414d33bce8b086c9d9dda3078f84199d348..74c2dddd662c9f733ecc2a456fadc473e52de9c9 100644 --- a/crates/gpui/src/presenter.rs +++ b/crates/gpui/src/presenter.rs @@ -228,296 +228,283 @@ impl Presenter { event_reused: bool, cx: &mut MutableAppContext, ) -> bool { - if let Some(root_view_id) = cx.root_view_id(self.window_id) { - let mut mouse_events = SmallVec::<[_; 2]>::new(); - let mut notified_views: HashSet = Default::default(); - - // 1. Handle platform event. Keyboard events get dispatched immediately, while mouse events - // get mapped into the mouse-specific MouseEvent type. - // -> These are usually small: [Mouse Down] or [Mouse up, Click] or [Mouse Moved, Mouse Dragged?] - // -> Also updates mouse-related state - match &event { - Event::KeyDown(e) => return cx.dispatch_key_down(self.window_id, e), - Event::KeyUp(e) => return cx.dispatch_key_up(self.window_id, e), - Event::ModifiersChanged(e) => { - return cx.dispatch_modifiers_changed(self.window_id, e) + let mut mouse_events = SmallVec::<[_; 2]>::new(); + let mut notified_views: HashSet = Default::default(); + + // 1. Handle platform event. Keyboard events get dispatched immediately, while mouse events + // get mapped into the mouse-specific MouseEvent type. + // -> These are usually small: [Mouse Down] or [Mouse up, Click] or [Mouse Moved, Mouse Dragged?] + // -> Also updates mouse-related state + match &event { + Event::KeyDown(e) => return cx.dispatch_key_down(self.window_id, e), + Event::KeyUp(e) => return cx.dispatch_key_up(self.window_id, e), + Event::ModifiersChanged(e) => return cx.dispatch_modifiers_changed(self.window_id, e), + Event::MouseDown(e) => { + // Click events are weird because they can be fired after a drag event. + // MDN says that browsers handle this by starting from 'the most + // specific ancestor element that contained both [positions]' + // So we need to store the overlapping regions on mouse down. + + // If there is already clicked_button stored, don't replace it. + if self.clicked_button.is_none() { + self.clicked_region_ids = self + .mouse_regions + .iter() + .filter_map(|(region, _)| { + if region.bounds.contains_point(e.position) { + Some(region.id()) + } else { + None + } + }) + .collect(); + + self.clicked_button = Some(e.button); } - Event::MouseDown(e) => { - // Click events are weird because they can be fired after a drag event. - // MDN says that browsers handle this by starting from 'the most - // specific ancestor element that contained both [positions]' - // So we need to store the overlapping regions on mouse down. - - // If there is already clicked_button stored, don't replace it. - if self.clicked_button.is_none() { - self.clicked_region_ids = self - .mouse_regions - .iter() - .filter_map(|(region, _)| { - if region.bounds.contains_point(e.position) { - Some(region.id()) - } else { - None - } - }) - .collect(); - self.clicked_button = Some(e.button); + mouse_events.push(MouseEvent::Down(MouseDown { + region: Default::default(), + platform_event: e.clone(), + })); + mouse_events.push(MouseEvent::DownOut(MouseDownOut { + region: Default::default(), + platform_event: e.clone(), + })); + } + Event::MouseUp(e) => { + // NOTE: The order of event pushes is important! MouseUp events MUST be fired + // before click events, and so the MouseUp events need to be pushed before + // MouseClick events. + mouse_events.push(MouseEvent::Up(MouseUp { + region: Default::default(), + platform_event: e.clone(), + })); + mouse_events.push(MouseEvent::UpOut(MouseUpOut { + region: Default::default(), + platform_event: e.clone(), + })); + mouse_events.push(MouseEvent::Click(MouseClick { + region: Default::default(), + platform_event: e.clone(), + })); + } + Event::MouseMoved( + e @ MouseMovedEvent { + position, + pressed_button, + .. + }, + ) => { + let mut style_to_assign = CursorStyle::Arrow; + for region in self.cursor_regions.iter().rev() { + if region.bounds.contains_point(*position) { + style_to_assign = region.style; + break; } - - mouse_events.push(MouseEvent::Down(MouseDown { - region: Default::default(), - platform_event: e.clone(), - })); - mouse_events.push(MouseEvent::DownOut(MouseDownOut { - region: Default::default(), - platform_event: e.clone(), - })); } - Event::MouseUp(e) => { - // NOTE: The order of event pushes is important! MouseUp events MUST be fired - // before click events, and so the MouseUp events need to be pushed before - // MouseClick events. - mouse_events.push(MouseEvent::Up(MouseUp { - region: Default::default(), - platform_event: e.clone(), - })); - mouse_events.push(MouseEvent::UpOut(MouseUpOut { - region: Default::default(), - platform_event: e.clone(), - })); - mouse_events.push(MouseEvent::Click(MouseClick { - region: Default::default(), - platform_event: e.clone(), - })); - } - Event::MouseMoved( - e @ MouseMovedEvent { - position, - pressed_button, - .. - }, - ) => { - let mut style_to_assign = CursorStyle::Arrow; - for region in self.cursor_regions.iter().rev() { - if region.bounds.contains_point(*position) { - style_to_assign = region.style; - break; - } - } - cx.platform().set_cursor_style(style_to_assign); - - if !event_reused { - if pressed_button.is_some() { - mouse_events.push(MouseEvent::Drag(MouseDrag { - region: Default::default(), - prev_mouse_position: self.mouse_position, - platform_event: e.clone(), - })); - } else if let Some(clicked_button) = self.clicked_button { - // Mouse up event happened outside the current window. Simulate mouse up button event - let button_event = e.to_button_event(clicked_button); - mouse_events.push(MouseEvent::Up(MouseUp { - region: Default::default(), - platform_event: button_event.clone(), - })); - mouse_events.push(MouseEvent::UpOut(MouseUpOut { - region: Default::default(), - platform_event: button_event.clone(), - })); - mouse_events.push(MouseEvent::Click(MouseClick { - region: Default::default(), - platform_event: button_event.clone(), - })); - } + cx.platform().set_cursor_style(style_to_assign); - mouse_events.push(MouseEvent::Move(MouseMove { + if !event_reused { + if pressed_button.is_some() { + mouse_events.push(MouseEvent::Drag(MouseDrag { region: Default::default(), + prev_mouse_position: self.mouse_position, platform_event: e.clone(), })); + } else if let Some(clicked_button) = self.clicked_button { + // Mouse up event happened outside the current window. Simulate mouse up button event + let button_event = e.to_button_event(clicked_button); + mouse_events.push(MouseEvent::Up(MouseUp { + region: Default::default(), + platform_event: button_event.clone(), + })); + mouse_events.push(MouseEvent::UpOut(MouseUpOut { + region: Default::default(), + platform_event: button_event.clone(), + })); + mouse_events.push(MouseEvent::Click(MouseClick { + region: Default::default(), + platform_event: button_event.clone(), + })); } - mouse_events.push(MouseEvent::Hover(MouseHover { + mouse_events.push(MouseEvent::Move(MouseMove { region: Default::default(), platform_event: e.clone(), - started: false, })); - - self.last_mouse_moved_event = Some(event.clone()); - } - Event::ScrollWheel(e) => { - mouse_events.push(MouseEvent::ScrollWheel(MouseScrollWheel { - region: Default::default(), - platform_event: e.clone(), - })) } - } - if let Some(position) = event.position() { - self.mouse_position = position; + mouse_events.push(MouseEvent::Hover(MouseHover { + region: Default::default(), + platform_event: e.clone(), + started: false, + })); + + self.last_mouse_moved_event = Some(event.clone()); } + Event::ScrollWheel(e) => mouse_events.push(MouseEvent::ScrollWheel(MouseScrollWheel { + region: Default::default(), + platform_event: e.clone(), + })), + } - // 2. Dispatch mouse events on regions - let mut any_event_handled = false; - for mut mouse_event in mouse_events { - let mut valid_regions = Vec::new(); - - // GPUI elements are arranged by depth but sibling elements can register overlapping - // mouse regions. As such, hover events are only fired on overlapping elements which - // are at the same depth as the topmost element which overlaps with the mouse. - match &mouse_event { - MouseEvent::Hover(_) => { - let mut top_most_depth = None; - let mouse_position = self.mouse_position.clone(); - for (region, depth) in self.mouse_regions.iter().rev() { - // Allow mouse regions to appear transparent to hovers - if !region.hoverable { - continue; - } + if let Some(position) = event.position() { + self.mouse_position = position; + } - let contains_mouse = region.bounds.contains_point(mouse_position); + // 2. Dispatch mouse events on regions + let mut any_event_handled = false; + for mut mouse_event in mouse_events { + let mut valid_regions = Vec::new(); + + // GPUI elements are arranged by depth but sibling elements can register overlapping + // mouse regions. As such, hover events are only fired on overlapping elements which + // are at the same depth as the topmost element which overlaps with the mouse. + match &mouse_event { + MouseEvent::Hover(_) => { + let mut top_most_depth = None; + let mouse_position = self.mouse_position.clone(); + for (region, depth) in self.mouse_regions.iter().rev() { + // Allow mouse regions to appear transparent to hovers + if !region.hoverable { + continue; + } - if contains_mouse && top_most_depth.is_none() { - top_most_depth = Some(depth); - } + let contains_mouse = region.bounds.contains_point(mouse_position); - // This unwrap relies on short circuiting boolean expressions - // The right side of the && is only executed when contains_mouse - // is true, and we know above that when contains_mouse is true - // top_most_depth is set - if contains_mouse && depth == top_most_depth.unwrap() { - //Ensure that hover entrance events aren't sent twice - if self.hovered_region_ids.insert(region.id()) { - valid_regions.push(region.clone()); - if region.notify_on_hover { - notified_views.insert(region.id().view_id()); - } - } - } else { - // Ensure that hover exit events aren't sent twice - if self.hovered_region_ids.remove(®ion.id()) { - valid_regions.push(region.clone()); - if region.notify_on_hover { - notified_views.insert(region.id().view_id()); - } - } - } + if contains_mouse && top_most_depth.is_none() { + top_most_depth = Some(depth); } - } - MouseEvent::Down(_) | MouseEvent::Up(_) => { - for (region, _) in self.mouse_regions.iter().rev() { - if region.bounds.contains_point(self.mouse_position) { - if region.notify_on_click { + + // This unwrap relies on short circuiting boolean expressions + // The right side of the && is only executed when contains_mouse + // is true, and we know above that when contains_mouse is true + // top_most_depth is set + if contains_mouse && depth == top_most_depth.unwrap() { + //Ensure that hover entrance events aren't sent twice + if self.hovered_region_ids.insert(region.id()) { + valid_regions.push(region.clone()); + if region.notify_on_hover { notified_views.insert(region.id().view_id()); } - valid_regions.push(region.clone()); } - } - } - MouseEvent::Click(e) => { - // Only raise click events if the released button is the same as the one stored - if self - .clicked_button - .map(|clicked_button| clicked_button == e.button) - .unwrap_or(false) - { - // Clear clicked regions and clicked button - let clicked_region_ids = - std::mem::replace(&mut self.clicked_region_ids, Default::default()); - self.clicked_button = None; - - // Find regions which still overlap with the mouse since the last MouseDown happened - for (mouse_region, _) in self.mouse_regions.iter().rev() { - if clicked_region_ids.contains(&mouse_region.id()) { - if mouse_region.bounds.contains_point(self.mouse_position) { - valid_regions.push(mouse_region.clone()); - } + } else { + // Ensure that hover exit events aren't sent twice + if self.hovered_region_ids.remove(®ion.id()) { + valid_regions.push(region.clone()); + if region.notify_on_hover { + notified_views.insert(region.id().view_id()); } } } } - MouseEvent::Drag(_) => { - for (mouse_region, _) in self.mouse_regions.iter().rev() { - if self.clicked_region_ids.contains(&mouse_region.id()) { - valid_regions.push(mouse_region.clone()); + } + MouseEvent::Down(_) | MouseEvent::Up(_) => { + for (region, _) in self.mouse_regions.iter().rev() { + if region.bounds.contains_point(self.mouse_position) { + if region.notify_on_click { + notified_views.insert(region.id().view_id()); } + valid_regions.push(region.clone()); } } - - MouseEvent::UpOut(_) | MouseEvent::DownOut(_) => { + } + MouseEvent::Click(e) => { + // Only raise click events if the released button is the same as the one stored + if self + .clicked_button + .map(|clicked_button| clicked_button == e.button) + .unwrap_or(false) + { + // Clear clicked regions and clicked button + let clicked_region_ids = + std::mem::replace(&mut self.clicked_region_ids, Default::default()); + self.clicked_button = None; + + // Find regions which still overlap with the mouse since the last MouseDown happened for (mouse_region, _) in self.mouse_regions.iter().rev() { - // NOT contains - if !mouse_region.bounds.contains_point(self.mouse_position) { - valid_regions.push(mouse_region.clone()); + if clicked_region_ids.contains(&mouse_region.id()) { + if mouse_region.bounds.contains_point(self.mouse_position) { + valid_regions.push(mouse_region.clone()); + } } } } - _ => { - for (mouse_region, _) in self.mouse_regions.iter().rev() { - // Contains - if mouse_region.bounds.contains_point(self.mouse_position) { - valid_regions.push(mouse_region.clone()); - } + } + MouseEvent::Drag(_) => { + for (mouse_region, _) in self.mouse_regions.iter().rev() { + if self.clicked_region_ids.contains(&mouse_region.id()) { + valid_regions.push(mouse_region.clone()); } } } - //3. Fire region events - let hovered_region_ids = self.hovered_region_ids.clone(); - for valid_region in valid_regions.into_iter() { - let mut event_cx = self.build_event_context(&mut notified_views, cx); - - mouse_event.set_region(valid_region.bounds); - if let MouseEvent::Hover(e) = &mut mouse_event { - e.started = hovered_region_ids.contains(&valid_region.id()) + MouseEvent::UpOut(_) | MouseEvent::DownOut(_) => { + for (mouse_region, _) in self.mouse_regions.iter().rev() { + // NOT contains + if !mouse_region.bounds.contains_point(self.mouse_position) { + valid_regions.push(mouse_region.clone()); + } } - // Handle Down events if the MouseRegion has a Click or Drag handler. This makes the api more intuitive as you would - // not expect a MouseRegion to be transparent to Down events if it also has a Click handler. - // This behavior can be overridden by adding a Down handler that calls cx.propogate_event - if let MouseEvent::Down(e) = &mouse_event { - if valid_region - .handlers - .contains_handler(MouseEvent::click_disc(), Some(e.button)) - || valid_region - .handlers - .contains_handler(MouseEvent::drag_disc(), Some(e.button)) - { - event_cx.handled = true; + } + _ => { + for (mouse_region, _) in self.mouse_regions.iter().rev() { + // Contains + if mouse_region.bounds.contains_point(self.mouse_position) { + valid_regions.push(mouse_region.clone()); } } + } + } - if let Some(callback) = valid_region.handlers.get(&mouse_event.handler_key()) { - event_cx.handled = true; - event_cx.with_current_view(valid_region.id().view_id(), { - let region_event = mouse_event.clone(); - |cx| { - callback(region_event, cx); - } - }); - } + //3. Fire region events + let hovered_region_ids = self.hovered_region_ids.clone(); + for valid_region in valid_regions.into_iter() { + let mut event_cx = self.build_event_context(&mut notified_views, cx); - any_event_handled = any_event_handled || event_cx.handled; - // For bubbling events, if the event was handled, don't continue dispatching - // This only makes sense for local events. - if event_cx.handled && mouse_event.is_capturable() { - break; + mouse_event.set_region(valid_region.bounds); + if let MouseEvent::Hover(e) = &mut mouse_event { + e.started = hovered_region_ids.contains(&valid_region.id()) + } + // Handle Down events if the MouseRegion has a Click or Drag handler. This makes the api more intuitive as you would + // not expect a MouseRegion to be transparent to Down events if it also has a Click handler. + // This behavior can be overridden by adding a Down handler that calls cx.propogate_event + if let MouseEvent::Down(e) = &mouse_event { + if valid_region + .handlers + .contains_handler(MouseEvent::click_disc(), Some(e.button)) + || valid_region + .handlers + .contains_handler(MouseEvent::drag_disc(), Some(e.button)) + { + event_cx.handled = true; } } - } - if !any_event_handled && !event_reused { - let mut event_cx = self.build_event_context(&mut notified_views, cx); - any_event_handled = event_cx.dispatch_event(root_view_id, &event); - } + if let Some(callback) = valid_region.handlers.get(&mouse_event.handler_key()) { + event_cx.handled = true; + event_cx.with_current_view(valid_region.id().view_id(), { + let region_event = mouse_event.clone(); + |cx| { + callback(region_event, cx); + } + }); + } - for view_id in notified_views { - cx.notify_view(self.window_id, view_id); + any_event_handled = any_event_handled || event_cx.handled; + // For bubbling events, if the event was handled, don't continue dispatching + // This only makes sense for local events. + if event_cx.handled && mouse_event.is_capturable() { + break; + } } + } - any_event_handled - } else { - false + for view_id in notified_views { + cx.notify_view(self.window_id, view_id); } + + any_event_handled } pub fn build_event_context<'a>( @@ -526,7 +513,6 @@ impl Presenter { cx: &'a mut MutableAppContext, ) -> EventContext<'a> { EventContext { - rendered_views: &mut self.rendered_views, font_cache: &self.font_cache, text_layout_cache: &self.text_layout_cache, view_stack: Default::default(), @@ -745,7 +731,6 @@ impl<'a> Deref for PaintContext<'a> { } pub struct EventContext<'a> { - rendered_views: &'a mut HashMap, pub font_cache: &'a FontCache, pub text_layout_cache: &'a TextLayoutCache, pub app: &'a mut MutableAppContext, @@ -757,17 +742,6 @@ pub struct EventContext<'a> { } impl<'a> EventContext<'a> { - fn dispatch_event(&mut self, view_id: usize, event: &Event) -> bool { - if let Some(mut element) = self.rendered_views.remove(&view_id) { - let result = - self.with_current_view(view_id, |this| element.dispatch_event(event, this)); - self.rendered_views.insert(view_id, element); - result - } else { - false - } - } - fn with_current_view(&mut self, view_id: usize, f: F) -> T where F: FnOnce(&mut Self) -> T, @@ -1030,27 +1004,6 @@ impl Element for ChildView { } } - fn dispatch_event( - &mut self, - event: &Event, - _: RectF, - _: RectF, - view_is_valid: &mut Self::LayoutState, - _: &mut Self::PaintState, - cx: &mut EventContext, - ) -> bool { - if *view_is_valid { - cx.dispatch_event(self.view.id(), event) - } else { - log::error!( - "dispatch_event called on a ChildView element whose underlying view was dropped (view_id: {}, name: {:?})", - self.view.id(), - self.view_name - ); - false - } - } - fn rect_for_text_range( &self, range_utf16: Range, diff --git a/crates/terminal/src/terminal_element.rs b/crates/terminal/src/terminal_element.rs index 1568cf67d68fb5e6265e254f5decfbd3c3490b24..aed6efe53b588eba5bc6bfcdf795389e9be523ea 100644 --- a/crates/terminal/src/terminal_element.rs +++ b/crates/terminal/src/terminal_element.rs @@ -798,18 +798,6 @@ impl Element for TerminalElement { }); } - fn dispatch_event( - &mut self, - _: &gpui::Event, - _bounds: gpui::geometry::rect::RectF, - _visible_bounds: gpui::geometry::rect::RectF, - _layout: &mut Self::LayoutState, - _paint: &mut Self::PaintState, - _: &mut gpui::EventContext, - ) -> bool { - false - } - fn metadata(&self) -> Option<&dyn std::any::Any> { None } From 19c98bb5add47b805217b82fbe5de219a858a152 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 17 Oct 2022 12:58:48 -0700 Subject: [PATCH 06/38] fixed a bug where files outside of the project would show 'untitled' in the search bar --- crates/editor/src/element.rs | 5 +++-- crates/editor/src/items.rs | 22 +++++++++------------- crates/language/src/buffer.rs | 12 ++++++++++++ 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index afc9bdd49450227ca1f04b5d5ebe3fed7e088fc2..b11f09fd8ce2b3e12f3b3861be8f9f9accfe93c9 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -1379,10 +1379,11 @@ impl EditorElement { let font_size = (style.text_scale_factor * self.style.text.font_size).round(); + let path = buffer.resolve_file_path(cx, true); let mut filename = None; let mut parent_path = None; - if let Some(file) = buffer.file() { - let path = file.path(); + // Can't use .and_then() because `.file_name()` and `.parent()` return references :( + if let Some(path) = path { filename = path.file_name().map(|f| f.to_string_lossy().to_string()); parent_path = path.parent().map(|p| p.to_string_lossy().to_string() + "/"); diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index e6a4eebffb0cb3587761855028411182fe7aac25..d617acc90cb8f7f6b3317c32f8918446fc43c11c 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -531,21 +531,17 @@ impl Item for Editor { let buffer = multibuffer.buffer(buffer_id)?; let buffer = buffer.read(cx); - let filename = if let Some(file) = buffer.file() { - if file.path().file_name().is_none() - || self - .project + let filename = buffer + .snapshot() + .resolve_file_path( + cx, + self.project .as_ref() .map(|project| project.read(cx).visible_worktrees(cx).count() > 1) - .unwrap_or_default() - { - file.full_path(cx).to_string_lossy().to_string() - } else { - file.path().to_string_lossy().to_string() - } - } else { - "untitled".to_string() - }; + .unwrap_or_default(), + ) + .map(|path| path.to_string_lossy().to_string()) + .unwrap_or_else(|| "untitled".to_string()); let mut breadcrumbs = vec![Label::new(filename, theme.breadcrumbs.text.clone()).boxed()]; breadcrumbs.extend(symbols.into_iter().map(|symbol| { diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 274777b81cbf5531288f81e03523f515b53a0eda..f1717c4aac5c959851150a36a6c79b56dcc6a199 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -2315,6 +2315,18 @@ impl BufferSnapshot { self.file.as_deref() } + pub fn resolve_file_path(&self, cx: &AppContext, include_root: bool) -> Option { + if let Some(file) = self.file() { + if file.path().file_name().is_none() || include_root { + Some(file.full_path(cx)) + } else { + Some(file.path().to_path_buf()) + } + } else { + None + } + } + pub fn file_update_count(&self) -> usize { self.file_update_count } From 354fefe61b793accc812ad63aa6046866fd5e521 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 17 Oct 2022 13:08:05 -0700 Subject: [PATCH 07/38] Resovled behavioral inconsistency with how projects with multiple roots are handled --- crates/editor/src/element.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index b11f09fd8ce2b3e12f3b3861be8f9f9accfe93c9..a228285a7009bb73bd1d35296c4776de66b962c1 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -1276,6 +1276,7 @@ impl EditorElement { line_height: f32, style: &EditorStyle, line_layouts: &[text_layout::Line], + include_root: bool, cx: &mut LayoutContext, ) -> (f32, Vec) { let editor = if let Some(editor) = self.view.upgrade(cx) { @@ -1379,7 +1380,7 @@ impl EditorElement { let font_size = (style.text_scale_factor * self.style.text.font_size).round(); - let path = buffer.resolve_file_path(cx, true); + let path = buffer.resolve_file_path(cx, include_root); let mut filename = None; let mut parent_path = None; // Can't use .and_then() because `.file_name()` and `.parent()` return references :( @@ -1608,6 +1609,7 @@ impl Element for EditorElement { let mut highlighted_rows = None; let mut highlighted_ranges = Vec::new(); let mut show_scrollbars = false; + let mut include_root = false; self.update_view(cx.app, |view, cx| { let display_map = view.display_map.update(cx, |map, cx| map.snapshot(cx)); @@ -1670,6 +1672,11 @@ impl Element for EditorElement { } show_scrollbars = view.show_scrollbars(); + include_root = view + .project + .as_ref() + .map(|project| project.read(cx).visible_worktrees(cx).count() > 1) + .unwrap_or_default() }); let line_number_layouts = @@ -1712,6 +1719,7 @@ impl Element for EditorElement { line_height, &style, &line_layouts, + include_root, cx, ); From 1f161b9aa1154629fa2041812e42529d3af2201f Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 17 Oct 2022 13:35:45 -0700 Subject: [PATCH 08/38] Show full, absolute paths when displaying a local worktree --- crates/fs/src/fs.rs | 3 +++ crates/project/src/worktree.rs | 20 ++++++++++++++++++-- crates/zed/src/main.rs | 4 +++- crates/zed/src/paths.rs | 2 +- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/crates/fs/src/fs.rs b/crates/fs/src/fs.rs index 2061d3734bd386901a97441fa34ea71c5b33f5a6..c1ea6feee525d7b1576da551ea1ba178eabca8c8 100644 --- a/crates/fs/src/fs.rs +++ b/crates/fs/src/fs.rs @@ -92,6 +92,9 @@ impl LineEnding { } } } + +pub struct HomeDir(pub PathBuf); + #[async_trait::async_trait] pub trait Fs: Send + Sync { async fn create_dir(&self, path: &Path) -> Result<()>; diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 383c9ac35b34c38d02e208cef1cb2b2c5a61e45a..bafabc67612069f3d88fdd0ee7728f4d86aff802 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -5,8 +5,8 @@ use anyhow::{anyhow, Context, Result}; use client::{proto, Client}; use clock::ReplicaId; use collections::{HashMap, VecDeque}; -use fs::LineEnding; use fs::{repository::GitRepository, Fs}; +use fs::{HomeDir, LineEnding}; use futures::{ channel::{ mpsc::{self, UnboundedSender}, @@ -1839,7 +1839,23 @@ impl language::File for File { fn full_path(&self, cx: &AppContext) -> PathBuf { let mut full_path = PathBuf::new(); - full_path.push(self.worktree.read(cx).root_name()); + let worktree = self.worktree.read(cx); + if worktree.is_visible() { + full_path.push(worktree.root_name()); + } else { + let home_dir = cx.global::(); + let local_path = worktree.as_local().map(|local| local.abs_path.clone()); + if let Some(path) = local_path { + if let Ok(path) = path.strip_prefix(home_dir.0.as_path()) { + full_path.push("~"); + full_path.push(path); + } else { + full_path.push(path) + } + } else { + full_path.push(Path::new("/host-filesystem/")) + } + } if self.path.components().next().is_some() { full_path.push(&self.path); } diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index a921bc2680271f195aa985b751fc98f45df0a9e9..e62317146cadae2b1df060b078e5b5aebab3ae8a 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -23,7 +23,7 @@ use isahc::{config::Configurable, Request}; use language::LanguageRegistry; use log::LevelFilter; use parking_lot::Mutex; -use project::{Fs, ProjectStore}; +use project::{Fs, HomeDir, ProjectStore}; use serde_json::json; use settings::{ self, settings_file::SettingsFile, KeymapFileContent, Settings, SettingsFileContent, @@ -99,6 +99,8 @@ fn main() { let (settings_file_content, keymap_file) = cx.background().block(config_files).unwrap(); + cx.set_global(HomeDir(zed::paths::HOME.to_path_buf())); + //Setup settings global before binding actions cx.set_global(SettingsFile::new( &*zed::paths::SETTINGS, diff --git a/crates/zed/src/paths.rs b/crates/zed/src/paths.rs index d6d99288c771f5260d5cd452fc97a04f15c87969..02db8ab55e7a53b70767eb04b54ed255bcc3bf1d 100644 --- a/crates/zed/src/paths.rs +++ b/crates/zed/src/paths.rs @@ -1,7 +1,7 @@ use std::path::PathBuf; lazy_static::lazy_static! { - static ref HOME: PathBuf = dirs::home_dir().expect("failed to determine home directory"); + pub static ref HOME: PathBuf = dirs::home_dir().expect("failed to determine home directory"); pub static ref CONFIG_DIR: PathBuf = HOME.join(".config").join("zed"); pub static ref LOGS_DIR: PathBuf = HOME.join("Library/Logs/Zed"); pub static ref LANGUAGES_DIR: PathBuf = HOME.join("Library/Application Support/Zed/languages"); From f473eadf2d1cae4253dfbc16a7550906c5fa9493 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 17 Oct 2022 13:57:29 -0700 Subject: [PATCH 09/38] Fixed failing test, now to make breadcrumbs scrollable... --- crates/breadcrumbs/src/breadcrumbs.rs | 2 ++ crates/project/src/worktree.rs | 8 +++----- crates/workspace/src/workspace.rs | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/crates/breadcrumbs/src/breadcrumbs.rs b/crates/breadcrumbs/src/breadcrumbs.rs index 85f0509caf6f7f73e84312454a321d94d139edcd..b8c66b1f87429ae61c63b6b6c6d6d1e9c6bb91d2 100644 --- a/crates/breadcrumbs/src/breadcrumbs.rs +++ b/crates/breadcrumbs/src/breadcrumbs.rs @@ -42,10 +42,12 @@ impl View for Breadcrumbs { .as_ref() .and_then(|item| item.breadcrumbs(&theme, cx)) { + enum BreadcrumbTag {} Flex::row() .with_children(Itertools::intersperse_with(breadcrumbs.into_iter(), || { Label::new(" 〉 ".to_string(), theme.breadcrumbs.text.clone()).boxed() })) + .scrollable::(1, None, cx) .contained() .with_style(theme.breadcrumbs.container) .aligned() diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index bafabc67612069f3d88fdd0ee7728f4d86aff802..333511ee46e796c095a6b3f503161310cf2eb370 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -1843,12 +1843,10 @@ impl language::File for File { if worktree.is_visible() { full_path.push(worktree.root_name()); } else { - let home_dir = cx.global::(); - let local_path = worktree.as_local().map(|local| local.abs_path.clone()); - if let Some(path) = local_path { - if let Ok(path) = path.strip_prefix(home_dir.0.as_path()) { + if let Some(path) = worktree.as_local().map(|local| local.abs_path.clone()) { + if let Ok(trimmed_path) = path.strip_prefix(cx.global::().0.as_path()) { full_path.push("~"); - full_path.push(path); + full_path.push(trimmed_path); } else { full_path.push(path) } diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index ece8cedfb1e516f8ff66fc8c76b3814c0fabd85b..04a59c47b1f45e66d1f4490d6dc0c124bcd9385d 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -927,6 +927,9 @@ impl From<&dyn NotificationHandle> for AnyViewHandle { impl AppState { #[cfg(any(test, feature = "test-support"))] pub fn test(cx: &mut MutableAppContext) -> Arc { + use fs::HomeDir; + + cx.set_global(HomeDir(Path::new("/tmp/").to_path_buf())); let settings = Settings::test(cx); cx.set_global(settings); From 1789dfb8b1c41bc68aaf903f0d4ce640d655c1b1 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 17 Oct 2022 14:53:52 -0700 Subject: [PATCH 10/38] Fixed tests --- crates/breadcrumbs/src/breadcrumbs.rs | 2 +- crates/collab/src/integration_tests.rs | 6 ++++-- crates/fs/src/fs.rs | 9 +++++++++ crates/project/src/project.rs | 5 ++++- crates/project/src/worktree.rs | 8 ++++++-- crates/terminal/src/terminal_view.rs | 13 +------------ 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/crates/breadcrumbs/src/breadcrumbs.rs b/crates/breadcrumbs/src/breadcrumbs.rs index b8c66b1f87429ae61c63b6b6c6d6d1e9c6bb91d2..a95f1cf4f750af4e945d37af80530fe19fac73ff 100644 --- a/crates/breadcrumbs/src/breadcrumbs.rs +++ b/crates/breadcrumbs/src/breadcrumbs.rs @@ -47,7 +47,7 @@ impl View for Breadcrumbs { .with_children(Itertools::intersperse_with(breadcrumbs.into_iter(), || { Label::new(" 〉 ".to_string(), theme.breadcrumbs.text.clone()).boxed() })) - .scrollable::(1, None, cx) + .scrollable::(0, None, cx) .contained() .with_style(theme.breadcrumbs.container) .aligned() diff --git a/crates/collab/src/integration_tests.rs b/crates/collab/src/integration_tests.rs index 90d7b6d4b582f7254ba80a132c8fea530ad479dd..debd2d56bed74e6f536103c198cd6242151d21db 100644 --- a/crates/collab/src/integration_tests.rs +++ b/crates/collab/src/integration_tests.rs @@ -15,7 +15,7 @@ use editor::{ self, ConfirmCodeAction, ConfirmCompletion, ConfirmRename, Editor, Redo, Rename, ToOffset, ToggleCodeActions, Undo, }; -use fs::{FakeFs, Fs as _, LineEnding}; +use fs::{FakeFs, Fs as _, HomeDir, LineEnding}; use futures::{channel::mpsc, Future, StreamExt as _}; use gpui::{ executor::{self, Deterministic}, @@ -3038,7 +3038,7 @@ async fn test_references(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { assert_eq!(references[1].buffer, references[0].buffer); assert_eq!( three_buffer.file().unwrap().full_path(cx), - Path::new("three.rs") + Path::new("/OUTSIDE_PROJECT/three.rs") ); assert_eq!(references[0].range.to_offset(two_buffer), 24..27); @@ -6130,6 +6130,8 @@ impl TestServer { async fn create_client(&mut self, cx: &mut TestAppContext, name: &str) -> TestClient { cx.update(|cx| { + cx.set_global(HomeDir(Path::new("/tmp/").to_path_buf())); + let mut settings = Settings::test(cx); settings.projects_online_by_default = false; cx.set_global(settings); diff --git a/crates/fs/src/fs.rs b/crates/fs/src/fs.rs index c1ea6feee525d7b1576da551ea1ba178eabca8c8..7bd7346b4b30ef2e1a99707e194e575f6cbc2f47 100644 --- a/crates/fs/src/fs.rs +++ b/crates/fs/src/fs.rs @@ -13,6 +13,7 @@ use smol::io::{AsyncReadExt, AsyncWriteExt}; use std::borrow::Cow; use std::cmp; use std::io::Write; +use std::ops::Deref; use std::sync::Arc; use std::{ io, @@ -95,6 +96,14 @@ impl LineEnding { pub struct HomeDir(pub PathBuf); +impl Deref for HomeDir { + type Target = PathBuf; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + #[async_trait::async_trait] pub trait Fs: Send + Sync { async fn create_dir(&self, path: &Path) -> Result<()>; diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index f964726c4ceb3e250bd662acca72ecd90d2710dc..f05b7e6728a3273f77705daa69a28941e7d198c1 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -583,7 +583,10 @@ impl Project { cx: &mut gpui::TestAppContext, ) -> ModelHandle { if !cx.read(|cx| cx.has_global::()) { - cx.update(|cx| cx.set_global(Settings::test(cx))); + cx.update(|cx| { + cx.set_global(Settings::test(cx)); + cx.set_global(HomeDir(Path::new("/tmp/").to_path_buf())) + }); } let languages = Arc::new(LanguageRegistry::test()); diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 333511ee46e796c095a6b3f503161310cf2eb370..c58fcd463867db0e057313d3a00757c75a01f4da 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -1840,23 +1840,27 @@ impl language::File for File { fn full_path(&self, cx: &AppContext) -> PathBuf { let mut full_path = PathBuf::new(); let worktree = self.worktree.read(cx); + if worktree.is_visible() { full_path.push(worktree.root_name()); } else { if let Some(path) = worktree.as_local().map(|local| local.abs_path.clone()) { - if let Ok(trimmed_path) = path.strip_prefix(cx.global::().0.as_path()) { + if let Ok(trimmed_path) = path.strip_prefix(cx.global::().as_path()) { full_path.push("~"); full_path.push(trimmed_path); } else { full_path.push(path) } } else { - full_path.push(Path::new("/host-filesystem/")) + full_path.push(Path::new("/OUTSIDE_PROJECT")); + full_path.push(worktree.root_name()); } } + if self.path.components().next().is_some() { full_path.push(&self.path); } + full_path } diff --git a/crates/terminal/src/terminal_view.rs b/crates/terminal/src/terminal_view.rs index 732c0a717edddab1d42532252692aa57c814477c..5ca5eb6dceab57c52076609128775e53b364908e 100644 --- a/crates/terminal/src/terminal_view.rs +++ b/crates/terminal/src/terminal_view.rs @@ -38,18 +38,7 @@ pub struct SendKeystroke(String); actions!( terminal, - [ - Up, - Down, - CtrlC, - Escape, - Enter, - Clear, - Copy, - Paste, - ShowCharacterPalette, - SearchTest - ] + [Clear, Copy, Paste, ShowCharacterPalette, SearchTest] ); impl_actions!(terminal, [SendText, SendKeystroke]); From 5bb2edca8b2b88749043db4c28d973405da17af7 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 17 Oct 2022 15:27:46 -0700 Subject: [PATCH 11/38] Added absolute path info to remote worktrees (updated protocol version) --- crates/call/src/room.rs | 3 ++- crates/collab/src/integration_tests.rs | 2 +- crates/collab/src/rpc.rs | 3 +++ crates/collab/src/rpc/store.rs | 1 + crates/project/src/project_tests.rs | 1 + crates/project/src/worktree.rs | 36 ++++++++++++++++---------- crates/rpc/proto/zed.proto | 2 ++ crates/rpc/src/proto.rs | 1 + crates/rpc/src/rpc.rs | 2 +- 9 files changed, 35 insertions(+), 16 deletions(-) diff --git a/crates/call/src/room.rs b/crates/call/src/room.rs index 09b49716e03b69c178ad8b19b5eb8a8fcd72bacd..b2e79f820d3109589a38a1d7baf0ec64bcdce027 100644 --- a/crates/call/src/room.rs +++ b/crates/call/src/room.rs @@ -8,7 +8,7 @@ use collections::{BTreeMap, HashSet}; use futures::StreamExt; use gpui::{AsyncAppContext, Entity, ModelContext, ModelHandle, MutableAppContext, Task}; use project::Project; -use std::sync::Arc; +use std::{os::unix::prelude::OsStrExt, sync::Arc}; use util::ResultExt; #[derive(Clone, Debug, PartialEq, Eq)] @@ -389,6 +389,7 @@ impl Room { id: worktree.id().to_proto(), root_name: worktree.root_name().into(), visible: worktree.is_visible(), + abs_path: worktree.abs_path().as_os_str().as_bytes().to_vec(), } }) .collect(), diff --git a/crates/collab/src/integration_tests.rs b/crates/collab/src/integration_tests.rs index debd2d56bed74e6f536103c198cd6242151d21db..e715a995a7c9ce4d331eb4bc9a1e237eead0fa56 100644 --- a/crates/collab/src/integration_tests.rs +++ b/crates/collab/src/integration_tests.rs @@ -3038,7 +3038,7 @@ async fn test_references(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { assert_eq!(references[1].buffer, references[0].buffer); assert_eq!( three_buffer.file().unwrap().full_path(cx), - Path::new("/OUTSIDE_PROJECT/three.rs") + Path::new("/root/dir-2/three.rs") ); assert_eq!(references[0].range.to_offset(two_buffer), 24..27); diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 564e173fec3430ab27f7d52d2b9e90960cdb76d7..bb8d7c2325680682eed81b2b119f76c5ba2d4119 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -42,6 +42,7 @@ use std::{ marker::PhantomData, net::SocketAddr, ops::{Deref, DerefMut}, + os::unix::prelude::OsStrExt, rc::Rc, sync::{ atomic::{AtomicBool, Ordering::SeqCst}, @@ -941,6 +942,7 @@ impl Server { id: *id, root_name: worktree.root_name.clone(), visible: worktree.visible, + abs_path: worktree.abs_path.as_os_str().as_bytes().to_vec(), }) .collect::>(); @@ -989,6 +991,7 @@ impl Server { let message = proto::UpdateWorktree { project_id: project_id.to_proto(), worktree_id: *worktree_id, + abs_path: worktree.abs_path.as_os_str().as_bytes().to_vec(), root_name: worktree.root_name.clone(), updated_entries: worktree.entries.values().cloned().collect(), removed_entries: Default::default(), diff --git a/crates/collab/src/rpc/store.rs b/crates/collab/src/rpc/store.rs index b7dd39cff17528172086faa385c9972858d1f874..fb21538d60b8f1c45ebfb3cdc4ca206c1b715f47 100644 --- a/crates/collab/src/rpc/store.rs +++ b/crates/collab/src/rpc/store.rs @@ -66,6 +66,7 @@ pub struct Collaborator { #[derive(Default, Serialize)] pub struct Worktree { + pub abs_path: PathBuf, pub root_name: String, pub visible: bool, #[serde(skip)] diff --git a/crates/project/src/project_tests.rs b/crates/project/src/project_tests.rs index 1b0294c4d12ed83ab2586a5ffd5ee3f53089faa0..a9ac5f4411469e6466ded12b6762526dbc783658 100644 --- a/crates/project/src/project_tests.rs +++ b/crates/project/src/project_tests.rs @@ -2164,6 +2164,7 @@ async fn test_rescan_and_remote_updates( proto::WorktreeMetadata { id: initial_snapshot.id().to_proto(), root_name: initial_snapshot.root_name().into(), + abs_path: initial_snapshot.abs_path().as_os_str().as_bytes().to_vec(), visible: true, }, rpc.clone(), diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index c58fcd463867db0e057313d3a00757c75a01f4da..9f0ebe32f7a10af0e1b547fd4ae0e51ce2d78134 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -87,6 +87,7 @@ pub struct RemoteWorktree { #[derive(Clone)] pub struct Snapshot { id: WorktreeId, + abs_path: Arc, root_name: String, root_char_bag: CharBag, entries_by_path: SumTree, @@ -118,7 +119,6 @@ impl std::fmt::Debug for GitRepositoryEntry { } pub struct LocalSnapshot { - abs_path: Arc, ignores_by_parent_abs_path: HashMap, (Arc, usize)>, git_repositories: Vec, removed_entry_ids: HashMap, @@ -130,7 +130,6 @@ pub struct LocalSnapshot { impl Clone for LocalSnapshot { fn clone(&self) -> Self { Self { - abs_path: self.abs_path.clone(), ignores_by_parent_abs_path: self.ignores_by_parent_abs_path.clone(), git_repositories: self.git_repositories.iter().cloned().collect(), removed_entry_ids: self.removed_entry_ids.clone(), @@ -221,8 +220,11 @@ impl Worktree { .collect(); let root_name = worktree.root_name.clone(); let visible = worktree.visible; + + let abs_path = PathBuf::from(OsString::from_vec(worktree.abs_path)); let snapshot = Snapshot { id: WorktreeId(remote_id as usize), + abs_path: Arc::from(abs_path.deref()), root_name, root_char_bag, entries_by_path: Default::default(), @@ -372,6 +374,13 @@ impl Worktree { Self::Remote(worktree) => worktree.poll_snapshot(cx), }; } + + pub fn abs_path(&self) -> Arc { + match self { + Worktree::Local(worktree) => worktree.abs_path.clone(), + Worktree::Remote(worktree) => worktree.abs_path.clone(), + } + } } impl LocalWorktree { @@ -402,13 +411,13 @@ impl LocalWorktree { watch::channel_with(ScanState::Initializing); let tree = cx.add_model(move |cx: &mut ModelContext| { let mut snapshot = LocalSnapshot { - abs_path, ignores_by_parent_abs_path: Default::default(), git_repositories: Default::default(), removed_entry_ids: Default::default(), next_entry_id, snapshot: Snapshot { id: WorktreeId::from_usize(cx.model_id()), + abs_path, root_name: root_name.clone(), root_char_bag, entries_by_path: Default::default(), @@ -647,6 +656,7 @@ impl LocalWorktree { id: self.id().to_proto(), root_name: self.root_name().to_string(), visible: self.visible, + abs_path: self.abs_path().as_os_str().as_bytes().to_vec(), } } @@ -980,6 +990,7 @@ impl LocalWorktree { let update = proto::UpdateWorktree { project_id, worktree_id, + abs_path: snapshot.abs_path().as_os_str().as_bytes().to_vec(), root_name: snapshot.root_name().to_string(), updated_entries: snapshot .entries_by_path @@ -1389,6 +1400,7 @@ impl LocalSnapshot { proto::UpdateWorktree { project_id, worktree_id: self.id().to_proto(), + abs_path: self.abs_path().as_os_str().as_bytes().to_vec(), root_name, updated_entries: self.entries_by_path.iter().map(Into::into).collect(), removed_entries: Default::default(), @@ -1456,6 +1468,7 @@ impl LocalSnapshot { proto::UpdateWorktree { project_id, worktree_id, + abs_path: self.abs_path().as_os_str().as_bytes().to_vec(), root_name: self.root_name().to_string(), updated_entries, removed_entries, @@ -1844,16 +1857,13 @@ impl language::File for File { if worktree.is_visible() { full_path.push(worktree.root_name()); } else { - if let Some(path) = worktree.as_local().map(|local| local.abs_path.clone()) { - if let Ok(trimmed_path) = path.strip_prefix(cx.global::().as_path()) { - full_path.push("~"); - full_path.push(trimmed_path); - } else { - full_path.push(path) - } + let path = worktree.abs_path(); + + if worktree.is_local() && path.starts_with(cx.global::().as_path()) { + full_path.push("~"); + full_path.push(path.strip_prefix(cx.global::().as_path()).unwrap()); } else { - full_path.push(Path::new("/OUTSIDE_PROJECT")); - full_path.push(worktree.root_name()); + full_path.push(path) } } @@ -3473,7 +3483,6 @@ mod tests { let fs = Arc::new(RealFs); let next_entry_id = Arc::new(AtomicUsize::new(0)); let mut initial_snapshot = LocalSnapshot { - abs_path: root_dir.path().into(), removed_entry_ids: Default::default(), ignores_by_parent_abs_path: Default::default(), git_repositories: Default::default(), @@ -3482,6 +3491,7 @@ mod tests { id: WorktreeId::from_usize(0), entries_by_path: Default::default(), entries_by_id: Default::default(), + abs_path: root_dir.path().into(), root_name: Default::default(), root_char_bag: Default::default(), scan_id: 0, diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index 1248bb05519788a2d4ac1f198161afae3733a6ab..1f4c067fca7b8ce1745419244cae7dd607e4c82e 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -266,6 +266,7 @@ message UpdateWorktree { repeated uint64 removed_entries = 5; uint64 scan_id = 6; bool is_last_update = 7; + bytes abs_path = 8; } message UpdateWorktreeExtensions { @@ -1052,6 +1053,7 @@ message WorktreeMetadata { uint64 id = 1; string root_name = 2; bool visible = 3; + bytes abs_path = 4; } message UpdateDiffBase { diff --git a/crates/rpc/src/proto.rs b/crates/rpc/src/proto.rs index 069fde4e59638d25673b6c517c6e9b7c776d8a38..827a8ff1a8530342fe887dbe1b6ace85d960ed50 100644 --- a/crates/rpc/src/proto.rs +++ b/crates/rpc/src/proto.rs @@ -435,6 +435,7 @@ pub fn split_worktree_update( project_id: message.project_id, worktree_id: message.worktree_id, root_name: message.root_name.clone(), + abs_path: message.abs_path.clone(), updated_entries, removed_entries: mem::take(&mut message.removed_entries), scan_id: message.scan_id, diff --git a/crates/rpc/src/rpc.rs b/crates/rpc/src/rpc.rs index 5fb9ca79a2c51e7930eb88bdb96d2c949eb3a5f0..558f52e684e36f8582c8b12d1dee9b3781197d6e 100644 --- a/crates/rpc/src/rpc.rs +++ b/crates/rpc/src/rpc.rs @@ -6,4 +6,4 @@ pub use conn::Connection; pub use peer::*; mod macros; -pub const PROTOCOL_VERSION: u32 = 35; +pub const PROTOCOL_VERSION: u32 = 37; From 93a30ea9403e76defa2331b15894701bd9d72bde Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 17 Oct 2022 15:29:51 -0700 Subject: [PATCH 12/38] Removed breadcrumb scrollable --- crates/breadcrumbs/src/breadcrumbs.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/breadcrumbs/src/breadcrumbs.rs b/crates/breadcrumbs/src/breadcrumbs.rs index a95f1cf4f750af4e945d37af80530fe19fac73ff..85f0509caf6f7f73e84312454a321d94d139edcd 100644 --- a/crates/breadcrumbs/src/breadcrumbs.rs +++ b/crates/breadcrumbs/src/breadcrumbs.rs @@ -42,12 +42,10 @@ impl View for Breadcrumbs { .as_ref() .and_then(|item| item.breadcrumbs(&theme, cx)) { - enum BreadcrumbTag {} Flex::row() .with_children(Itertools::intersperse_with(breadcrumbs.into_iter(), || { Label::new(" 〉 ".to_string(), theme.breadcrumbs.text.clone()).boxed() })) - .scrollable::(0, None, cx) .contained() .with_style(theme.breadcrumbs.container) .aligned() From 40c3e925ad5bc8b23a3c320cdc8312f5e2b989d1 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Sat, 15 Oct 2022 15:08:21 -0700 Subject: [PATCH 13/38] Add cursor blink setting and replicate cursor shape to remote collaborators --- Cargo.lock | 1 + assets/settings/default.json | 2 + crates/editor/src/editor.rs | 24 +++++++--- crates/editor/src/element.rs | 60 ++++++++++--------------- crates/editor/src/items.rs | 1 + crates/editor/src/multi_buffer.rs | 10 +++-- crates/language/src/buffer.rs | 21 ++++++++- crates/language/src/buffer_tests.rs | 4 +- crates/language/src/proto.rs | 27 ++++++++++- crates/rpc/proto/zed.proto | 9 ++++ crates/settings/src/settings.rs | 7 +++ crates/terminal/Cargo.toml | 13 +++--- crates/terminal/src/terminal_element.rs | 3 +- crates/vim/src/state.rs | 2 +- crates/vim/src/vim.rs | 3 +- 15 files changed, 126 insertions(+), 61 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1a399ad4ad62342071c598126fc3ec9e01d94dff..188113a66d4772eb94afb9ad040c5b99334a0cb4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5828,6 +5828,7 @@ dependencies = [ "futures 0.3.24", "gpui", "itertools", + "language", "lazy_static", "libc", "mio-extras", diff --git a/assets/settings/default.json b/assets/settings/default.json index 2ccd2c5f973b4578d62b1639c643c75d020f5a60..57f76f5f21904af012cbfcaa73cb0b4d78fb5db5 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -69,6 +69,8 @@ // The column at which to soft-wrap lines, for buffers where soft-wrap // is enabled. "preferred_line_length": 80, + // Whether the cursor blinks in the editor. + "cursor_blink": true, // Whether to indent lines using tab characters, as opposed to multiple // spaces. "hard_tabs": false, diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 070fc69f7ebcfe1d974b2db2bccf5d45c19af200..901547db2e4e31dc3d95992a1c9171a8d85dc30f 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -42,9 +42,9 @@ use hover_popover::{hide_hover, HoverState}; pub use items::MAX_TAB_TITLE_LEN; pub use language::{char_kind, CharKind}; use language::{ - AutoindentMode, BracketPair, Buffer, CodeAction, CodeLabel, Completion, Diagnostic, - DiagnosticSeverity, IndentKind, IndentSize, Language, OffsetRangeExt, OffsetUtf16, Point, - Selection, SelectionGoal, TransactionId, + AutoindentMode, BracketPair, Buffer, CodeAction, CodeLabel, Completion, CursorShape, + Diagnostic, DiagnosticSeverity, IndentKind, IndentSize, Language, OffsetRangeExt, OffsetUtf16, + Point, Selection, SelectionGoal, TransactionId, }; use link_go_to_definition::{hide_link_definition, LinkGoToDefinitionState}; pub use multi_buffer::{ @@ -1478,6 +1478,7 @@ impl Editor { buffer.set_active_selections( &self.selections.disjoint_anchors(), self.selections.line_mode, + self.cursor_shape, cx, ) }); @@ -6145,7 +6146,17 @@ impl Editor { fn blink_cursors(&mut self, epoch: usize, cx: &mut ViewContext) { if epoch == self.blink_epoch && self.focused && !self.blinking_paused { - self.show_local_cursors = !self.show_local_cursors; + let newest_head = self.selections.newest::(cx).head(); + let language_name = self + .buffer + .read(cx) + .language_at(newest_head, cx) + .map(|l| l.name()); + + self.show_local_cursors = !self.show_local_cursors + || !cx + .global::() + .cursor_blink(language_name.as_deref()); cx.notify(); let epoch = self.next_blink_epoch(); @@ -6466,9 +6477,7 @@ impl View for Editor { } Stack::new() - .with_child( - EditorElement::new(self.handle.clone(), style.clone(), self.cursor_shape).boxed(), - ) + .with_child(EditorElement::new(self.handle.clone(), style.clone()).boxed()) .with_child(ChildView::new(&self.mouse_context_menu, cx).boxed()) .boxed() } @@ -6491,6 +6500,7 @@ impl View for Editor { buffer.set_active_selections( &self.selections.disjoint_anchors(), self.selections.line_mode, + self.cursor_shape, cx, ); } diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 3e68c6766f92d57c33eac323f84ae32c182dfb34..d2090741d803ed316e5325987828df0a4b291ca4 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -35,7 +35,7 @@ use gpui::{ WeakViewHandle, }; use json::json; -use language::{Bias, DiagnosticSeverity, OffsetUtf16, Point, Selection}; +use language::{Bias, CursorShape, DiagnosticSeverity, OffsetUtf16, Point, Selection}; use project::ProjectPath; use settings::{GitGutter, Settings}; use smallvec::SmallVec; @@ -56,6 +56,7 @@ struct DiffHunkLayout { struct SelectionLayout { head: DisplayPoint, + cursor_shape: CursorShape, range: Range, } @@ -63,6 +64,7 @@ impl SelectionLayout { fn new( selection: Selection, line_mode: bool, + cursor_shape: CursorShape, map: &DisplaySnapshot, ) -> Self { if line_mode { @@ -70,6 +72,7 @@ impl SelectionLayout { let point_range = map.expand_to_line(selection.range()); Self { head: selection.head().to_display_point(map), + cursor_shape, range: point_range.start.to_display_point(map) ..point_range.end.to_display_point(map), } @@ -77,6 +80,7 @@ impl SelectionLayout { let selection = selection.map(|p| p.to_display_point(map)); Self { head: selection.head(), + cursor_shape, range: selection.range(), } } @@ -87,19 +91,13 @@ impl SelectionLayout { pub struct EditorElement { view: WeakViewHandle, style: Arc, - cursor_shape: CursorShape, } impl EditorElement { - pub fn new( - view: WeakViewHandle, - style: EditorStyle, - cursor_shape: CursorShape, - ) -> Self { + pub fn new(view: WeakViewHandle, style: EditorStyle) -> Self { Self { view, style: Arc::new(style), - cursor_shape, } } @@ -723,7 +721,7 @@ impl EditorElement { if block_width == 0.0 { block_width = layout.position_map.em_width; } - let block_text = if let CursorShape::Block = self.cursor_shape { + let block_text = if let CursorShape::Block = selection.cursor_shape { layout .position_map .snapshot @@ -759,7 +757,7 @@ impl EditorElement { block_width, origin: vec2f(x, y), line_height: layout.position_map.line_height, - shape: self.cursor_shape, + shape: selection.cursor_shape, block_text, }); } @@ -1648,7 +1646,7 @@ impl Element for EditorElement { ); let mut remote_selections = HashMap::default(); - for (replica_id, line_mode, selection) in display_map + for (replica_id, line_mode, cursor_shape, selection) in display_map .buffer_snapshot .remote_selections_in_range(&(start_anchor.clone()..end_anchor.clone())) { @@ -1659,7 +1657,12 @@ impl Element for EditorElement { remote_selections .entry(replica_id) .or_insert(Vec::new()) - .push(SelectionLayout::new(selection, line_mode, &display_map)); + .push(SelectionLayout::new( + selection, + line_mode, + cursor_shape, + &display_map, + )); } selections.extend(remote_selections); @@ -1691,7 +1694,12 @@ impl Element for EditorElement { local_selections .into_iter() .map(|selection| { - SelectionLayout::new(selection, view.selections.line_mode, &display_map) + SelectionLayout::new( + selection, + view.selections.line_mode, + view.cursor_shape, + &display_map, + ) }) .collect(), )); @@ -2094,20 +2102,6 @@ fn layout_line( ) } -#[derive(Copy, Clone, PartialEq, Eq, Debug)] -pub enum CursorShape { - Bar, - Block, - Underscore, - Hollow, -} - -impl Default for CursorShape { - fn default() -> Self { - CursorShape::Bar - } -} - #[derive(Debug)] pub struct Cursor { origin: Vector2F, @@ -2348,11 +2342,7 @@ mod tests { let (window_id, editor) = cx.add_window(Default::default(), |cx| { Editor::new(EditorMode::Full, buffer, None, None, cx) }); - let element = EditorElement::new( - editor.downgrade(), - editor.read(cx).style(cx), - CursorShape::Bar, - ); + let element = EditorElement::new(editor.downgrade(), editor.read(cx).style(cx)); let layouts = editor.update(cx, |editor, cx| { let snapshot = editor.snapshot(cx); @@ -2388,11 +2378,7 @@ mod tests { cx.blur(); }); - let mut element = EditorElement::new( - editor.downgrade(), - editor.read(cx).style(cx), - CursorShape::Bar, - ); + let mut element = EditorElement::new(editor.downgrade(), editor.read(cx).style(cx)); let mut scene = Scene::new(1.0); let mut presenter = cx.build_presenter(window_id, 30., Default::default()); diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index e6a4eebffb0cb3587761855028411182fe7aac25..cf69d2a9228637296d536b3e3e76c87187c9fbdf 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -120,6 +120,7 @@ impl FollowableItem for Editor { buffer.set_active_selections( &self.selections.disjoint_anchors(), self.selections.line_mode, + self.cursor_shape, cx, ); } diff --git a/crates/editor/src/multi_buffer.rs b/crates/editor/src/multi_buffer.rs index 448564ed9808e40fcf9e2fa515a881308ce4937f..1cff0038686f88c27816124d850eece8427ae864 100644 --- a/crates/editor/src/multi_buffer.rs +++ b/crates/editor/src/multi_buffer.rs @@ -8,7 +8,7 @@ use git::diff::DiffHunk; use gpui::{AppContext, Entity, ModelContext, ModelHandle, Task}; pub use language::Completion; use language::{ - char_kind, AutoindentMode, Buffer, BufferChunks, BufferSnapshot, CharKind, Chunk, + char_kind, AutoindentMode, Buffer, BufferChunks, BufferSnapshot, CharKind, Chunk, CursorShape, DiagnosticEntry, Event, File, IndentSize, Language, OffsetRangeExt, OffsetUtf16, Outline, OutlineItem, Point, PointUtf16, Selection, TextDimension, ToOffset as _, ToOffsetUtf16 as _, ToPoint as _, ToPointUtf16 as _, TransactionId, @@ -604,6 +604,7 @@ impl MultiBuffer { &mut self, selections: &[Selection], line_mode: bool, + cursor_shape: CursorShape, cx: &mut ModelContext, ) { let mut selections_by_buffer: HashMap>> = @@ -668,7 +669,7 @@ impl MultiBuffer { } Some(selection) })); - buffer.set_active_selections(merged_selections, line_mode, cx); + buffer.set_active_selections(merged_selections, line_mode, cursor_shape, cx); }); } } @@ -2698,7 +2699,7 @@ impl MultiBufferSnapshot { pub fn remote_selections_in_range<'a>( &'a self, range: &'a Range, - ) -> impl 'a + Iterator)> { + ) -> impl 'a + Iterator)> { let mut cursor = self.excerpts.cursor::>(); cursor.seek(&Some(&range.start.excerpt_id), Bias::Left, &()); cursor @@ -2715,7 +2716,7 @@ impl MultiBufferSnapshot { excerpt .buffer .remote_selections_in_range(query_range) - .flat_map(move |(replica_id, line_mode, selections)| { + .flat_map(move |(replica_id, line_mode, cursor_shape, selections)| { selections.map(move |selection| { let mut start = Anchor { buffer_id: Some(excerpt.buffer_id), @@ -2737,6 +2738,7 @@ impl MultiBufferSnapshot { ( replica_id, line_mode, + cursor_shape, Selection { id: selection.id, start, diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 274777b81cbf5531288f81e03523f515b53a0eda..da7bd5332487f8fc07c68bdf42e9b6ba547ec7a4 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -111,9 +111,19 @@ pub enum IndentKind { Tab, } +#[derive(Copy, Clone, PartialEq, Eq, Debug, Default)] +pub enum CursorShape { + #[default] + Bar, + Block, + Underscore, + Hollow, +} + #[derive(Clone, Debug)] struct SelectionSet { line_mode: bool, + cursor_shape: CursorShape, selections: Arc<[Selection]>, lamport_timestamp: clock::Lamport, } @@ -161,6 +171,7 @@ pub enum Operation { selections: Arc<[Selection]>, lamport_timestamp: clock::Lamport, line_mode: bool, + cursor_shape: CursorShape, }, UpdateCompletionTriggers { triggers: Vec, @@ -395,6 +406,7 @@ impl Buffer { selections: set.selections.clone(), lamport_timestamp: set.lamport_timestamp, line_mode: set.line_mode, + cursor_shape: set.cursor_shape, }) })); operations.push(proto::serialize_operation(&Operation::UpdateDiagnostics { @@ -1227,6 +1239,7 @@ impl Buffer { &mut self, selections: Arc<[Selection]>, line_mode: bool, + cursor_shape: CursorShape, cx: &mut ModelContext, ) { let lamport_timestamp = self.text.lamport_clock.tick(); @@ -1236,6 +1249,7 @@ impl Buffer { selections: selections.clone(), lamport_timestamp, line_mode, + cursor_shape, }, ); self.send_operation( @@ -1243,13 +1257,14 @@ impl Buffer { selections, line_mode, lamport_timestamp, + cursor_shape, }, cx, ); } pub fn remove_active_selections(&mut self, cx: &mut ModelContext) { - self.set_active_selections(Arc::from([]), false, cx); + self.set_active_selections(Arc::from([]), false, Default::default(), cx); } pub fn set_text(&mut self, text: T, cx: &mut ModelContext) -> Option @@ -1474,6 +1489,7 @@ impl Buffer { selections, lamport_timestamp, line_mode, + cursor_shape, } => { if let Some(set) = self.remote_selections.get(&lamport_timestamp.replica_id) { if set.lamport_timestamp > lamport_timestamp { @@ -1487,6 +1503,7 @@ impl Buffer { selections, lamport_timestamp, line_mode, + cursor_shape, }, ); self.text.lamport_clock.observe(lamport_timestamp); @@ -2236,6 +2253,7 @@ impl BufferSnapshot { Item = ( ReplicaId, bool, + CursorShape, impl Iterator> + '_, ), > + '_ { @@ -2259,6 +2277,7 @@ impl BufferSnapshot { ( *replica_id, set.line_mode, + set.cursor_shape, set.selections[start_ix..end_ix].iter(), ) }) diff --git a/crates/language/src/buffer_tests.rs b/crates/language/src/buffer_tests.rs index 0f3ab50f4adf2daae6828479cf4cd5879615fddb..f1b51f7e021368d93a99f9addd9d223a7e3934ab 100644 --- a/crates/language/src/buffer_tests.rs +++ b/crates/language/src/buffer_tests.rs @@ -1283,7 +1283,7 @@ fn test_random_collaboration(cx: &mut MutableAppContext, mut rng: StdRng) { selections ); active_selections.insert(replica_id, selections.clone()); - buffer.set_active_selections(selections, false, cx); + buffer.set_active_selections(selections, false, Default::default(), cx); }); mutation_count -= 1; } @@ -1448,7 +1448,7 @@ fn test_random_collaboration(cx: &mut MutableAppContext, mut rng: StdRng) { let buffer = buffer.read(cx).snapshot(); let actual_remote_selections = buffer .remote_selections_in_range(Anchor::MIN..Anchor::MAX) - .map(|(replica_id, _, selections)| (replica_id, selections.collect::>())) + .map(|(replica_id, _, _, selections)| (replica_id, selections.collect::>())) .collect::>(); let expected_remote_selections = active_selections .iter() diff --git a/crates/language/src/proto.rs b/crates/language/src/proto.rs index 9e3ee7d46b17790cb0af121dade9edea27eb301f..f93d99f76b02a86a0267d2355a7c85cccda60b70 100644 --- a/crates/language/src/proto.rs +++ b/crates/language/src/proto.rs @@ -1,5 +1,6 @@ use crate::{ - diagnostic_set::DiagnosticEntry, CodeAction, CodeLabel, Completion, Diagnostic, Language, + diagnostic_set::DiagnosticEntry, CodeAction, CodeLabel, Completion, CursorShape, Diagnostic, + Language, }; use anyhow::{anyhow, Result}; use clock::ReplicaId; @@ -52,11 +53,13 @@ pub fn serialize_operation(operation: &crate::Operation) -> proto::Operation { selections, line_mode, lamport_timestamp, + cursor_shape, } => proto::operation::Variant::UpdateSelections(proto::operation::UpdateSelections { replica_id: lamport_timestamp.replica_id as u32, lamport_timestamp: lamport_timestamp.value, selections: serialize_selections(selections), line_mode: *line_mode, + cursor_shape: serialize_cursor_shape(cursor_shape) as i32, }), crate::Operation::UpdateDiagnostics { diagnostics, @@ -125,6 +128,24 @@ pub fn serialize_selection(selection: &Selection) -> proto::Selection { } } +pub fn serialize_cursor_shape(cursor_shape: &CursorShape) -> proto::CursorShape { + match cursor_shape { + CursorShape::Bar => proto::CursorShape::CursorBar, + CursorShape::Block => proto::CursorShape::CursorBlock, + CursorShape::Underscore => proto::CursorShape::CursorUnderscore, + CursorShape::Hollow => proto::CursorShape::CursorHollow, + } +} + +pub fn deserialize_cursor_shape(cursor_shape: proto::CursorShape) -> CursorShape { + match cursor_shape { + proto::CursorShape::CursorBar => CursorShape::Bar, + proto::CursorShape::CursorBlock => CursorShape::Block, + proto::CursorShape::CursorUnderscore => CursorShape::Underscore, + proto::CursorShape::CursorHollow => CursorShape::Hollow, + } +} + pub fn serialize_diagnostics<'a>( diagnostics: impl IntoIterator>, ) -> Vec { @@ -223,6 +244,10 @@ pub fn deserialize_operation(message: proto::Operation) -> Result { diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index 1248bb05519788a2d4ac1f198161afae3733a6ab..380b83ae8d3c8a09db3296b086a81e5a5b48c7e5 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -908,6 +908,7 @@ message SelectionSet { repeated Selection selections = 2; uint32 lamport_timestamp = 3; bool line_mode = 4; + CursorShape cursor_shape = 5; } message Selection { @@ -917,6 +918,13 @@ message Selection { bool reversed = 4; } +enum CursorShape { + CursorBar = 0; + CursorBlock = 1; + CursorUnderscore = 2; + CursorHollow = 3; +} + message Anchor { uint32 replica_id = 1; uint32 local_timestamp = 2; @@ -982,6 +990,7 @@ message Operation { uint32 lamport_timestamp = 2; repeated Selection selections = 3; bool line_mode = 4; + CursorShape cursor_shape = 5; } message UpdateCompletionTriggers { diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 63bc5962fa0bba24e6cc0875793f96643f17cfe4..f079ae86707fc17fca4e54d7503d5bb0cc2681d5 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -79,6 +79,7 @@ pub struct GitGutterConfig {} pub struct EditorSettings { pub tab_size: Option, pub hard_tabs: Option, + pub cursor_blink: Option, pub soft_wrap: Option, pub preferred_line_length: Option, pub format_on_save: Option, @@ -301,6 +302,7 @@ impl Settings { editor_defaults: EditorSettings { tab_size: required(defaults.editor.tab_size), hard_tabs: required(defaults.editor.hard_tabs), + cursor_blink: required(defaults.editor.cursor_blink), soft_wrap: required(defaults.editor.soft_wrap), preferred_line_length: required(defaults.editor.preferred_line_length), format_on_save: required(defaults.editor.format_on_save), @@ -390,6 +392,10 @@ impl Settings { self.language_setting(language, |settings| settings.hard_tabs) } + pub fn cursor_blink(&self, language: Option<&str>) -> bool { + self.language_setting(language, |settings| settings.cursor_blink) + } + pub fn soft_wrap(&self, language: Option<&str>) -> SoftWrap { self.language_setting(language, |settings| settings.soft_wrap) } @@ -444,6 +450,7 @@ impl Settings { editor_defaults: EditorSettings { tab_size: Some(4.try_into().unwrap()), hard_tabs: Some(false), + cursor_blink: Some(true), soft_wrap: Some(SoftWrap::None), preferred_line_length: Some(80), format_on_save: Some(FormatOnSave::On), diff --git a/crates/terminal/Cargo.toml b/crates/terminal/Cargo.toml index a0b5231501228d699631e4146b2acb3051656903..efd6a739679178fd54d55f6e840df53d8f5a3165 100644 --- a/crates/terminal/Cargo.toml +++ b/crates/terminal/Cargo.toml @@ -8,16 +8,17 @@ path = "src/terminal.rs" doctest = false [dependencies] -alacritty_terminal = { git = "https://github.com/zed-industries/alacritty", rev = "a51dbe25d67e84d6ed4261e640d3954fbdd9be45" } -procinfo = { git = "https://github.com/zed-industries/wezterm", rev = "5cd757e5f2eb039ed0c6bb6512223e69d5efc64d", default-features = false } +context_menu = { path = "../context_menu" } editor = { path = "../editor" } -util = { path = "../util" } +language = { path = "../language" } gpui = { path = "../gpui" } -theme = { path = "../theme" } +project = { path = "../project" } settings = { path = "../settings" } +theme = { path = "../theme" } +util = { path = "../util" } workspace = { path = "../workspace" } -project = { path = "../project" } -context_menu = { path = "../context_menu" } +alacritty_terminal = { git = "https://github.com/zed-industries/alacritty", rev = "a51dbe25d67e84d6ed4261e640d3954fbdd9be45" } +procinfo = { git = "https://github.com/zed-industries/wezterm", rev = "5cd757e5f2eb039ed0c6bb6512223e69d5efc64d", default-features = false } smallvec = { version = "1.6", features = ["union"] } smol = "1.2.5" mio-extras = "2.0.6" diff --git a/crates/terminal/src/terminal_element.rs b/crates/terminal/src/terminal_element.rs index df745dae464459f0d53439b264e91036353a7f44..823d99c801b7e6ed1d4f0808d11655fd8714a125 100644 --- a/crates/terminal/src/terminal_element.rs +++ b/crates/terminal/src/terminal_element.rs @@ -4,7 +4,7 @@ use alacritty_terminal::{ index::Point, term::{cell::Flags, TermMode}, }; -use editor::{Cursor, CursorShape, HighlightedRange, HighlightedRangeLine}; +use editor::{Cursor, HighlightedRange, HighlightedRangeLine}; use gpui::{ color::Color, elements::{Empty, Overlay}, @@ -20,6 +20,7 @@ use gpui::{ WeakViewHandle, }; use itertools::Itertools; +use language::CursorShape; use ordered_float::OrderedFloat; use settings::Settings; use theme::TerminalStyle; diff --git a/crates/vim/src/state.rs b/crates/vim/src/state.rs index fef0da209996289ac1ac11171951918fe03ae9ee..b5acb50e7c04e945660187438096aa84be6405dc 100644 --- a/crates/vim/src/state.rs +++ b/crates/vim/src/state.rs @@ -1,5 +1,5 @@ -use editor::CursorShape; use gpui::keymap::Context; +use language::CursorShape; use serde::{Deserialize, Serialize}; #[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize)] diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index 81bafcf3e27f7f850aa89863c1c8f404a3e9b3f8..ce3a7e2366ae8279e877d94bf8e48bdcca6394b2 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -12,8 +12,9 @@ mod visual; use collections::HashMap; use command_palette::CommandPaletteFilter; -use editor::{Bias, Cancel, CursorShape, Editor}; +use editor::{Bias, Cancel, Editor}; use gpui::{impl_actions, MutableAppContext, Subscription, ViewContext, WeakViewHandle}; +use language::CursorShape; use serde::Deserialize; use settings::Settings; From 09a0b3eb55521403c9f4428a77577cbfcab78884 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Sat, 15 Oct 2022 15:10:43 -0700 Subject: [PATCH 14/38] increment protocol version --- crates/rpc/src/rpc.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rpc/src/rpc.rs b/crates/rpc/src/rpc.rs index 5fb9ca79a2c51e7930eb88bdb96d2c949eb3a5f0..89963eb0627f27b39030fc24d7692a97d873209a 100644 --- a/crates/rpc/src/rpc.rs +++ b/crates/rpc/src/rpc.rs @@ -6,4 +6,4 @@ pub use conn::Connection; pub use peer::*; mod macros; -pub const PROTOCOL_VERSION: u32 = 35; +pub const PROTOCOL_VERSION: u32 = 36; From 54cf6fa838b74c94fb9e547b6c3aab2e02448580 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Mon, 17 Oct 2022 16:19:03 -0700 Subject: [PATCH 15/38] Pull blink functionality out of editor and into blink manager. Make blink manager subscribe to settings changes in order to start blinking properly when it is re-enabled. Co-Authored-By: Mikayla Maki --- assets/settings/default.json | 4 +- crates/editor/src/blink_manager.rs | 110 +++++++++++++++++++++++++++++ crates/editor/src/editor.rs | 84 ++++------------------ crates/editor/src/element.rs | 2 +- crates/settings/src/settings.rs | 13 ++-- 5 files changed, 131 insertions(+), 82 deletions(-) create mode 100644 crates/editor/src/blink_manager.rs diff --git a/assets/settings/default.json b/assets/settings/default.json index 57f76f5f21904af012cbfcaa73cb0b4d78fb5db5..51aa108cd98a7bd5d16af5882b4293cca112239c 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -10,6 +10,8 @@ // Whether to show the informational hover box when moving the mouse // over symbols in the editor. "hover_popover_enabled": true, + // Whether the cursor blinks in the editor. + "cursor_blink": true, // Whether to pop the completions menu while typing in an editor without // explicitly requesting it. "show_completions_on_input": true, @@ -69,8 +71,6 @@ // The column at which to soft-wrap lines, for buffers where soft-wrap // is enabled. "preferred_line_length": 80, - // Whether the cursor blinks in the editor. - "cursor_blink": true, // Whether to indent lines using tab characters, as opposed to multiple // spaces. "hard_tabs": false, diff --git a/crates/editor/src/blink_manager.rs b/crates/editor/src/blink_manager.rs new file mode 100644 index 0000000000000000000000000000000000000000..77d10534d29a05d3a68b3f872eccc1184d01899b --- /dev/null +++ b/crates/editor/src/blink_manager.rs @@ -0,0 +1,110 @@ +use std::time::Duration; + +use gpui::{Entity, ModelContext}; +use settings::Settings; +use smol::Timer; + +pub struct BlinkManager { + blink_interval: Duration, + + blink_epoch: usize, + blinking_paused: bool, + visible: bool, + enabled: bool, +} + +impl BlinkManager { + pub fn new(blink_interval: Duration, cx: &mut ModelContext) -> Self { + let weak_handle = cx.weak_handle(); + cx.observe_global::(move |_, cx| { + if let Some(this) = weak_handle.upgrade(cx) { + // Make sure we blink the cursors if the setting is re-enabled + this.update(cx, |this, cx| this.blink_cursors(this.blink_epoch, cx)); + } + }) + .detach(); + + Self { + blink_interval, + + blink_epoch: 0, + blinking_paused: false, + visible: true, + enabled: true, + } + } + + fn next_blink_epoch(&mut self) -> usize { + self.blink_epoch += 1; + self.blink_epoch + } + + pub fn pause_blinking(&mut self, cx: &mut ModelContext) { + if !self.visible { + self.visible = true; + cx.notify(); + } + + let epoch = self.next_blink_epoch(); + let interval = self.blink_interval; + cx.spawn(|this, mut cx| { + let this = this.downgrade(); + async move { + Timer::after(interval).await; + if let Some(this) = this.upgrade(&cx) { + this.update(&mut cx, |this, cx| this.resume_cursor_blinking(epoch, cx)) + } + } + }) + .detach(); + } + + fn resume_cursor_blinking(&mut self, epoch: usize, cx: &mut ModelContext) { + if epoch == self.blink_epoch { + self.blinking_paused = false; + self.blink_cursors(epoch, cx); + } + } + + fn blink_cursors(&mut self, epoch: usize, cx: &mut ModelContext) { + if cx.global::().cursor_blink { + if epoch == self.blink_epoch && self.enabled && !self.blinking_paused { + self.visible = !self.visible; + cx.notify(); + + let epoch = self.next_blink_epoch(); + let interval = self.blink_interval; + cx.spawn(|this, mut cx| { + let this = this.downgrade(); + async move { + Timer::after(interval).await; + if let Some(this) = this.upgrade(&cx) { + this.update(&mut cx, |this, cx| this.blink_cursors(epoch, cx)); + } + } + }) + .detach(); + } + } else if !self.visible { + self.visible = true; + cx.notify(); + } + } + + pub fn enable(&mut self, cx: &mut ModelContext) { + self.enabled = true; + self.blink_cursors(self.blink_epoch, cx); + } + + pub fn disable(&mut self, _: &mut ModelContext) { + self.enabled = true; + } + + pub fn visible(&self) -> bool { + self.visible + } +} + +impl Entity for BlinkManager { + type Event = (); +} diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 901547db2e4e31dc3d95992a1c9171a8d85dc30f..f3edee1a9e2651030145566233d253c2215d32a6 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -1,3 +1,4 @@ +mod blink_manager; pub mod display_map; mod element; mod highlight_matching_bracket; @@ -16,6 +17,7 @@ pub mod test; use aho_corasick::AhoCorasick; use anyhow::Result; +use blink_manager::BlinkManager; use clock::ReplicaId; use collections::{BTreeMap, Bound, HashMap, HashSet, VecDeque}; pub use display_map::DisplayPoint; @@ -447,12 +449,10 @@ pub struct Editor { override_text_style: Option>, project: Option>, focused: bool, - show_local_cursors: bool, + blink_manager: ModelHandle, show_local_selections: bool, show_scrollbars: bool, hide_scrollbar_task: Option>, - blink_epoch: usize, - blinking_paused: bool, mode: EditorMode, vertical_scroll_margin: f32, placeholder_text: Option>, @@ -1076,6 +1076,8 @@ impl Editor { let selections = SelectionsCollection::new(display_map.clone(), buffer.clone()); + let blink_manager = cx.add_model(|cx| BlinkManager::new(CURSOR_BLINK_INTERVAL, cx)); + let mut this = Self { handle: cx.weak_handle(), buffer: buffer.clone(), @@ -1097,12 +1099,10 @@ impl Editor { scroll_top_anchor: Anchor::min(), autoscroll_request: None, focused: false, - show_local_cursors: false, + blink_manager: blink_manager.clone(), show_local_selections: true, show_scrollbars: true, hide_scrollbar_task: None, - blink_epoch: 0, - blinking_paused: false, mode, vertical_scroll_margin: 3.0, placeholder_text: None, @@ -1130,6 +1130,7 @@ impl Editor { cx.observe(&buffer, Self::on_buffer_changed), cx.subscribe(&buffer, Self::on_buffer_event), cx.observe(&display_map, Self::on_display_map_changed), + cx.observe(&blink_manager, |_, _, cx| cx.notify()), ], }; this.end_selection(cx); @@ -1542,7 +1543,7 @@ impl Editor { refresh_matching_bracket_highlights(self, cx); } - self.pause_cursor_blinking(cx); + self.blink_manager.update(cx, BlinkManager::pause_blinking); cx.emit(Event::SelectionsChanged { local }); cx.notify(); } @@ -6111,70 +6112,8 @@ impl Editor { highlights } - fn next_blink_epoch(&mut self) -> usize { - self.blink_epoch += 1; - self.blink_epoch - } - - fn pause_cursor_blinking(&mut self, cx: &mut ViewContext) { - if !self.focused { - return; - } - - self.show_local_cursors = true; - cx.notify(); - - let epoch = self.next_blink_epoch(); - cx.spawn(|this, mut cx| { - let this = this.downgrade(); - async move { - Timer::after(CURSOR_BLINK_INTERVAL).await; - if let Some(this) = this.upgrade(&cx) { - this.update(&mut cx, |this, cx| this.resume_cursor_blinking(epoch, cx)) - } - } - }) - .detach(); - } - - fn resume_cursor_blinking(&mut self, epoch: usize, cx: &mut ViewContext) { - if epoch == self.blink_epoch { - self.blinking_paused = false; - self.blink_cursors(epoch, cx); - } - } - - fn blink_cursors(&mut self, epoch: usize, cx: &mut ViewContext) { - if epoch == self.blink_epoch && self.focused && !self.blinking_paused { - let newest_head = self.selections.newest::(cx).head(); - let language_name = self - .buffer - .read(cx) - .language_at(newest_head, cx) - .map(|l| l.name()); - - self.show_local_cursors = !self.show_local_cursors - || !cx - .global::() - .cursor_blink(language_name.as_deref()); - cx.notify(); - - let epoch = self.next_blink_epoch(); - cx.spawn(|this, mut cx| { - let this = this.downgrade(); - async move { - Timer::after(CURSOR_BLINK_INTERVAL).await; - if let Some(this) = this.upgrade(&cx) { - this.update(&mut cx, |this, cx| this.blink_cursors(epoch, cx)); - } - } - }) - .detach(); - } - } - - pub fn show_local_cursors(&self) -> bool { - self.show_local_cursors && self.focused + pub fn show_local_cursors(&self, cx: &AppContext) -> bool { + self.blink_manager.read(cx).visible() && self.focused } pub fn show_scrollbars(&self) -> bool { @@ -6493,7 +6432,7 @@ impl View for Editor { cx.focus(&rename.editor); } else { self.focused = true; - self.blink_cursors(self.blink_epoch, cx); + self.blink_manager.update(cx, BlinkManager::enable); self.buffer.update(cx, |buffer, cx| { buffer.finalize_last_transaction(cx); if self.leader_replica_id.is_none() { @@ -6512,6 +6451,7 @@ impl View for Editor { let blurred_event = EditorBlurred(cx.handle()); cx.emit_global(blurred_event); self.focused = false; + self.blink_manager.update(cx, BlinkManager::disable); self.buffer .update(cx, |buffer, cx| buffer.remove_active_selections(cx)); self.hide_context_menu(cx); diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index d2090741d803ed316e5325987828df0a4b291ca4..57eee994057c67c5ca47bd56b4b3ee000021cd39 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -705,7 +705,7 @@ impl EditorElement { cx, ); - if view.show_local_cursors() || *replica_id != local_replica_id { + if view.show_local_cursors(cx) || *replica_id != local_replica_id { let cursor_position = selection.head; if layout .visible_display_row_range diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index f079ae86707fc17fca4e54d7503d5bb0cc2681d5..ee389c7a0efc3d3f6dc36ef526225dec0e4ec448 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -28,6 +28,7 @@ pub struct Settings { pub buffer_font_family: FamilyId, pub default_buffer_font_size: f32, pub buffer_font_size: f32, + pub cursor_blink: bool, pub hover_popover_enabled: bool, pub show_completions_on_input: bool, pub vim_mode: bool, @@ -79,7 +80,6 @@ pub struct GitGutterConfig {} pub struct EditorSettings { pub tab_size: Option, pub hard_tabs: Option, - pub cursor_blink: Option, pub soft_wrap: Option, pub preferred_line_length: Option, pub format_on_save: Option, @@ -235,6 +235,8 @@ pub struct SettingsFileContent { #[serde(default)] pub buffer_font_size: Option, #[serde(default)] + pub cursor_blink: Option, + #[serde(default)] pub hover_popover_enabled: Option, #[serde(default)] pub show_completions_on_input: Option, @@ -293,6 +295,7 @@ impl Settings { .unwrap(), buffer_font_size: defaults.buffer_font_size.unwrap(), default_buffer_font_size: defaults.buffer_font_size.unwrap(), + cursor_blink: defaults.cursor_blink.unwrap(), hover_popover_enabled: defaults.hover_popover_enabled.unwrap(), show_completions_on_input: defaults.show_completions_on_input.unwrap(), projects_online_by_default: defaults.projects_online_by_default.unwrap(), @@ -302,7 +305,6 @@ impl Settings { editor_defaults: EditorSettings { tab_size: required(defaults.editor.tab_size), hard_tabs: required(defaults.editor.hard_tabs), - cursor_blink: required(defaults.editor.cursor_blink), soft_wrap: required(defaults.editor.soft_wrap), preferred_line_length: required(defaults.editor.preferred_line_length), format_on_save: required(defaults.editor.format_on_save), @@ -348,6 +350,7 @@ impl Settings { ); merge(&mut self.buffer_font_size, data.buffer_font_size); merge(&mut self.default_buffer_font_size, data.buffer_font_size); + merge(&mut self.cursor_blink, data.cursor_blink); merge(&mut self.hover_popover_enabled, data.hover_popover_enabled); merge( &mut self.show_completions_on_input, @@ -392,10 +395,6 @@ impl Settings { self.language_setting(language, |settings| settings.hard_tabs) } - pub fn cursor_blink(&self, language: Option<&str>) -> bool { - self.language_setting(language, |settings| settings.cursor_blink) - } - pub fn soft_wrap(&self, language: Option<&str>) -> SoftWrap { self.language_setting(language, |settings| settings.soft_wrap) } @@ -442,6 +441,7 @@ impl Settings { buffer_font_family: cx.font_cache().load_family(&["Monaco"]).unwrap(), buffer_font_size: 14., default_buffer_font_size: 14., + cursor_blink: true, hover_popover_enabled: true, show_completions_on_input: true, vim_mode: false, @@ -450,7 +450,6 @@ impl Settings { editor_defaults: EditorSettings { tab_size: Some(4.try_into().unwrap()), hard_tabs: Some(false), - cursor_blink: Some(true), soft_wrap: Some(SoftWrap::None), preferred_line_length: Some(80), format_on_save: Some(FormatOnSave::On), From 54428ca6f6d5c63e82de6a360cb49d199f4b0d1d Mon Sep 17 00:00:00 2001 From: K Simmons Date: Mon, 17 Oct 2022 16:49:34 -0700 Subject: [PATCH 16/38] swap to using vercel to run the local zed.dev server --- Procfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Procfile b/Procfile index a64b411ef3224a8b6bbf4596bff109b125462bf4..e1b87dd48b6eea968a4dfa24f468f5c5acb7f3c0 100644 --- a/Procfile +++ b/Procfile @@ -1,2 +1,2 @@ -web: cd ../zed.dev && PORT=3000 npx next dev +web: cd ../zed.dev && PORT=3000 npx vercel dev collab: cd crates/collab && cargo run From dbc03e2668e0ac62a013538d339cb2d0e7f3abb6 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Thu, 13 Oct 2022 15:43:42 -0700 Subject: [PATCH 17/38] wip --- Cargo.lock | 7675 ----------------------------- crates/db/Cargo.toml | 2 +- crates/db/migrations/001_init.sql | 4 + crates/db/src/db.rs | 75 +- script/generate-zed-sqlx-data | 14 + 5 files changed, 53 insertions(+), 7717 deletions(-) delete mode 100644 Cargo.lock create mode 100644 crates/db/migrations/001_init.sql create mode 100755 script/generate-zed-sqlx-data diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 1a399ad4ad62342071c598126fc3ec9e01d94dff..0000000000000000000000000000000000000000 --- a/Cargo.lock +++ /dev/null @@ -1,7675 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "activity_indicator" -version = "0.1.0" -dependencies = [ - "auto_update", - "editor", - "futures 0.3.24", - "gpui", - "language", - "project", - "settings", - "smallvec", - "util", - "workspace", -] - -[[package]] -name = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.7", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "0.7.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" -dependencies = [ - "memchr", -] - -[[package]] -name = "alacritty_config" -version = "0.1.1-dev" -source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" -dependencies = [ - "log", - "serde", - "serde_yaml", -] - -[[package]] -name = "alacritty_config_derive" -version = "0.2.1-dev" -source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "alacritty_terminal" -version = "0.17.1-dev" -source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" -dependencies = [ - "alacritty_config", - "alacritty_config_derive", - "base64", - "bitflags", - "dirs 4.0.0", - "libc", - "log", - "mio 0.6.23", - "mio-anonymous-pipes", - "mio-extras", - "miow 0.3.7", - "nix", - "parking_lot 0.12.1", - "regex-automata", - "serde", - "serde_yaml", - "signal-hook", - "signal-hook-mio", - "unicode-width", - "vte", - "winapi 0.3.9", -] - -[[package]] -name = "ambient-authority" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "anyhow" -version = "1.0.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "ascii" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" - -[[package]] -name = "assets" -version = "0.1.0" -dependencies = [ - "anyhow", - "gpui", - "rust-embed", -] - -[[package]] -name = "async-broadcast" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90622698a1218e0b2fb846c97b5f19a0831f6baddee73d9454156365ccfa473b" -dependencies = [ - "easy-parallel", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-channel" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-compat" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b48b4ff0c2026db683dea961cd8ea874737f56cffca86fa84415eaddc51c00d" -dependencies = [ - "futures-core", - "futures-io", - "once_cell", - "pin-project-lite 0.2.9", - "tokio", -] - -[[package]] -name = "async-compression" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" -dependencies = [ - "flate2", - "futures-core", - "futures-io", - "memchr", - "pin-project-lite 0.2.9", -] - -[[package]] -name = "async-executor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "once_cell", - "slab", -] - -[[package]] -name = "async-fs" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" -dependencies = [ - "async-lock", - "autocfg 1.1.0", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-io" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" -dependencies = [ - "autocfg 1.1.0", - "concurrent-queue", - "futures-lite", - "libc", - "log", - "once_cell", - "parking", - "polling", - "slab", - "socket2", - "waker-fn", - "winapi 0.3.9", -] - -[[package]] -name = "async-lock" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-net" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4051e67316bc7eff608fe723df5d32ed639946adcd69e07df41fd42a7b411f1f" -dependencies = [ - "async-io", - "autocfg 1.1.0", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-pipe" -version = "0.1.3" -source = "git+https://github.com/zed-industries/async-pipe-rs?rev=82d00a04211cf4e1236029aa03e6b6ce2a74c553#82d00a04211cf4e1236029aa03e6b6ce2a74c553" -dependencies = [ - "futures 0.3.24", - "log", -] - -[[package]] -name = "async-process" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02111fd8655a613c25069ea89fc8d9bb89331fa77486eb3bc059ee757cfa481c" -dependencies = [ - "async-io", - "autocfg 1.1.0", - "blocking", - "cfg-if 1.0.0", - "event-listener", - "futures-lite", - "libc", - "once_cell", - "signal-hook", - "winapi 0.3.9", -] - -[[package]] -name = "async-recursion" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" -dependencies = [ - "async-stream-impl", - "futures-core", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-task" -version = "4.0.3" -source = "git+https://github.com/zed-industries/async-task?rev=341b57d6de98cdfd7b418567b8de2022ca993a6e#341b57d6de98cdfd7b418567b8de2022ca993a6e" - -[[package]] -name = "async-tls" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" -dependencies = [ - "futures-core", - "futures-io", - "rustls 0.19.1", - "webpki 0.21.4", - "webpki-roots 0.21.1", -] - -[[package]] -name = "async-trait" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-tungstenite" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5682ea0913e5c20780fe5785abacb85a411e7437bf52a1bedb93ddb3972cb8dd" -dependencies = [ - "async-tls", - "futures-io", - "futures-util", - "log", - "pin-project-lite 0.2.9", - "tungstenite 0.16.0", -] - -[[package]] -name = "atoi" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" -dependencies = [ - "num-traits", -] - -[[package]] -name = "atomic" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "atomic-waker" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "auto_update" -version = "0.1.0" -dependencies = [ - "anyhow", - "client", - "gpui", - "isahc", - "lazy_static", - "log", - "menu", - "project", - "serde", - "serde_json", - "settings", - "smol", - "tempdir", - "theme", - "util", - "workspace", -] - -[[package]] -name = "autocfg" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axum" -version = "0.5.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e3356844c4d6a6d6467b8da2cffb4a2820be256f50a3a386c9d152bab31043" -dependencies = [ - "async-trait", - "axum-core", - "base64", - "bitflags", - "bytes 1.2.1", - "futures-util", - "headers", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite 0.2.9", - "serde", - "serde_json", - "serde_urlencoded", - "sha-1 0.10.0", - "sync_wrapper", - "tokio", - "tokio-tungstenite", - "tower", - "tower-http", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f0c0a60006f2a293d82d571f635042a72edf927539b7685bd62d361963839b" -dependencies = [ - "async-trait", - "bytes 1.2.1", - "futures-util", - "http", - "http-body", - "mime", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-extra" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69034b3b0fd97923eee2ce8a47540edb21e07f48f87f67d44bb4271cec622bdb" -dependencies = [ - "axum", - "bytes 1.2.1", - "futures-util", - "http", - "mime", - "pin-project-lite 0.2.9", - "serde", - "serde_json", - "tokio", - "tower", - "tower-http", - "tower-layer", - "tower-service", -] - -[[package]] -name = "backtrace" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" -dependencies = [ - "addr2line", - "cc", - "cfg-if 1.0.0", - "libc", - "miniz_oxide 0.5.4", - "object 0.29.0", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "base64ct" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2b2456fd614d856680dcd9fcc660a51a820fa09daef2e49772b56a193c8474" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bindgen" -version = "0.59.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "clap 2.34.0", - "env_logger", - "lazy_static", - "lazycell", - "log", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "which", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "blocking" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" -dependencies = [ - "async-channel", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "once_cell", -] - -[[package]] -name = "breadcrumbs" -version = "0.1.0" -dependencies = [ - "collections", - "editor", - "gpui", - "itertools", - "language", - "project", - "search", - "settings", - "theme", - "workspace", -] - -[[package]] -name = "bromberg_sl2" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed88064f69518b7e3ea50ecfc1b61d43f19248618a377b95ae5c8b611134d4d" -dependencies = [ - "digest 0.9.0", - "lazy_static", - "rayon", - "seq-macro", -] - -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "memchr", -] - -[[package]] -name = "bumpalo" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" - -[[package]] -name = "bytemuck" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -dependencies = [ - "byteorder", - "iovec", -] - -[[package]] -name = "bytes" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "cache-padded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" - -[[package]] -name = "call" -version = "0.1.0" -dependencies = [ - "anyhow", - "client", - "collections", - "futures 0.3.24", - "gpui", - "postage", - "project", - "util", -] - -[[package]] -name = "cap-fs-ext" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54b86398b5852ddd45784b1d9b196b98beb39171821bad4b8b44534a1e87927" -dependencies = [ - "cap-primitives", - "cap-std", - "io-lifetimes", - "winapi 0.3.9", -] - -[[package]] -name = "cap-primitives" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8fca3e81fae1d91a36e9784ca22a39ef623702b5f7904d89dc31f10184a178" -dependencies = [ - "ambient-authority", - "errno", - "fs-set-times", - "io-extras", - "io-lifetimes", - "ipnet", - "maybe-owned", - "rustix", - "winapi 0.3.9", - "winapi-util", - "winx", -] - -[[package]] -name = "cap-rand" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3b27294116983d706f4c8168f6d10c84f9f5daed0c28bc7d0296cf16bcf971" -dependencies = [ - "ambient-authority", - "rand 0.8.5", -] - -[[package]] -name = "cap-std" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2247568946095c7765ad2b441a56caffc08027734c634a6d5edda648f04e32eb" -dependencies = [ - "cap-primitives", - "io-extras", - "io-lifetimes", - "ipnet", - "rustix", -] - -[[package]] -name = "cap-time-ext" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50472b6ebc302af0401fa3fb939694cd8ff00e0d4c9182001e434fc822ab83a" -dependencies = [ - "cap-primitives", - "once_cell", - "rustix", - "winx", -] - -[[package]] -name = "capture" -version = "0.1.0" -dependencies = [ - "anyhow", - "bindgen", - "block", - "byteorder", - "bytes 1.2.1", - "cocoa", - "core-foundation", - "core-graphics", - "foreign-types", - "futures 0.3.24", - "gpui", - "hmac 0.12.1", - "jwt", - "live_kit", - "log", - "media", - "objc", - "parking_lot 0.11.2", - "postage", - "serde", - "sha2 0.10.6", - "simplelog", -] - -[[package]] -name = "castaway" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chat_panel" -version = "0.1.0" -dependencies = [ - "client", - "editor", - "gpui", - "menu", - "postage", - "settings", - "theme", - "time 0.3.15", - "util", - "workspace", -] - -[[package]] -name = "chrono" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-integer", - "num-traits", - "time 0.1.44", - "wasm-bindgen", - "winapi 0.3.9", -] - -[[package]] -name = "chunked_transfer" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" - -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array", -] - -[[package]] -name = "clang-sys" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" -dependencies = [ - "glob", - "libc", - "libloading", -] - -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "ansi_term", - "atty", - "bitflags", - "strsim 0.8.0", - "textwrap 0.11.0", - "unicode-width", - "vec_map", -] - -[[package]] -name = "clap" -version = "3.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" -dependencies = [ - "atty", - "bitflags", - "clap_derive", - "clap_lex", - "indexmap", - "once_cell", - "strsim 0.10.0", - "termcolor", - "textwrap 0.15.1", -] - -[[package]] -name = "clap_derive" -version = "3.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" -dependencies = [ - "heck 0.4.0", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "cli" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap 3.2.22", - "core-foundation", - "core-services", - "dirs 3.0.2", - "ipc-channel", - "plist", - "serde", -] - -[[package]] -name = "client" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-recursion", - "async-tungstenite", - "collections", - "db", - "futures 0.3.24", - "gpui", - "image", - "isahc", - "lazy_static", - "log", - "parking_lot 0.11.2", - "postage", - "rand 0.8.5", - "rpc", - "serde", - "smol", - "sum_tree", - "tempfile", - "thiserror", - "time 0.3.15", - "tiny_http", - "url", - "util", - "uuid 1.2.1", -] - -[[package]] -name = "clock" -version = "0.1.0" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cmake" -version = "0.1.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" -dependencies = [ - "cc", -] - -[[package]] -name = "cocoa" -version = "0.24.0" -source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "collab" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "async-tungstenite", - "axum", - "axum-extra", - "base64", - "call", - "clap 3.2.22", - "client", - "collections", - "ctor", - "editor", - "env_logger", - "envy", - "fs", - "futures 0.3.24", - "git", - "gpui", - "hyper", - "language", - "lazy_static", - "lipsum", - "log", - "lsp", - "nanoid", - "parking_lot 0.11.2", - "project", - "prometheus", - "rand 0.8.5", - "reqwest", - "rpc", - "scrypt", - "serde", - "serde_json", - "settings", - "sha-1 0.9.8", - "sqlx", - "theme", - "time 0.3.15", - "tokio", - "tokio-tungstenite", - "toml", - "tonic", - "tower", - "tracing", - "tracing-log", - "tracing-subscriber", - "unindent", - "util", - "workspace", -] - -[[package]] -name = "collab_ui" -version = "0.1.0" -dependencies = [ - "anyhow", - "call", - "client", - "clock", - "collections", - "editor", - "futures 0.3.24", - "fuzzy", - "gpui", - "log", - "menu", - "picker", - "postage", - "project", - "serde", - "settings", - "theme", - "util", - "workspace", -] - -[[package]] -name = "collections" -version = "0.1.0" -dependencies = [ - "seahash", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "command_palette" -version = "0.1.0" -dependencies = [ - "collections", - "ctor", - "editor", - "env_logger", - "fuzzy", - "gpui", - "picker", - "project", - "serde_json", - "settings", - "theme", - "util", - "workspace", -] - -[[package]] -name = "concurrent-queue" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" -dependencies = [ - "cache-padded", -] - -[[package]] -name = "context_menu" -version = "0.1.0" -dependencies = [ - "gpui", - "menu", - "settings", - "smallvec", - "theme", -] - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "core-services" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b344b958cae90858bf6086f49599ecc5ec8698eacad0ea155509ba11fab347" -dependencies = [ - "core-foundation", -] - -[[package]] -name = "core-text" -version = "19.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25" -dependencies = [ - "core-foundation", - "core-graphics", - "foreign-types", - "libc", -] - -[[package]] -name = "cpp_demangle" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "cranelift-bforest" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749d0d6022c9038dccf480bdde2a38d435937335bf2bb0f14e815d94517cdce8" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94370cc7b37bf652ccd8bb8f09bd900997f7ccf97520edfc75554bb5c4abbea" -dependencies = [ - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-entity", - "cranelift-isle", - "gimli", - "log", - "regalloc2", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a3cea8fdab90e44018c5b9a1dfd460d8ee265ac354337150222a354628bdb6" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac72f76f2698598951ab26d8c96eaa854810e693e7dd52523958b5909fde6b2" - -[[package]] -name = "cranelift-entity" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09eaeacfcd2356fe0e66b295e8f9d59fdd1ac3ace53ba50de14d628ec902f72d" -dependencies = [ - "serde", -] - -[[package]] -name = "cranelift-frontend" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba69c9980d5ffd62c18a2bde927855fcd7c8dc92f29feaf8636052662cbd99c" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2920dc1e05cac40304456ed3301fde2c09bd6a9b0210bcfa2f101398d628d5b" - -[[package]] -name = "cranelift-native" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04dfa45f9b2a6f587c564d6b63388e00cd6589d2df6ea2758cf79e1a13285e6" -dependencies = [ - "cranelift-codegen", - "libc", - "target-lexicon", -] - -[[package]] -name = "cranelift-wasm" -version = "0.85.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31a46513ae6f26f3f267d8d75b5373d555fbbd1e68681f348d99df43f747ec54" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "itertools", - "log", - "smallvec", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "crc" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53757d12b596c16c78b83458d732a5d1a17ab3f53f2f7412f6fb57cc8a140ab3" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crossbeam-channel" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" -dependencies = [ - "crossbeam-utils 0.7.2", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils 0.8.12", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch", - "crossbeam-utils 0.8.12", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" -dependencies = [ - "autocfg 1.1.0", - "cfg-if 1.0.0", - "crossbeam-utils 0.8.12", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils 0.8.12", -] - -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg 1.1.0", - "cfg-if 0.1.10", - "lazy_static", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "ctor" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "curl" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2", - "winapi 0.3.9", -] - -[[package]] -name = "curl-sys" -version = "0.4.56+curl-7.83.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093e169dd4de29e468fa649fbae11cdcd5551c81fe5bf1b0677adad7ef3d26f" -dependencies = [ - "cc", - "libc", - "libnghttp2-sys", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "winapi 0.3.9", -] - -[[package]] -name = "cxx" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f39818dcfc97d45b03953c1292efc4e80954e1583c4aa770bac1383e2310a4" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e580d70777c116df50c390d1211993f62d40302881e54d4b79727acb83d0199" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56a46460b88d1cec95112c8c363f0e2c39afdb237f60583b0b36343bf627ea9c" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747b608fecf06b0d72d440f27acc99288207324b793be2c17991839f3d4995ea" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "data-url" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30bfce702bcfa94e906ef82421f2c0e61c076ad76030c16ee5d2e9a32fe193" -dependencies = [ - "matches", -] - -[[package]] -name = "db" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "collections", - "gpui", - "parking_lot 0.11.2", - "rocksdb", - "tempdir", -] - -[[package]] -name = "deflate" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" -dependencies = [ - "adler32", - "byteorder", -] - -[[package]] -name = "dhat" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0684eaa19a59be283a6f99369917b679bd4d1d06604b2eb2e2f87b4bbd67668d" -dependencies = [ - "backtrace", - "lazy_static", - "parking_lot 0.12.1", - "rustc-hash", - "serde", - "serde_json", - "thousands", -] - -[[package]] -name = "diagnostics" -version = "0.1.0" -dependencies = [ - "anyhow", - "client", - "collections", - "editor", - "gpui", - "language", - "postage", - "project", - "serde_json", - "settings", - "smallvec", - "theme", - "unindent", - "util", - "workspace", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" -dependencies = [ - "block-buffer 0.10.3", - "crypto-common", - "subtle", -] - -[[package]] -name = "directories-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" -dependencies = [ - "cfg-if 1.0.0", - "dirs-sys-next", -] - -[[package]] -name = "dirs" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if 1.0.0", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi 0.3.9", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi 0.3.9", -] - -[[package]] -name = "dotenvy" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9155c8f4dc55c7470ae9da3f63c6785245093b3f6aeb0f5bf2e968efbba314" -dependencies = [ - "dirs 4.0.0", -] - -[[package]] -name = "drag_and_drop" -version = "0.1.0" -dependencies = [ - "collections", - "gpui", -] - -[[package]] -name = "dwrote" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" -dependencies = [ - "lazy_static", - "libc", - "winapi 0.3.9", - "wio", -] - -[[package]] -name = "dyn-clone" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" - -[[package]] -name = "easy-parallel" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946" - -[[package]] -name = "editor" -version = "0.1.0" -dependencies = [ - "aho-corasick", - "anyhow", - "clock", - "collections", - "context_menu", - "ctor", - "env_logger", - "futures 0.3.24", - "fuzzy", - "git", - "gpui", - "indoc", - "itertools", - "language", - "lazy_static", - "log", - "lsp", - "ordered-float", - "parking_lot 0.11.2", - "postage", - "project", - "rand 0.8.5", - "rpc", - "serde", - "settings", - "smallvec", - "smol", - "snippet", - "sum_tree", - "text", - "theme", - "tree-sitter", - "tree-sitter-html", - "tree-sitter-javascript", - "tree-sitter-rust", - "unindent", - "util", - "workspace", -] - -[[package]] -name = "either" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "encoding_rs" -version = "0.8.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "env_logger" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "envy" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" -dependencies = [ - "serde", -] - -[[package]] -name = "erased-serde" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54558e0ba96fbe24280072642eceb9d7d442e32c7ec0ea9e7ecd7b4ea2cf4e11" -dependencies = [ - "serde", -] - -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "etagere" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6301151a318f367f392c31395beb1cfba5ccd9abc44d1db0db3a4b27b9601c89" -dependencies = [ - "euclid", - "svg_fmt", -] - -[[package]] -name = "euclid" -version = "0.22.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" -dependencies = [ - "num-traits", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "expat-sys" -version = "2.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa" -dependencies = [ - "cmake", - "pkg-config", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fastrand" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "file-per-thread-logger" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" -dependencies = [ - "env_logger", - "log", -] - -[[package]] -name = "file_finder" -version = "0.1.0" -dependencies = [ - "ctor", - "editor", - "env_logger", - "fuzzy", - "gpui", - "menu", - "picker", - "postage", - "project", - "serde_json", - "settings", - "theme", - "util", - "workspace", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" -dependencies = [ - "crc32fast", - "miniz_oxide 0.5.4", -] - -[[package]] -name = "float-cmp" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75224bec9bfe1a65e2d34132933f2de7fe79900c96a0174307554244ece8150e" - -[[package]] -name = "float-ord" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "font-kit" -version = "0.10.0" -source = "git+https://github.com/zed-industries/font-kit?rev=8eaf7a918eafa28b0a37dc759e2e0e7683fa24f1#8eaf7a918eafa28b0a37dc759e2e0e7683fa24f1" -dependencies = [ - "bitflags", - "byteorder", - "core-foundation", - "core-graphics", - "core-text", - "dirs-next", - "dwrote", - "float-ord", - "freetype", - "lazy_static", - "libc", - "log", - "pathfinder_geometry", - "pathfinder_simd", - "servo-fontconfig", - "walkdir", - "winapi 0.3.9", -] - -[[package]] -name = "fontdb" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e58903f4f8d5b58c7d300908e4ebe5289c1bfdf5587964330f12023b8ff17fd1" -dependencies = [ - "log", - "memmap2", - "ttf-parser 0.12.3", -] - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "freetype" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6" -dependencies = [ - "freetype-sys", - "libc", -] - -[[package]] -name = "freetype-sys" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a" -dependencies = [ - "cmake", - "libc", - "pkg-config", -] - -[[package]] -name = "fs" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "collections", - "fsevent", - "futures 0.3.24", - "git2", - "gpui", - "lazy_static", - "libc", - "log", - "lsp", - "parking_lot 0.11.2", - "regex", - "rope", - "serde", - "serde_json", - "smol", - "tempfile", - "util", -] - -[[package]] -name = "fs-set-times" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df62ee66ee2d532ea8d567b5a3f0d03ecd64636b98bad5be1e93dcc918b92aa" -dependencies = [ - "io-lifetimes", - "rustix", - "winapi 0.3.9", -] - -[[package]] -name = "fsevent" -version = "2.0.2" -dependencies = [ - "bitflags", - "fsevent-sys", - "parking_lot 0.11.2", - "tempdir", -] - -[[package]] -name = "fsevent-sys" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6f5e6817058771c10f0eb0f05ddf1e35844266f972004fe8e4b21fda295bd5" -dependencies = [ - "libc", -] - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - -[[package]] -name = "futures" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" - -[[package]] -name = "futures" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" - -[[package]] -name = "futures-executor" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-intrusive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62007592ac46aa7c2b6416f7deb9a8a8f63a01e0f1d6e1787d5630170db2b63e" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot 0.11.2", -] - -[[package]] -name = "futures-io" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite 0.2.9", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" - -[[package]] -name = "futures-task" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" - -[[package]] -name = "futures-util" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" -dependencies = [ - "futures 0.1.31", - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite 0.2.9", - "pin-utils", - "slab", - "tokio-io", -] - -[[package]] -name = "fuzzy" -version = "0.1.0" -dependencies = [ - "gpui", - "util", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gif" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" -dependencies = [ - "fallible-iterator", - "indexmap", - "stable_deref_trait", -] - -[[package]] -name = "git" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "clock", - "collections", - "futures 0.3.24", - "git2", - "lazy_static", - "log", - "parking_lot 0.11.2", - "smol", - "sum_tree", - "text", - "unindent", - "util", -] - -[[package]] -name = "git2" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1" -dependencies = [ - "bitflags", - "libc", - "libgit2-sys", - "log", - "url", -] - -[[package]] -name = "glob" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" - -[[package]] -name = "globset" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "go_to_line" -version = "0.1.0" -dependencies = [ - "editor", - "gpui", - "menu", - "postage", - "settings", - "text", - "workspace", -] - -[[package]] -name = "gpui" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-task", - "backtrace", - "bindgen", - "block", - "cc", - "cocoa", - "collections", - "core-foundation", - "core-graphics", - "core-text", - "ctor", - "dhat", - "env_logger", - "etagere", - "font-kit", - "foreign-types", - "futures 0.3.24", - "gpui_macros", - "image", - "itertools", - "lazy_static", - "log", - "media", - "metal", - "num_cpus", - "objc", - "ordered-float", - "parking", - "parking_lot 0.11.2", - "pathfinder_color", - "pathfinder_geometry", - "png", - "postage", - "rand 0.8.5", - "resvg", - "seahash", - "serde", - "serde_json", - "simplelog", - "smallvec", - "smol", - "sum_tree", - "time 0.3.15", - "tiny-skia", - "tree-sitter", - "usvg", - "util", - "waker-fn", -] - -[[package]] -name = "gpui_macros" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "h2" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" -dependencies = [ - "bytes 1.2.1", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util 0.7.4", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashlink" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa" -dependencies = [ - "hashbrown 0.12.3", -] - -[[package]] -name = "headers" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" -dependencies = [ - "base64", - "bitflags", - "bytes 1.2.1", - "headers-core", - "http", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" -dependencies = [ - "http", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hkdf" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" -dependencies = [ - "hmac 0.12.1", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.5", -] - -[[package]] -name = "http" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" -dependencies = [ - "bytes 1.2.1", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes 1.2.1", - "http", - "pin-project-lite 0.2.9", -] - -[[package]] -name = "http-range-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "hyper" -version = "0.14.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" -dependencies = [ - "bytes 1.2.1", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite 0.2.9", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite 0.2.9", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes 1.2.1", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "winapi 0.3.9", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde6edd6cef363e9359ed3c98ba64590ba9eecba2293eb5a723ab32aee8926aa" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" -dependencies = [ - "crossbeam-utils 0.8.12", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.23.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "gif", - "jpeg-decoder", - "num-iter", - "num-rational", - "num-traits", - "png", - "scoped_threadpool", - "tiff", -] - -[[package]] -name = "indexmap" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" -dependencies = [ - "autocfg 1.1.0", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indoc" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adab1eaa3408fb7f0c777a73e7465fd5656136fc93b670eb6df3c88c2c1344e3" - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "io-extras" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c937cc9891c12eaa8c63ad347e4a288364b1328b924886970b47a14ab8f8f8" -dependencies = [ - "io-lifetimes", - "winapi 0.3.9", -] - -[[package]] -name = "io-lifetimes" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6" -dependencies = [ - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - -[[package]] -name = "ipc-channel" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb1d9211085f0ea6f1379d944b93c4d07e8207aa3bcf49f37eda12b85081887" -dependencies = [ - "bincode", - "crossbeam-channel 0.4.4", - "fnv", - "lazy_static", - "libc", - "mio 0.6.23", - "rand 0.7.3", - "serde", - "tempfile", - "uuid 0.8.2", - "winapi 0.3.9", -] - -[[package]] -name = "ipnet" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" - -[[package]] -name = "is-terminal" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c89a757e762896bdbdfadf2860d0f8b0cea5e363d8cf3e7bdfeb63d1d976352" -dependencies = [ - "hermit-abi 0.2.6", - "io-lifetimes", - "rustix", - "winapi 0.3.9", -] - -[[package]] -name = "isahc" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" -dependencies = [ - "async-channel", - "castaway", - "crossbeam-utils 0.8.12", - "curl", - "curl-sys", - "encoding_rs", - "event-listener", - "futures-lite", - "http", - "log", - "mime", - "once_cell", - "polling", - "slab", - "sluice", - "tracing", - "tracing-futures", - "url", - "waker-fn", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" - -[[package]] -name = "ittapi-rs" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f712648a1ad72fbfb7adc2772c331e8d90f022f8cf30cbabefba2878dd3172b0" -dependencies = [ - "cc", -] - -[[package]] -name = "jobserver" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" -dependencies = [ - "libc", -] - -[[package]] -name = "journal" -version = "0.1.0" -dependencies = [ - "chrono", - "dirs 4.0.0", - "editor", - "gpui", - "log", - "settings", - "shellexpand", - "util", - "workspace", -] - -[[package]] -name = "jpeg-decoder" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" -dependencies = [ - "rayon", -] - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json_comments" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ee439ee368ba4a77ac70d04f14015415af8600d6c894dc1f11bd79758c57d5" - -[[package]] -name = "jwt" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f" -dependencies = [ - "base64", - "crypto-common", - "digest 0.10.5", - "hmac 0.12.1", - "serde", - "serde_json", - "sha2 0.10.6", -] - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "kurbo" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449" -dependencies = [ - "arrayvec 0.7.2", -] - -[[package]] -name = "language" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-broadcast", - "async-trait", - "client", - "clock", - "collections", - "ctor", - "env_logger", - "fs", - "futures 0.3.24", - "fuzzy", - "git", - "gpui", - "lazy_static", - "log", - "lsp", - "parking_lot 0.11.2", - "postage", - "rand 0.8.5", - "regex", - "rpc", - "serde", - "serde_json", - "settings", - "similar", - "smallvec", - "smol", - "sum_tree", - "text", - "theme", - "tree-sitter", - "tree-sitter-html", - "tree-sitter-javascript", - "tree-sitter-json 0.19.0", - "tree-sitter-python", - "tree-sitter-rust", - "tree-sitter-typescript", - "unindent", - "util", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin", -] - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - -[[package]] -name = "libc" -version = "0.2.135" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" - -[[package]] -name = "libgit2-sys" -version = "0.14.0+1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a00859c70c8a4f7218e6d1cc32875c4b55f6799445b842b0d8ed5e4c3d959b" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - -[[package]] -name = "libloading" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "libm" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "292a948cd991e376cf75541fe5b97a1081d713c618b4f1b9500f8844e49eb565" - -[[package]] -name = "libnghttp2-sys" -version = "0.1.7+1.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "librocksdb-sys" -version = "0.7.1+7.3.1" -source = "git+https://github.com/rust-rocksdb/rust-rocksdb?rev=39dc822dde743b2a26eb160b660e8fbdab079d49#39dc822dde743b2a26eb160b660e8fbdab079d49" -dependencies = [ - "bindgen", - "bzip2-sys", - "cc", - "glob", - "libc", - "libz-sys", - "zstd-sys", -] - -[[package]] -name = "libz-sys" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" -dependencies = [ - "cc", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-raw-sys" -version = "0.0.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" - -[[package]] -name = "lipsum" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8451846f1f337e44486666989fbce40be804da139d5a4477d6b88ece5dc69f4" -dependencies = [ - "rand 0.8.5", - "rand_chacha 0.3.1", -] - -[[package]] -name = "live_kit" -version = "0.1.0" -dependencies = [ - "anyhow", - "core-foundation", - "core-graphics", - "futures 0.3.24", - "media", - "parking_lot 0.11.2", - "serde", - "serde_json", -] - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg 1.1.0", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", - "serde", - "value-bag", -] - -[[package]] -name = "lsp" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-pipe", - "collections", - "ctor", - "env_logger", - "futures 0.3.24", - "gpui", - "log", - "lsp-types", - "parking_lot 0.11.2", - "postage", - "serde", - "serde_json", - "smol", - "unindent", - "util", -] - -[[package]] -name = "lsp-types" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2368312c59425dd133cb9a327afee65be0a633a8ce471d248e2202a48f8f68ae" -dependencies = [ - "bitflags", - "serde", - "serde_json", - "serde_repr", - "url", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - -[[package]] -name = "matchit" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" - -[[package]] -name = "maybe-owned" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" - -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest 0.10.5", -] - -[[package]] -name = "media" -version = "0.1.0" -dependencies = [ - "anyhow", - "bindgen", - "block", - "bytes 1.2.1", - "core-foundation", - "foreign-types", - "metal", - "objc", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memfd" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6627dc657574b49d6ad27105ed671822be56e0d2547d413bfbf3e8d8fa92e7a" -dependencies = [ - "libc", -] - -[[package]] -name = "memmap2" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723e3ebdcdc5c023db1df315364573789f8857c11b631a2fdfad7c00f5c046b4" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "menu" -version = "0.1.0" -dependencies = [ - "gpui", -] - -[[package]] -name = "metal" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4598d719460ade24c7d91f335daf055bf2a7eec030728ce751814c50cdd6a26c" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "foreign-types", - "log", - "objc", -] - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" -dependencies = [ - "adler32", -] - -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg 1.1.0", -] - -[[package]] -name = "miniz_oxide" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", -] - -[[package]] -name = "mio" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", -] - -[[package]] -name = "mio-anonymous-pipes" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bc513025fe5005a3aa561b50fdb2cda5a150b84800ae02acd8aa9ed62ca1a6b" -dependencies = [ - "mio 0.6.23", - "miow 0.3.7", - "parking_lot 0.11.2", - "spsc-buffer", - "winapi 0.3.9", -] - -[[package]] -name = "mio-extras" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -dependencies = [ - "lazycell", - "log", - "mio 0.6.23", - "slab", -] - -[[package]] -name = "mio-uds" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" -dependencies = [ - "iovec", - "libc", - "mio 0.6.23", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "more-asserts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "nanoid" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" -dependencies = [ - "rand 0.8.5", -] - -[[package]] -name = "native-tls" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "nix" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" -dependencies = [ - "bitflags", - "cfg-if 1.0.0", - "libc", - "memoffset", -] - -[[package]] -name = "nom" -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi 0.3.9", -] - -[[package]] -name = "num-bigint" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" -dependencies = [ - "autocfg 1.1.0", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4547ee5541c18742396ae2c895d0717d0f886d8823b8399cdaf7b07d63ad0480" -dependencies = [ - "autocfg 0.1.8", - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.5", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg 1.1.0", - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" -dependencies = [ - "autocfg 1.1.0", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg 1.1.0", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg 1.1.0", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi 0.1.19", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - -[[package]] -name = "nvim-rs" -version = "0.5.0" -source = "git+https://github.com/KillTheMule/nvim-rs?branch=master#d701c2790dcb2579f8f4d7003ba30e2100a7d25b" -dependencies = [ - "async-trait", - "futures 0.3.24", - "log", - "parity-tokio-ipc", - "rmp", - "rmpv", - "tokio", - "tokio-util 0.7.4", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "object" -version = "0.28.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" -dependencies = [ - "crc32fast", - "hashbrown 0.11.2", - "indexmap", - "memchr", -] - -[[package]] -name = "object" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "openssl" -version = "0.10.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" -dependencies = [ - "bitflags", - "cfg-if 1.0.0", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" -dependencies = [ - "autocfg 1.1.0", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "ordered-float" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" -dependencies = [ - "num-traits", -] - -[[package]] -name = "os_str_bytes" -version = "6.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" - -[[package]] -name = "outline" -version = "0.1.0" -dependencies = [ - "editor", - "fuzzy", - "gpui", - "language", - "ordered-float", - "picker", - "postage", - "settings", - "smol", - "text", - "workspace", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "parity-tokio-ipc" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9981e32fb75e004cc148f5fb70342f393830e0a4aa62e3cc93b50976218d42b6" -dependencies = [ - "futures 0.3.24", - "libc", - "log", - "rand 0.7.3", - "tokio", - "winapi 0.3.9", -] - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core 0.9.3", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi 0.3.9", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "redox_syscall", - "smallvec", - "windows-sys", -] - -[[package]] -name = "password-hash" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e0b28ace46c5a396546bcf443bf422b57049617433d8854227352a4a9b24e7" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "paste" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" - -[[package]] -name = "pathfinder_color" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69bdc0d277d559e35e1b374de56df9262a6b71e091ca04a8831a239f8c7f0c62" -dependencies = [ - "pathfinder_simd", -] - -[[package]] -name = "pathfinder_geometry" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" -dependencies = [ - "log", - "pathfinder_simd", -] - -[[package]] -name = "pathfinder_simd" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39fe46acc5503595e5949c17b818714d26fdf9b4920eacf3b2947f0199f4a6ff" -dependencies = [ - "rustc_version", -] - -[[package]] -name = "pbkdf2" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" -dependencies = [ - "crypto-mac", -] - -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - -[[package]] -name = "pem" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" -dependencies = [ - "base64", - "once_cell", - "regex", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pest" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a" -dependencies = [ - "thiserror", - "ucd-trie", -] - -[[package]] -name = "petgraph" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "picker" -version = "0.1.0" -dependencies = [ - "ctor", - "editor", - "env_logger", - "gpui", - "menu", - "serde_json", - "settings", - "theme", - "util", - "workspace", -] - -[[package]] -name = "pico-args" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" - -[[package]] -name = "plist" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" -dependencies = [ - "base64", - "indexmap", - "line-wrap", - "serde", - "time 0.3.15", - "xml-rs", -] - -[[package]] -name = "plugin" -version = "0.1.0" -dependencies = [ - "bincode", - "plugin_macros", - "serde", -] - -[[package]] -name = "plugin_macros" -version = "0.1.0" -dependencies = [ - "bincode", - "proc-macro2", - "quote", - "serde", - "syn", -] - -[[package]] -name = "plugin_runtime" -version = "0.1.0" -dependencies = [ - "anyhow", - "bincode", - "pollster", - "serde", - "serde_json", - "smol", - "wasi-common", - "wasmtime", - "wasmtime-wasi", -] - -[[package]] -name = "png" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" -dependencies = [ - "bitflags", - "crc32fast", - "deflate", - "miniz_oxide 0.3.7", -] - -[[package]] -name = "polling" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" -dependencies = [ - "autocfg 1.1.0", - "cfg-if 1.0.0", - "libc", - "log", - "wepoll-ffi", - "winapi 0.3.9", -] - -[[package]] -name = "pollster" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da3b0203fd7ee5720aa0b5e790b591aa5d3f41c3ed2c34a3a393382198af2f7" - -[[package]] -name = "postage" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a63d25391d04a097954b76aba742b6b5b74f213dfe3dbaeeb36e8ddc1c657f0b" -dependencies = [ - "atomic", - "crossbeam-queue", - "futures 0.3.24", - "log", - "pin-project", - "pollster", - "static_assertions", - "thiserror", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "procinfo" -version = "0.1.0" -source = "git+https://github.com/zed-industries/wezterm?rev=5cd757e5f2eb039ed0c6bb6512223e69d5efc64d#5cd757e5f2eb039ed0c6bb6512223e69d5efc64d" -dependencies = [ - "libc", - "log", - "ntapi", - "winapi 0.3.9", -] - -[[package]] -name = "project" -version = "0.1.0" -dependencies = [ - "aho-corasick", - "anyhow", - "async-trait", - "client", - "clock", - "collections", - "db", - "fs", - "fsevent", - "futures 0.3.24", - "fuzzy", - "git", - "gpui", - "ignore", - "language", - "lazy_static", - "log", - "lsp", - "parking_lot 0.11.2", - "postage", - "pulldown-cmark", - "rand 0.8.5", - "regex", - "rocksdb", - "rpc", - "serde", - "serde_json", - "settings", - "sha2 0.10.6", - "similar", - "smol", - "sum_tree", - "tempdir", - "text", - "thiserror", - "toml", - "unindent", - "util", -] - -[[package]] -name = "project_panel" -version = "0.1.0" -dependencies = [ - "context_menu", - "editor", - "futures 0.3.24", - "gpui", - "menu", - "postage", - "project", - "serde_json", - "settings", - "theme", - "unicase", - "util", - "workspace", -] - -[[package]] -name = "project_symbols" -version = "0.1.0" -dependencies = [ - "anyhow", - "editor", - "futures 0.3.24", - "fuzzy", - "gpui", - "language", - "lsp", - "ordered-float", - "picker", - "postage", - "project", - "settings", - "smol", - "text", - "util", - "workspace", -] - -[[package]] -name = "prometheus" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c8babc29389186697fe5a2a4859d697825496b83db5d0b65271cdc0488e88c" -dependencies = [ - "cfg-if 1.0.0", - "fnv", - "lazy_static", - "memchr", - "parking_lot 0.12.1", - "protobuf", - "thiserror", -] - -[[package]] -name = "prost" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020" -dependencies = [ - "bytes 1.2.1", - "prost-derive 0.8.0", -] - -[[package]] -name = "prost" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" -dependencies = [ - "bytes 1.2.1", - "prost-derive 0.9.0", -] - -[[package]] -name = "prost-build" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" -dependencies = [ - "bytes 1.2.1", - "heck 0.3.3", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prost 0.9.0", - "prost-types", - "regex", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600d2f334aa05acb02a755e217ef1ab6dea4d51b58b7846588b747edec04efba" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-derive" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" -dependencies = [ - "bytes 1.2.1", - "prost 0.9.0", -] - -[[package]] -name = "protobuf" -version = "2.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" - -[[package]] -name = "psm" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" -dependencies = [ - "cc", -] - -[[package]] -name = "pulldown-cmark" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63" -dependencies = [ - "bitflags", - "memchr", - "unicase", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi 0.3.9", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.7", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rayon" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" -dependencies = [ - "autocfg 1.1.0", - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" -dependencies = [ - "crossbeam-channel 0.5.6", - "crossbeam-deque", - "crossbeam-utils 0.8.12", - "num_cpus", -] - -[[package]] -name = "rctree" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be9e29cb19c8fe84169fcb07f8f11e66bc9e6e0280efd4715c54818296f8a4a8" - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.7", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "regalloc2" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a8d23b35d7177df3b9d31ed8a9ab4bf625c668be77a319d4f5efd4a5257701c" -dependencies = [ - "fxhash", - "log", - "slice-group-by", - "smallvec", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "region" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0" -dependencies = [ - "bitflags", - "libc", - "mach", - "winapi 0.3.9", -] - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "reqwest" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" -dependencies = [ - "base64", - "bytes 1.2.1", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite 0.2.9", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "resvg" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09697862c5c3f940cbaffef91969c62188b5c8ed385b0aef43a5ff01ddc8000f" -dependencies = [ - "jpeg-decoder", - "log", - "pico-args", - "png", - "rgb", - "svgfilters", - "tiny-skia", - "usvg", -] - -[[package]] -name = "rgb" -version = "0.8.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3603b7d71ca82644f79b5a06d1220e9a58ede60bd32255f698cb1af8838b8db3" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi 0.3.9", -] - -[[package]] -name = "rmp" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] - -[[package]] -name = "rmpv" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de8813b3a2f95c5138fe5925bfb8784175d88d6bff059ba8ce090aa891319754" -dependencies = [ - "num-traits", - "rmp", -] - -[[package]] -name = "rocksdb" -version = "0.18.0" -source = "git+https://github.com/rust-rocksdb/rust-rocksdb?rev=39dc822dde743b2a26eb160b660e8fbdab079d49#39dc822dde743b2a26eb160b660e8fbdab079d49" -dependencies = [ - "libc", - "librocksdb-sys", -] - -[[package]] -name = "rope" -version = "0.1.0" -dependencies = [ - "arrayvec 0.7.2", - "bromberg_sl2", - "gpui", - "log", - "rand 0.8.5", - "smallvec", - "sum_tree", - "util", -] - -[[package]] -name = "roxmltree" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "921904a62e410e37e215c40381b7117f830d9d89ba60ab5236170541dd25646b" -dependencies = [ - "xmlparser", -] - -[[package]] -name = "rpc" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-lock", - "async-tungstenite", - "base64", - "clock", - "collections", - "ctor", - "env_logger", - "futures 0.3.24", - "gpui", - "parking_lot 0.11.2", - "prost 0.8.0", - "prost-build", - "rand 0.8.5", - "rsa", - "serde", - "smol", - "smol-timeout", - "tempdir", - "tracing", - "util", - "zstd", -] - -[[package]] -name = "rsa" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0aeddcca1082112a6eeb43bf25fd7820b066aaf6eaef776e19d0a1febe38fe" -dependencies = [ - "byteorder", - "digest 0.9.0", - "lazy_static", - "num-bigint-dig", - "num-integer", - "num-iter", - "num-traits", - "pem", - "rand 0.8.5", - "simple_asn1", - "subtle", - "zeroize", -] - -[[package]] -name = "rust-embed" -version = "6.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e26934cd67a1da1165efe61cba4047cc1b4a526019da609fcce13a1000afb5fa" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "6.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35d7b402e273544cc08e0824aa3404333fab8a90ac43589d3d5b72f4b346e12" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "7.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1669d81dfabd1b5f8e2856b8bbe146c6192b0ba22162edc738ac0a5de18f054" -dependencies = [ - "globset", - "sha2 0.10.6", - "walkdir", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.33.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938a344304321a9da4973b9ff4f9f8db9caf4597dfd9dda6a60b523340a0fff0" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "itoa", - "libc", - "linux-raw-sys", - "once_cell", - "winapi 0.3.9", -] - -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", -] - -[[package]] -name = "rustls" -version = "0.20.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" -dependencies = [ - "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" -dependencies = [ - "base64", -] - -[[package]] -name = "rustybuzz" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab463a295d00f3692e0974a0bfd83c7a9bcd119e27e07c2beecdb1b44a09d10" -dependencies = [ - "bitflags", - "bytemuck", - "smallvec", - "ttf-parser 0.9.0", - "unicode-bidi-mirroring", - "unicode-ccc", - "unicode-general-category", - "unicode-script", -] - -[[package]] -name = "ryu" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" - -[[package]] -name = "safe_arch" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ff3d6d9696af502cc3110dacce942840fb06ff4514cad92236ecc455f2ce05" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "salsa20" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecbd2eb639fd7cab5804a0837fe373cc2172d15437e804c054a9fb885cb923b0" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" -dependencies = [ - "lazy_static", - "windows-sys", -] - -[[package]] -name = "schemars" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5fb6c61f29e723026dc8e923d94c694313212abbecbbe5f55a7748eec5b307" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f188d036977451159430f3b8dc82ec76364a42b7e289c2b18a9a18f4470058e9" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn", -] - -[[package]] -name = "scoped_threadpool" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" - -[[package]] -name = "scrypt" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879588d8f90906e73302547e20fffefdd240eb3e0e744e142321f5d49dea0518" -dependencies = [ - "base64ct", - "hmac 0.11.0", - "password-hash", - "pbkdf2", - "salsa20", - "sha2 0.9.9", -] - -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - -[[package]] -name = "search" -version = "0.1.0" -dependencies = [ - "anyhow", - "collections", - "editor", - "gpui", - "language", - "log", - "menu", - "postage", - "project", - "serde", - "serde_json", - "settings", - "smallvec", - "theme", - "unindent", - "util", - "workspace", -] - -[[package]] -name = "security-framework" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - -[[package]] -name = "seq-macro" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9f47faea3cad316faa914d013d24f471cd90bfca1a0c70f05a3f42c6441e99" - -[[package]] -name = "serde" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_derive_internals" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_fmt" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2963a69a2b3918c1dc75a45a18bd3fcd1120e31d3f59deb1b2f9b5d5ffb8baa4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_json" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "184c643044780f7ceb59104cef98a5a6f12cb2288a7bc701ab93a362b49fd47d" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_yaml" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" -dependencies = [ - "indexmap", - "ryu", - "serde", - "yaml-rust", -] - -[[package]] -name = "servo-fontconfig" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c" -dependencies = [ - "libc", - "servo-fontconfig-sys", -] - -[[package]] -name = "servo-fontconfig-sys" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388" -dependencies = [ - "expat-sys", - "freetype-sys", - "pkg-config", -] - -[[package]] -name = "settings" -version = "0.1.0" -dependencies = [ - "anyhow", - "assets", - "collections", - "fs", - "futures 0.3.24", - "gpui", - "json_comments", - "postage", - "schemars", - "serde", - "serde_json", - "serde_path_to_error", - "theme", - "toml", - "tree-sitter", - "tree-sitter-json 0.19.0", - "unindent", - "util", -] - -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha-1" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.5", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.5", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.5", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shellexpand" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" -dependencies = [ - "dirs 4.0.0", -] - -[[package]] -name = "shlex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" - -[[package]] -name = "signal-hook" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" -dependencies = [ - "libc", - "mio 0.6.23", - "mio-uds", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - -[[package]] -name = "similar" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad1d488a557b235fc46dae55512ffbfc429d2482b08b4d9435ab07384ca8aec" - -[[package]] -name = "simple_asn1" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb4ea60fb301dc81dfc113df680571045d375ab7345d171c5dc7d7e13107a80" -dependencies = [ - "chrono", - "num-bigint", - "num-traits", - "thiserror", -] - -[[package]] -name = "simplecss" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" -dependencies = [ - "log", -] - -[[package]] -name = "simplelog" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc0ffd69814a9b251d43afcabf96dad1b29f5028378056257be9e3fecc9f720" -dependencies = [ - "chrono", - "log", - "termcolor", -] - -[[package]] -name = "siphasher" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "slice-group-by" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" - -[[package]] -name = "sluice" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" -dependencies = [ - "async-channel", - "futures-core", - "futures-io", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "smol" -version = "1.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cf3b5351f3e783c1d79ab5fc604eeed8b8ae9abd36b166e8b87a089efd85e4" -dependencies = [ - "async-channel", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-net", - "async-process", - "blocking", - "futures-lite", - "once_cell", -] - -[[package]] -name = "smol-timeout" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847d777e2c6c166bad26264479e80a9820f3d364fcb4a0e23cd57bbfa8e94961" -dependencies = [ - "async-io", - "pin-project-lite 0.1.12", -] - -[[package]] -name = "snippet" -version = "0.1.0" -dependencies = [ - "anyhow", - "smallvec", -] - -[[package]] -name = "socket2" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" -dependencies = [ - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spsc-buffer" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be6c3f39c37a4283ee4b43d1311c828f2e1fb0541e76ea0cb1a2abd9ef2f5b3b" - -[[package]] -name = "sqlformat" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87e292b4291f154971a43c3774364e2cbcaec599d3f5bf6fa9d122885dbc38a" -dependencies = [ - "itertools", - "nom", - "unicode_categories", -] - -[[package]] -name = "sqlx" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9249290c05928352f71c077cc44a464d880c63f26f7534728cca008e135c0428" -dependencies = [ - "sqlx-core", - "sqlx-macros", -] - -[[package]] -name = "sqlx-core" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbc16ddba161afc99e14d1713a453747a2b07fc097d2009f4c300ec99286105" -dependencies = [ - "ahash", - "atoi", - "base64", - "bitflags", - "byteorder", - "bytes 1.2.1", - "crc", - "crossbeam-queue", - "dirs 4.0.0", - "dotenvy", - "either", - "event-listener", - "futures-channel", - "futures-core", - "futures-intrusive", - "futures-util", - "hashlink", - "hex", - "hkdf", - "hmac 0.12.1", - "indexmap", - "itoa", - "libc", - "log", - "md-5", - "memchr", - "once_cell", - "paste", - "percent-encoding", - "rand 0.8.5", - "rustls 0.20.6", - "rustls-pemfile", - "serde", - "serde_json", - "sha1", - "sha2 0.10.6", - "smallvec", - "sqlformat", - "sqlx-rt", - "stringprep", - "thiserror", - "time 0.3.15", - "tokio-stream", - "url", - "uuid 1.2.1", - "webpki-roots 0.22.5", - "whoami", -] - -[[package]] -name = "sqlx-macros" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b850fa514dc11f2ee85be9d055c512aa866746adfacd1cb42d867d68e6a5b0d9" -dependencies = [ - "dotenvy", - "either", - "heck 0.4.0", - "once_cell", - "proc-macro2", - "quote", - "sha2 0.10.6", - "sqlx-core", - "sqlx-rt", - "syn", - "url", -] - -[[package]] -name = "sqlx-rt" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c5b2d25fa654cc5f841750b8e1cdedbe21189bf9a9382ee90bfa9dd3562396" -dependencies = [ - "once_cell", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "stringprep" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "sum_tree" -version = "0.1.0" -dependencies = [ - "arrayvec 0.7.2", - "ctor", - "env_logger", - "log", - "rand 0.8.5", -] - -[[package]] -name = "sval" -version = "1.0.0-alpha.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08" -dependencies = [ - "serde", -] - -[[package]] -name = "svg_fmt" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" - -[[package]] -name = "svgfilters" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0dce2fee79ac40c21dafba48565ff7a5fa275e23ffe9ce047a40c9574ba34e" -dependencies = [ - "float-cmp", - "rgb", -] - -[[package]] -name = "svgtypes" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c536faaff1a10837cfe373142583f6e27d81e96beba339147e77b67c9f260ff" -dependencies = [ - "float-cmp", - "siphasher", -] - -[[package]] -name = "syn" -version = "1.0.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", -] - -[[package]] -name = "system-interface" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e09bb3fb4e02ec4b87e182ea9718fadbc0fa3e50085b40a9af9690572b67f9e" -dependencies = [ - "atty", - "bitflags", - "cap-fs-ext", - "cap-std", - "io-lifetimes", - "rustix", - "winapi 0.3.9", - "winx", -] - -[[package]] -name = "target-lexicon" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02424087780c9b71cc96799eaeddff35af2bc513278cda5c99fc1f5d026d3c1" - -[[package]] -name = "tempdir" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -dependencies = [ - "rand 0.4.6", - "remove_dir_all", -] - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if 1.0.0", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi 0.3.9", -] - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "terminal" -version = "0.1.0" -dependencies = [ - "alacritty_terminal", - "anyhow", - "client", - "context_menu", - "dirs 4.0.0", - "editor", - "futures 0.3.24", - "gpui", - "itertools", - "lazy_static", - "libc", - "mio-extras", - "ordered-float", - "procinfo", - "project", - "rand 0.8.5", - "serde", - "settings", - "shellexpand", - "smallvec", - "smol", - "theme", - "thiserror", - "util", - "workspace", -] - -[[package]] -name = "text" -version = "0.1.0" -dependencies = [ - "anyhow", - "clock", - "collections", - "ctor", - "digest 0.9.0", - "env_logger", - "fs", - "gpui", - "lazy_static", - "log", - "parking_lot 0.11.2", - "postage", - "rand 0.8.5", - "regex", - "rope", - "smallvec", - "sum_tree", - "util", -] - -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - -[[package]] -name = "textwrap" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" - -[[package]] -name = "theme" -version = "0.1.0" -dependencies = [ - "anyhow", - "gpui", - "indexmap", - "parking_lot 0.11.2", - "serde", - "serde_json", - "serde_path_to_error", - "toml", -] - -[[package]] -name = "theme_selector" -version = "0.1.0" -dependencies = [ - "editor", - "fuzzy", - "gpui", - "log", - "parking_lot 0.11.2", - "picker", - "postage", - "settings", - "smol", - "theme", - "workspace", -] - -[[package]] -name = "thiserror" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thousands" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" - -[[package]] -name = "thread_local" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tiff" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" -dependencies = [ - "jpeg-decoder", - "miniz_oxide 0.4.4", - "weezl", -] - -[[package]] -name = "time" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi 0.3.9", -] - -[[package]] -name = "time" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c" -dependencies = [ - "itoa", - "libc", - "num_threads", - "serde", - "time-macros", -] - -[[package]] -name = "time-macros" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" - -[[package]] -name = "tiny-skia" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf81f2900d2e235220e6f31ec9f63ade6a7f59090c556d74fe949bb3b15e9fe" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "bytemuck", - "cfg-if 1.0.0", - "png", - "safe_arch", -] - -[[package]] -name = "tiny_http" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce51b50006056f590c9b7c3808c3bd70f0d1101666629713866c227d6e58d39" -dependencies = [ - "ascii", - "chrono", - "chunked_transfer", - "log", - "url", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" -dependencies = [ - "autocfg 1.1.0", - "bytes 1.2.1", - "libc", - "memchr", - "mio 0.8.4", - "num_cpus", - "parking_lot 0.12.1", - "pin-project-lite 0.2.9", - "signal-hook-registry", - "socket2", - "tokio-macros", - "winapi 0.3.9", -] - -[[package]] -name = "tokio-io" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "log", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite 0.2.9", - "tokio", -] - -[[package]] -name = "tokio-macros" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.6", - "tokio", - "webpki 0.22.0", -] - -[[package]] -name = "tokio-stream" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" -dependencies = [ - "futures-core", - "pin-project-lite 0.2.9", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite 0.17.3", -] - -[[package]] -name = "tokio-util" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" -dependencies = [ - "bytes 1.2.1", - "futures-core", - "futures-sink", - "log", - "pin-project-lite 0.2.9", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" -dependencies = [ - "bytes 1.2.1", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite 0.2.9", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" -dependencies = [ - "serde", -] - -[[package]] -name = "tonic" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" -dependencies = [ - "async-stream", - "async-trait", - "base64", - "bytes 1.2.1", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost 0.9.0", - "prost-derive 0.9.0", - "tokio", - "tokio-stream", - "tokio-util 0.6.10", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap", - "pin-project", - "pin-project-lite 0.2.9", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util 0.7.4", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba" -dependencies = [ - "bitflags", - "bytes 1.2.1", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite 0.2.9", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if 1.0.0", - "log", - "pin-project-lite 0.2.9", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", -] - -[[package]] -name = "tree-sitter" -version = "0.20.8" -source = "git+https://github.com/tree-sitter/tree-sitter?rev=366210ae925d7ea0891bc7a0c738f60c77c04d7b#366210ae925d7ea0891bc7a0c738f60c77c04d7b" -dependencies = [ - "cc", - "regex", -] - -[[package]] -name = "tree-sitter-c" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca211f4827d4b4dc79f388bf67b6fa3bc8a8cfa642161ef24f99f371ba34c7b" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-cpp" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a869e3c5cef4e5db4e9ab16a8dc84d73010e60ada14cdc60d2f6d8aed17779d" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-css" -version = "0.19.0" -source = "git+https://github.com/tree-sitter/tree-sitter-css?rev=769203d0f9abe1a9a691ac2b9fe4bb4397a73c51#769203d0f9abe1a9a691ac2b9fe4bb4397a73c51" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-elixir" -version = "0.19.0" -source = "git+https://github.com/elixir-lang/tree-sitter-elixir?rev=05e3631c6a0701c1fa518b0fee7be95a2ceef5e2#05e3631c6a0701c1fa518b0fee7be95a2ceef5e2" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-go" -version = "0.19.1" -source = "git+https://github.com/tree-sitter/tree-sitter-go?rev=aeb2f33b366fd78d5789ff104956ce23508b85db#aeb2f33b366fd78d5789ff104956ce23508b85db" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-html" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "184e6b77953a354303dc87bf5fe36558c83569ce92606e7b382a0dc1b7443443" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-javascript" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2490fab08630b2c8943c320f7b63473cbf65511c8d83aec551beb9b4375906ed" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-json" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b04c4e1a92139535eb9fca4ec8fa9666cc96b618005d3ae35f3c957fa92f92" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-json" -version = "0.20.0" -source = "git+https://github.com/tree-sitter/tree-sitter-json?rev=137e1ce6a02698fc246cdb9c6b886ed1de9a1ed8#137e1ce6a02698fc246cdb9c6b886ed1de9a1ed8" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-markdown" -version = "0.0.1" -source = "git+https://github.com/MDeiml/tree-sitter-markdown?rev=330ecab87a3e3a7211ac69bbadc19eabecdb1cca#330ecab87a3e3a7211ac69bbadc19eabecdb1cca" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-python" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dda114f58048f5059dcf158aff691dffb8e113e6d2b50d94263fd68711975287" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-rust" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13470fafb7327a3acf96f5bc1013b5539a899a182f01c59b5af53f6b93195717" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-toml" -version = "0.5.1" -source = "git+https://github.com/tree-sitter/tree-sitter-toml?rev=342d9be207c2dba869b9967124c679b5e6fd0ebe#342d9be207c2dba869b9967124c679b5e6fd0ebe" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-typescript" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e8ed0ecb931cdff13c6a13f45ccd615156e2779d9ffb0395864e05505e6e86d" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "ttf-parser" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ddb402ac6c2af6f7a2844243887631c4e94b51585b229fcfddb43958cd55ca" - -[[package]] -name = "ttf-parser" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6" - -[[package]] -name = "tungstenite" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad3713a14ae247f22a728a0456a545df14acf3867f905adff84be99e23b3ad1" -dependencies = [ - "base64", - "byteorder", - "bytes 1.2.1", - "http", - "httparse", - "log", - "rand 0.8.5", - "sha-1 0.9.8", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "tungstenite" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" -dependencies = [ - "base64", - "byteorder", - "bytes 1.2.1", - "http", - "httparse", - "log", - "rand 0.8.5", - "sha-1 0.10.0", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "ucd-trie" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" - -[[package]] -name = "unicode-bidi-mirroring" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" - -[[package]] -name = "unicode-ccc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" - -[[package]] -name = "unicode-general-category" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9af028e052a610d99e066b33304625dea9613170a2563314490a4e6ec5cf7f" - -[[package]] -name = "unicode-ident" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-script" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc" - -[[package]] -name = "unicode-segmentation" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" - -[[package]] -name = "unicode-vo" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - -[[package]] -name = "unindent" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ee9362deb4a96cef4d437d1ad49cffc9b9e92d202b6995674e928ce684f112" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "usvg" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8352f317d8f9a918ba5154797fb2a93e2730244041cf7d5be35148266adfa5" -dependencies = [ - "base64", - "data-url", - "flate2", - "fontdb", - "kurbo", - "log", - "memmap2", - "pico-args", - "rctree", - "roxmltree", - "rustybuzz", - "simplecss", - "siphasher", - "svgtypes", - "ttf-parser 0.12.3", - "unicode-bidi", - "unicode-script", - "unicode-vo", - "xmlwriter", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8parse" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372" - -[[package]] -name = "util" -version = "0.1.0" -dependencies = [ - "anyhow", - "futures 0.3.24", - "git2", - "lazy_static", - "log", - "rand 0.8.5", - "serde_json", - "tempdir", -] - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom 0.2.7", -] - -[[package]] -name = "uuid" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feb41e78f93363bb2df8b0e86a2ca30eed7806ea16ea0c790d757cf93f79be83" -dependencies = [ - "getrandom 0.2.7", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "value-bag" -version = "1.0.0-alpha.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" -dependencies = [ - "ctor", - "erased-serde", - "serde", - "serde_fmt", - "sval", - "version_check", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "vim" -version = "0.1.0" -dependencies = [ - "assets", - "async-compat", - "async-trait", - "collections", - "command_palette", - "editor", - "gpui", - "indoc", - "itertools", - "language", - "lazy_static", - "log", - "nvim-rs", - "parking_lot 0.11.2", - "project", - "search", - "serde", - "serde_json", - "settings", - "tokio", - "util", - "workspace", -] - -[[package]] -name = "vte" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983" -dependencies = [ - "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi 0.3.9", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasi-cap-std-sync" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f086c5026d2fc3b268d138e65373f46422cc810f46d6e0776859c5027cb18728" -dependencies = [ - "anyhow", - "async-trait", - "cap-fs-ext", - "cap-rand", - "cap-std", - "cap-time-ext", - "fs-set-times", - "io-extras", - "io-lifetimes", - "is-terminal", - "lazy_static", - "rustix", - "system-interface", - "tracing", - "wasi-common", - "winapi 0.3.9", -] - -[[package]] -name = "wasi-common" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e8844fede1c3787cc08853872f47e8bd91f6c939c7406bc7a5dba496b260c08" -dependencies = [ - "anyhow", - "bitflags", - "cap-rand", - "cap-std", - "io-extras", - "rustix", - "thiserror", - "tracing", - "wiggle", - "winapi 0.3.9", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "wasm-encoder" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64ac98d5d61192cc45c701b7e4bd0b9aff91e2edfc7a088406cfe2288581e2c" -dependencies = [ - "leb128", -] - -[[package]] -name = "wasmparser" -version = "0.85.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570460c58b21e9150d2df0eaaedbb7816c34bcec009ae0dcc976e40ba81463e7" -dependencies = [ - "indexmap", -] - -[[package]] -name = "wasmtime" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f50eadf868ab6a04b7b511460233377d0bfbb92e417b2f6a98b98fef2e098f5" -dependencies = [ - "anyhow", - "async-trait", - "backtrace", - "bincode", - "cfg-if 1.0.0", - "indexmap", - "lazy_static", - "libc", - "log", - "object 0.28.4", - "once_cell", - "paste", - "psm", - "rayon", - "region", - "serde", - "target-lexicon", - "wasmparser", - "wasmtime-cache", - "wasmtime-cranelift", - "wasmtime-environ", - "wasmtime-fiber", - "wasmtime-jit", - "wasmtime-runtime", - "wat", - "winapi 0.3.9", -] - -[[package]] -name = "wasmtime-cache" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1df23c642e1376892f3b72f311596976979cbf8b85469680cdd3a8a063d12a2" -dependencies = [ - "anyhow", - "base64", - "bincode", - "directories-next", - "file-per-thread-logger", - "log", - "rustix", - "serde", - "sha2 0.9.9", - "toml", - "winapi 0.3.9", - "zstd", -] - -[[package]] -name = "wasmtime-cranelift" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f264ff6b4df247d15584f2f53d009fbc90032cfdc2605b52b961bffc71b6eccd" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "gimli", - "log", - "more-asserts", - "object 0.28.4", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-environ", -] - -[[package]] -name = "wasmtime-environ" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "839d2820e4b830f4b9e7aa08d4c0acabf4a5036105d639f6dfa1c6891c73bdc6" -dependencies = [ - "anyhow", - "cranelift-entity", - "gimli", - "indexmap", - "log", - "more-asserts", - "object 0.28.4", - "serde", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-types", -] - -[[package]] -name = "wasmtime-fiber" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3248be3c4911233535356025f6562193614a40155ee9094bb6a2b43f0dc82803" -dependencies = [ - "cc", - "rustix", - "winapi 0.3.9", -] - -[[package]] -name = "wasmtime-jit" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef0a0bcbfa18b946d890078ba0e1bc76bcc53eccfb40806c0020ec29dcd1bd49" -dependencies = [ - "addr2line", - "anyhow", - "bincode", - "cfg-if 1.0.0", - "cpp_demangle", - "gimli", - "ittapi-rs", - "log", - "object 0.28.4", - "region", - "rustc-demangle", - "rustix", - "serde", - "target-lexicon", - "thiserror", - "wasmtime-environ", - "wasmtime-jit-debug", - "wasmtime-runtime", - "winapi 0.3.9", -] - -[[package]] -name = "wasmtime-jit-debug" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4779d976206c458edd643d1ac622b6c37e4a0800a8b1d25dfbf245ac2f2cac" -dependencies = [ - "lazy_static", - "object 0.28.4", - "rustix", -] - -[[package]] -name = "wasmtime-runtime" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7eb6ffa169eb5dcd18ac9473c817358cd57bc62c244622210566d473397954a" -dependencies = [ - "anyhow", - "backtrace", - "cc", - "cfg-if 1.0.0", - "indexmap", - "libc", - "log", - "mach", - "memfd", - "memoffset", - "more-asserts", - "rand 0.8.5", - "region", - "rustix", - "thiserror", - "wasmtime-environ", - "wasmtime-fiber", - "wasmtime-jit-debug", - "winapi 0.3.9", -] - -[[package]] -name = "wasmtime-types" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d932b0ac5336f7308d869703dd225610a6a3aeaa8e968c52b43eed96cefb1c2" -dependencies = [ - "cranelift-entity", - "serde", - "thiserror", - "wasmparser", -] - -[[package]] -name = "wasmtime-wasi" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68b7d77fb6f2975a6fe6cc4d0015d6b0cebb65c39fce1dd4cc00880dbf7789c" -dependencies = [ - "anyhow", - "wasi-cap-std-sync", - "wasi-common", - "wasmtime", - "wiggle", -] - -[[package]] -name = "wast" -version = "35.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" -dependencies = [ - "leb128", -] - -[[package]] -name = "wast" -version = "47.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b98502f3978adea49551e801a6687678e6015317d7d9470a67fe813393f2a8" -dependencies = [ - "leb128", - "memchr", - "unicode-width", - "wasm-encoder", -] - -[[package]] -name = "wat" -version = "1.0.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aab4e20c60429fbba9670a6cae0fff9520046ba0aa3e6d0b1cd2653bea14898" -dependencies = [ - "wast 47.0.1", -] - -[[package]] -name = "web-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" -dependencies = [ - "webpki 0.21.4", -] - -[[package]] -name = "webpki-roots" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" -dependencies = [ - "webpki 0.22.0", -] - -[[package]] -name = "weezl" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" - -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - -[[package]] -name = "which" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" -dependencies = [ - "either", - "libc", - "once_cell", -] - -[[package]] -name = "whoami" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6631b6a2fd59b1841b622e8f1a7ad241ef0a46f2d580464ce8140ac94cbd571" -dependencies = [ - "bumpalo", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wiggle" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dadac11343d2aabc8a906a0db0aaf7cb5046ec3d6fffccdaf2847dccdef8d6" -dependencies = [ - "anyhow", - "async-trait", - "bitflags", - "thiserror", - "tracing", - "wasmtime", - "wiggle-macro", -] - -[[package]] -name = "wiggle-generate" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63a1dccd6b3fbd9a27417f5d30ce9aa3ee9cf529aad453abbf88a49c5d605b79" -dependencies = [ - "anyhow", - "heck 0.4.0", - "proc-macro2", - "quote", - "shellexpand", - "syn", - "witx", -] - -[[package]] -name = "wiggle-macro" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c368d57d9560c34deaa67e06b0953ccf65edb906c525e5a2c866c849b48ec2" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wiggle-generate", -] - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "winx" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d5973cb8cd94a77d03ad7e23bbe14889cb29805da1cec0e4aff75e21aebded" -dependencies = [ - "bitflags", - "io-lifetimes", - "winapi 0.3.9", -] - -[[package]] -name = "wio" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "witx" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" -dependencies = [ - "anyhow", - "log", - "thiserror", - "wast 35.0.2", -] - -[[package]] -name = "workspace" -version = "0.1.0" -dependencies = [ - "anyhow", - "call", - "client", - "collections", - "context_menu", - "drag_and_drop", - "fs", - "futures 0.3.24", - "gpui", - "language", - "log", - "menu", - "parking_lot 0.11.2", - "postage", - "project", - "serde", - "serde_json", - "settings", - "smallvec", - "theme", - "util", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" - -[[package]] -name = "xmlparser" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8" - -[[package]] -name = "xmlwriter" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" - -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "zed" -version = "0.60.4" -dependencies = [ - "activity_indicator", - "anyhow", - "assets", - "async-compression", - "async-recursion", - "async-trait", - "auto_update", - "backtrace", - "breadcrumbs", - "call", - "chat_panel", - "chrono", - "cli", - "client", - "clock", - "collab_ui", - "collections", - "command_palette", - "context_menu", - "ctor", - "diagnostics", - "dirs 3.0.2", - "easy-parallel", - "editor", - "env_logger", - "file_finder", - "fs", - "fsevent", - "futures 0.3.24", - "fuzzy", - "go_to_line", - "gpui", - "ignore", - "image", - "indexmap", - "isahc", - "journal", - "language", - "lazy_static", - "libc", - "log", - "lsp", - "num_cpus", - "outline", - "parking_lot 0.11.2", - "plugin_runtime", - "postage", - "project", - "project_panel", - "project_symbols", - "rand 0.8.5", - "regex", - "rpc", - "rsa", - "rust-embed", - "search", - "serde", - "serde_json", - "serde_path_to_error", - "settings", - "simplelog", - "smallvec", - "smol", - "sum_tree", - "tempdir", - "terminal", - "text", - "theme", - "theme_selector", - "thiserror", - "tiny_http", - "toml", - "tree-sitter", - "tree-sitter-c", - "tree-sitter-cpp", - "tree-sitter-css", - "tree-sitter-elixir", - "tree-sitter-go", - "tree-sitter-html", - "tree-sitter-json 0.20.0", - "tree-sitter-markdown", - "tree-sitter-python", - "tree-sitter-rust", - "tree-sitter-toml", - "tree-sitter-typescript", - "unindent", - "url", - "util", - "vim", - "workspace", -] - -[[package]] -name = "zeroize" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.1+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" -dependencies = [ - "cc", - "libc", -] diff --git a/crates/db/Cargo.toml b/crates/db/Cargo.toml index f4ed283b6e63944425857fedc99be7887ce5a7ac..8edc245b7a55569042762718006076410e72bf7e 100644 --- a/crates/db/Cargo.toml +++ b/crates/db/Cargo.toml @@ -15,7 +15,7 @@ collections = { path = "../collections" } anyhow = "1.0.57" async-trait = "0.1" parking_lot = "0.11.1" -rocksdb = "0.18" +sqlx = { version = "0.6.2", features = ["sqlite", "macros", "offline", "json", "runtime-async-std-rustls"] } [dev-dependencies] gpui = { path = "../gpui", features = ["test-support"] } diff --git a/crates/db/migrations/001_init.sql b/crates/db/migrations/001_init.sql new file mode 100644 index 0000000000000000000000000000000000000000..af15174c243e25107b5d52924384eb7d3edba3c6 --- /dev/null +++ b/crates/db/migrations/001_init.sql @@ -0,0 +1,4 @@ +CREATE TABLE kv_store( + key TEXT NOT NULL, + value TEXT NOT NULL +) STRICT; \ No newline at end of file diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index 0b630bf256147270577703d4d0df3b993d90b234..2db19c297c04e35a1b69738fc3fe4ca7322e3b21 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -1,38 +1,56 @@ use anyhow::Result; +use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; +use sqlx::{Pool, Sqlite, SqlitePool}; use std::path::Path; +use std::str::FromStr; use std::sync::Arc; pub struct Db(DbStore); enum DbStore { Null, - Real(rocksdb::DB), - - #[cfg(any(test, feature = "test-support"))] - Fake { - data: parking_lot::Mutex, Vec>>, - }, + Live(Pool), } +// Things we need to think about: +// Concurrency? - Needs some research +// We need to configure or setup our database, create the tables and such + +// Write our first migration +// + +// To make a migration: +// Add to the migrations directory, a file with the name: +// _.sql. Migrations are executed in order of number + impl Db { /// Open or create a database at the given file path. pub fn open(path: &Path) -> Result> { - let db = rocksdb::DB::open_default(path)?; - Ok(Arc::new(Self(DbStore::Real(db)))) - } + let options = SqliteConnectOptions::from_str(path)?.create_if_missing(true); - /// Open a null database that stores no data, for use as a fallback - /// when there is an error opening the real database. - pub fn null() -> Arc { - Arc::new(Self(DbStore::Null)) + Self::initialize(options) } /// Open a fake database for testing. #[cfg(any(test, feature = "test-support"))] pub fn open_fake() -> Arc { - Arc::new(Self(DbStore::Fake { - data: Default::default(), - })) + let options = SqliteConnectOptions::from_str(":memory:")?; + + Self::initialize(options) + } + + fn initialize(options: SqliteConnectOptions) -> Result> { + let pool = Pool::::connect_with(options)?; + + sqlx::migrate!().run(&pool).await?; + + Ok(Arc::new(Self(DbStore::Live(pool)))) + } + + /// Open a null database that stores no data, for use as a fallback + /// when there is an error opening the real database. + pub fn null() -> Arc { + Arc::new(Self(DbStore::Null)) } pub fn read(&self, keys: I) -> Result>>> @@ -48,15 +66,6 @@ impl Db { .collect(), DbStore::Null => Ok(keys.into_iter().map(|_| None).collect()), - - #[cfg(any(test, feature = "test-support"))] - DbStore::Fake { data: db } => { - let db = db.lock(); - Ok(keys - .into_iter() - .map(|key| db.get(key.as_ref()).cloned()) - .collect()) - } } } @@ -75,14 +84,6 @@ impl Db { } DbStore::Null => {} - - #[cfg(any(test, feature = "test-support"))] - DbStore::Fake { data: db } => { - let mut db = db.lock(); - for key in keys { - db.remove(key.as_ref()); - } - } } Ok(()) } @@ -103,14 +104,6 @@ impl Db { } DbStore::Null => {} - - #[cfg(any(test, feature = "test-support"))] - DbStore::Fake { data: db } => { - let mut db = db.lock(); - for (key, value) in entries { - db.insert(key.as_ref().into(), value.as_ref().into()); - } - } } Ok(()) } diff --git a/script/generate-zed-sqlx-data b/script/generate-zed-sqlx-data new file mode 100755 index 0000000000000000000000000000000000000000..00a0c9ee5d6a1ad19b9bccf9db294ee029439df0 --- /dev/null +++ b/script/generate-zed-sqlx-data @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +# Install sqlx-cli if needed +[[ "$(sqlx --version)" == "sqlx-cli 0.5.7" ]] || cargo install sqlx-cli --version 0.5.7 + +cd crates/db + +mkdir /tmp/zed-client-db +DATABASE_URL=sqlite:///tmp/zed-client-db/test.db + +cargo sqlx -D $DATABASE_URL database setup +cargo sqlx -D $DATABASE_URL prepare \ No newline at end of file From aa8fa4a6d53d5304a229a6dd4f476ae661d25810 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Thu, 13 Oct 2022 16:31:26 -0700 Subject: [PATCH 18/38] more wip --- Cargo.lock | 7799 +++++++++++++++++++++++++++++ crates/db/migrations/001_init.sql | 2 +- crates/db/sqlx-data.json | 3 + crates/db/src/db.rs | 118 +- crates/db/src/kvp.rs | 34 + script/generate-zed-sqlx-data | 3 +- 6 files changed, 7870 insertions(+), 89 deletions(-) create mode 100644 Cargo.lock create mode 100644 crates/db/sqlx-data.json create mode 100644 crates/db/src/kvp.rs diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..5fea66639176b909696dcbc1da272f33dc3e8f14 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7799 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "activity_indicator" +version = "0.1.0" +dependencies = [ + "auto_update", + "editor", + "futures 0.3.24", + "gpui", + "language", + "project", + "settings", + "smallvec", + "util", + "workspace", +] + +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.7", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +dependencies = [ + "memchr", +] + +[[package]] +name = "alacritty_config" +version = "0.1.1-dev" +source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" +dependencies = [ + "log", + "serde", + "serde_yaml", +] + +[[package]] +name = "alacritty_config_derive" +version = "0.2.1-dev" +source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "alacritty_terminal" +version = "0.17.1-dev" +source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" +dependencies = [ + "alacritty_config", + "alacritty_config_derive", + "base64", + "bitflags", + "dirs 4.0.0", + "libc", + "log", + "mio 0.6.23", + "mio-anonymous-pipes", + "mio-extras", + "miow 0.3.7", + "nix", + "parking_lot 0.12.1", + "regex-automata", + "serde", + "serde_yaml", + "signal-hook", + "signal-hook-mio", + "unicode-width", + "vte", + "winapi 0.3.9", +] + +[[package]] +name = "ambient-authority" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "anyhow" +version = "1.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + +[[package]] +name = "assets" +version = "0.1.0" +dependencies = [ + "anyhow", + "gpui", + "rust-embed", +] + +[[package]] +name = "async-broadcast" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90622698a1218e0b2fb846c97b5f19a0831f6baddee73d9454156365ccfa473b" +dependencies = [ + "easy-parallel", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-compat" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b48b4ff0c2026db683dea961cd8ea874737f56cffca86fa84415eaddc51c00d" +dependencies = [ + "futures-core", + "futures-io", + "once_cell", + "pin-project-lite 0.2.9", + "tokio", +] + +[[package]] +name = "async-compression" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" +dependencies = [ + "flate2", + "futures-core", + "futures-io", + "memchr", + "pin-project-lite 0.2.9", +] + +[[package]] +name = "async-executor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "once_cell", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock", + "autocfg 1.1.0", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-global-executor" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da5b41ee986eed3f524c380e6d64965aea573882a8907682ad100f7859305ca" +dependencies = [ + "async-channel", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", +] + +[[package]] +name = "async-io" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" +dependencies = [ + "autocfg 1.1.0", + "concurrent-queue", + "futures-lite", + "libc", + "log", + "once_cell", + "parking", + "polling", + "slab", + "socket2", + "waker-fn", + "winapi 0.3.9", +] + +[[package]] +name = "async-lock" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-net" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4051e67316bc7eff608fe723df5d32ed639946adcd69e07df41fd42a7b411f1f" +dependencies = [ + "async-io", + "autocfg 1.1.0", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-pipe" +version = "0.1.3" +source = "git+https://github.com/zed-industries/async-pipe-rs?rev=82d00a04211cf4e1236029aa03e6b6ce2a74c553#82d00a04211cf4e1236029aa03e6b6ce2a74c553" +dependencies = [ + "futures 0.3.24", + "log", +] + +[[package]] +name = "async-process" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02111fd8655a613c25069ea89fc8d9bb89331fa77486eb3bc059ee757cfa481c" +dependencies = [ + "async-io", + "autocfg 1.1.0", + "blocking", + "cfg-if 1.0.0", + "event-listener", + "futures-lite", + "libc", + "once_cell", + "signal-hook", + "winapi 0.3.9", +] + +[[package]] +name = "async-recursion" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-std" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +dependencies = [ + "async-channel", + "async-global-executor", + "async-io", + "async-lock", + "async-process", + "crossbeam-utils 0.8.12", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite 0.2.9", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +dependencies = [ + "async-stream-impl", + "futures-core", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-task" +version = "4.0.3" +source = "git+https://github.com/zed-industries/async-task?rev=341b57d6de98cdfd7b418567b8de2022ca993a6e#341b57d6de98cdfd7b418567b8de2022ca993a6e" + +[[package]] +name = "async-tls" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" +dependencies = [ + "futures-core", + "futures-io", + "rustls 0.19.1", + "webpki 0.21.4", + "webpki-roots 0.21.1", +] + +[[package]] +name = "async-trait" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-tungstenite" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5682ea0913e5c20780fe5785abacb85a411e7437bf52a1bedb93ddb3972cb8dd" +dependencies = [ + "async-tls", + "futures-io", + "futures-util", + "log", + "pin-project-lite 0.2.9", + "tungstenite 0.16.0", +] + +[[package]] +name = "atoi" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c" +dependencies = [ + "autocfg 1.1.0", +] + +[[package]] +name = "atomic-waker" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "auto_update" +version = "0.1.0" +dependencies = [ + "anyhow", + "client", + "gpui", + "isahc", + "lazy_static", + "log", + "menu", + "project", + "serde", + "serde_json", + "settings", + "smol", + "tempdir", + "theme", + "util", + "workspace", +] + +[[package]] +name = "autocfg" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" +dependencies = [ + "autocfg 1.1.0", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "axum" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e3356844c4d6a6d6467b8da2cffb4a2820be256f50a3a386c9d152bab31043" +dependencies = [ + "async-trait", + "axum-core", + "base64", + "bitflags", + "bytes 1.2.1", + "futures-util", + "headers", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite 0.2.9", + "serde", + "serde_json", + "serde_urlencoded", + "sha-1 0.10.0", + "sync_wrapper", + "tokio", + "tokio-tungstenite", + "tower", + "tower-http", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f0c0a60006f2a293d82d571f635042a72edf927539b7685bd62d361963839b" +dependencies = [ + "async-trait", + "bytes 1.2.1", + "futures-util", + "http", + "http-body", + "mime", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-extra" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69034b3b0fd97923eee2ce8a47540edb21e07f48f87f67d44bb4271cec622bdb" +dependencies = [ + "axum", + "bytes 1.2.1", + "futures-util", + "http", + "mime", + "pin-project-lite 0.2.9", + "serde", + "serde_json", + "tokio", + "tower", + "tower-http", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backtrace" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide 0.5.4", + "object 0.29.0", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "base64ct" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2b2456fd614d856680dcd9fcc660a51a820fa09daef2e49772b56a193c8474" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.59.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "clap 2.34.0", + "env_logger", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "which", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +dependencies = [ + "async-channel", + "async-task", + "atomic-waker", + "fastrand", + "futures-lite", + "once_cell", +] + +[[package]] +name = "breadcrumbs" +version = "0.1.0" +dependencies = [ + "collections", + "editor", + "gpui", + "itertools", + "language", + "project", + "search", + "settings", + "theme", + "workspace", +] + +[[package]] +name = "bromberg_sl2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ed88064f69518b7e3ea50ecfc1b61d43f19248618a377b95ae5c8b611134d4d" +dependencies = [ + "digest 0.9.0", + "lazy_static", + "rayon", + "seq-macro", +] + +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "memchr", +] + +[[package]] +name = "bumpalo" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" + +[[package]] +name = "bytemuck" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +dependencies = [ + "byteorder", + "iovec", +] + +[[package]] +name = "bytes" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "cache-padded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" + +[[package]] +name = "call" +version = "0.1.0" +dependencies = [ + "anyhow", + "client", + "collections", + "futures 0.3.24", + "gpui", + "postage", + "project", + "util", +] + +[[package]] +name = "cap-fs-ext" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e54b86398b5852ddd45784b1d9b196b98beb39171821bad4b8b44534a1e87927" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes", + "winapi 0.3.9", +] + +[[package]] +name = "cap-primitives" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb8fca3e81fae1d91a36e9784ca22a39ef623702b5f7904d89dc31f10184a178" +dependencies = [ + "ambient-authority", + "errno", + "fs-set-times", + "io-extras", + "io-lifetimes", + "ipnet", + "maybe-owned", + "rustix", + "winapi 0.3.9", + "winapi-util", + "winx", +] + +[[package]] +name = "cap-rand" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3b27294116983d706f4c8168f6d10c84f9f5daed0c28bc7d0296cf16bcf971" +dependencies = [ + "ambient-authority", + "rand 0.8.5", +] + +[[package]] +name = "cap-std" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2247568946095c7765ad2b441a56caffc08027734c634a6d5edda648f04e32eb" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes", + "ipnet", + "rustix", +] + +[[package]] +name = "cap-time-ext" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c50472b6ebc302af0401fa3fb939694cd8ff00e0d4c9182001e434fc822ab83a" +dependencies = [ + "cap-primitives", + "once_cell", + "rustix", + "winx", +] + +[[package]] +name = "capture" +version = "0.1.0" +dependencies = [ + "anyhow", + "bindgen", + "block", + "byteorder", + "bytes 1.2.1", + "cocoa", + "core-foundation", + "core-graphics", + "foreign-types", + "futures 0.3.24", + "gpui", + "hmac 0.12.1", + "jwt", + "live_kit", + "log", + "media", + "objc", + "parking_lot 0.11.2", + "postage", + "serde", + "sha2 0.10.6", + "simplelog", +] + +[[package]] +name = "castaway" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" + +[[package]] +name = "cc" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chat_panel" +version = "0.1.0" +dependencies = [ + "client", + "editor", + "gpui", + "menu", + "postage", + "settings", + "theme", + "time 0.3.15", + "util", + "workspace", +] + +[[package]] +name = "chrono" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "time 0.1.44", + "wasm-bindgen", + "winapi 0.3.9", +] + +[[package]] +name = "chunked_transfer" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + +[[package]] +name = "clang-sys" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "3.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "clap_lex", + "indexmap", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap 0.15.1", +] + +[[package]] +name = "clap_derive" +version = "3.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" +dependencies = [ + "heck 0.4.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap 3.2.22", + "core-foundation", + "core-services", + "dirs 3.0.2", + "ipc-channel", + "plist", + "serde", +] + +[[package]] +name = "client" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-recursion", + "async-tungstenite", + "collections", + "db", + "futures 0.3.24", + "gpui", + "image", + "isahc", + "lazy_static", + "log", + "parking_lot 0.11.2", + "postage", + "rand 0.8.5", + "rpc", + "serde", + "smol", + "sum_tree", + "tempfile", + "thiserror", + "time 0.3.15", + "tiny_http", + "url", + "util", + "uuid 1.2.1", +] + +[[package]] +name = "clock" +version = "0.1.0" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cmake" +version = "0.1.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" +dependencies = [ + "cc", +] + +[[package]] +name = "cocoa" +version = "0.24.0" +source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.1" +source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" +dependencies = [ + "bitflags", + "block", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "collab" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "async-tungstenite", + "axum", + "axum-extra", + "base64", + "call", + "clap 3.2.22", + "client", + "collections", + "ctor", + "editor", + "env_logger", + "envy", + "fs", + "futures 0.3.24", + "git", + "gpui", + "hyper", + "language", + "lazy_static", + "lipsum", + "log", + "lsp", + "nanoid", + "parking_lot 0.11.2", + "project", + "prometheus", + "rand 0.8.5", + "reqwest", + "rope", + "rpc", + "scrypt", + "serde", + "serde_json", + "settings", + "sha-1 0.9.8", + "sqlx", + "theme", + "time 0.3.15", + "tokio", + "tokio-tungstenite", + "toml", + "tonic", + "tower", + "tracing", + "tracing-log", + "tracing-subscriber", + "unindent", + "util", + "workspace", +] + +[[package]] +name = "collab_ui" +version = "0.1.0" +dependencies = [ + "anyhow", + "call", + "client", + "clock", + "collections", + "editor", + "futures 0.3.24", + "fuzzy", + "gpui", + "log", + "menu", + "picker", + "postage", + "project", + "serde", + "settings", + "theme", + "util", + "workspace", +] + +[[package]] +name = "collections" +version = "0.1.0" +dependencies = [ + "seahash", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "command_palette" +version = "0.1.0" +dependencies = [ + "collections", + "ctor", + "editor", + "env_logger", + "fuzzy", + "gpui", + "picker", + "project", + "serde_json", + "settings", + "theme", + "util", + "workspace", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" +dependencies = [ + "cache-padded", +] + +[[package]] +name = "context_menu" +version = "0.1.0" +dependencies = [ + "gpui", + "menu", + "settings", + "smallvec", + "theme", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" +dependencies = [ + "bitflags", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "git+https://github.com/servo/core-foundation-rs?rev=079665882507dd5e2ff77db3de5070c1f6c0fb85#079665882507dd5e2ff77db3de5070c1f6c0fb85" +dependencies = [ + "bitflags", + "core-foundation", + "foreign-types", + "libc", +] + +[[package]] +name = "core-services" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b344b958cae90858bf6086f49599ecc5ec8698eacad0ea155509ba11fab347" +dependencies = [ + "core-foundation", +] + +[[package]] +name = "core-text" +version = "19.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25" +dependencies = [ + "core-foundation", + "core-graphics", + "foreign-types", + "libc", +] + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "749d0d6022c9038dccf480bdde2a38d435937335bf2bb0f14e815d94517cdce8" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94370cc7b37bf652ccd8bb8f09bd900997f7ccf97520edfc75554bb5c4abbea" +dependencies = [ + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-entity", + "cranelift-isle", + "gimli", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a3cea8fdab90e44018c5b9a1dfd460d8ee265ac354337150222a354628bdb6" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ac72f76f2698598951ab26d8c96eaa854810e693e7dd52523958b5909fde6b2" + +[[package]] +name = "cranelift-entity" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09eaeacfcd2356fe0e66b295e8f9d59fdd1ac3ace53ba50de14d628ec902f72d" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-frontend" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba69c9980d5ffd62c18a2bde927855fcd7c8dc92f29feaf8636052662cbd99c" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2920dc1e05cac40304456ed3301fde2c09bd6a9b0210bcfa2f101398d628d5b" + +[[package]] +name = "cranelift-native" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04dfa45f9b2a6f587c564d6b63388e00cd6589d2df6ea2758cf79e1a13285e6" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.85.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31a46513ae6f26f3f267d8d75b5373d555fbbd1e68681f348d99df43f747ec54" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools", + "log", + "smallvec", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "crc" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53757d12b596c16c78b83458d732a5d1a17ab3f53f2f7412f6fb57cc8a140ab3" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" +dependencies = [ + "crossbeam-utils 0.7.2", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils 0.8.12", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils 0.8.12", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" +dependencies = [ + "autocfg 1.1.0", + "cfg-if 1.0.0", + "crossbeam-utils 0.8.12", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils 0.8.12", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg 1.1.0", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "ctor" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "curl" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2", + "winapi 0.3.9", +] + +[[package]] +name = "curl-sys" +version = "0.4.56+curl-7.83.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093e169dd4de29e468fa649fbae11cdcd5551c81fe5bf1b0677adad7ef3d26f" +dependencies = [ + "cc", + "libc", + "libnghttp2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "winapi 0.3.9", +] + +[[package]] +name = "cxx" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f39818dcfc97d45b03953c1292efc4e80954e1583c4aa770bac1383e2310a4" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e580d70777c116df50c390d1211993f62d40302881e54d4b79727acb83d0199" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56a46460b88d1cec95112c8c363f0e2c39afdb237f60583b0b36343bf627ea9c" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747b608fecf06b0d72d440f27acc99288207324b793be2c17991839f3d4995ea" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "data-url" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a30bfce702bcfa94e906ef82421f2c0e61c076ad76030c16ee5d2e9a32fe193" +dependencies = [ + "matches", +] + +[[package]] +name = "db" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "collections", + "gpui", + "parking_lot 0.11.2", + "sqlx", + "tempdir", +] + +[[package]] +name = "deflate" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +dependencies = [ + "adler32", + "byteorder", +] + +[[package]] +name = "dhat" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0684eaa19a59be283a6f99369917b679bd4d1d06604b2eb2e2f87b4bbd67668d" +dependencies = [ + "backtrace", + "lazy_static", + "parking_lot 0.12.1", + "rustc-hash", + "serde", + "serde_json", + "thousands", +] + +[[package]] +name = "diagnostics" +version = "0.1.0" +dependencies = [ + "anyhow", + "client", + "collections", + "editor", + "gpui", + "language", + "postage", + "project", + "rope", + "serde_json", + "settings", + "smallvec", + "theme", + "unindent", + "util", + "workspace", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +dependencies = [ + "block-buffer 0.10.3", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if 1.0.0", + "dirs-sys-next", +] + +[[package]] +name = "dirs" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if 1.0.0", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "dotenvy" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9155c8f4dc55c7470ae9da3f63c6785245093b3f6aeb0f5bf2e968efbba314" +dependencies = [ + "dirs 4.0.0", +] + +[[package]] +name = "drag_and_drop" +version = "0.1.0" +dependencies = [ + "collections", + "gpui", +] + +[[package]] +name = "dwrote" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" +dependencies = [ + "lazy_static", + "libc", + "winapi 0.3.9", + "wio", +] + +[[package]] +name = "dyn-clone" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" + +[[package]] +name = "easy-parallel" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946" + +[[package]] +name = "editor" +version = "0.1.0" +dependencies = [ + "aho-corasick", + "anyhow", + "clock", + "collections", + "context_menu", + "ctor", + "env_logger", + "futures 0.3.24", + "fuzzy", + "git", + "gpui", + "indoc", + "itertools", + "language", + "lazy_static", + "log", + "lsp", + "ordered-float", + "parking_lot 0.11.2", + "postage", + "project", + "rand 0.8.5", + "rope", + "rpc", + "serde", + "settings", + "smallvec", + "smol", + "snippet", + "sum_tree", + "text", + "theme", + "tree-sitter", + "tree-sitter-html", + "tree-sitter-javascript", + "tree-sitter-rust", + "unindent", + "util", + "workspace", +] + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +dependencies = [ + "serde", +] + +[[package]] +name = "encoding_rs" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "env_logger" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "envy" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" +dependencies = [ + "serde", +] + +[[package]] +name = "erased-serde" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54558e0ba96fbe24280072642eceb9d7d442e32c7ec0ea9e7ecd7b4ea2cf4e11" +dependencies = [ + "serde", +] + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "etagere" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6301151a318f367f392c31395beb1cfba5ccd9abc44d1db0db3a4b27b9601c89" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "euclid" +version = "0.22.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "expat-sys" +version = "2.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa" +dependencies = [ + "cmake", + "pkg-config", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + +[[package]] +name = "file-per-thread-logger" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" +dependencies = [ + "env_logger", + "log", +] + +[[package]] +name = "file_finder" +version = "0.1.0" +dependencies = [ + "ctor", + "editor", + "env_logger", + "fuzzy", + "gpui", + "menu", + "picker", + "postage", + "project", + "serde_json", + "settings", + "theme", + "util", + "workspace", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +dependencies = [ + "crc32fast", + "miniz_oxide 0.5.4", +] + +[[package]] +name = "float-cmp" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75224bec9bfe1a65e2d34132933f2de7fe79900c96a0174307554244ece8150e" + +[[package]] +name = "float-ord" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e" + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "pin-project", + "spin 0.9.4", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "font-kit" +version = "0.10.0" +source = "git+https://github.com/zed-industries/font-kit?rev=8eaf7a918eafa28b0a37dc759e2e0e7683fa24f1#8eaf7a918eafa28b0a37dc759e2e0e7683fa24f1" +dependencies = [ + "bitflags", + "byteorder", + "core-foundation", + "core-graphics", + "core-text", + "dirs-next", + "dwrote", + "float-ord", + "freetype", + "lazy_static", + "libc", + "log", + "pathfinder_geometry", + "pathfinder_simd", + "servo-fontconfig", + "walkdir", + "winapi 0.3.9", +] + +[[package]] +name = "fontdb" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e58903f4f8d5b58c7d300908e4ebe5289c1bfdf5587964330f12023b8ff17fd1" +dependencies = [ + "log", + "memmap2", + "ttf-parser 0.12.3", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "freetype" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6" +dependencies = [ + "freetype-sys", + "libc", +] + +[[package]] +name = "freetype-sys" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a" +dependencies = [ + "cmake", + "libc", + "pkg-config", +] + +[[package]] +name = "fs" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "collections", + "fsevent", + "futures 0.3.24", + "git2", + "gpui", + "lazy_static", + "libc", + "log", + "lsp", + "parking_lot 0.11.2", + "regex", + "rope", + "serde", + "serde_json", + "smol", + "tempfile", + "util", +] + +[[package]] +name = "fs-set-times" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df62ee66ee2d532ea8d567b5a3f0d03ecd64636b98bad5be1e93dcc918b92aa" +dependencies = [ + "io-lifetimes", + "rustix", + "winapi 0.3.9", +] + +[[package]] +name = "fsevent" +version = "2.0.2" +dependencies = [ + "bitflags", + "fsevent-sys", + "parking_lot 0.11.2", + "tempdir", +] + +[[package]] +name = "fsevent-sys" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6f5e6817058771c10f0eb0f05ddf1e35844266f972004fe8e4b21fda295bd5" +dependencies = [ + "libc", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + +[[package]] +name = "futures" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" + +[[package]] +name = "futures-executor" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62007592ac46aa7c2b6416f7deb9a8a8f63a01e0f1d6e1787d5630170db2b63e" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot 0.11.2", +] + +[[package]] +name = "futures-io" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" + +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.9", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-rustls" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" +dependencies = [ + "futures-io", + "rustls 0.20.6", + "webpki 0.22.0", +] + +[[package]] +name = "futures-sink" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" + +[[package]] +name = "futures-task" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" + +[[package]] +name = "futures-util" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" +dependencies = [ + "futures 0.1.31", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.9", + "pin-utils", + "slab", + "tokio-io", +] + +[[package]] +name = "fuzzy" +version = "0.1.0" +dependencies = [ + "gpui", + "util", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gif" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "git" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "clock", + "collections", + "futures 0.3.24", + "git2", + "lazy_static", + "log", + "parking_lot 0.11.2", + "rope", + "smol", + "sum_tree", + "text", + "unindent", + "util", +] + +[[package]] +name = "git2" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "globset" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "gloo-timers" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "go_to_line" +version = "0.1.0" +dependencies = [ + "editor", + "gpui", + "menu", + "postage", + "rope", + "settings", + "text", + "workspace", +] + +[[package]] +name = "gpui" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-task", + "backtrace", + "bindgen", + "block", + "cc", + "cocoa", + "collections", + "core-foundation", + "core-graphics", + "core-text", + "ctor", + "dhat", + "env_logger", + "etagere", + "font-kit", + "foreign-types", + "futures 0.3.24", + "gpui_macros", + "image", + "itertools", + "lazy_static", + "log", + "media", + "metal", + "num_cpus", + "objc", + "ordered-float", + "parking", + "parking_lot 0.11.2", + "pathfinder_color", + "pathfinder_geometry", + "png", + "postage", + "rand 0.8.5", + "resvg", + "seahash", + "serde", + "serde_json", + "simplelog", + "smallvec", + "smol", + "sum_tree", + "time 0.3.15", + "tiny-skia", + "tree-sitter", + "usvg", + "util", + "waker-fn", +] + +[[package]] +name = "gpui_macros" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "h2" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" +dependencies = [ + "bytes 1.2.1", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util 0.7.4", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashlink" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "headers" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +dependencies = [ + "base64", + "bitflags", + "bytes 1.2.1", + "headers-core", + "http", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.5", +] + +[[package]] +name = "http" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +dependencies = [ + "bytes 1.2.1", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes 1.2.1", + "http", + "pin-project-lite 0.2.9", +] + +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" +dependencies = [ + "bytes 1.2.1", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.9", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite 0.2.9", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes 1.2.1", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi 0.3.9", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde6edd6cef363e9359ed3c98ba64590ba9eecba2293eb5a723ab32aee8926aa" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" +dependencies = [ + "crossbeam-utils 0.8.12", + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.23.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "gif", + "jpeg-decoder", + "num-iter", + "num-rational", + "num-traits", + "png", + "scoped_threadpool", + "tiff", +] + +[[package]] +name = "indexmap" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +dependencies = [ + "autocfg 1.1.0", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indoc" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adab1eaa3408fb7f0c777a73e7465fd5656136fc93b670eb6df3c88c2c1344e3" + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "io-extras" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c937cc9891c12eaa8c63ad347e4a288364b1328b924886970b47a14ab8f8f8" +dependencies = [ + "io-lifetimes", + "winapi 0.3.9", +] + +[[package]] +name = "io-lifetimes" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "ipc-channel" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cb1d9211085f0ea6f1379d944b93c4d07e8207aa3bcf49f37eda12b85081887" +dependencies = [ + "bincode", + "crossbeam-channel 0.4.4", + "fnv", + "lazy_static", + "libc", + "mio 0.6.23", + "rand 0.7.3", + "serde", + "tempfile", + "uuid 0.8.2", + "winapi 0.3.9", +] + +[[package]] +name = "ipnet" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" + +[[package]] +name = "is-terminal" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c89a757e762896bdbdfadf2860d0f8b0cea5e363d8cf3e7bdfeb63d1d976352" +dependencies = [ + "hermit-abi 0.2.6", + "io-lifetimes", + "rustix", + "winapi 0.3.9", +] + +[[package]] +name = "isahc" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel", + "castaway", + "crossbeam-utils 0.8.12", + "curl", + "curl-sys", + "encoding_rs", + "event-listener", + "futures-lite", + "http", + "log", + "mime", + "once_cell", + "polling", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" + +[[package]] +name = "ittapi-rs" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f712648a1ad72fbfb7adc2772c331e8d90f022f8cf30cbabefba2878dd3172b0" +dependencies = [ + "cc", +] + +[[package]] +name = "jobserver" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +dependencies = [ + "libc", +] + +[[package]] +name = "journal" +version = "0.1.0" +dependencies = [ + "chrono", + "dirs 4.0.0", + "editor", + "gpui", + "log", + "util", + "workspace", +] + +[[package]] +name = "jpeg-decoder" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json_comments" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ee439ee368ba4a77ac70d04f14015415af8600d6c894dc1f11bd79758c57d5" + +[[package]] +name = "jwt" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f" +dependencies = [ + "base64", + "crypto-common", + "digest 0.10.5", + "hmac 0.12.1", + "serde", + "serde_json", + "sha2 0.10.6", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "kurbo" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449" +dependencies = [ + "arrayvec 0.7.2", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "language" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-broadcast", + "async-trait", + "client", + "clock", + "collections", + "ctor", + "env_logger", + "fs", + "futures 0.3.24", + "fuzzy", + "git", + "gpui", + "lazy_static", + "log", + "lsp", + "parking_lot 0.11.2", + "postage", + "rand 0.8.5", + "regex", + "rope", + "rpc", + "serde", + "serde_json", + "settings", + "similar", + "smallvec", + "smol", + "sum_tree", + "text", + "theme", + "tree-sitter", + "tree-sitter-html", + "tree-sitter-javascript", + "tree-sitter-json 0.19.0", + "tree-sitter-python", + "tree-sitter-rust", + "tree-sitter-typescript", + "unindent", + "util", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libc" +version = "0.2.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" + +[[package]] +name = "libgit2-sys" +version = "0.14.0+1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47a00859c70c8a4f7218e6d1cc32875c4b55f6799445b842b0d8ed5e4c3d959b" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libm" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "292a948cd991e376cf75541fe5b97a1081d713c618b4f1b9500f8844e49eb565" + +[[package]] +name = "libnghttp2-sys" +version = "0.1.7+1.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "librocksdb-sys" +version = "0.7.1+7.3.1" +source = "git+https://github.com/rust-rocksdb/rust-rocksdb?rev=39dc822dde743b2a26eb160b660e8fbdab079d49#39dc822dde743b2a26eb160b660e8fbdab079d49" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "zstd-sys", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +dependencies = [ + "cc", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" + +[[package]] +name = "lipsum" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8451846f1f337e44486666989fbce40be804da139d5a4477d6b88ece5dc69f4" +dependencies = [ + "rand 0.8.5", + "rand_chacha 0.3.1", +] + +[[package]] +name = "live_kit" +version = "0.1.0" +dependencies = [ + "anyhow", + "core-foundation", + "core-graphics", + "futures 0.3.24", + "media", + "parking_lot 0.11.2", + "serde", + "serde_json", +] + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg 1.1.0", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if 1.0.0", + "serde", + "value-bag", +] + +[[package]] +name = "lsp" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-pipe", + "collections", + "ctor", + "env_logger", + "futures 0.3.24", + "gpui", + "log", + "lsp-types", + "parking_lot 0.11.2", + "postage", + "serde", + "serde_json", + "smol", + "unindent", + "util", +] + +[[package]] +name = "lsp-types" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2368312c59425dd133cb9a327afee65be0a633a8ce471d248e2202a48f8f68ae" +dependencies = [ + "bitflags", + "serde", + "serde_json", + "serde_repr", + "url", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "matchit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" + +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest 0.10.5", +] + +[[package]] +name = "media" +version = "0.1.0" +dependencies = [ + "anyhow", + "bindgen", + "block", + "bytes 1.2.1", + "core-foundation", + "foreign-types", + "metal", + "objc", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memfd" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6627dc657574b49d6ad27105ed671822be56e0d2547d413bfbf3e8d8fa92e7a" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "723e3ebdcdc5c023db1df315364573789f8857c11b631a2fdfad7c00f5c046b4" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg 1.1.0", +] + +[[package]] +name = "menu" +version = "0.1.0" +dependencies = [ + "gpui", +] + +[[package]] +name = "metal" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4598d719460ade24c7d91f335daf055bf2a7eec030728ce751814c50cdd6a26c" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "foreign-types", + "log", + "objc", +] + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg 1.1.0", +] + +[[package]] +name = "miniz_oxide" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.6.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +dependencies = [ + "cfg-if 0.1.10", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow 0.2.2", + "net2", + "slab", + "winapi 0.2.8", +] + +[[package]] +name = "mio" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys", +] + +[[package]] +name = "mio-anonymous-pipes" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bc513025fe5005a3aa561b50fdb2cda5a150b84800ae02acd8aa9ed62ca1a6b" +dependencies = [ + "mio 0.6.23", + "miow 0.3.7", + "parking_lot 0.11.2", + "spsc-buffer", + "winapi 0.3.9", +] + +[[package]] +name = "mio-extras" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" +dependencies = [ + "lazycell", + "log", + "mio 0.6.23", + "slab", +] + +[[package]] +name = "mio-uds" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" +dependencies = [ + "iovec", + "libc", + "mio 0.6.23", +] + +[[package]] +name = "miow" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "more-asserts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "nanoid" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "native-tls" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "net2" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "nix" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "ntapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi 0.3.9", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg 1.1.0", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4547ee5541c18742396ae2c895d0717d0f886d8823b8399cdaf7b07d63ad0480" +dependencies = [ + "autocfg 0.1.8", + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg 1.1.0", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg 1.1.0", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg 1.1.0", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg 1.1.0", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +dependencies = [ + "hermit-abi 0.1.19", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "nvim-rs" +version = "0.5.0" +source = "git+https://github.com/KillTheMule/nvim-rs?branch=master#d701c2790dcb2579f8f4d7003ba30e2100a7d25b" +dependencies = [ + "async-trait", + "futures 0.3.24", + "log", + "parity-tokio-ipc", + "rmp", + "rmpv", + "tokio", + "tokio-util 0.7.4", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "object" +version = "0.28.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" +dependencies = [ + "crc32fast", + "hashbrown 0.11.2", + "indexmap", + "memchr", +] + +[[package]] +name = "object" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" +dependencies = [ + "autocfg 1.1.0", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ordered-float" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" +dependencies = [ + "num-traits", +] + +[[package]] +name = "os_str_bytes" +version = "6.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" + +[[package]] +name = "outline" +version = "0.1.0" +dependencies = [ + "editor", + "fuzzy", + "gpui", + "language", + "ordered-float", + "picker", + "postage", + "settings", + "smol", + "text", + "workspace", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parity-tokio-ipc" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9981e32fb75e004cc148f5fb70342f393830e0a4aa62e3cc93b50976218d42b6" +dependencies = [ + "futures 0.3.24", + "libc", + "log", + "rand 0.7.3", + "tokio", + "winapi 0.3.9", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.5", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.3", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi 0.3.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + +[[package]] +name = "password-hash" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e0b28ace46c5a396546bcf443bf422b57049617433d8854227352a4a9b24e7" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" + +[[package]] +name = "pathfinder_color" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69bdc0d277d559e35e1b374de56df9262a6b71e091ca04a8831a239f8c7f0c62" +dependencies = [ + "pathfinder_simd", +] + +[[package]] +name = "pathfinder_geometry" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" +dependencies = [ + "log", + "pathfinder_simd", +] + +[[package]] +name = "pathfinder_simd" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39fe46acc5503595e5949c17b818714d26fdf9b4920eacf3b2947f0199f4a6ff" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "pbkdf2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +dependencies = [ + "crypto-mac", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +dependencies = [ + "base64", + "once_cell", + "regex", +] + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "pest" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "picker" +version = "0.1.0" +dependencies = [ + "ctor", + "editor", + "env_logger", + "gpui", + "menu", + "serde_json", + "settings", + "theme", + "util", + "workspace", +] + +[[package]] +name = "pico-args" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" + +[[package]] +name = "plist" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" +dependencies = [ + "base64", + "indexmap", + "line-wrap", + "serde", + "time 0.3.15", + "xml-rs", +] + +[[package]] +name = "plugin" +version = "0.1.0" +dependencies = [ + "bincode", + "plugin_macros", + "serde", +] + +[[package]] +name = "plugin_macros" +version = "0.1.0" +dependencies = [ + "bincode", + "proc-macro2", + "quote", + "serde", + "syn", +] + +[[package]] +name = "plugin_runtime" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "pollster", + "serde", + "serde_json", + "smol", + "wasi-common", + "wasmtime", + "wasmtime-wasi", +] + +[[package]] +name = "png" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" +dependencies = [ + "bitflags", + "crc32fast", + "deflate", + "miniz_oxide 0.3.7", +] + +[[package]] +name = "polling" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" +dependencies = [ + "autocfg 1.1.0", + "cfg-if 1.0.0", + "libc", + "log", + "wepoll-ffi", + "winapi 0.3.9", +] + +[[package]] +name = "pollster" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da3b0203fd7ee5720aa0b5e790b591aa5d3f41c3ed2c34a3a393382198af2f7" + +[[package]] +name = "postage" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a63d25391d04a097954b76aba742b6b5b74f213dfe3dbaeeb36e8ddc1c657f0b" +dependencies = [ + "atomic", + "crossbeam-queue", + "futures 0.3.24", + "log", + "pin-project", + "pollster", + "static_assertions", + "thiserror", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "procinfo" +version = "0.1.0" +source = "git+https://github.com/zed-industries/wezterm?rev=5cd757e5f2eb039ed0c6bb6512223e69d5efc64d#5cd757e5f2eb039ed0c6bb6512223e69d5efc64d" +dependencies = [ + "libc", + "log", + "ntapi", + "winapi 0.3.9", +] + +[[package]] +name = "project" +version = "0.1.0" +dependencies = [ + "aho-corasick", + "anyhow", + "async-trait", + "client", + "clock", + "collections", + "db", + "fs", + "fsevent", + "futures 0.3.24", + "fuzzy", + "git", + "gpui", + "ignore", + "language", + "lazy_static", + "log", + "lsp", + "parking_lot 0.11.2", + "postage", + "pulldown-cmark", + "rand 0.8.5", + "regex", + "rocksdb", + "rope", + "rpc", + "serde", + "serde_json", + "settings", + "sha2 0.10.6", + "similar", + "smol", + "sum_tree", + "tempdir", + "text", + "thiserror", + "toml", + "unindent", + "util", +] + +[[package]] +name = "project_panel" +version = "0.1.0" +dependencies = [ + "context_menu", + "editor", + "futures 0.3.24", + "gpui", + "menu", + "postage", + "project", + "serde_json", + "settings", + "theme", + "unicase", + "util", + "workspace", +] + +[[package]] +name = "project_symbols" +version = "0.1.0" +dependencies = [ + "anyhow", + "editor", + "futures 0.3.24", + "fuzzy", + "gpui", + "language", + "lsp", + "ordered-float", + "picker", + "postage", + "project", + "settings", + "smol", + "text", + "util", + "workspace", +] + +[[package]] +name = "prometheus" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45c8babc29389186697fe5a2a4859d697825496b83db5d0b65271cdc0488e88c" +dependencies = [ + "cfg-if 1.0.0", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.1", + "protobuf", + "thiserror", +] + +[[package]] +name = "prost" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020" +dependencies = [ + "bytes 1.2.1", + "prost-derive 0.8.0", +] + +[[package]] +name = "prost" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes 1.2.1", + "prost-derive 0.9.0", +] + +[[package]] +name = "prost-build" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" +dependencies = [ + "bytes 1.2.1", + "heck 0.3.3", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prost 0.9.0", + "prost-types", + "regex", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600d2f334aa05acb02a755e217ef1ab6dea4d51b58b7846588b747edec04efba" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +dependencies = [ + "bytes 1.2.1", + "prost 0.9.0", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63" +dependencies = [ + "bitflags", + "memchr", + "unicase", +] + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi 0.3.9", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.7", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rayon" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +dependencies = [ + "autocfg 1.1.0", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +dependencies = [ + "crossbeam-channel 0.5.6", + "crossbeam-deque", + "crossbeam-utils 0.8.12", + "num_cpus", +] + +[[package]] +name = "rctree" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be9e29cb19c8fe84169fcb07f8f11e66bc9e6e0280efd4715c54818296f8a4a8" + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.7", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regalloc2" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a8d23b35d7177df3b9d31ed8a9ab4bf625c668be77a319d4f5efd4a5257701c" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" + +[[package]] +name = "region" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0" +dependencies = [ + "bitflags", + "libc", + "mach", + "winapi 0.3.9", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "reqwest" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" +dependencies = [ + "base64", + "bytes 1.2.1", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.9", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "resvg" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09697862c5c3f940cbaffef91969c62188b5c8ed385b0aef43a5ff01ddc8000f" +dependencies = [ + "jpeg-decoder", + "log", + "pico-args", + "png", + "rgb", + "svgfilters", + "tiny-skia", + "usvg", +] + +[[package]] +name = "rgb" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3603b7d71ca82644f79b5a06d1220e9a58ede60bd32255f698cb1af8838b8db3" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "rmp" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmpv" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de8813b3a2f95c5138fe5925bfb8784175d88d6bff059ba8ce090aa891319754" +dependencies = [ + "num-traits", + "rmp", +] + +[[package]] +name = "rocksdb" +version = "0.18.0" +source = "git+https://github.com/rust-rocksdb/rust-rocksdb?rev=39dc822dde743b2a26eb160b660e8fbdab079d49#39dc822dde743b2a26eb160b660e8fbdab079d49" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rope" +version = "0.1.0" +dependencies = [ + "arrayvec 0.7.2", + "bromberg_sl2", + "gpui", + "log", + "rand 0.8.5", + "smallvec", + "sum_tree", + "util", +] + +[[package]] +name = "roxmltree" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "921904a62e410e37e215c40381b7117f830d9d89ba60ab5236170541dd25646b" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "rpc" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-lock", + "async-tungstenite", + "base64", + "clock", + "collections", + "ctor", + "env_logger", + "futures 0.3.24", + "gpui", + "parking_lot 0.11.2", + "prost 0.8.0", + "prost-build", + "rand 0.8.5", + "rsa", + "serde", + "smol", + "smol-timeout", + "tempdir", + "tracing", + "util", + "zstd", +] + +[[package]] +name = "rsa" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0aeddcca1082112a6eeb43bf25fd7820b066aaf6eaef776e19d0a1febe38fe" +dependencies = [ + "byteorder", + "digest 0.9.0", + "lazy_static", + "num-bigint-dig", + "num-integer", + "num-iter", + "num-traits", + "pem", + "rand 0.8.5", + "simple_asn1", + "subtle", + "zeroize", +] + +[[package]] +name = "rust-embed" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e26934cd67a1da1165efe61cba4047cc1b4a526019da609fcce13a1000afb5fa" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "6.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35d7b402e273544cc08e0824aa3404333fab8a90ac43589d3d5b72f4b346e12" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "7.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1669d81dfabd1b5f8e2856b8bbe146c6192b0ba22162edc738ac0a5de18f054" +dependencies = [ + "globset", + "sha2 0.10.6", + "walkdir", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.33.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938a344304321a9da4973b9ff4f9f8db9caf4597dfd9dda6a60b523340a0fff0" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "itoa", + "libc", + "linux-raw-sys", + "once_cell", + "winapi 0.3.9", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64", + "log", + "ring", + "sct 0.6.1", + "webpki 0.21.4", +] + +[[package]] +name = "rustls" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +dependencies = [ + "log", + "ring", + "sct 0.7.0", + "webpki 0.22.0", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" +dependencies = [ + "base64", +] + +[[package]] +name = "rustybuzz" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab463a295d00f3692e0974a0bfd83c7a9bcd119e27e07c2beecdb1b44a09d10" +dependencies = [ + "bitflags", + "bytemuck", + "smallvec", + "ttf-parser 0.9.0", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-general-category", + "unicode-script", +] + +[[package]] +name = "ryu" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" + +[[package]] +name = "safe_arch" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ff3d6d9696af502cc3110dacce942840fb06ff4514cad92236ecc455f2ce05" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "salsa20" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecbd2eb639fd7cab5804a0837fe373cc2172d15437e804c054a9fb885cb923b0" +dependencies = [ + "cipher", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +dependencies = [ + "lazy_static", + "windows-sys", +] + +[[package]] +name = "schemars" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a5fb6c61f29e723026dc8e923d94c694313212abbecbbe5f55a7748eec5b307" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f188d036977451159430f3b8dc82ec76364a42b7e289c2b18a9a18f4470058e9" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" + +[[package]] +name = "scrypt" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879588d8f90906e73302547e20fffefdd240eb3e0e744e142321f5d49dea0518" +dependencies = [ + "base64ct", + "hmac 0.11.0", + "password-hash", + "pbkdf2", + "salsa20", + "sha2 0.9.9", +] + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "search" +version = "0.1.0" +dependencies = [ + "anyhow", + "collections", + "editor", + "gpui", + "language", + "log", + "menu", + "postage", + "project", + "serde", + "serde_json", + "settings", + "smallvec", + "theme", + "unindent", + "util", + "workspace", +] + +[[package]] +name = "security-framework" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "seq-macro" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9f47faea3cad316faa914d013d24f471cd90bfca1a0c70f05a3f42c6441e99" + +[[package]] +name = "serde" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_fmt" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2963a69a2b3918c1dc75a45a18bd3fcd1120e31d3f59deb1b2f9b5d5ffb8baa4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_json" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "184c643044780f7ceb59104cef98a5a6f12cb2288a7bc701ab93a362b49fd47d" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "servo-fontconfig" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c" +dependencies = [ + "libc", + "servo-fontconfig-sys", +] + +[[package]] +name = "servo-fontconfig-sys" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388" +dependencies = [ + "expat-sys", + "freetype-sys", + "pkg-config", +] + +[[package]] +name = "settings" +version = "0.1.0" +dependencies = [ + "anyhow", + "assets", + "collections", + "fs", + "futures 0.3.24", + "gpui", + "json_comments", + "postage", + "rope", + "schemars", + "serde", + "serde_json", + "serde_path_to_error", + "theme", + "toml", + "tree-sitter", + "tree-sitter-json 0.19.0", + "unindent", + "util", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha-1" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.5", +] + +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.5", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.5", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs 4.0.0", +] + +[[package]] +name = "shlex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" + +[[package]] +name = "signal-hook" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio 0.6.23", + "mio-uds", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "similar" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad1d488a557b235fc46dae55512ffbfc429d2482b08b4d9435ab07384ca8aec" + +[[package]] +name = "simple_asn1" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb4ea60fb301dc81dfc113df680571045d375ab7345d171c5dc7d7e13107a80" +dependencies = [ + "chrono", + "num-bigint", + "num-traits", + "thiserror", +] + +[[package]] +name = "simplecss" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" +dependencies = [ + "log", +] + +[[package]] +name = "simplelog" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bc0ffd69814a9b251d43afcabf96dad1b29f5028378056257be9e3fecc9f720" +dependencies = [ + "chrono", + "log", + "termcolor", +] + +[[package]] +name = "siphasher" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg 1.1.0", +] + +[[package]] +name = "slice-group-by" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "smol" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cf3b5351f3e783c1d79ab5fc604eeed8b8ae9abd36b166e8b87a089efd85e4" +dependencies = [ + "async-channel", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-net", + "async-process", + "blocking", + "futures-lite", + "once_cell", +] + +[[package]] +name = "smol-timeout" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "847d777e2c6c166bad26264479e80a9820f3d364fcb4a0e23cd57bbfa8e94961" +dependencies = [ + "async-io", + "pin-project-lite 0.1.12", +] + +[[package]] +name = "snippet" +version = "0.1.0" +dependencies = [ + "anyhow", + "smallvec", +] + +[[package]] +name = "socket2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spsc-buffer" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be6c3f39c37a4283ee4b43d1311c828f2e1fb0541e76ea0cb1a2abd9ef2f5b3b" + +[[package]] +name = "sqlformat" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87e292b4291f154971a43c3774364e2cbcaec599d3f5bf6fa9d122885dbc38a" +dependencies = [ + "itertools", + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9249290c05928352f71c077cc44a464d880c63f26f7534728cca008e135c0428" +dependencies = [ + "sqlx-core", + "sqlx-macros", +] + +[[package]] +name = "sqlx-core" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbc16ddba161afc99e14d1713a453747a2b07fc097d2009f4c300ec99286105" +dependencies = [ + "ahash", + "atoi", + "base64", + "bitflags", + "byteorder", + "bytes 1.2.1", + "crc", + "crossbeam-queue", + "dirs 4.0.0", + "dotenvy", + "either", + "event-listener", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "hashlink", + "hex", + "hkdf", + "hmac 0.12.1", + "indexmap", + "itoa", + "libc", + "libsqlite3-sys", + "log", + "md-5", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rand 0.8.5", + "rustls 0.20.6", + "rustls-pemfile", + "serde", + "serde_json", + "sha1", + "sha2 0.10.6", + "smallvec", + "sqlformat", + "sqlx-rt", + "stringprep", + "thiserror", + "time 0.3.15", + "tokio-stream", + "url", + "uuid 1.2.1", + "webpki-roots 0.22.5", + "whoami", +] + +[[package]] +name = "sqlx-macros" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b850fa514dc11f2ee85be9d055c512aa866746adfacd1cb42d867d68e6a5b0d9" +dependencies = [ + "dotenvy", + "either", + "heck 0.4.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.6", + "sqlx-core", + "sqlx-rt", + "syn", + "url", +] + +[[package]] +name = "sqlx-rt" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24c5b2d25fa654cc5f841750b8e1cdedbe21189bf9a9382ee90bfa9dd3562396" +dependencies = [ + "async-std", + "futures-rustls", + "once_cell", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stringprep" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "sum_tree" +version = "0.1.0" +dependencies = [ + "arrayvec 0.7.2", + "ctor", + "env_logger", + "log", + "rand 0.8.5", +] + +[[package]] +name = "sval" +version = "1.0.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08" +dependencies = [ + "serde", +] + +[[package]] +name = "svg_fmt" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" + +[[package]] +name = "svgfilters" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb0dce2fee79ac40c21dafba48565ff7a5fa275e23ffe9ce047a40c9574ba34e" +dependencies = [ + "float-cmp", + "rgb", +] + +[[package]] +name = "svgtypes" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c536faaff1a10837cfe373142583f6e27d81e96beba339147e77b67c9f260ff" +dependencies = [ + "float-cmp", + "siphasher", +] + +[[package]] +name = "syn" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "system-interface" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e09bb3fb4e02ec4b87e182ea9718fadbc0fa3e50085b40a9af9690572b67f9e" +dependencies = [ + "atty", + "bitflags", + "cap-fs-ext", + "cap-std", + "io-lifetimes", + "rustix", + "winapi 0.3.9", + "winx", +] + +[[package]] +name = "target-lexicon" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c02424087780c9b71cc96799eaeddff35af2bc513278cda5c99fc1f5d026d3c1" + +[[package]] +name = "tempdir" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +dependencies = [ + "rand 0.4.6", + "remove_dir_all", +] + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi 0.3.9", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "terminal" +version = "0.1.0" +dependencies = [ + "alacritty_terminal", + "anyhow", + "client", + "context_menu", + "dirs 4.0.0", + "editor", + "futures 0.3.24", + "gpui", + "itertools", + "lazy_static", + "libc", + "mio-extras", + "ordered-float", + "procinfo", + "project", + "rand 0.8.5", + "serde", + "settings", + "shellexpand", + "smallvec", + "smol", + "theme", + "thiserror", + "util", + "workspace", +] + +[[package]] +name = "text" +version = "0.1.0" +dependencies = [ + "anyhow", + "clock", + "collections", + "ctor", + "digest 0.9.0", + "env_logger", + "fs", + "gpui", + "lazy_static", + "log", + "parking_lot 0.11.2", + "postage", + "rand 0.8.5", + "regex", + "rope", + "smallvec", + "sum_tree", + "util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" + +[[package]] +name = "theme" +version = "0.1.0" +dependencies = [ + "anyhow", + "gpui", + "indexmap", + "parking_lot 0.11.2", + "serde", + "serde_json", + "serde_path_to_error", + "toml", +] + +[[package]] +name = "theme_selector" +version = "0.1.0" +dependencies = [ + "editor", + "fuzzy", + "gpui", + "log", + "parking_lot 0.11.2", + "picker", + "postage", + "settings", + "smol", + "theme", + "workspace", +] + +[[package]] +name = "thiserror" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thousands" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" +dependencies = [ + "jpeg-decoder", + "miniz_oxide 0.4.4", + "weezl", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi 0.3.9", +] + +[[package]] +name = "time" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c" +dependencies = [ + "itoa", + "libc", + "num_threads", + "serde", + "time-macros", +] + +[[package]] +name = "time-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" + +[[package]] +name = "tiny-skia" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf81f2900d2e235220e6f31ec9f63ade6a7f59090c556d74fe949bb3b15e9fe" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "bytemuck", + "cfg-if 1.0.0", + "png", + "safe_arch", +] + +[[package]] +name = "tiny_http" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce51b50006056f590c9b7c3808c3bd70f0d1101666629713866c227d6e58d39" +dependencies = [ + "ascii", + "chrono", + "chunked_transfer", + "log", + "url", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" +dependencies = [ + "autocfg 1.1.0", + "bytes 1.2.1", + "libc", + "memchr", + "mio 0.8.4", + "num_cpus", + "parking_lot 0.12.1", + "pin-project-lite 0.2.9", + "signal-hook-registry", + "socket2", + "tokio-macros", + "winapi 0.3.9", +] + +[[package]] +name = "tokio-io" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.31", + "log", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite 0.2.9", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +dependencies = [ + "rustls 0.20.6", + "tokio", + "webpki 0.22.0", +] + +[[package]] +name = "tokio-stream" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +dependencies = [ + "futures-core", + "pin-project-lite 0.2.9", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite 0.17.3", +] + +[[package]] +name = "tokio-util" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +dependencies = [ + "bytes 1.2.1", + "futures-core", + "futures-sink", + "log", + "pin-project-lite 0.2.9", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +dependencies = [ + "bytes 1.2.1", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite 0.2.9", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +dependencies = [ + "serde", +] + +[[package]] +name = "tonic" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" +dependencies = [ + "async-stream", + "async-trait", + "base64", + "bytes 1.2.1", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost 0.9.0", + "prost-derive 0.9.0", + "tokio", + "tokio-stream", + "tokio-util 0.6.10", + "tower", + "tower-layer", + "tower-service", + "tracing", + "tracing-futures", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap", + "pin-project", + "pin-project-lite 0.2.9", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util 0.7.4", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba" +dependencies = [ + "bitflags", + "bytes 1.2.1", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite 0.2.9", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if 1.0.0", + "log", + "pin-project-lite 0.2.9", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "tree-sitter" +version = "0.20.8" +source = "git+https://github.com/tree-sitter/tree-sitter?rev=366210ae925d7ea0891bc7a0c738f60c77c04d7b#366210ae925d7ea0891bc7a0c738f60c77c04d7b" +dependencies = [ + "cc", + "regex", +] + +[[package]] +name = "tree-sitter-c" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca211f4827d4b4dc79f388bf67b6fa3bc8a8cfa642161ef24f99f371ba34c7b" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-cpp" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a869e3c5cef4e5db4e9ab16a8dc84d73010e60ada14cdc60d2f6d8aed17779d" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-css" +version = "0.19.0" +source = "git+https://github.com/tree-sitter/tree-sitter-css?rev=769203d0f9abe1a9a691ac2b9fe4bb4397a73c51#769203d0f9abe1a9a691ac2b9fe4bb4397a73c51" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-elixir" +version = "0.19.0" +source = "git+https://github.com/elixir-lang/tree-sitter-elixir?rev=05e3631c6a0701c1fa518b0fee7be95a2ceef5e2#05e3631c6a0701c1fa518b0fee7be95a2ceef5e2" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-go" +version = "0.19.1" +source = "git+https://github.com/tree-sitter/tree-sitter-go?rev=aeb2f33b366fd78d5789ff104956ce23508b85db#aeb2f33b366fd78d5789ff104956ce23508b85db" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-html" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "184e6b77953a354303dc87bf5fe36558c83569ce92606e7b382a0dc1b7443443" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-javascript" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2490fab08630b2c8943c320f7b63473cbf65511c8d83aec551beb9b4375906ed" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-json" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90b04c4e1a92139535eb9fca4ec8fa9666cc96b618005d3ae35f3c957fa92f92" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-json" +version = "0.20.0" +source = "git+https://github.com/tree-sitter/tree-sitter-json?rev=137e1ce6a02698fc246cdb9c6b886ed1de9a1ed8#137e1ce6a02698fc246cdb9c6b886ed1de9a1ed8" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-markdown" +version = "0.0.1" +source = "git+https://github.com/MDeiml/tree-sitter-markdown?rev=330ecab87a3e3a7211ac69bbadc19eabecdb1cca#330ecab87a3e3a7211ac69bbadc19eabecdb1cca" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-python" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dda114f58048f5059dcf158aff691dffb8e113e6d2b50d94263fd68711975287" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-rust" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13470fafb7327a3acf96f5bc1013b5539a899a182f01c59b5af53f6b93195717" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-toml" +version = "0.5.1" +source = "git+https://github.com/tree-sitter/tree-sitter-toml?rev=342d9be207c2dba869b9967124c679b5e6fd0ebe#342d9be207c2dba869b9967124c679b5e6fd0ebe" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-typescript" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e8ed0ecb931cdff13c6a13f45ccd615156e2779d9ffb0395864e05505e6e86d" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "ttf-parser" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ddb402ac6c2af6f7a2844243887631c4e94b51585b229fcfddb43958cd55ca" + +[[package]] +name = "ttf-parser" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6" + +[[package]] +name = "tungstenite" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ad3713a14ae247f22a728a0456a545df14acf3867f905adff84be99e23b3ad1" +dependencies = [ + "base64", + "byteorder", + "bytes 1.2.1", + "http", + "httparse", + "log", + "rand 0.8.5", + "sha-1 0.9.8", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +dependencies = [ + "base64", + "byteorder", + "bytes 1.2.1", + "http", + "httparse", + "log", + "rand 0.8.5", + "sha-1 0.10.0", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" + +[[package]] +name = "unicode-ccc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" + +[[package]] +name = "unicode-general-category" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9af028e052a610d99e066b33304625dea9613170a2563314490a4e6ec5cf7f" + +[[package]] +name = "unicode-ident" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-script" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc" + +[[package]] +name = "unicode-segmentation" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" + +[[package]] +name = "unicode-vo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "unindent" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58ee9362deb4a96cef4d437d1ad49cffc9b9e92d202b6995674e928ce684f112" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "usvg" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8352f317d8f9a918ba5154797fb2a93e2730244041cf7d5be35148266adfa5" +dependencies = [ + "base64", + "data-url", + "flate2", + "fontdb", + "kurbo", + "log", + "memmap2", + "pico-args", + "rctree", + "roxmltree", + "rustybuzz", + "simplecss", + "siphasher", + "svgtypes", + "ttf-parser 0.12.3", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372" + +[[package]] +name = "util" +version = "0.1.0" +dependencies = [ + "anyhow", + "futures 0.3.24", + "git2", + "lazy_static", + "log", + "rand 0.8.5", + "serde_json", + "tempdir", +] + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.7", +] + +[[package]] +name = "uuid" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feb41e78f93363bb2df8b0e86a2ca30eed7806ea16ea0c790d757cf93f79be83" +dependencies = [ + "getrandom 0.2.7", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.0.0-alpha.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" +dependencies = [ + "ctor", + "erased-serde", + "serde", + "serde_fmt", + "sval", + "version_check", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vim" +version = "0.1.0" +dependencies = [ + "assets", + "async-compat", + "async-trait", + "collections", + "command_palette", + "editor", + "gpui", + "indoc", + "itertools", + "language", + "lazy_static", + "log", + "nvim-rs", + "parking_lot 0.11.2", + "project", + "rope", + "search", + "serde", + "serde_json", + "settings", + "tokio", + "util", + "workspace", +] + +[[package]] +name = "vte" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983" +dependencies = [ + "utf8parse", + "vte_generate_state_changes", +] + +[[package]] +name = "vte_generate_state_changes" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi-cap-std-sync" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f086c5026d2fc3b268d138e65373f46422cc810f46d6e0776859c5027cb18728" +dependencies = [ + "anyhow", + "async-trait", + "cap-fs-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "io-extras", + "io-lifetimes", + "is-terminal", + "lazy_static", + "rustix", + "system-interface", + "tracing", + "wasi-common", + "winapi 0.3.9", +] + +[[package]] +name = "wasi-common" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e8844fede1c3787cc08853872f47e8bd91f6c939c7406bc7a5dba496b260c08" +dependencies = [ + "anyhow", + "bitflags", + "cap-rand", + "cap-std", + "io-extras", + "rustix", + "thiserror", + "tracing", + "wiggle", + "winapi 0.3.9", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + +[[package]] +name = "wasm-encoder" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64ac98d5d61192cc45c701b7e4bd0b9aff91e2edfc7a088406cfe2288581e2c" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasmparser" +version = "0.85.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "570460c58b21e9150d2df0eaaedbb7816c34bcec009ae0dcc976e40ba81463e7" +dependencies = [ + "indexmap", +] + +[[package]] +name = "wasmtime" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f50eadf868ab6a04b7b511460233377d0bfbb92e417b2f6a98b98fef2e098f5" +dependencies = [ + "anyhow", + "async-trait", + "backtrace", + "bincode", + "cfg-if 1.0.0", + "indexmap", + "lazy_static", + "libc", + "log", + "object 0.28.4", + "once_cell", + "paste", + "psm", + "rayon", + "region", + "serde", + "target-lexicon", + "wasmparser", + "wasmtime-cache", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit", + "wasmtime-runtime", + "wat", + "winapi 0.3.9", +] + +[[package]] +name = "wasmtime-cache" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1df23c642e1376892f3b72f311596976979cbf8b85469680cdd3a8a063d12a2" +dependencies = [ + "anyhow", + "base64", + "bincode", + "directories-next", + "file-per-thread-logger", + "log", + "rustix", + "serde", + "sha2 0.9.9", + "toml", + "winapi 0.3.9", + "zstd", +] + +[[package]] +name = "wasmtime-cranelift" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f264ff6b4df247d15584f2f53d009fbc90032cfdc2605b52b961bffc71b6eccd" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli", + "log", + "more-asserts", + "object 0.28.4", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "839d2820e4b830f4b9e7aa08d4c0acabf4a5036105d639f6dfa1c6891c73bdc6" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli", + "indexmap", + "log", + "more-asserts", + "object 0.28.4", + "serde", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-fiber" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3248be3c4911233535356025f6562193614a40155ee9094bb6a2b43f0dc82803" +dependencies = [ + "cc", + "rustix", + "winapi 0.3.9", +] + +[[package]] +name = "wasmtime-jit" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef0a0bcbfa18b946d890078ba0e1bc76bcc53eccfb40806c0020ec29dcd1bd49" +dependencies = [ + "addr2line", + "anyhow", + "bincode", + "cfg-if 1.0.0", + "cpp_demangle", + "gimli", + "ittapi-rs", + "log", + "object 0.28.4", + "region", + "rustc-demangle", + "rustix", + "serde", + "target-lexicon", + "thiserror", + "wasmtime-environ", + "wasmtime-jit-debug", + "wasmtime-runtime", + "winapi 0.3.9", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4779d976206c458edd643d1ac622b6c37e4a0800a8b1d25dfbf245ac2f2cac" +dependencies = [ + "lazy_static", + "object 0.28.4", + "rustix", +] + +[[package]] +name = "wasmtime-runtime" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7eb6ffa169eb5dcd18ac9473c817358cd57bc62c244622210566d473397954a" +dependencies = [ + "anyhow", + "backtrace", + "cc", + "cfg-if 1.0.0", + "indexmap", + "libc", + "log", + "mach", + "memfd", + "memoffset", + "more-asserts", + "rand 0.8.5", + "region", + "rustix", + "thiserror", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit-debug", + "winapi 0.3.9", +] + +[[package]] +name = "wasmtime-types" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d932b0ac5336f7308d869703dd225610a6a3aeaa8e968c52b43eed96cefb1c2" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror", + "wasmparser", +] + +[[package]] +name = "wasmtime-wasi" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68b7d77fb6f2975a6fe6cc4d0015d6b0cebb65c39fce1dd4cc00880dbf7789c" +dependencies = [ + "anyhow", + "wasi-cap-std-sync", + "wasi-common", + "wasmtime", + "wiggle", +] + +[[package]] +name = "wast" +version = "35.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" +dependencies = [ + "leb128", +] + +[[package]] +name = "wast" +version = "47.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b98502f3978adea49551e801a6687678e6015317d7d9470a67fe813393f2a8" +dependencies = [ + "leb128", + "memchr", + "unicode-width", + "wasm-encoder", +] + +[[package]] +name = "wat" +version = "1.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aab4e20c60429fbba9670a6cae0fff9520046ba0aa3e6d0b1cd2653bea14898" +dependencies = [ + "wast 47.0.1", +] + +[[package]] +name = "web-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +dependencies = [ + "webpki 0.21.4", +] + +[[package]] +name = "webpki-roots" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" +dependencies = [ + "webpki 0.22.0", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + +[[package]] +name = "which" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" +dependencies = [ + "either", + "libc", + "once_cell", +] + +[[package]] +name = "whoami" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6631b6a2fd59b1841b622e8f1a7ad241ef0a46f2d580464ce8140ac94cbd571" +dependencies = [ + "bumpalo", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wiggle" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dadac11343d2aabc8a906a0db0aaf7cb5046ec3d6fffccdaf2847dccdef8d6" +dependencies = [ + "anyhow", + "async-trait", + "bitflags", + "thiserror", + "tracing", + "wasmtime", + "wiggle-macro", +] + +[[package]] +name = "wiggle-generate" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63a1dccd6b3fbd9a27417f5d30ce9aa3ee9cf529aad453abbf88a49c5d605b79" +dependencies = [ + "anyhow", + "heck 0.4.0", + "proc-macro2", + "quote", + "shellexpand", + "syn", + "witx", +] + +[[package]] +name = "wiggle-macro" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1c368d57d9560c34deaa67e06b0953ccf65edb906c525e5a2c866c849b48ec2" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wiggle-generate", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winx" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d5973cb8cd94a77d03ad7e23bbe14889cb29805da1cec0e4aff75e21aebded" +dependencies = [ + "bitflags", + "io-lifetimes", + "winapi 0.3.9", +] + +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "witx" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" +dependencies = [ + "anyhow", + "log", + "thiserror", + "wast 35.0.2", +] + +[[package]] +name = "workspace" +version = "0.1.0" +dependencies = [ + "anyhow", + "call", + "client", + "collections", + "context_menu", + "drag_and_drop", + "fs", + "futures 0.3.24", + "gpui", + "language", + "log", + "menu", + "parking_lot 0.11.2", + "postage", + "project", + "serde", + "serde_json", + "settings", + "smallvec", + "theme", + "util", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" + +[[package]] +name = "xmlparser" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zed" +version = "0.60.0" +dependencies = [ + "activity_indicator", + "anyhow", + "assets", + "async-compression", + "async-recursion", + "async-trait", + "auto_update", + "backtrace", + "breadcrumbs", + "call", + "chat_panel", + "chrono", + "cli", + "client", + "clock", + "collab_ui", + "collections", + "command_palette", + "context_menu", + "ctor", + "diagnostics", + "dirs 3.0.2", + "easy-parallel", + "editor", + "env_logger", + "file_finder", + "fs", + "fsevent", + "futures 0.3.24", + "fuzzy", + "go_to_line", + "gpui", + "ignore", + "image", + "indexmap", + "isahc", + "journal", + "language", + "lazy_static", + "libc", + "log", + "lsp", + "num_cpus", + "outline", + "parking_lot 0.11.2", + "plugin_runtime", + "postage", + "project", + "project_panel", + "project_symbols", + "rand 0.8.5", + "regex", + "rpc", + "rsa", + "rust-embed", + "search", + "serde", + "serde_json", + "serde_path_to_error", + "settings", + "simplelog", + "smallvec", + "smol", + "sum_tree", + "tempdir", + "terminal", + "text", + "theme", + "theme_selector", + "thiserror", + "tiny_http", + "toml", + "tree-sitter", + "tree-sitter-c", + "tree-sitter-cpp", + "tree-sitter-css", + "tree-sitter-elixir", + "tree-sitter-go", + "tree-sitter-html", + "tree-sitter-json 0.20.0", + "tree-sitter-markdown", + "tree-sitter-python", + "tree-sitter-rust", + "tree-sitter-toml", + "tree-sitter-typescript", + "unindent", + "url", + "util", + "vim", + "workspace", +] + +[[package]] +name = "zeroize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.1+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +dependencies = [ + "cc", + "libc", +] diff --git a/crates/db/migrations/001_init.sql b/crates/db/migrations/001_init.sql index af15174c243e25107b5d52924384eb7d3edba3c6..08976c7469a1a193cdad22375b19ef9fd8ef7649 100644 --- a/crates/db/migrations/001_init.sql +++ b/crates/db/migrations/001_init.sql @@ -1,4 +1,4 @@ CREATE TABLE kv_store( - key TEXT NOT NULL, + key TEXT PRIMARY KEY, value TEXT NOT NULL ) STRICT; \ No newline at end of file diff --git a/crates/db/sqlx-data.json b/crates/db/sqlx-data.json new file mode 100644 index 0000000000000000000000000000000000000000..93f70359c5f32136ee9284d5a81d89bd156c897e --- /dev/null +++ b/crates/db/sqlx-data.json @@ -0,0 +1,3 @@ +{ + "db": "SQLite" +} \ No newline at end of file diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index 2db19c297c04e35a1b69738fc3fe4ca7322e3b21..97075450dca3f7aaf6e9e660380ed71dca09da4d 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -1,111 +1,55 @@ +mod kvp; + use anyhow::Result; -use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; -use sqlx::{Pool, Sqlite, SqlitePool}; +use sqlx::sqlite::SqliteConnectOptions; +use sqlx::{Pool, Sqlite}; use std::path::Path; use std::str::FromStr; use std::sync::Arc; -pub struct Db(DbStore); +pub use kvp::*; -enum DbStore { - Null, - Live(Pool), +pub struct Db { + pool: Pool, + in_memory: bool, } -// Things we need to think about: -// Concurrency? - Needs some research -// We need to configure or setup our database, create the tables and such - -// Write our first migration -// - // To make a migration: // Add to the migrations directory, a file with the name: // _.sql. Migrations are executed in order of number impl Db { - /// Open or create a database at the given file path. - pub fn open(path: &Path) -> Result> { - let options = SqliteConnectOptions::from_str(path)?.create_if_missing(true); - - Self::initialize(options) + /// Open or create a database at the given file path. Falls back to in memory database if the + /// database at the given path is corrupted + pub async fn open(path: &Path) -> Arc { + let options = SqliteConnectOptions::from_str(&format!( + "sqlite://{}", + path.to_string_lossy().to_string() + )) + .expect("database path should always be well formed") + .create_if_missing(true); + + Self::initialize(options, false) + .await + .unwrap_or(Self::open_in_memory().await) } - /// Open a fake database for testing. - #[cfg(any(test, feature = "test-support"))] - pub fn open_fake() -> Arc { - let options = SqliteConnectOptions::from_str(":memory:")?; + /// Open a in memory database for testing and as a fallback. + pub async fn open_in_memory() -> Arc { + let options = SqliteConnectOptions::from_str(":memory:") + .expect("Should always be able to create in memory database options"); - Self::initialize(options) + Self::initialize(options, true) + .await + .expect("Should always be able to create an in memory database") } - fn initialize(options: SqliteConnectOptions) -> Result> { - let pool = Pool::::connect_with(options)?; + async fn initialize(options: SqliteConnectOptions, in_memory: bool) -> Result> { + let pool = Pool::::connect_with(options).await?; sqlx::migrate!().run(&pool).await?; - Ok(Arc::new(Self(DbStore::Live(pool)))) - } - - /// Open a null database that stores no data, for use as a fallback - /// when there is an error opening the real database. - pub fn null() -> Arc { - Arc::new(Self(DbStore::Null)) - } - - pub fn read(&self, keys: I) -> Result>>> - where - K: AsRef<[u8]>, - I: IntoIterator, - { - match &self.0 { - DbStore::Real(db) => db - .multi_get(keys) - .into_iter() - .map(|e| e.map_err(Into::into)) - .collect(), - - DbStore::Null => Ok(keys.into_iter().map(|_| None).collect()), - } - } - - pub fn delete(&self, keys: I) -> Result<()> - where - K: AsRef<[u8]>, - I: IntoIterator, - { - match &self.0 { - DbStore::Real(db) => { - let mut batch = rocksdb::WriteBatch::default(); - for key in keys { - batch.delete(key); - } - db.write(batch)?; - } - - DbStore::Null => {} - } - Ok(()) - } - - pub fn write(&self, entries: I) -> Result<()> - where - K: AsRef<[u8]>, - V: AsRef<[u8]>, - I: IntoIterator, - { - match &self.0 { - DbStore::Real(db) => { - let mut batch = rocksdb::WriteBatch::default(); - for (key, value) in entries { - batch.put(key, value); - } - db.write(batch)?; - } - - DbStore::Null => {} - } - Ok(()) + Ok(Arc::new(Self { pool, in_memory })) } } diff --git a/crates/db/src/kvp.rs b/crates/db/src/kvp.rs new file mode 100644 index 0000000000000000000000000000000000000000..df31febb8760493942df68b250e487494dee4b67 --- /dev/null +++ b/crates/db/src/kvp.rs @@ -0,0 +1,34 @@ +use anyhow::Result; + +use super::Db; + +impl Db { + pub async fn read_kvp(&self, key: &str) -> Result { + let value = sqlx::query!("SELECT value FROM kv_store WHERE key = ?", key) + .fetch_one(&self.pool) + .await + .map(|res| res.value)?; + + Ok(value) + } + + pub async fn delete_kvp(&self, key: &str) -> Result<()> { + sqlx::query!("DELETE FROM kv_store WHERE key = ?", key) + .execute(&self.pool) + .await?; + + Ok(()) + } + + pub async fn write_kvp(&self, key: &str, value: &str) -> Result<()> { + sqlx::query!( + "INSERT OR REPLACE INTO kv_store(key, value) VALUES (?, ?)", + key, + value + ) + .execute(&self.pool) + .await?; + + Ok(()) + } +} diff --git a/script/generate-zed-sqlx-data b/script/generate-zed-sqlx-data index 00a0c9ee5d6a1ad19b9bccf9db294ee029439df0..65f9b621f0fa2efdc607af6dc4511eedd419cd76 100755 --- a/script/generate-zed-sqlx-data +++ b/script/generate-zed-sqlx-data @@ -7,8 +7,9 @@ set -e cd crates/db -mkdir /tmp/zed-client-db +mkdir -p /tmp/zed-client-db DATABASE_URL=sqlite:///tmp/zed-client-db/test.db +cargo sqlx -D $DATABASE_URL database drop cargo sqlx -D $DATABASE_URL database setup cargo sqlx -D $DATABASE_URL prepare \ No newline at end of file From dbea3cf20cb4c5fbe0601b5affec1f79ddffe06c Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 13 Oct 2022 18:24:00 -0700 Subject: [PATCH 19/38] Converted to using rusqlite --- Cargo.lock | 149 ++++++++---------------------- crates/client/src/telemetry.rs | 14 +-- crates/db/Cargo.toml | 4 +- crates/db/migrations/001_init.sql | 4 - crates/db/sqlx-data.json | 3 - crates/db/src/db.rs | 46 ++++----- crates/db/src/kvp.rs | 35 ++++--- crates/db/src/migrations.rs | 10 ++ 8 files changed, 92 insertions(+), 173 deletions(-) delete mode 100644 crates/db/migrations/001_init.sql delete mode 100644 crates/db/sqlx-data.json create mode 100644 crates/db/src/migrations.rs diff --git a/Cargo.lock b/Cargo.lock index 5fea66639176b909696dcbc1da272f33dc3e8f14..9b90801444c1c70d2066ac27c9e9bfae28fcf396 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -244,21 +244,6 @@ dependencies = [ "futures-lite", ] -[[package]] -name = "async-global-executor" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da5b41ee986eed3f524c380e6d64965aea573882a8907682ad100f7859305ca" -dependencies = [ - "async-channel", - "async-executor", - "async-io", - "async-lock", - "blocking", - "futures-lite", - "once_cell", -] - [[package]] name = "async-io" version = "1.9.0" @@ -338,33 +323,6 @@ dependencies = [ "syn", ] -[[package]] -name = "async-std" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" -dependencies = [ - "async-channel", - "async-global-executor", - "async-io", - "async-lock", - "async-process", - "crossbeam-utils 0.8.12", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite 0.2.9", - "pin-utils", - "slab", - "wasm-bindgen-futures", -] - [[package]] name = "async-stream" version = "0.3.3" @@ -1645,8 +1603,10 @@ dependencies = [ "async-trait", "collections", "gpui", + "lazy_static", "parking_lot 0.11.2", - "sqlx", + "rusqlite", + "rusqlite_migration", "tempdir", ] @@ -1868,9 +1828,6 @@ name = "either" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" -dependencies = [ - "serde", -] [[package]] name = "encoding_rs" @@ -1974,6 +1931,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + [[package]] name = "fastrand" version = "1.8.0" @@ -2041,18 +2004,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e" -[[package]] -name = "flume" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "futures-core", - "futures-sink", - "pin-project", - "spin 0.9.4", -] - [[package]] name = "fnv" version = "1.0.7" @@ -2307,17 +2258,6 @@ dependencies = [ "syn", ] -[[package]] -name = "futures-rustls" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" -dependencies = [ - "futures-io", - "rustls 0.20.6", - "webpki 0.22.0", -] - [[package]] name = "futures-sink" version = "0.3.24" @@ -2473,18 +2413,6 @@ dependencies = [ "regex", ] -[[package]] -name = "gloo-timers" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "go_to_line" version = "0.1.0" @@ -3093,15 +3021,6 @@ dependencies = [ "arrayvec 0.7.2", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "language" version = "0.1.0" @@ -3154,7 +3073,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin 0.5.2", + "spin", ] [[package]] @@ -3229,9 +3148,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14" +checksum = "9f0455f2c1bc9a7caa792907026e469c1d91761fb0ea37cbb16427c77280cf35" dependencies = [ "cc", "pkg-config", @@ -4825,7 +4744,7 @@ dependencies = [ "cc", "libc", "once_cell", - "spin 0.5.2", + "spin", "untrusted", "web-sys", "winapi 0.3.9", @@ -4932,6 +4851,31 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rusqlite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" +dependencies = [ + "bitflags", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "serde_json", + "smallvec", +] + +[[package]] +name = "rusqlite_migration" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda44233be97aea786691f9f6f7ef230bcf905061f4012e90f4f39e6dcf31163" +dependencies = [ + "log", + "rusqlite", +] + [[package]] name = "rust-embed" version = "6.4.1" @@ -5639,15 +5583,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "spin" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" -dependencies = [ - "lock_api", -] - [[package]] name = "spsc-buffer" version = "0.1.1" @@ -5693,10 +5628,8 @@ dependencies = [ "dotenvy", "either", "event-listener", - "flume", "futures-channel", "futures-core", - "futures-executor", "futures-intrusive", "futures-util", "hashlink", @@ -5706,7 +5639,6 @@ dependencies = [ "indexmap", "itoa", "libc", - "libsqlite3-sys", "log", "md-5", "memchr", @@ -5742,12 +5674,9 @@ dependencies = [ "dotenvy", "either", "heck 0.4.0", - "hex", "once_cell", "proc-macro2", "quote", - "serde", - "serde_json", "sha2 0.10.6", "sqlx-core", "sqlx-rt", @@ -5761,8 +5690,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24c5b2d25fa654cc5f841750b8e1cdedbe21189bf9a9382ee90bfa9dd3562396" dependencies = [ - "async-std", - "futures-rustls", "once_cell", "tokio", "tokio-rustls", diff --git a/crates/client/src/telemetry.rs b/crates/client/src/telemetry.rs index 0c162580d41491fb1b54a548639170688aac22c7..178cee023422456485a8cf4fe80f929404f69981 100644 --- a/crates/client/src/telemetry.rs +++ b/crates/client/src/telemetry.rs @@ -135,25 +135,21 @@ impl Telemetry { Some(self.state.lock().log_file.as_ref()?.path().to_path_buf()) } - pub fn start(self: &Arc, db: Arc) { + pub fn start(self: &Arc, db: Arc>) { let this = self.clone(); self.executor .spawn( async move { - let device_id = if let Some(device_id) = db - .read(["device_id"])? - .into_iter() - .flatten() - .next() - .and_then(|bytes| String::from_utf8(bytes).ok()) - { + let db = db.lock(); + let device_id = if let Ok(device_id) = db.read_kvp("device_id") { device_id } else { let device_id = Uuid::new_v4().to_string(); - db.write([("device_id", device_id.as_bytes())])?; + db.write_kvp("device_id", &device_id)?; device_id }; + drop(db); let device_id = Some(Arc::from(device_id)); let mut state = this.state.lock(); state.device_id = device_id.clone(); diff --git a/crates/db/Cargo.toml b/crates/db/Cargo.toml index 8edc245b7a55569042762718006076410e72bf7e..22b4ed1a0d91cce4ba18004280eafaa9e3c8b6f7 100644 --- a/crates/db/Cargo.toml +++ b/crates/db/Cargo.toml @@ -15,7 +15,9 @@ collections = { path = "../collections" } anyhow = "1.0.57" async-trait = "0.1" parking_lot = "0.11.1" -sqlx = { version = "0.6.2", features = ["sqlite", "macros", "offline", "json", "runtime-async-std-rustls"] } +rusqlite = { version = "0.28.0", features = ["bundled", "serde_json"] } +rusqlite_migration = "1.0.0" +lazy_static = "1.4.0" [dev-dependencies] gpui = { path = "../gpui", features = ["test-support"] } diff --git a/crates/db/migrations/001_init.sql b/crates/db/migrations/001_init.sql deleted file mode 100644 index 08976c7469a1a193cdad22375b19ef9fd8ef7649..0000000000000000000000000000000000000000 --- a/crates/db/migrations/001_init.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE TABLE kv_store( - key TEXT PRIMARY KEY, - value TEXT NOT NULL -) STRICT; \ No newline at end of file diff --git a/crates/db/sqlx-data.json b/crates/db/sqlx-data.json deleted file mode 100644 index 93f70359c5f32136ee9284d5a81d89bd156c897e..0000000000000000000000000000000000000000 --- a/crates/db/sqlx-data.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "db": "SQLite" -} \ No newline at end of file diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index 97075450dca3f7aaf6e9e660380ed71dca09da4d..ed7187b56785eb043879e416c7fc7d05a4ca5178 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -1,16 +1,17 @@ mod kvp; +mod migrations; use anyhow::Result; -use sqlx::sqlite::SqliteConnectOptions; -use sqlx::{Pool, Sqlite}; +use migrations::MIGRATIONS; +use parking_lot::Mutex; +use rusqlite::Connection; use std::path::Path; -use std::str::FromStr; use std::sync::Arc; pub use kvp::*; pub struct Db { - pool: Pool, + connecion: Connection, in_memory: bool, } @@ -21,35 +22,26 @@ pub struct Db { impl Db { /// Open or create a database at the given file path. Falls back to in memory database if the /// database at the given path is corrupted - pub async fn open(path: &Path) -> Arc { - let options = SqliteConnectOptions::from_str(&format!( - "sqlite://{}", - path.to_string_lossy().to_string() - )) - .expect("database path should always be well formed") - .create_if_missing(true); - - Self::initialize(options, false) - .await - .unwrap_or(Self::open_in_memory().await) + pub fn open(path: &Path) -> Result>> { + let conn = Connection::open(path)?; + + Self::initialize(conn, false).or_else(|_| Self::open_in_memory()) } /// Open a in memory database for testing and as a fallback. - pub async fn open_in_memory() -> Arc { - let options = SqliteConnectOptions::from_str(":memory:") - .expect("Should always be able to create in memory database options"); + pub fn open_in_memory() -> Result>> { + let conn = Connection::open_in_memory()?; - Self::initialize(options, true) - .await - .expect("Should always be able to create an in memory database") + Self::initialize(conn, true) } - async fn initialize(options: SqliteConnectOptions, in_memory: bool) -> Result> { - let pool = Pool::::connect_with(options).await?; - - sqlx::migrate!().run(&pool).await?; + fn initialize(mut conn: Connection, in_memory: bool) -> Result>> { + MIGRATIONS.to_latest(&mut conn)?; - Ok(Arc::new(Self { pool, in_memory })) + Ok(Arc::new(Mutex::new(Self { + connecion: conn, + in_memory, + }))) } } @@ -61,7 +53,7 @@ mod tests { #[gpui::test] fn test_db() { let dir = TempDir::new("db-test").unwrap(); - let fake_db = Db::open_fake(); + let fake_db = Db::open_in_memory().unwrap(); let real_db = Db::open(&dir.path().join("test.db")).unwrap(); for db in [&real_db, &fake_db] { diff --git a/crates/db/src/kvp.rs b/crates/db/src/kvp.rs index df31febb8760493942df68b250e487494dee4b67..d7a2828da9e57eb424d8af693ea8ceea22d52438 100644 --- a/crates/db/src/kvp.rs +++ b/crates/db/src/kvp.rs @@ -3,31 +3,30 @@ use anyhow::Result; use super::Db; impl Db { - pub async fn read_kvp(&self, key: &str) -> Result { - let value = sqlx::query!("SELECT value FROM kv_store WHERE key = ?", key) - .fetch_one(&self.pool) - .await - .map(|res| res.value)?; + pub fn read_kvp(&self, key: &str) -> Result { + let mut stmt = self + .connecion + .prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; - Ok(value) + Ok(stmt.query_row([key], |row| row.get(0))?) } - pub async fn delete_kvp(&self, key: &str) -> Result<()> { - sqlx::query!("DELETE FROM kv_store WHERE key = ?", key) - .execute(&self.pool) - .await?; + pub fn delete_kvp(&self, key: &str) -> Result<()> { + let mut stmt = self + .connecion + .prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; + + stmt.execute([key])?; Ok(()) } - pub async fn write_kvp(&self, key: &str, value: &str) -> Result<()> { - sqlx::query!( - "INSERT OR REPLACE INTO kv_store(key, value) VALUES (?, ?)", - key, - value - ) - .execute(&self.pool) - .await?; + pub fn write_kvp(&self, key: &str, value: &str) -> Result<()> { + let mut stmt = self + .connecion + .prepare_cached("INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?))")?; + + stmt.execute([key, value])?; Ok(()) } diff --git a/crates/db/src/migrations.rs b/crates/db/src/migrations.rs new file mode 100644 index 0000000000000000000000000000000000000000..21db94e973a9adac5cbec0fca95f9cb0e23cab83 --- /dev/null +++ b/crates/db/src/migrations.rs @@ -0,0 +1,10 @@ +use rusqlite_migration::{Migrations, M}; + +lazy_static::lazy_static! { + pub static ref MIGRATIONS: Migrations<'static> = Migrations::new(vec![M::up( + "CREATE TABLE kv_store( + key TEXT PRIMARY KEY, + value TEXT NOT NULL + ) STRICT;", + )]); +} From 4b09f779506c3d42cc760ece0d67be46faf059ea Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Fri, 14 Oct 2022 16:06:18 -0700 Subject: [PATCH 20/38] WIP --- Cargo.lock | 1 + crates/client/src/telemetry.rs | 6 ++-- crates/db/src/db.rs | 56 ++++++++++++++----------------- crates/db/src/kvp.rs | 23 +++++++------ crates/db/src/serialized_item.rs | 22 ++++++++++++ crates/workspace/Cargo.toml | 1 + crates/workspace/src/workspace.rs | 27 +++++++++++++++ 7 files changed, 90 insertions(+), 46 deletions(-) create mode 100644 crates/db/src/serialized_item.rs diff --git a/Cargo.lock b/Cargo.lock index 9b90801444c1c70d2066ac27c9e9bfae28fcf396..eaeb99cd2d6c435dc8d13594b528fc7297e3b4e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7524,6 +7524,7 @@ dependencies = [ "client", "collections", "context_menu", + "db", "drag_and_drop", "fs", "futures 0.3.24", diff --git a/crates/client/src/telemetry.rs b/crates/client/src/telemetry.rs index 178cee023422456485a8cf4fe80f929404f69981..1346b97f61b2106f6ee5af756581096da6ea3ce5 100644 --- a/crates/client/src/telemetry.rs +++ b/crates/client/src/telemetry.rs @@ -135,13 +135,12 @@ impl Telemetry { Some(self.state.lock().log_file.as_ref()?.path().to_path_buf()) } - pub fn start(self: &Arc, db: Arc>) { + pub fn start(self: &Arc, db: Arc) { let this = self.clone(); self.executor .spawn( async move { - let db = db.lock(); - let device_id = if let Ok(device_id) = db.read_kvp("device_id") { + let device_id = if let Ok(Some(device_id)) = db.read_kvp("device_id") { device_id } else { let device_id = Uuid::new_v4().to_string(); @@ -149,7 +148,6 @@ impl Telemetry { device_id }; - drop(db); let device_id = Some(Arc::from(device_id)); let mut state = this.state.lock(); state.device_id = device_id.clone(); diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index ed7187b56785eb043879e416c7fc7d05a4ca5178..fb7197548998d956c8c7853530189fab0f8f57eb 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -1,5 +1,6 @@ mod kvp; mod migrations; +mod serialized_item; use anyhow::Result; use migrations::MIGRATIONS; @@ -9,9 +10,10 @@ use std::path::Path; use std::sync::Arc; pub use kvp::*; +pub use serialized_item::*; pub struct Db { - connecion: Connection, + connection: Mutex, in_memory: bool, } @@ -22,26 +24,26 @@ pub struct Db { impl Db { /// Open or create a database at the given file path. Falls back to in memory database if the /// database at the given path is corrupted - pub fn open(path: &Path) -> Result>> { + pub fn open(path: &Path) -> Result> { let conn = Connection::open(path)?; Self::initialize(conn, false).or_else(|_| Self::open_in_memory()) } /// Open a in memory database for testing and as a fallback. - pub fn open_in_memory() -> Result>> { + pub fn open_in_memory() -> Result> { let conn = Connection::open_in_memory()?; Self::initialize(conn, true) } - fn initialize(mut conn: Connection, in_memory: bool) -> Result>> { + fn initialize(mut conn: Connection, in_memory: bool) -> Result> { MIGRATIONS.to_latest(&mut conn)?; - Ok(Arc::new(Mutex::new(Self { - connecion: conn, + Ok(Arc::new(Self { + connection: Mutex::new(conn), in_memory, - }))) + })) } } @@ -57,34 +59,26 @@ mod tests { let real_db = Db::open(&dir.path().join("test.db")).unwrap(); for db in [&real_db, &fake_db] { - assert_eq!( - db.read(["key-1", "key-2", "key-3"]).unwrap(), - &[None, None, None] - ); - - db.write([("key-1", "one"), ("key-3", "three")]).unwrap(); - assert_eq!( - db.read(["key-1", "key-2", "key-3"]).unwrap(), - &[ - Some("one".as_bytes().to_vec()), - None, - Some("three".as_bytes().to_vec()) - ] - ); - - db.delete(["key-3", "key-4"]).unwrap(); - assert_eq!( - db.read(["key-1", "key-2", "key-3"]).unwrap(), - &[Some("one".as_bytes().to_vec()), None, None,] - ); + assert_eq!(db.read_kvp("key-1").unwrap(), None); + + db.write_kvp("key-1", "one").unwrap(); + assert_eq!(db.read_kvp("key-1").unwrap(), Some("one".to_string())); + + db.write_kvp("key-2", "two").unwrap(); + assert_eq!(db.read_kvp("key-2").unwrap(), Some("two".to_string())); + + db.delete_kvp("key-1").unwrap(); + assert_eq!(db.read_kvp("key-1").unwrap(), None); } drop(real_db); let real_db = Db::open(&dir.path().join("test.db")).unwrap(); - assert_eq!( - real_db.read(["key-1", "key-2", "key-3"]).unwrap(), - &[Some("one".as_bytes().to_vec()), None, None,] - ); + + real_db.write_kvp("key-1", "one").unwrap(); + assert_eq!(real_db.read_kvp("key-1").unwrap(), None); + + real_db.write_kvp("key-2", "two").unwrap(); + assert_eq!(real_db.read_kvp("key-2").unwrap(), Some("two".to_string())); } } diff --git a/crates/db/src/kvp.rs b/crates/db/src/kvp.rs index d7a2828da9e57eb424d8af693ea8ceea22d52438..d23e6ae5b05900c7067f8c73b6cc2fc12f555877 100644 --- a/crates/db/src/kvp.rs +++ b/crates/db/src/kvp.rs @@ -1,20 +1,20 @@ use anyhow::Result; +use rusqlite::OptionalExtension; use super::Db; impl Db { - pub fn read_kvp(&self, key: &str) -> Result { - let mut stmt = self - .connecion - .prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; + pub fn read_kvp(&self, key: &str) -> Result> { + let lock = self.connection.lock(); + let mut stmt = lock.prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; - Ok(stmt.query_row([key], |row| row.get(0))?) + Ok(stmt.query_row([key], |row| row.get(0)).optional()?) } pub fn delete_kvp(&self, key: &str) -> Result<()> { - let mut stmt = self - .connecion - .prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; + let lock = self.connection.lock(); + + let mut stmt = lock.prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; stmt.execute([key])?; @@ -22,9 +22,10 @@ impl Db { } pub fn write_kvp(&self, key: &str, value: &str) -> Result<()> { - let mut stmt = self - .connecion - .prepare_cached("INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?))")?; + let lock = self.connection.lock(); + + let mut stmt = + lock.prepare_cached("INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?))")?; stmt.execute([key, value])?; diff --git a/crates/db/src/serialized_item.rs b/crates/db/src/serialized_item.rs new file mode 100644 index 0000000000000000000000000000000000000000..9f6284fa07bdfdcc10e9e697c768bf1643b29c79 --- /dev/null +++ b/crates/db/src/serialized_item.rs @@ -0,0 +1,22 @@ +use std::path::PathBuf; + +use anyhow::Result; + +use super::Db; + +impl Db {} + +#[derive(PartialEq, Eq, Hash)] +pub enum SerializedItemKind { + Editor, + Terminal, + ProjectSearch, + Diagnostics, +} + +pub enum SerializedItem { + Editor(PathBuf, String), + Terminal, + ProjectSearch(String), + Diagnostics, +} diff --git a/crates/workspace/Cargo.toml b/crates/workspace/Cargo.toml index 54e7eaf463a344049bc8b1b5d97a64eddaea1b07..b68636b50feda6d27e03f8c8e8d2fb852e5b62fc 100644 --- a/crates/workspace/Cargo.toml +++ b/crates/workspace/Cargo.toml @@ -23,6 +23,7 @@ client = { path = "../client" } collections = { path = "../collections" } context_menu = { path = "../context_menu" } drag_and_drop = { path = "../drag_and_drop" } +db = { path = "../db" } fs = { path = "../fs" } gpui = { path = "../gpui" } language = { path = "../language" } diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index ece8cedfb1e516f8ff66fc8c76b3814c0fabd85b..95ab8c496437061f03768e1591594bf27bff6beb 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -14,6 +14,7 @@ use anyhow::{anyhow, Context, Result}; use call::ActiveCall; use client::{proto, Client, PeerId, TypedEnvelope, UserStore}; use collections::{hash_map, HashMap, HashSet}; +use db::{SerializedItem, SerializedItemKind}; use dock::{DefaultItemFactory, Dock, ToggleDockButton}; use drag_and_drop::DragAndDrop; use fs::{self, Fs}; @@ -77,6 +78,9 @@ type FollowableItemBuilders = HashMap< ), >; +type ItemDeserializers = + HashMap) -> Box>; + #[derive(Clone, PartialEq)] pub struct RemoveWorktreeFromProject(pub WorktreeId); @@ -230,6 +234,14 @@ pub fn register_followable_item(cx: &mut MutableAppContext) { }); } +pub fn register_deserializable_item(cx: &mut MutableAppContext) { + cx.update_default_global(|deserializers: &mut ItemDeserializers, _| { + deserializers.insert(I::serialized_item_kind(), |serialized_item, cx| { + Box::new(cx.add_view(|cx| I::deserialize(serialized_item, cx))) + }) + }); +} + pub struct AppState { pub languages: Arc, pub themes: Arc, @@ -333,6 +345,9 @@ pub trait Item: View { fn breadcrumbs(&self, _theme: &Theme, _cx: &AppContext) -> Option> { None } + fn serialized_item_kind() -> SerializedItemKind; + fn deserialize(serialized_item: SerializedItem, cx: &mut ViewContext) -> Self; + fn serialize(&self) -> SerializedItem; } pub trait ProjectItem: Item { @@ -3611,6 +3626,18 @@ mod tests { fn to_item_events(_: &Self::Event) -> Vec { vec![ItemEvent::UpdateTab, ItemEvent::Edit] } + + fn serialized_item_kind() -> SerializedItemKind { + unimplemented!() + } + + fn deserialize(_serialized_item: SerializedItem, _cx: &mut ViewContext) -> Self { + unimplemented!() + } + + fn serialize(&self) -> SerializedItem { + unimplemented!() + } } impl SidebarItem for TestItem {} From 05b4b443d91b33edb2ae90cd60c2636e240918d3 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Sat, 15 Oct 2022 12:31:07 -0700 Subject: [PATCH 21/38] working items schema --- crates/db/src/db.rs | 40 +---- crates/db/src/items.rs | 236 ++++++++++++++++++++++++++++++ crates/db/src/kvp.rs | 37 ++++- crates/db/src/migrations.rs | 17 ++- crates/db/src/serialized_item.rs | 22 --- crates/workspace/src/workspace.rs | 1 + 6 files changed, 286 insertions(+), 67 deletions(-) create mode 100644 crates/db/src/items.rs delete mode 100644 crates/db/src/serialized_item.rs diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index fb7197548998d956c8c7853530189fab0f8f57eb..73aa2378a4d6cef52d21b773bb82780adc5b0ffe 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -1,6 +1,6 @@ +mod items; mod kvp; mod migrations; -mod serialized_item; use anyhow::Result; use migrations::MIGRATIONS; @@ -9,8 +9,8 @@ use rusqlite::Connection; use std::path::Path; use std::sync::Arc; +pub use items::*; pub use kvp::*; -pub use serialized_item::*; pub struct Db { connection: Mutex, @@ -46,39 +46,3 @@ impl Db { })) } } - -#[cfg(test)] -mod tests { - use super::*; - use tempdir::TempDir; - - #[gpui::test] - fn test_db() { - let dir = TempDir::new("db-test").unwrap(); - let fake_db = Db::open_in_memory().unwrap(); - let real_db = Db::open(&dir.path().join("test.db")).unwrap(); - - for db in [&real_db, &fake_db] { - assert_eq!(db.read_kvp("key-1").unwrap(), None); - - db.write_kvp("key-1", "one").unwrap(); - assert_eq!(db.read_kvp("key-1").unwrap(), Some("one".to_string())); - - db.write_kvp("key-2", "two").unwrap(); - assert_eq!(db.read_kvp("key-2").unwrap(), Some("two".to_string())); - - db.delete_kvp("key-1").unwrap(); - assert_eq!(db.read_kvp("key-1").unwrap(), None); - } - - drop(real_db); - - let real_db = Db::open(&dir.path().join("test.db")).unwrap(); - - real_db.write_kvp("key-1", "one").unwrap(); - assert_eq!(real_db.read_kvp("key-1").unwrap(), None); - - real_db.write_kvp("key-2", "two").unwrap(); - assert_eq!(real_db.read_kvp("key-2").unwrap(), Some("two".to_string())); - } -} diff --git a/crates/db/src/items.rs b/crates/db/src/items.rs new file mode 100644 index 0000000000000000000000000000000000000000..7a49cd5569768fb2614342f9e910ec10abe7f357 --- /dev/null +++ b/crates/db/src/items.rs @@ -0,0 +1,236 @@ +use std::{ffi::OsStr, os::unix::prelude::OsStrExt, path::PathBuf, sync::Arc}; + +use anyhow::Result; +use rusqlite::{ + named_params, params, + types::{FromSql, FromSqlError, FromSqlResult, ValueRef}, +}; + +use super::Db; + +pub(crate) const ITEMS_M_1: &str = " +CREATE TABLE items( + id INTEGER PRIMARY KEY, + kind TEXT +) STRICT; +CREATE TABLE item_path( + item_id INTEGER PRIMARY KEY, + path BLOB +) STRICT; +CREATE TABLE item_query( + item_id INTEGER PRIMARY KEY, + query TEXT +) STRICT; +"; + +#[derive(PartialEq, Eq, Hash, Debug)] +pub enum SerializedItemKind { + Editor, + Terminal, + ProjectSearch, + Diagnostics, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum SerializedItem { + Editor(usize, PathBuf), + Terminal(usize), + ProjectSearch(usize, String), + Diagnostics(usize), +} + +impl FromSql for SerializedItemKind { + fn column_result(value: ValueRef<'_>) -> FromSqlResult { + match value { + ValueRef::Null => Err(FromSqlError::InvalidType), + ValueRef::Integer(_) => Err(FromSqlError::InvalidType), + ValueRef::Real(_) => Err(FromSqlError::InvalidType), + ValueRef::Text(bytes) => { + let str = std::str::from_utf8(bytes).map_err(|_| FromSqlError::InvalidType)?; + match str { + "Editor" => Ok(SerializedItemKind::Editor), + "Terminal" => Ok(SerializedItemKind::Terminal), + "ProjectSearch" => Ok(SerializedItemKind::ProjectSearch), + "Diagnostics" => Ok(SerializedItemKind::Diagnostics), + _ => Err(FromSqlError::InvalidType), + } + } + ValueRef::Blob(_) => Err(FromSqlError::InvalidType), + } + } +} + +impl SerializedItem { + fn kind(&self) -> SerializedItemKind { + match self { + SerializedItem::Editor(_, _) => SerializedItemKind::Editor, + SerializedItem::Terminal(_) => SerializedItemKind::Terminal, + SerializedItem::ProjectSearch(_, _) => SerializedItemKind::ProjectSearch, + SerializedItem::Diagnostics(_) => SerializedItemKind::Diagnostics, + } + } + + fn id(&self) -> usize { + match self { + SerializedItem::Editor(id, _) + | SerializedItem::Terminal(id) + | SerializedItem::ProjectSearch(id, _) + | SerializedItem::Diagnostics(id) => *id, + } + } +} + +impl Db { + fn write_item(&self, serialized_item: SerializedItem) -> Result<()> { + let mut lock = self.connection.lock(); + let tx = lock.transaction()?; + + // Serialize the item + let id = serialized_item.id(); + { + let kind = format!("{:?}", serialized_item.kind()); + + let mut stmt = + tx.prepare_cached("INSERT OR REPLACE INTO items(id, kind) VALUES ((?), (?))")?; + + stmt.execute(params![id, kind])?; + } + + // Serialize item data + match &serialized_item { + SerializedItem::Editor(_, path) => { + let mut stmt = tx.prepare_cached( + "INSERT OR REPLACE INTO item_path(item_id, path) VALUES ((?), (?))", + )?; + + let path_bytes = path.as_os_str().as_bytes(); + stmt.execute(params![id, path_bytes])?; + } + SerializedItem::ProjectSearch(_, query) => { + let mut stmt = tx.prepare_cached( + "INSERT OR REPLACE INTO item_query(item_id, query) VALUES ((?), (?))", + )?; + + stmt.execute(params![id, query])?; + } + _ => {} + } + + tx.commit()?; + + Ok(()) + } + + fn delete_item(&self, item_id: usize) -> Result<()> { + let lock = self.connection.lock(); + + let mut stmt = lock.prepare_cached( + " + DELETE FROM items WHERE id = (:id); + DELETE FROM item_path WHERE id = (:id); + DELETE FROM item_query WHERE id = (:id); + ", + )?; + + stmt.execute(named_params! {":id": item_id})?; + + Ok(()) + } + + fn take_items(&self) -> Result> { + let mut lock = self.connection.lock(); + + let tx = lock.transaction()?; + + // When working with transactions in rusqlite, need to make this kind of scope + // To make the borrow stuff work correctly. Don't know why, rust is wild. + let result = { + let mut read_stmt = tx.prepare_cached( + " + SELECT items.id, items.kind, item_path.path, item_query.query + FROM items + LEFT JOIN item_path + ON items.id = item_path.item_id + LEFT JOIN item_query + ON items.id = item_query.item_id + ORDER BY items.id + ", + )?; + + let result = read_stmt + .query_map([], |row| { + let id: usize = row.get(0)?; + let kind: SerializedItemKind = row.get(1)?; + + match kind { + SerializedItemKind::Editor => { + let buf: Vec = row.get(2)?; + let path: PathBuf = OsStr::from_bytes(&buf).into(); + + Ok(SerializedItem::Editor(id, path)) + } + SerializedItemKind::Terminal => Ok(SerializedItem::Terminal(id)), + SerializedItemKind::ProjectSearch => { + let query: Arc = row.get(3)?; + Ok(SerializedItem::ProjectSearch(id, query.to_string())) + } + SerializedItemKind::Diagnostics => Ok(SerializedItem::Diagnostics(id)), + } + })? + .collect::, rusqlite::Error>>()?; + + let mut delete_stmt = tx.prepare_cached( + "DELETE FROM items; + DELETE FROM item_path; + DELETE FROM item_query;", + )?; + + delete_stmt.execute([])?; + + result + }; + + tx.commit()?; + + Ok(result) + } +} + +#[cfg(test)] +mod test { + use anyhow::Result; + + use super::*; + + #[test] + fn test_items_round_trip() -> Result<()> { + let db = Db::open_in_memory()?; + + let mut items = vec![ + SerializedItem::Editor(0, PathBuf::from("/tmp/test.txt")), + SerializedItem::Terminal(1), + SerializedItem::ProjectSearch(2, "Test query!".to_string()), + SerializedItem::Diagnostics(3), + ]; + + for item in items.iter() { + db.write_item(item.clone())?; + } + + assert_eq!(items, db.take_items()?); + + // Check that it's empty, as expected + assert_eq!(Vec::::new(), db.take_items()?); + + for item in items.iter() { + db.write_item(item.clone())?; + } + + items.remove(2); + db.delete_item(2)?; + + assert_eq!(items, db.take_items()?); + + Ok(()) + } +} diff --git a/crates/db/src/kvp.rs b/crates/db/src/kvp.rs index d23e6ae5b05900c7067f8c73b6cc2fc12f555877..ca1b15e45a1cdfb0e16573fc6d603b9be369f262 100644 --- a/crates/db/src/kvp.rs +++ b/crates/db/src/kvp.rs @@ -3,6 +3,13 @@ use rusqlite::OptionalExtension; use super::Db; +pub(crate) const KVP_M_1: &str = " +CREATE TABLE kv_store( + key TEXT PRIMARY KEY, + value TEXT NOT NULL +) STRICT; +"; + impl Db { pub fn read_kvp(&self, key: &str) -> Result> { let lock = self.connection.lock(); @@ -14,7 +21,7 @@ impl Db { pub fn delete_kvp(&self, key: &str) -> Result<()> { let lock = self.connection.lock(); - let mut stmt = lock.prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; + let mut stmt = lock.prepare_cached("DELETE FROM kv_store WHERE key = (?)")?; stmt.execute([key])?; @@ -32,3 +39,31 @@ impl Db { Ok(()) } } + +#[cfg(test)] +mod tests { + use anyhow::Result; + + use super::*; + + #[test] + fn test_kvp() -> Result<()> { + let db = Db::open_in_memory()?; + + assert_eq!(db.read_kvp("key-1")?, None); + + db.write_kvp("key-1", "one")?; + assert_eq!(db.read_kvp("key-1")?, Some("one".to_string())); + + db.write_kvp("key-1", "one-2")?; + assert_eq!(db.read_kvp("key-1")?, Some("one-2".to_string())); + + db.write_kvp("key-2", "two")?; + assert_eq!(db.read_kvp("key-2")?, Some("two".to_string())); + + db.delete_kvp("key-1")?; + assert_eq!(db.read_kvp("key-1")?, None); + + Ok(()) + } +} diff --git a/crates/db/src/migrations.rs b/crates/db/src/migrations.rs index 21db94e973a9adac5cbec0fca95f9cb0e23cab83..35943825369e515e9e548df92dfb2c0d39887fb9 100644 --- a/crates/db/src/migrations.rs +++ b/crates/db/src/migrations.rs @@ -1,10 +1,15 @@ use rusqlite_migration::{Migrations, M}; +use crate::items::ITEMS_M_1; +use crate::kvp::KVP_M_1; + +// This must be ordered by development time! Only ever add new migrations to the end!! +// Bad things will probably happen if you don't monotonically edit this vec!!!! +// And no re-ordering ever!!!!!!!!!! The results of these migrations are on the user's +// file system and so everything we do here is locked in _f_o_r_e_v_e_r_. lazy_static::lazy_static! { - pub static ref MIGRATIONS: Migrations<'static> = Migrations::new(vec![M::up( - "CREATE TABLE kv_store( - key TEXT PRIMARY KEY, - value TEXT NOT NULL - ) STRICT;", - )]); + pub static ref MIGRATIONS: Migrations<'static> = Migrations::new(vec![ + M::up(KVP_M_1), + M::up(ITEMS_M_1), + ]); } diff --git a/crates/db/src/serialized_item.rs b/crates/db/src/serialized_item.rs deleted file mode 100644 index 9f6284fa07bdfdcc10e9e697c768bf1643b29c79..0000000000000000000000000000000000000000 --- a/crates/db/src/serialized_item.rs +++ /dev/null @@ -1,22 +0,0 @@ -use std::path::PathBuf; - -use anyhow::Result; - -use super::Db; - -impl Db {} - -#[derive(PartialEq, Eq, Hash)] -pub enum SerializedItemKind { - Editor, - Terminal, - ProjectSearch, - Diagnostics, -} - -pub enum SerializedItem { - Editor(PathBuf, String), - Terminal, - ProjectSearch(String), - Diagnostics, -} diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 95ab8c496437061f03768e1591594bf27bff6beb..5f6a89a32581a43fb3a7e30512d4212ff61f06bd 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -260,6 +260,7 @@ pub enum ItemEvent { UpdateTab, UpdateBreadcrumbs, Edit, + Serialize(SerializedItem), } pub trait Item: View { From d99a074bc0e9dce47cf32c7c8125abde54792b61 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Mon, 17 Oct 2022 17:05:08 -0700 Subject: [PATCH 22/38] revert workspace changes --- crates/workspace/Cargo.toml | 1 - crates/workspace/src/workspace.rs | 28 ---------------------------- 2 files changed, 29 deletions(-) diff --git a/crates/workspace/Cargo.toml b/crates/workspace/Cargo.toml index b68636b50feda6d27e03f8c8e8d2fb852e5b62fc..54e7eaf463a344049bc8b1b5d97a64eddaea1b07 100644 --- a/crates/workspace/Cargo.toml +++ b/crates/workspace/Cargo.toml @@ -23,7 +23,6 @@ client = { path = "../client" } collections = { path = "../collections" } context_menu = { path = "../context_menu" } drag_and_drop = { path = "../drag_and_drop" } -db = { path = "../db" } fs = { path = "../fs" } gpui = { path = "../gpui" } language = { path = "../language" } diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 5f6a89a32581a43fb3a7e30512d4212ff61f06bd..ece8cedfb1e516f8ff66fc8c76b3814c0fabd85b 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -14,7 +14,6 @@ use anyhow::{anyhow, Context, Result}; use call::ActiveCall; use client::{proto, Client, PeerId, TypedEnvelope, UserStore}; use collections::{hash_map, HashMap, HashSet}; -use db::{SerializedItem, SerializedItemKind}; use dock::{DefaultItemFactory, Dock, ToggleDockButton}; use drag_and_drop::DragAndDrop; use fs::{self, Fs}; @@ -78,9 +77,6 @@ type FollowableItemBuilders = HashMap< ), >; -type ItemDeserializers = - HashMap) -> Box>; - #[derive(Clone, PartialEq)] pub struct RemoveWorktreeFromProject(pub WorktreeId); @@ -234,14 +230,6 @@ pub fn register_followable_item(cx: &mut MutableAppContext) { }); } -pub fn register_deserializable_item(cx: &mut MutableAppContext) { - cx.update_default_global(|deserializers: &mut ItemDeserializers, _| { - deserializers.insert(I::serialized_item_kind(), |serialized_item, cx| { - Box::new(cx.add_view(|cx| I::deserialize(serialized_item, cx))) - }) - }); -} - pub struct AppState { pub languages: Arc, pub themes: Arc, @@ -260,7 +248,6 @@ pub enum ItemEvent { UpdateTab, UpdateBreadcrumbs, Edit, - Serialize(SerializedItem), } pub trait Item: View { @@ -346,9 +333,6 @@ pub trait Item: View { fn breadcrumbs(&self, _theme: &Theme, _cx: &AppContext) -> Option> { None } - fn serialized_item_kind() -> SerializedItemKind; - fn deserialize(serialized_item: SerializedItem, cx: &mut ViewContext) -> Self; - fn serialize(&self) -> SerializedItem; } pub trait ProjectItem: Item { @@ -3627,18 +3611,6 @@ mod tests { fn to_item_events(_: &Self::Event) -> Vec { vec![ItemEvent::UpdateTab, ItemEvent::Edit] } - - fn serialized_item_kind() -> SerializedItemKind { - unimplemented!() - } - - fn deserialize(_serialized_item: SerializedItem, _cx: &mut ViewContext) -> Self { - unimplemented!() - } - - fn serialize(&self) -> SerializedItem { - unimplemented!() - } } impl SidebarItem for TestItem {} From 0491747eed76bb582f34e443787ad008501341b5 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 18 Oct 2022 17:42:10 +0200 Subject: [PATCH 23/38] Only leave room on connections that are associated with the active call Co-Authored-By: Nathan Sobo --- crates/collab/src/integration_tests.rs | 12 ++++++++++-- crates/collab/src/rpc.rs | 4 ++++ crates/collab/src/rpc/store.rs | 12 +++++++----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/crates/collab/src/integration_tests.rs b/crates/collab/src/integration_tests.rs index e715a995a7c9ce4d331eb4bc9a1e237eead0fa56..294ebd75f278f9a11fdf015c86f868bd1e9709d1 100644 --- a/crates/collab/src/integration_tests.rs +++ b/crates/collab/src/integration_tests.rs @@ -468,6 +468,14 @@ async fn test_calls_on_multiple_connections( assert!(incoming_call_b1.next().await.unwrap().is_none()); assert!(incoming_call_b2.next().await.unwrap().is_none()); + // User B disconnects the client that is not on the call. Everything should be fine. + client_b1.disconnect(&cx_b1.to_async()).unwrap(); + deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); + client_b1 + .authenticate_and_connect(false, &cx_b1.to_async()) + .await + .unwrap(); + // User B hangs up, and user A calls them again. active_call_b2.update(cx_b2, |call, cx| call.hang_up(cx).unwrap()); deterministic.run_until_parked(); @@ -520,9 +528,9 @@ async fn test_calls_on_multiple_connections( assert!(incoming_call_b1.next().await.unwrap().is_some()); assert!(incoming_call_b2.next().await.unwrap().is_some()); - // User A disconnects up, causing both connections to stop ringing. + // User A disconnects, causing both connections to stop ringing. server.disconnect_client(client_a.current_user_id(cx_a)); - cx_a.foreground().advance_clock(rpc::RECEIVE_TIMEOUT); + deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); assert!(incoming_call_b1.next().await.unwrap().is_none()); assert!(incoming_call_b2.next().await.unwrap().is_none()); } diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index bb8d7c2325680682eed81b2b119f76c5ba2d4119..fc8a23f6691d34302549892564dd105c8de6fbb2 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -477,6 +477,10 @@ impl Server { let mut contacts_to_update = HashSet::default(); { let mut store = self.store().await; + + #[cfg(test)] + let removed_connection = store.remove_connection(connection_id).unwrap(); + #[cfg(not(test))] let removed_connection = store.remove_connection(connection_id)?; for project in removed_connection.hosted_projects { diff --git a/crates/collab/src/rpc/store.rs b/crates/collab/src/rpc/store.rs index fb21538d60b8f1c45ebfb3cdc4ca206c1b715f47..ee7d3e258704d5ff48d916368e8cb638a60cc329 100644 --- a/crates/collab/src/rpc/store.rs +++ b/crates/collab/src/rpc/store.rs @@ -215,11 +215,13 @@ impl Store { let connected_user = self.connected_users.get(&user_id).unwrap(); if let Some(active_call) = connected_user.active_call.as_ref() { let room_id = active_call.room_id; - let left_room = self.leave_room(room_id, connection_id)?; - result.hosted_projects = left_room.unshared_projects; - result.guest_projects = left_room.left_projects; - result.room_id = Some(room_id); - result.canceled_call_connection_ids = left_room.canceled_call_connection_ids; + if active_call.connection_id == Some(connection_id) { + let left_room = self.leave_room(room_id, connection_id)?; + result.hosted_projects = left_room.unshared_projects; + result.guest_projects = left_room.left_projects; + result.room_id = Some(room_id); + result.canceled_call_connection_ids = left_room.canceled_call_connection_ids; + } } let connected_user = self.connected_users.get_mut(&user_id).unwrap(); From 2c4f003897c9f8ec56a968dd0c09ea565a49c61a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 18 Oct 2022 18:42:55 +0200 Subject: [PATCH 24/38] Tell clients their peer id on connection in Hello message Co-Authored-By: Nathan Sobo --- crates/client/src/client.rs | 82 +++++++++++-- crates/collab/src/rpc.rs | 2 + crates/rpc/proto/zed.proto | 231 ++++++++++++++++++------------------ crates/rpc/src/proto.rs | 1 + crates/rpc/src/rpc.rs | 2 +- 5 files changed, 194 insertions(+), 124 deletions(-) diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index cc6bdf627930c31f6e574e19e5f6dbb6aebdc7f4..5f6d1bc53ac4404db244f6e5eaf50019f25e58eb 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -143,11 +143,16 @@ pub enum Status { Authenticating, Connecting, ConnectionError, - Connected { connection_id: ConnectionId }, + Connected { + peer_id: PeerId, + connection_id: ConnectionId, + }, ConnectionLost, Reauthenticating, Reconnecting, - ReconnectionError { next_reconnection: Instant }, + ReconnectionError { + next_reconnection: Instant, + }, } impl Status { @@ -663,6 +668,7 @@ impl Client { self.set_status(Status::Reconnecting, cx); } + let mut timeout = cx.background().timer(CONNECTION_TIMEOUT).fuse(); futures::select_biased! { connection = self.establish_connection(&credentials, cx).fuse() => { match connection { @@ -671,8 +677,14 @@ impl Client { if !read_from_keychain && IMPERSONATE_LOGIN.is_none() { write_credentials_to_keychain(&credentials, cx).log_err(); } - self.set_connection(conn, cx); - Ok(()) + + futures::select_biased! { + result = self.set_connection(conn, cx).fuse() => result, + _ = timeout => { + self.set_status(Status::ConnectionError, cx); + Err(anyhow!("timed out waiting on hello message from server")) + } + } } Err(EstablishConnectionError::Unauthorized) => { self.state.write().credentials.take(); @@ -695,21 +707,65 @@ impl Client { } } } - _ = cx.background().timer(CONNECTION_TIMEOUT).fuse() => { + _ = &mut timeout => { self.set_status(Status::ConnectionError, cx); Err(anyhow!("timed out trying to establish connection")) } } } - fn set_connection(self: &Arc, conn: Connection, cx: &AsyncAppContext) { + async fn set_connection( + self: &Arc, + conn: Connection, + cx: &AsyncAppContext, + ) -> Result<()> { let executor = cx.background(); log::info!("add connection to peer"); let (connection_id, handle_io, mut incoming) = self .peer .add_connection(conn, move |duration| executor.timer(duration)); - log::info!("set status to connected {}", connection_id); - self.set_status(Status::Connected { connection_id }, cx); + let handle_io = cx.background().spawn(handle_io); + + let peer_id = async { + log::info!("waiting for server hello"); + let message = incoming + .next() + .await + .ok_or_else(|| anyhow!("no hello message received"))?; + log::info!("got server hello"); + let hello_message_type_name = message.payload_type_name().to_string(); + let hello = message + .into_any() + .downcast::>() + .map_err(|_| { + anyhow!( + "invalid hello message received: {:?}", + hello_message_type_name + ) + })?; + Ok(PeerId(hello.payload.peer_id)) + }; + + let peer_id = match peer_id.await { + Ok(peer_id) => peer_id, + Err(error) => { + self.peer.disconnect(connection_id); + return Err(error); + } + }; + + log::info!( + "set status to connected (connection id: {}, peer id: {})", + connection_id, + peer_id + ); + self.set_status( + Status::Connected { + peer_id, + connection_id, + }, + cx, + ); cx.foreground() .spawn({ let cx = cx.clone(); @@ -807,14 +863,18 @@ impl Client { }) .detach(); - let handle_io = cx.background().spawn(handle_io); let this = self.clone(); let cx = cx.clone(); cx.foreground() .spawn(async move { match handle_io.await { Ok(()) => { - if *this.status().borrow() == (Status::Connected { connection_id }) { + if *this.status().borrow() + == (Status::Connected { + connection_id, + peer_id, + }) + { this.set_status(Status::SignedOut, &cx); } } @@ -825,6 +885,8 @@ impl Client { } }) .detach(); + + Ok(()) } fn authenticate(self: &Arc, cx: &AsyncAppContext) -> Task> { diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index fc8a23f6691d34302549892564dd105c8de6fbb2..ec13b9e8bbba43b1f05a12e53c74026ed9a1249b 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -369,6 +369,8 @@ impl Server { }); tracing::info!(%user_id, %login, %connection_id, %address, "connection opened"); + this.peer.send(connection_id, proto::Hello { peer_id: connection_id.0 })?; + tracing::info!(%user_id, %login, %connection_id, %address, "sent hello message"); if let Some(send_connection_id) = send_connection_id.as_mut() { let _ = send_connection_id.send(connection_id).await; diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index 67f6c1350781ad9f68e3d223678bef208f74f169..5af55b12cef82af9772ff03d80dc9f622742999d 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -6,125 +6,130 @@ message Envelope { optional uint32 responding_to = 2; optional uint32 original_sender_id = 3; oneof payload { - Ack ack = 4; - Error error = 5; - Ping ping = 6; - Test test = 7; + Hello hello = 4; + Ack ack = 5; + Error error = 6; + Ping ping = 7; + Test test = 8; - CreateRoom create_room = 8; - CreateRoomResponse create_room_response = 9; - JoinRoom join_room = 10; - JoinRoomResponse join_room_response = 11; - LeaveRoom leave_room = 12; - Call call = 13; - IncomingCall incoming_call = 14; - CallCanceled call_canceled = 15; - CancelCall cancel_call = 16; - DeclineCall decline_call = 17; - UpdateParticipantLocation update_participant_location = 18; - RoomUpdated room_updated = 19; - - ShareProject share_project = 20; - ShareProjectResponse share_project_response = 21; - UnshareProject unshare_project = 22; - JoinProject join_project = 23; - JoinProjectResponse join_project_response = 24; - LeaveProject leave_project = 25; - AddProjectCollaborator add_project_collaborator = 26; - RemoveProjectCollaborator remove_project_collaborator = 27; - - GetDefinition get_definition = 28; - GetDefinitionResponse get_definition_response = 29; - GetTypeDefinition get_type_definition = 30; - GetTypeDefinitionResponse get_type_definition_response = 31; - GetReferences get_references = 32; - GetReferencesResponse get_references_response = 33; - GetDocumentHighlights get_document_highlights = 34; - GetDocumentHighlightsResponse get_document_highlights_response = 35; - GetProjectSymbols get_project_symbols = 36; - GetProjectSymbolsResponse get_project_symbols_response = 37; - OpenBufferForSymbol open_buffer_for_symbol = 38; - OpenBufferForSymbolResponse open_buffer_for_symbol_response = 39; - - UpdateProject update_project = 40; - RegisterProjectActivity register_project_activity = 41; - UpdateWorktree update_worktree = 42; - UpdateWorktreeExtensions update_worktree_extensions = 43; - - CreateProjectEntry create_project_entry = 44; - RenameProjectEntry rename_project_entry = 45; - CopyProjectEntry copy_project_entry = 46; - DeleteProjectEntry delete_project_entry = 47; - ProjectEntryResponse project_entry_response = 48; - - UpdateDiagnosticSummary update_diagnostic_summary = 49; - StartLanguageServer start_language_server = 50; - UpdateLanguageServer update_language_server = 51; - - OpenBufferById open_buffer_by_id = 52; - OpenBufferByPath open_buffer_by_path = 53; - OpenBufferResponse open_buffer_response = 54; - CreateBufferForPeer create_buffer_for_peer = 55; - UpdateBuffer update_buffer = 56; - UpdateBufferFile update_buffer_file = 57; - SaveBuffer save_buffer = 58; - BufferSaved buffer_saved = 59; - BufferReloaded buffer_reloaded = 60; - ReloadBuffers reload_buffers = 61; - ReloadBuffersResponse reload_buffers_response = 62; - FormatBuffers format_buffers = 63; - FormatBuffersResponse format_buffers_response = 64; - GetCompletions get_completions = 65; - GetCompletionsResponse get_completions_response = 66; - ApplyCompletionAdditionalEdits apply_completion_additional_edits = 67; - ApplyCompletionAdditionalEditsResponse apply_completion_additional_edits_response = 68; - GetCodeActions get_code_actions = 69; - GetCodeActionsResponse get_code_actions_response = 70; - GetHover get_hover = 71; - GetHoverResponse get_hover_response = 72; - ApplyCodeAction apply_code_action = 73; - ApplyCodeActionResponse apply_code_action_response = 74; - PrepareRename prepare_rename = 75; - PrepareRenameResponse prepare_rename_response = 76; - PerformRename perform_rename = 77; - PerformRenameResponse perform_rename_response = 78; - SearchProject search_project = 79; - SearchProjectResponse search_project_response = 80; - - GetChannels get_channels = 81; - GetChannelsResponse get_channels_response = 82; - JoinChannel join_channel = 83; - JoinChannelResponse join_channel_response = 84; - LeaveChannel leave_channel = 85; - SendChannelMessage send_channel_message = 86; - SendChannelMessageResponse send_channel_message_response = 87; - ChannelMessageSent channel_message_sent = 88; - GetChannelMessages get_channel_messages = 89; - GetChannelMessagesResponse get_channel_messages_response = 90; - - UpdateContacts update_contacts = 91; - UpdateInviteInfo update_invite_info = 92; - ShowContacts show_contacts = 93; - - GetUsers get_users = 94; - FuzzySearchUsers fuzzy_search_users = 95; - UsersResponse users_response = 96; - RequestContact request_contact = 97; - RespondToContactRequest respond_to_contact_request = 98; - RemoveContact remove_contact = 99; - - Follow follow = 100; - FollowResponse follow_response = 101; - UpdateFollowers update_followers = 102; - Unfollow unfollow = 103; - GetPrivateUserInfo get_private_user_info = 104; - GetPrivateUserInfoResponse get_private_user_info_response = 105; - UpdateDiffBase update_diff_base = 106; + CreateRoom create_room = 9; + CreateRoomResponse create_room_response = 10; + JoinRoom join_room = 11; + JoinRoomResponse join_room_response = 12; + LeaveRoom leave_room = 13; + Call call = 14; + IncomingCall incoming_call = 15; + CallCanceled call_canceled = 16; + CancelCall cancel_call = 17; + DeclineCall decline_call = 18; + UpdateParticipantLocation update_participant_location = 19; + RoomUpdated room_updated = 20; + + ShareProject share_project = 21; + ShareProjectResponse share_project_response = 22; + UnshareProject unshare_project = 23; + JoinProject join_project = 24; + JoinProjectResponse join_project_response = 25; + LeaveProject leave_project = 26; + AddProjectCollaborator add_project_collaborator = 27; + RemoveProjectCollaborator remove_project_collaborator = 28; + + GetDefinition get_definition = 29; + GetDefinitionResponse get_definition_response = 30; + GetTypeDefinition get_type_definition = 31; + GetTypeDefinitionResponse get_type_definition_response = 32; + GetReferences get_references = 33; + GetReferencesResponse get_references_response = 34; + GetDocumentHighlights get_document_highlights = 35; + GetDocumentHighlightsResponse get_document_highlights_response = 36; + GetProjectSymbols get_project_symbols = 37; + GetProjectSymbolsResponse get_project_symbols_response = 38; + OpenBufferForSymbol open_buffer_for_symbol = 39; + OpenBufferForSymbolResponse open_buffer_for_symbol_response = 40; + + UpdateProject update_project = 41; + RegisterProjectActivity register_project_activity = 42; + UpdateWorktree update_worktree = 43; + UpdateWorktreeExtensions update_worktree_extensions = 44; + + CreateProjectEntry create_project_entry = 45; + RenameProjectEntry rename_project_entry = 46; + CopyProjectEntry copy_project_entry = 47; + DeleteProjectEntry delete_project_entry = 48; + ProjectEntryResponse project_entry_response = 49; + + UpdateDiagnosticSummary update_diagnostic_summary = 50; + StartLanguageServer start_language_server = 51; + UpdateLanguageServer update_language_server = 52; + + OpenBufferById open_buffer_by_id = 53; + OpenBufferByPath open_buffer_by_path = 54; + OpenBufferResponse open_buffer_response = 55; + CreateBufferForPeer create_buffer_for_peer = 56; + UpdateBuffer update_buffer = 57; + UpdateBufferFile update_buffer_file = 58; + SaveBuffer save_buffer = 59; + BufferSaved buffer_saved = 60; + BufferReloaded buffer_reloaded = 61; + ReloadBuffers reload_buffers = 62; + ReloadBuffersResponse reload_buffers_response = 63; + FormatBuffers format_buffers = 64; + FormatBuffersResponse format_buffers_response = 65; + GetCompletions get_completions = 66; + GetCompletionsResponse get_completions_response = 67; + ApplyCompletionAdditionalEdits apply_completion_additional_edits = 68; + ApplyCompletionAdditionalEditsResponse apply_completion_additional_edits_response = 69; + GetCodeActions get_code_actions = 70; + GetCodeActionsResponse get_code_actions_response = 71; + GetHover get_hover = 72; + GetHoverResponse get_hover_response = 73; + ApplyCodeAction apply_code_action = 74; + ApplyCodeActionResponse apply_code_action_response = 75; + PrepareRename prepare_rename = 76; + PrepareRenameResponse prepare_rename_response = 77; + PerformRename perform_rename = 78; + PerformRenameResponse perform_rename_response = 79; + SearchProject search_project = 80; + SearchProjectResponse search_project_response = 81; + + GetChannels get_channels = 82; + GetChannelsResponse get_channels_response = 83; + JoinChannel join_channel = 84; + JoinChannelResponse join_channel_response = 85; + LeaveChannel leave_channel = 86; + SendChannelMessage send_channel_message = 87; + SendChannelMessageResponse send_channel_message_response = 88; + ChannelMessageSent channel_message_sent = 89; + GetChannelMessages get_channel_messages = 90; + GetChannelMessagesResponse get_channel_messages_response = 91; + + UpdateContacts update_contacts = 92; + UpdateInviteInfo update_invite_info = 93; + ShowContacts show_contacts = 94; + + GetUsers get_users = 95; + FuzzySearchUsers fuzzy_search_users = 96; + UsersResponse users_response = 97; + RequestContact request_contact = 98; + RespondToContactRequest respond_to_contact_request = 99; + RemoveContact remove_contact = 100; + + Follow follow = 101; + FollowResponse follow_response = 102; + UpdateFollowers update_followers = 103; + Unfollow unfollow = 104; + GetPrivateUserInfo get_private_user_info = 105; + GetPrivateUserInfoResponse get_private_user_info_response = 106; + UpdateDiffBase update_diff_base = 107; } } // Messages +message Hello { + uint32 peer_id = 1; +} + message Ping {} message Ack {} diff --git a/crates/rpc/src/proto.rs b/crates/rpc/src/proto.rs index 827a8ff1a8530342fe887dbe1b6ace85d960ed50..11bbaaf5ffcbdeff96906033b1cacae6f62e48f0 100644 --- a/crates/rpc/src/proto.rs +++ b/crates/rpc/src/proto.rs @@ -121,6 +121,7 @@ messages!( (GetProjectSymbols, Background), (GetProjectSymbolsResponse, Background), (GetUsers, Foreground), + (Hello, Foreground), (IncomingCall, Foreground), (UsersResponse, Foreground), (JoinChannel, Foreground), diff --git a/crates/rpc/src/rpc.rs b/crates/rpc/src/rpc.rs index 9193eceb700dde9c6a861c537d53ed88c69bc353..c11caab108ea722d5abba800a1c836d05cbfcd4e 100644 --- a/crates/rpc/src/rpc.rs +++ b/crates/rpc/src/rpc.rs @@ -6,4 +6,4 @@ pub use conn::Connection; pub use peer::*; mod macros; -pub const PROTOCOL_VERSION: u32 = 37; \ No newline at end of file +pub const PROTOCOL_VERSION: u32 = 38; From 6146923dbbc600b3dfcbcb3e53671d4e295102db Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 18 Oct 2022 18:45:50 +0200 Subject: [PATCH 25/38] WIP: Start on test to ensure incoming calls cancel upon recipient disconnection Co-Authored-By: Nathan Sobo --- crates/collab/src/integration_tests.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/crates/collab/src/integration_tests.rs b/crates/collab/src/integration_tests.rs index 294ebd75f278f9a11fdf015c86f868bd1e9709d1..6e2f97c5aecfd5c4811ae5fe7a45661f5b98e96e 100644 --- a/crates/collab/src/integration_tests.rs +++ b/crates/collab/src/integration_tests.rs @@ -533,6 +533,23 @@ async fn test_calls_on_multiple_connections( deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); assert!(incoming_call_b1.next().await.unwrap().is_none()); assert!(incoming_call_b2.next().await.unwrap().is_none()); + + // User A reconnects automatically, then calls user B again. + active_call_a + .update(cx_a, |call, cx| { + call.invite(client_b1.user_id().unwrap(), None, cx) + }) + .await + .unwrap(); + deterministic.run_until_parked(); + assert!(incoming_call_b1.next().await.unwrap().is_some()); + assert!(incoming_call_b2.next().await.unwrap().is_some()); + + // User B disconnects all clients, causing user A to no longer see a pending call for them. + println!("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + server.disconnect_client(client_b1.current_user_id(cx_b1)); + deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); + active_call_a.read_with(cx_a, |call, _| assert!(call.room().is_none())); } #[gpui::test(iterations = 10)] From 0c0e8688eda28877a4487cfac88c2ca32ccf3b9c Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 18 Oct 2022 19:05:37 +0200 Subject: [PATCH 26/38] Use `PeerId` in `TestServer::disconnect_client` Co-Authored-By: Nathan Sobo --- crates/client/src/client.rs | 8 ++++ crates/collab/src/integration_tests.rs | 59 ++++++++++++++------------ crates/collab/src/rpc.rs | 8 ++-- 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index 5f6d1bc53ac4404db244f6e5eaf50019f25e58eb..38214a6ac308e86181c39b0f1a9562d136937261 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -319,6 +319,14 @@ impl Client { .map(|credentials| credentials.user_id) } + pub fn peer_id(&self) -> Option { + if let Status::Connected { peer_id, .. } = &*self.status().borrow() { + Some(*peer_id) + } else { + None + } + } + pub fn status(&self) -> watch::Receiver { self.state.read().status.1.clone() } diff --git a/crates/collab/src/integration_tests.rs b/crates/collab/src/integration_tests.rs index 6e2f97c5aecfd5c4811ae5fe7a45661f5b98e96e..7586348081875e1e473636a78c1683d22b5728f7 100644 --- a/crates/collab/src/integration_tests.rs +++ b/crates/collab/src/integration_tests.rs @@ -8,7 +8,7 @@ use anyhow::anyhow; use call::{room, ActiveCall, ParticipantLocation, Room}; use client::{ self, test::FakeHttpClient, Channel, ChannelDetails, ChannelList, Client, Connection, - Credentials, EstablishConnectionError, User, UserStore, RECEIVE_TIMEOUT, + Credentials, EstablishConnectionError, PeerId, User, UserStore, RECEIVE_TIMEOUT, }; use collections::{BTreeMap, HashMap, HashSet}; use editor::{ @@ -16,7 +16,10 @@ use editor::{ ToggleCodeActions, Undo, }; use fs::{FakeFs, Fs as _, HomeDir, LineEnding}; -use futures::{channel::mpsc, Future, StreamExt as _}; +use futures::{ + channel::{mpsc, oneshot}, + Future, StreamExt as _, +}; use gpui::{ executor::{self, Deterministic}, geometry::vector::vec2f, @@ -34,7 +37,6 @@ use project::{ ProjectStore, WorktreeId, }; use rand::prelude::*; -use rpc::PeerId; use serde_json::json; use settings::{Formatter, Settings}; use sqlx::types::time::OffsetDateTime; @@ -385,7 +387,7 @@ async fn test_leaving_room_on_disconnection( ); // When user A disconnects, both client A and B clear their room on the active call. - server.disconnect_client(client_a.current_user_id(cx_a)); + server.disconnect_client(client_a.peer_id().unwrap()); cx_a.foreground().advance_clock(rpc::RECEIVE_TIMEOUT); active_call_a.read_with(cx_a, |call, _| assert!(call.room().is_none())); active_call_b.read_with(cx_b, |call, _| assert!(call.room().is_none())); @@ -529,7 +531,7 @@ async fn test_calls_on_multiple_connections( assert!(incoming_call_b2.next().await.unwrap().is_some()); // User A disconnects, causing both connections to stop ringing. - server.disconnect_client(client_a.current_user_id(cx_a)); + server.disconnect_client(client_a.peer_id().unwrap()); deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); assert!(incoming_call_b1.next().await.unwrap().is_none()); assert!(incoming_call_b2.next().await.unwrap().is_none()); @@ -547,7 +549,7 @@ async fn test_calls_on_multiple_connections( // User B disconnects all clients, causing user A to no longer see a pending call for them. println!("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - server.disconnect_client(client_b1.current_user_id(cx_b1)); + server.disconnect_client(client_b1.peer_id().unwrap()); deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); active_call_a.read_with(cx_a, |call, _| assert!(call.room().is_none())); } @@ -607,7 +609,7 @@ async fn test_share_project( .update(cx_b, |call, cx| call.accept_incoming(cx)) .await .unwrap(); - let client_b_peer_id = client_b.peer_id; + let client_b_peer_id = client_b.peer_id().unwrap(); let project_b = client_b .build_remote_project(initial_project.id, cx_b) .await; @@ -831,7 +833,7 @@ async fn test_host_disconnect( assert!(cx_b.is_window_edited(workspace_b.window_id())); // Drop client A's connection. Collaborators should disappear and the project should not be shown as shared. - server.disconnect_client(client_a.current_user_id(cx_a)); + server.disconnect_client(client_a.peer_id().unwrap()); deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); project_a .condition(cx_a, |project, _| project.collaborators().is_empty()) @@ -874,7 +876,7 @@ async fn test_host_disconnect( .unwrap(); // Drop client A's connection again. We should still unshare it successfully. - server.disconnect_client(client_a.current_user_id(cx_a)); + server.disconnect_client(client_a.peer_id().unwrap()); deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); project_a.read_with(cx_a, |project, _| assert!(!project.is_shared())); } @@ -2175,7 +2177,7 @@ async fn test_leaving_project( // Simulate connection loss for client C and ensure client A observes client C leaving the project. client_c.wait_for_current_user(cx_c).await; - server.disconnect_client(client_c.current_user_id(cx_c)); + server.disconnect_client(client_c.peer_id().unwrap()); cx_a.foreground().advance_clock(rpc::RECEIVE_TIMEOUT); deterministic.run_until_parked(); project_a.read_with(cx_a, |project, _| { @@ -4338,7 +4340,7 @@ async fn test_chat_reconnection(cx_a: &mut TestAppContext, cx_b: &mut TestAppCon // Disconnect client B, ensuring we can still access its cached channel data. server.forbid_connections(); - server.disconnect_client(client_b.current_user_id(cx_b)); + server.disconnect_client(client_b.peer_id().unwrap()); cx_b.foreground().advance_clock(rpc::RECEIVE_TIMEOUT); while !matches!( status_b.next().await, @@ -4501,7 +4503,7 @@ async fn test_contacts( ] ); - server.disconnect_client(client_c.current_user_id(cx_c)); + server.disconnect_client(client_c.peer_id().unwrap()); server.forbid_connections(); deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); assert_eq!( @@ -4741,7 +4743,7 @@ async fn test_contacts( ); server.forbid_connections(); - server.disconnect_client(client_a.current_user_id(cx_a)); + server.disconnect_client(client_a.peer_id().unwrap()); deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); assert_eq!(contacts(&client_a, cx_a), []); assert_eq!( @@ -5651,6 +5653,7 @@ async fn test_random_collaboration( let mut clients = Vec::new(); let mut user_ids = Vec::new(); + let mut peer_ids = Vec::new(); let mut op_start_signals = Vec::new(); let mut next_entity_id = 100000; @@ -5839,6 +5842,7 @@ async fn test_random_collaboration( let op_start_signal = futures::channel::mpsc::unbounded(); user_ids.push(host_user_id); + peer_ids.push(host.peer_id().unwrap()); op_start_signals.push(op_start_signal.0); clients.push(host_cx.foreground().spawn(host.simulate_host( host_project, @@ -5856,7 +5860,7 @@ async fn test_random_collaboration( let mut operations = 0; while operations < max_operations { if operations == disconnect_host_at { - server.disconnect_client(user_ids[0]); + server.disconnect_client(peer_ids[0]); deterministic.advance_clock(RECEIVE_TIMEOUT); drop(op_start_signals); @@ -5939,6 +5943,7 @@ async fn test_random_collaboration( let op_start_signal = futures::channel::mpsc::unbounded(); user_ids.push(guest_user_id); + peer_ids.push(guest.peer_id().unwrap()); op_start_signals.push(op_start_signal.0); clients.push(guest_cx.foreground().spawn(guest.simulate_guest( guest_username.clone(), @@ -5955,10 +5960,11 @@ async fn test_random_collaboration( let guest_ix = rng.lock().gen_range(1..clients.len()); log::info!("Removing guest {}", user_ids[guest_ix]); let removed_guest_id = user_ids.remove(guest_ix); + let removed_peer_id = peer_ids.remove(guest_ix); let guest = clients.remove(guest_ix); op_start_signals.remove(guest_ix); server.forbid_connections(); - server.disconnect_client(removed_guest_id); + server.disconnect_client(removed_peer_id); deterministic.advance_clock(RECEIVE_TIMEOUT); deterministic.start_waiting(); log::info!("Waiting for guest {} to exit...", removed_guest_id); @@ -6082,8 +6088,10 @@ async fn test_random_collaboration( let host_buffer = host_project.read_with(&host_cx, |project, cx| { project.buffer_for_id(buffer_id, cx).unwrap_or_else(|| { panic!( - "host does not have buffer for guest:{}, peer:{}, id:{}", - guest_client.username, guest_client.peer_id, buffer_id + "host does not have buffer for guest:{}, peer:{:?}, id:{}", + guest_client.username, + guest_client.peer_id(), + buffer_id ) }) }); @@ -6126,7 +6134,7 @@ struct TestServer { server: Arc, foreground: Rc, notifications: mpsc::UnboundedReceiver<()>, - connection_killers: Arc>>>, + connection_killers: Arc>>>, forbid_connections: Arc, _test_db: TestDb, } @@ -6192,7 +6200,6 @@ impl TestServer { let db = self.app_state.db.clone(); let connection_killers = self.connection_killers.clone(); let forbid_connections = self.forbid_connections.clone(); - let (connection_id_tx, mut connection_id_rx) = mpsc::channel(16); Arc::get_mut(&mut client) .unwrap() @@ -6215,7 +6222,6 @@ impl TestServer { let connection_killers = connection_killers.clone(); let forbid_connections = forbid_connections.clone(); let client_name = client_name.clone(); - let connection_id_tx = connection_id_tx.clone(); cx.spawn(move |cx| async move { if forbid_connections.load(SeqCst) { Err(EstablishConnectionError::other(anyhow!( @@ -6224,7 +6230,7 @@ impl TestServer { } else { let (client_conn, server_conn, killed) = Connection::in_memory(cx.background()); - connection_killers.lock().insert(user_id, killed); + let (connection_id_tx, connection_id_rx) = oneshot::channel(); let user = db.get_user_by_id(user_id).await.unwrap().unwrap(); cx.background() .spawn(server.handle_connection( @@ -6235,6 +6241,10 @@ impl TestServer { cx.background(), )) .detach(); + let connection_id = connection_id_rx.await.unwrap(); + connection_killers + .lock() + .insert(PeerId(connection_id.0), killed); Ok(client_conn) } }) @@ -6266,11 +6276,9 @@ impl TestServer { .authenticate_and_connect(false, &cx.to_async()) .await .unwrap(); - let peer_id = PeerId(connection_id_rx.next().await.unwrap().0); let client = TestClient { client, - peer_id, username: name.to_string(), user_store, project_store, @@ -6282,10 +6290,10 @@ impl TestServer { client } - fn disconnect_client(&self, user_id: UserId) { + fn disconnect_client(&self, peer_id: PeerId) { self.connection_killers .lock() - .remove(&user_id) + .remove(&peer_id) .unwrap() .store(true, SeqCst); } @@ -6386,7 +6394,6 @@ impl Drop for TestServer { struct TestClient { client: Arc, username: String, - pub peer_id: PeerId, pub user_store: ModelHandle, pub project_store: ModelHandle, language_registry: Arc, diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index ec13b9e8bbba43b1f05a12e53c74026ed9a1249b..1662802c23693088c01b7f86ea926f496e76a7c3 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -24,7 +24,7 @@ use axum::{ }; use collections::{HashMap, HashSet}; use futures::{ - channel::mpsc, + channel::{mpsc, oneshot}, future::{self, BoxFuture}, stream::FuturesUnordered, FutureExt, SinkExt, StreamExt, TryStreamExt, @@ -348,7 +348,7 @@ impl Server { connection: Connection, address: String, user: User, - mut send_connection_id: Option>, + mut send_connection_id: Option>, executor: E, ) -> impl Future> { let mut this = self.clone(); @@ -372,8 +372,8 @@ impl Server { this.peer.send(connection_id, proto::Hello { peer_id: connection_id.0 })?; tracing::info!(%user_id, %login, %connection_id, %address, "sent hello message"); - if let Some(send_connection_id) = send_connection_id.as_mut() { - let _ = send_connection_id.send(connection_id).await; + if let Some(send_connection_id) = send_connection_id.take() { + let _ = send_connection_id.send(connection_id); } if !user.connected_once { From 9c8dd66b208f8f150e581de873bc887b2ddb16cb Mon Sep 17 00:00:00 2001 From: K Simmons Date: Tue, 18 Oct 2022 10:13:04 -0700 Subject: [PATCH 27/38] dont reference db items --- Cargo.lock | 14 +++----------- crates/db/src/db.rs | 1 - script/generate-zed-sqlx-data | 15 --------------- 3 files changed, 3 insertions(+), 27 deletions(-) delete mode 100755 script/generate-zed-sqlx-data diff --git a/Cargo.lock b/Cargo.lock index eaeb99cd2d6c435dc8d13594b528fc7297e3b4e0..23b2c8334d7ccc9c87f4fee4e2e39db1fbbc4377 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1111,7 +1111,6 @@ dependencies = [ "prometheus", "rand 0.8.5", "reqwest", - "rope", "rpc", "scrypt", "serde", @@ -1647,7 +1646,6 @@ dependencies = [ "language", "postage", "project", - "rope", "serde_json", "settings", "smallvec", @@ -1804,7 +1802,6 @@ dependencies = [ "postage", "project", "rand 0.8.5", - "rope", "rpc", "serde", "settings", @@ -2373,7 +2370,6 @@ dependencies = [ "lazy_static", "log", "parking_lot 0.11.2", - "rope", "smol", "sum_tree", "text", @@ -2421,7 +2417,6 @@ dependencies = [ "gpui", "menu", "postage", - "rope", "settings", "text", "workspace", @@ -2959,6 +2954,8 @@ dependencies = [ "editor", "gpui", "log", + "settings", + "shellexpand", "util", "workspace", ] @@ -3045,7 +3042,6 @@ dependencies = [ "postage", "rand 0.8.5", "regex", - "rope", "rpc", "serde", "serde_json", @@ -4272,7 +4268,6 @@ dependencies = [ "rand 0.8.5", "regex", "rocksdb", - "rope", "rpc", "serde", "serde_json", @@ -5328,7 +5323,6 @@ dependencies = [ "gpui", "json_comments", "postage", - "rope", "schemars", "serde", "serde_json", @@ -6833,7 +6827,6 @@ dependencies = [ "nvim-rs", "parking_lot 0.11.2", "project", - "rope", "search", "serde", "serde_json", @@ -7524,7 +7517,6 @@ dependencies = [ "client", "collections", "context_menu", - "db", "drag_and_drop", "fs", "futures 0.3.24", @@ -7582,7 +7574,7 @@ dependencies = [ [[package]] name = "zed" -version = "0.60.0" +version = "0.60.4" dependencies = [ "activity_indicator", "anyhow", diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index 73aa2378a4d6cef52d21b773bb82780adc5b0ffe..46c8a24fcdc913378d9a433ff9221429c9604f88 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -9,7 +9,6 @@ use rusqlite::Connection; use std::path::Path; use std::sync::Arc; -pub use items::*; pub use kvp::*; pub struct Db { diff --git a/script/generate-zed-sqlx-data b/script/generate-zed-sqlx-data deleted file mode 100755 index 65f9b621f0fa2efdc607af6dc4511eedd419cd76..0000000000000000000000000000000000000000 --- a/script/generate-zed-sqlx-data +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -e - -# Install sqlx-cli if needed -[[ "$(sqlx --version)" == "sqlx-cli 0.5.7" ]] || cargo install sqlx-cli --version 0.5.7 - -cd crates/db - -mkdir -p /tmp/zed-client-db -DATABASE_URL=sqlite:///tmp/zed-client-db/test.db - -cargo sqlx -D $DATABASE_URL database drop -cargo sqlx -D $DATABASE_URL database setup -cargo sqlx -D $DATABASE_URL prepare \ No newline at end of file From 6019e4c37b6d26030bdafc8805c3b8817ee60a13 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Tue, 18 Oct 2022 10:13:47 -0700 Subject: [PATCH 28/38] remove items migration --- crates/db/src/migrations.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/db/src/migrations.rs b/crates/db/src/migrations.rs index 35943825369e515e9e548df92dfb2c0d39887fb9..1b7e2c30a822fa6c71d43f7f186c2e7d3e0f2d7e 100644 --- a/crates/db/src/migrations.rs +++ b/crates/db/src/migrations.rs @@ -1,6 +1,6 @@ use rusqlite_migration::{Migrations, M}; -use crate::items::ITEMS_M_1; +// use crate::items::ITEMS_M_1; use crate::kvp::KVP_M_1; // This must be ordered by development time! Only ever add new migrations to the end!! @@ -10,6 +10,6 @@ use crate::kvp::KVP_M_1; lazy_static::lazy_static! { pub static ref MIGRATIONS: Migrations<'static> = Migrations::new(vec![ M::up(KVP_M_1), - M::up(ITEMS_M_1), + // M::up(ITEMS_M_1), ]); } From 6c322dc835df802ee86e1855b54e51e7a50f7323 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 18 Oct 2022 19:15:14 +0200 Subject: [PATCH 29/38] Clear out incoming call when removing last connection for a user Co-Authored-By: Nathan Sobo --- crates/collab/src/integration_tests.rs | 5 +++-- crates/collab/src/rpc/store.rs | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/collab/src/integration_tests.rs b/crates/collab/src/integration_tests.rs index 7586348081875e1e473636a78c1683d22b5728f7..9bf4afc5db3b84141f5c6907f8b35632fcfa6af2 100644 --- a/crates/collab/src/integration_tests.rs +++ b/crates/collab/src/integration_tests.rs @@ -418,7 +418,7 @@ async fn test_calls_on_multiple_connections( let mut server = TestServer::start(cx_a.foreground(), cx_a.background()).await; let client_a = server.create_client(cx_a, "user_a").await; let client_b1 = server.create_client(cx_b1, "user_b").await; - let _client_b2 = server.create_client(cx_b2, "user_b").await; + let client_b2 = server.create_client(cx_b2, "user_b").await; server .make_contacts(&mut [(&client_a, cx_a), (&client_b1, cx_b1)]) .await; @@ -548,8 +548,9 @@ async fn test_calls_on_multiple_connections( assert!(incoming_call_b2.next().await.unwrap().is_some()); // User B disconnects all clients, causing user A to no longer see a pending call for them. - println!("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + server.forbid_connections(); server.disconnect_client(client_b1.peer_id().unwrap()); + server.disconnect_client(client_b2.peer_id().unwrap()); deterministic.advance_clock(rpc::RECEIVE_TIMEOUT); active_call_a.read_with(cx_a, |call, _| assert!(call.room().is_none())); } diff --git a/crates/collab/src/rpc/store.rs b/crates/collab/src/rpc/store.rs index ee7d3e258704d5ff48d916368e8cb638a60cc329..f48773518825d911ab999a4722e33ff935d04c75 100644 --- a/crates/collab/src/rpc/store.rs +++ b/crates/collab/src/rpc/store.rs @@ -221,6 +221,9 @@ impl Store { result.guest_projects = left_room.left_projects; result.room_id = Some(room_id); result.canceled_call_connection_ids = left_room.canceled_call_connection_ids; + } else if connected_user.connection_ids.len() == 1 { + self.decline_call(room_id, connection_id)?; + result.room_id = Some(room_id); } } From d155c117294f41c339317900786a70db4a0a642f Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 18 Oct 2022 19:33:38 +0200 Subject: [PATCH 30/38] Fix client unit test by sending `Hello` in `FakeServer` --- crates/client/src/test.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/client/src/test.rs b/crates/client/src/test.rs index ade21f02f4a366de62450309c9f5c75160d25370..3cfba3b1847c4af4655ad625840492db59249974 100644 --- a/crates/client/src/test.rs +++ b/crates/client/src/test.rs @@ -84,9 +84,19 @@ impl FakeServer { let (connection_id, io, incoming) = peer.add_test_connection(server_conn, cx.background()); cx.background().spawn(io).detach(); - let mut state = state.lock(); - state.connection_id = Some(connection_id); - state.incoming = Some(incoming); + { + let mut state = state.lock(); + state.connection_id = Some(connection_id); + state.incoming = Some(incoming); + } + peer.send( + connection_id, + proto::Hello { + peer_id: connection_id.0, + }, + ) + .unwrap(); + Ok(client_conn) }) } From b06366ebb75e0046ce943ea03461dde2acd94f9b Mon Sep 17 00:00:00 2001 From: K Simmons Date: Tue, 18 Oct 2022 11:43:18 -0700 Subject: [PATCH 31/38] Get rusqlite more shippable --- Cargo.lock | 1 + crates/auto_update/src/auto_update.rs | 9 ++--- crates/db/Cargo.toml | 3 +- crates/db/src/db.rs | 55 ++++++++++++++++++--------- crates/zed/src/main.rs | 2 +- crates/zed/src/paths.rs | 2 +- 6 files changed, 47 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 23b2c8334d7ccc9c87f4fee4e2e39db1fbbc4377..6640037f3d83ebd22f89b9c6a8b726686c5643e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1603,6 +1603,7 @@ dependencies = [ "collections", "gpui", "lazy_static", + "log", "parking_lot 0.11.2", "rusqlite", "rusqlite_migration", diff --git a/crates/auto_update/src/auto_update.rs b/crates/auto_update/src/auto_update.rs index d32835547c6c1ba5903eb9251fa776d5a7bc5544..da3d35a2b8f033706f646fb7b89c197fe91be1ea 100644 --- a/crates/auto_update/src/auto_update.rs +++ b/crates/auto_update/src/auto_update.rs @@ -283,9 +283,9 @@ impl AutoUpdater { let db = self.db.clone(); cx.background().spawn(async move { if should_show { - db.write([(SHOULD_SHOW_UPDATE_NOTIFICATION_KEY, "")])?; + db.write_kvp(SHOULD_SHOW_UPDATE_NOTIFICATION_KEY, "")?; } else { - db.delete([(SHOULD_SHOW_UPDATE_NOTIFICATION_KEY)])?; + db.delete_kvp(SHOULD_SHOW_UPDATE_NOTIFICATION_KEY)?; } Ok(()) }) @@ -293,8 +293,7 @@ impl AutoUpdater { fn should_show_update_notification(&self, cx: &AppContext) -> Task> { let db = self.db.clone(); - cx.background().spawn(async move { - Ok(db.read([(SHOULD_SHOW_UPDATE_NOTIFICATION_KEY)])?[0].is_some()) - }) + cx.background() + .spawn(async move { Ok(db.read_kvp(SHOULD_SHOW_UPDATE_NOTIFICATION_KEY)?.is_some()) }) } } diff --git a/crates/db/Cargo.toml b/crates/db/Cargo.toml index 22b4ed1a0d91cce4ba18004280eafaa9e3c8b6f7..a2efe1326125a24110d840ad8d7bf84c59363f43 100644 --- a/crates/db/Cargo.toml +++ b/crates/db/Cargo.toml @@ -14,10 +14,11 @@ test-support = [] collections = { path = "../collections" } anyhow = "1.0.57" async-trait = "0.1" +lazy_static = "1.4.0" +log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11.1" rusqlite = { version = "0.28.0", features = ["bundled", "serde_json"] } rusqlite_migration = "1.0.0" -lazy_static = "1.4.0" [dev-dependencies] gpui = { path = "../gpui", features = ["test-support"] } diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index 46c8a24fcdc913378d9a433ff9221429c9604f88..dcef0d659ab8957b56934cf0e02869f8f256b5f6 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -1,19 +1,22 @@ -mod items; mod kvp; mod migrations; +use std::path::Path; +use std::sync::Arc; + use anyhow::Result; -use migrations::MIGRATIONS; +use log::error; use parking_lot::Mutex; use rusqlite::Connection; -use std::path::Path; -use std::sync::Arc; -pub use kvp::*; +use migrations::MIGRATIONS; -pub struct Db { - connection: Mutex, - in_memory: bool, +pub enum Db { + Real { + connection: Mutex, + in_memory: bool, + }, + Null, } // To make a migration: @@ -23,25 +26,43 @@ pub struct Db { impl Db { /// Open or create a database at the given file path. Falls back to in memory database if the /// database at the given path is corrupted - pub fn open(path: &Path) -> Result> { - let conn = Connection::open(path)?; - - Self::initialize(conn, false).or_else(|_| Self::open_in_memory()) + pub fn open(path: &Path) -> Arc { + Connection::open(path) + .map_err(Into::into) + .and_then(|connection| Self::initialize(connection, false)) + .unwrap_or_else(|e| { + error!( + "Connecting to db failed. Falling back to in memory db. {}", + e + ); + Self::open_in_memory() + }) } /// Open a in memory database for testing and as a fallback. - pub fn open_in_memory() -> Result> { - let conn = Connection::open_in_memory()?; - - Self::initialize(conn, true) + pub fn open_in_memory() -> Arc { + Connection::open_in_memory() + .map_err(Into::into) + .and_then(|connection| Self::initialize(connection, true)) + .unwrap_or_else(|e| { + error!("Connecting to in memory db failed. Reverting to null db. {}"); + Arc::new(Self::Null) + }) } fn initialize(mut conn: Connection, in_memory: bool) -> Result> { MIGRATIONS.to_latest(&mut conn)?; - Ok(Arc::new(Self { + Ok(Arc::new(Self::Real { connection: Mutex::new(conn), in_memory, })) } + + fn persisting(&self) -> bool { + match self { + Db::Real { in_memory, .. } => *in_memory, + _ => false, + } + } } diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index a921bc2680271f195aa985b751fc98f45df0a9e9..55cb203ee720d1d82b547a527df739316a6cb3ea 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -55,7 +55,7 @@ fn main() { let db = app.background().spawn(async move { project::Db::open(&*zed::paths::DB) .log_err() - .unwrap_or_else(project::Db::null) + .unwrap_or_else(project::Db::open_in_memory()) }); load_embedded_fonts(&app); diff --git a/crates/zed/src/paths.rs b/crates/zed/src/paths.rs index d6d99288c771f5260d5cd452fc97a04f15c87969..81ecc5be8a102f4c5573d90b128fd63042f766a7 100644 --- a/crates/zed/src/paths.rs +++ b/crates/zed/src/paths.rs @@ -6,7 +6,7 @@ lazy_static::lazy_static! { pub static ref LOGS_DIR: PathBuf = HOME.join("Library/Logs/Zed"); pub static ref LANGUAGES_DIR: PathBuf = HOME.join("Library/Application Support/Zed/languages"); pub static ref DB_DIR: PathBuf = HOME.join("Library/Application Support/Zed/db"); - pub static ref DB: PathBuf = DB_DIR.join("zed.db"); + pub static ref DB: PathBuf = DB_DIR.join("zed.sqlite"); pub static ref SETTINGS: PathBuf = CONFIG_DIR.join("settings.json"); pub static ref KEYMAP: PathBuf = CONFIG_DIR.join("keymap.json"); pub static ref LAST_USERNAME: PathBuf = CONFIG_DIR.join("last-username.txt"); From 2661a9cc988b7b5d3da621e78b14e3d2c3c1ea60 Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 18 Oct 2022 15:00:49 -0400 Subject: [PATCH 32/38] Don't allow drag event to fall through context menu --- crates/context_menu/src/context_menu.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/context_menu/src/context_menu.rs b/crates/context_menu/src/context_menu.rs index c28437596669ea8453a8f714c62a81657015e71a..5fbc2b9875dd83c3c563a6d3dfd30dcb6ca254ba 100644 --- a/crates/context_menu/src/context_menu.rs +++ b/crates/context_menu/src/context_menu.rs @@ -315,13 +315,16 @@ impl ContextMenu { fn render_menu(&self, cx: &mut RenderContext) -> impl Element { enum Menu {} enum MenuItem {} + let style = cx.global::().theme.context_menu.clone(); + MouseEventHandler::::new(0, cx, |_, cx| { Flex::column() .with_children(self.items.iter().enumerate().map(|(ix, item)| { match item { ContextMenuItem::Item { label, action } => { let action = action.boxed_clone(); + MouseEventHandler::::new(ix, cx, |state, _| { let style = style.item.style_for(state, Some(ix) == self.selected_index); @@ -350,6 +353,7 @@ impl ContextMenu { cx.dispatch_action(Clicked); cx.dispatch_any_action(action.boxed_clone()); }) + .on_drag(MouseButton::Left, |_, _| {}) .boxed() } ContextMenuItem::Separator => Empty::new() From 26ccd70e773785e39c08bc1ef1cf379a5002a927 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 18 Oct 2022 12:58:47 -0700 Subject: [PATCH 33/38] Scroll horizontal flex lists by whichever scroll delta dimension is greater --- crates/gpui/src/elements/flex.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/gpui/src/elements/flex.rs b/crates/gpui/src/elements/flex.rs index fd37b001feb7dbc5c209a8f369cc9e24caabf040..1f1941a3d093308755b057fcbafc163ccc2b6873 100644 --- a/crates/gpui/src/elements/flex.rs +++ b/crates/gpui/src/elements/flex.rs @@ -259,7 +259,7 @@ impl Element for Flex { if remaining_space < 0. { let mut delta = match axis { Axis::Horizontal => { - if e.delta.x() != 0. { + if e.delta.x().abs() >= e.delta.y().abs() { e.delta.x() } else { e.delta.y() From 50ba8bdc9b18cf40595893037e85e23dcc67ce39 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 18 Oct 2022 13:04:09 -0700 Subject: [PATCH 34/38] 0.61.0 --- Cargo.lock | 2 +- crates/zed/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 188113a66d4772eb94afb9ad040c5b99334a0cb4..9b7befa6a94303860d1ed7638ec73aa105891d7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7531,7 +7531,7 @@ dependencies = [ [[package]] name = "zed" -version = "0.60.4" +version = "0.61.0" dependencies = [ "activity_indicator", "anyhow", diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index abf4c218718fcbf55b6c6ec03e23f2962e362af6..e35bfabe109e55dabf49423206badeeeef2425a0 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Nathan Sobo "] description = "The fast, collaborative code editor." edition = "2021" name = "zed" -version = "0.60.4" +version = "0.61.0" [lib] name = "zed" From 5447f63e9d5beac3bd99f89407c675932a7d830f Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 18 Oct 2022 13:12:27 -0700 Subject: [PATCH 35/38] Fix error in changes-since-last-release script on PRs with no body --- script/changes-since-last-release | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/changes-since-last-release b/script/changes-since-last-release index 5d0f94db1269fb5670f228b97af4ca2fcf8a662c..23a65143b26ec4ac71d28edbf68a7174f57897fd 100755 --- a/script/changes-since-last-release +++ b/script/changes-since-last-release @@ -67,7 +67,7 @@ async function main() { console.log(" URL: ", webURL); // If the pull request contains a 'closes' line, print the closed issue. - const fixesMatch = pullRequest.body.match(FIXES_REGEX); + const fixesMatch = (pullRequest.body || '').match(FIXES_REGEX); if (fixesMatch) { const fixedIssueURL = fixesMatch[2]; console.log(" Issue: ", fixedIssueURL); From 84c7aa9cad8079cb03915d07318c36157abe4b9a Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Tue, 18 Oct 2022 15:58:05 -0700 Subject: [PATCH 36/38] Finished up initial sqlite implemention Co-Authored-By: kay@zed.dev --- Cargo.lock | 12 +++ crates/auto_update/src/auto_update.rs | 6 +- crates/client/src/client.rs | 2 +- crates/client/src/telemetry.rs | 2 +- crates/db/Cargo.toml | 2 + crates/db/src/db.rs | 105 +++++++++++++++++++------- crates/db/src/kvp.rs | 47 +++++++----- crates/db/src/migrations.rs | 4 +- crates/zed/src/main.rs | 8 +- crates/zed/src/paths.rs | 1 - crates/zed/src/zed.rs | 1 + 11 files changed, 133 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6640037f3d83ebd22f89b9c6a8b726686c5643e0..9360b1f4db9dca8544f9507654b210153589dbd7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1607,6 +1607,8 @@ dependencies = [ "parking_lot 0.11.2", "rusqlite", "rusqlite_migration", + "serde", + "serde_rusqlite", "tempdir", ] @@ -5267,6 +5269,16 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_rusqlite" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "538b51f10ee271375cbd9caa04fa6e3e50af431a21db97caae48da92a074244a" +dependencies = [ + "rusqlite", + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" diff --git a/crates/auto_update/src/auto_update.rs b/crates/auto_update/src/auto_update.rs index da3d35a2b8f033706f646fb7b89c197fe91be1ea..efe36ccab8ae913e3b402d1f38e7d883489fd923 100644 --- a/crates/auto_update/src/auto_update.rs +++ b/crates/auto_update/src/auto_update.rs @@ -40,7 +40,7 @@ pub struct AutoUpdater { current_version: AppVersion, http_client: Arc, pending_poll: Option>, - db: Arc, + db: project::Db, server_url: String, } @@ -55,7 +55,7 @@ impl Entity for AutoUpdater { } pub fn init( - db: Arc, + db: project::Db, http_client: Arc, server_url: String, cx: &mut MutableAppContext, @@ -116,7 +116,7 @@ impl AutoUpdater { fn new( current_version: AppVersion, - db: Arc, + db: project::Db, http_client: Arc, server_url: String, ) -> Self { diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index cc6bdf627930c31f6e574e19e5f6dbb6aebdc7f4..4c0c3ca184551c14f2119b4b1d602318606a7397 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -1072,7 +1072,7 @@ impl Client { self.peer.respond_with_error(receipt, error) } - pub fn start_telemetry(&self, db: Arc) { + pub fn start_telemetry(&self, db: Db) { self.telemetry.start(db); } diff --git a/crates/client/src/telemetry.rs b/crates/client/src/telemetry.rs index 1346b97f61b2106f6ee5af756581096da6ea3ce5..6829eab53150901755c1f3d89025f3076acd34f0 100644 --- a/crates/client/src/telemetry.rs +++ b/crates/client/src/telemetry.rs @@ -135,7 +135,7 @@ impl Telemetry { Some(self.state.lock().log_file.as_ref()?.path().to_path_buf()) } - pub fn start(self: &Arc, db: Arc) { + pub fn start(self: &Arc, db: Db) { let this = self.clone(); self.executor .spawn( diff --git a/crates/db/Cargo.toml b/crates/db/Cargo.toml index a2efe1326125a24110d840ad8d7bf84c59363f43..1eeac03375e8cb8b40cc2ea2b710b5e927a9ff2d 100644 --- a/crates/db/Cargo.toml +++ b/crates/db/Cargo.toml @@ -19,6 +19,8 @@ log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11.1" rusqlite = { version = "0.28.0", features = ["bundled", "serde_json"] } rusqlite_migration = "1.0.0" +serde = { workspace = true } +serde_rusqlite = "0.31.0" [dev-dependencies] gpui = { path = "../gpui", features = ["test-support"] } diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index dcef0d659ab8957b56934cf0e02869f8f256b5f6..06776832b57649888b7f114f35948b86a5dee0f0 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -1,7 +1,8 @@ mod kvp; mod migrations; -use std::path::Path; +use std::fs; +use std::path::{Path, PathBuf}; use std::sync::Arc; use anyhow::Result; @@ -11,58 +12,108 @@ use rusqlite::Connection; use migrations::MIGRATIONS; +#[derive(Clone)] pub enum Db { - Real { - connection: Mutex, - in_memory: bool, - }, + Real(Arc), Null, } -// To make a migration: -// Add to the migrations directory, a file with the name: -// _.sql. Migrations are executed in order of number +pub struct RealDb { + connection: Mutex, + path: Option, +} impl Db { - /// Open or create a database at the given file path. Falls back to in memory database if the - /// database at the given path is corrupted - pub fn open(path: &Path) -> Arc { - Connection::open(path) + /// Open or create a database at the given directory path. + pub fn open(db_dir: &Path) -> Self { + // Use 0 for now. Will implement incrementing and clearing of old db files soon TM + let current_db_dir = db_dir.join(Path::new("0")); + fs::create_dir_all(¤t_db_dir) + .expect("Should be able to create the database directory"); + let db_path = current_db_dir.join(Path::new("db.sqlite")); + + Connection::open(db_path) .map_err(Into::into) - .and_then(|connection| Self::initialize(connection, false)) + .and_then(|connection| Self::initialize(connection)) + .map(|connection| { + Db::Real(Arc::new(RealDb { + connection, + path: Some(db_dir.to_path_buf()), + })) + }) .unwrap_or_else(|e| { error!( - "Connecting to db failed. Falling back to in memory db. {}", + "Connecting to file backed db failed. Reverting to null db. {}", e ); - Self::open_in_memory() + Self::Null }) } /// Open a in memory database for testing and as a fallback. - pub fn open_in_memory() -> Arc { + #[cfg(any(test, feature = "test-support"))] + pub fn open_in_memory() -> Self { Connection::open_in_memory() .map_err(Into::into) - .and_then(|connection| Self::initialize(connection, true)) + .and_then(|connection| Self::initialize(connection)) + .map(|connection| { + Db::Real(Arc::new(RealDb { + connection, + path: None, + })) + }) .unwrap_or_else(|e| { - error!("Connecting to in memory db failed. Reverting to null db. {}"); - Arc::new(Self::Null) + error!( + "Connecting to in memory db failed. Reverting to null db. {}", + e + ); + Self::Null }) } - fn initialize(mut conn: Connection, in_memory: bool) -> Result> { + fn initialize(mut conn: Connection) -> Result> { MIGRATIONS.to_latest(&mut conn)?; - Ok(Arc::new(Self::Real { - connection: Mutex::new(conn), - in_memory, - })) + conn.pragma_update(None, "journal_mode", "WAL")?; + conn.pragma_update(None, "synchronous", "NORMAL")?; + conn.pragma_update(None, "foreign_keys", true)?; + conn.pragma_update(None, "case_sensitive_like", true)?; + + Ok(Mutex::new(conn)) + } + + pub fn persisting(&self) -> bool { + self.real().and_then(|db| db.path.as_ref()).is_some() } - fn persisting(&self) -> bool { + pub fn real(&self) -> Option<&RealDb> { match self { - Db::Real { in_memory, .. } => *in_memory, - _ => false, + Db::Real(db) => Some(&db), + _ => None, } } } + +impl Drop for Db { + fn drop(&mut self) { + match self { + Db::Real(real_db) => { + let lock = real_db.connection.lock(); + + let _ = lock.pragma_update(None, "analysis_limit", "500"); + let _ = lock.pragma_update(None, "optimize", ""); + } + Db::Null => {} + } + } +} + +#[cfg(test)] +mod tests { + use crate::migrations::MIGRATIONS; + + #[test] + fn test_migrations() { + assert!(MIGRATIONS.validate().is_ok()); + } +} diff --git a/crates/db/src/kvp.rs b/crates/db/src/kvp.rs index ca1b15e45a1cdfb0e16573fc6d603b9be369f262..534577bc79e0187ec359dd7fe43874de9a0cdd6b 100644 --- a/crates/db/src/kvp.rs +++ b/crates/db/src/kvp.rs @@ -3,7 +3,7 @@ use rusqlite::OptionalExtension; use super::Db; -pub(crate) const KVP_M_1: &str = " +pub(crate) const KVP_M_1_UP: &str = " CREATE TABLE kv_store( key TEXT PRIMARY KEY, value TEXT NOT NULL @@ -12,31 +12,44 @@ CREATE TABLE kv_store( impl Db { pub fn read_kvp(&self, key: &str) -> Result> { - let lock = self.connection.lock(); - let mut stmt = lock.prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; - - Ok(stmt.query_row([key], |row| row.get(0)).optional()?) + self.real() + .map(|db| { + let lock = db.connection.lock(); + let mut stmt = lock.prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?; + + Ok(stmt.query_row([key], |row| row.get(0)).optional()?) + }) + .unwrap_or(Ok(None)) } - pub fn delete_kvp(&self, key: &str) -> Result<()> { - let lock = self.connection.lock(); + pub fn write_kvp(&self, key: &str, value: &str) -> Result<()> { + self.real() + .map(|db| { + let lock = db.connection.lock(); - let mut stmt = lock.prepare_cached("DELETE FROM kv_store WHERE key = (?)")?; + let mut stmt = lock.prepare_cached( + "INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?))", + )?; - stmt.execute([key])?; + stmt.execute([key, value])?; - Ok(()) + Ok(()) + }) + .unwrap_or(Ok(())) } - pub fn write_kvp(&self, key: &str, value: &str) -> Result<()> { - let lock = self.connection.lock(); + pub fn delete_kvp(&self, key: &str) -> Result<()> { + self.real() + .map(|db| { + let lock = db.connection.lock(); - let mut stmt = - lock.prepare_cached("INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?))")?; + let mut stmt = lock.prepare_cached("DELETE FROM kv_store WHERE key = (?)")?; - stmt.execute([key, value])?; + stmt.execute([key])?; - Ok(()) + Ok(()) + }) + .unwrap_or(Ok(())) } } @@ -48,7 +61,7 @@ mod tests { #[test] fn test_kvp() -> Result<()> { - let db = Db::open_in_memory()?; + let db = Db::open_in_memory(); assert_eq!(db.read_kvp("key-1")?, None); diff --git a/crates/db/src/migrations.rs b/crates/db/src/migrations.rs index 1b7e2c30a822fa6c71d43f7f186c2e7d3e0f2d7e..1000543d8ddde8829320de1b0c3e4f630635d3e8 100644 --- a/crates/db/src/migrations.rs +++ b/crates/db/src/migrations.rs @@ -1,7 +1,7 @@ use rusqlite_migration::{Migrations, M}; // use crate::items::ITEMS_M_1; -use crate::kvp::KVP_M_1; +use crate::kvp::KVP_M_1_UP; // This must be ordered by development time! Only ever add new migrations to the end!! // Bad things will probably happen if you don't monotonically edit this vec!!!! @@ -9,7 +9,7 @@ use crate::kvp::KVP_M_1; // file system and so everything we do here is locked in _f_o_r_e_v_e_r_. lazy_static::lazy_static! { pub static ref MIGRATIONS: Migrations<'static> = Migrations::new(vec![ - M::up(KVP_M_1), + M::up(KVP_M_1_UP), // M::up(ITEMS_M_1), ]); } diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 55cb203ee720d1d82b547a527df739316a6cb3ea..3fa66128563621e9d38c9d34a7152b4566320663 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -52,11 +52,9 @@ fn main() { .or_else(|| app.platform().app_version().ok()) .map_or("dev".to_string(), |v| v.to_string()); init_panic_hook(app_version, http.clone(), app.background()); - let db = app.background().spawn(async move { - project::Db::open(&*zed::paths::DB) - .log_err() - .unwrap_or_else(project::Db::open_in_memory()) - }); + let db = app + .background() + .spawn(async move { project::Db::open(&*zed::paths::DB_DIR) }); load_embedded_fonts(&app); diff --git a/crates/zed/src/paths.rs b/crates/zed/src/paths.rs index 81ecc5be8a102f4c5573d90b128fd63042f766a7..a3abe1f67395c2a1698e6f9c30af514eb3fd3671 100644 --- a/crates/zed/src/paths.rs +++ b/crates/zed/src/paths.rs @@ -6,7 +6,6 @@ lazy_static::lazy_static! { pub static ref LOGS_DIR: PathBuf = HOME.join("Library/Logs/Zed"); pub static ref LANGUAGES_DIR: PathBuf = HOME.join("Library/Application Support/Zed/languages"); pub static ref DB_DIR: PathBuf = HOME.join("Library/Application Support/Zed/db"); - pub static ref DB: PathBuf = DB_DIR.join("zed.sqlite"); pub static ref SETTINGS: PathBuf = CONFIG_DIR.join("settings.json"); pub static ref KEYMAP: PathBuf = CONFIG_DIR.join("keymap.json"); pub static ref LAST_USERNAME: PathBuf = CONFIG_DIR.join("last-username.txt"); diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index ef0c84909a28e229945917a3daa8c2c730323f1d..3319aebd09953d89e44a89c0961cd275f7dd6915 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -63,6 +63,7 @@ actions!( DecreaseBufferFontSize, ResetBufferFontSize, InstallCommandLineInterface, + ResetDatabase, ] ); From 79cf5dbd4b74598f303616f7780e8cd1ee5ea605 Mon Sep 17 00:00:00 2001 From: K Simmons Date: Tue, 18 Oct 2022 17:21:15 -0700 Subject: [PATCH 37/38] remove rocksdb --- Cargo.lock | 35 ----------------------------------- Cargo.toml | 2 -- crates/project/Cargo.toml | 1 - 3 files changed, 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a5c659f16101f577a89e1295f3c4425f5fb34a51..cc0e0990fd5df275411b022facf8ee4325338da3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -705,17 +705,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "cache-padded" version = "1.2.0" @@ -3131,20 +3120,6 @@ dependencies = [ "libc", ] -[[package]] -name = "librocksdb-sys" -version = "0.7.1+7.3.1" -source = "git+https://github.com/rust-rocksdb/rust-rocksdb?rev=39dc822dde743b2a26eb160b660e8fbdab079d49#39dc822dde743b2a26eb160b660e8fbdab079d49" -dependencies = [ - "bindgen", - "bzip2-sys", - "cc", - "glob", - "libc", - "libz-sys", - "zstd-sys", -] - [[package]] name = "libsqlite3-sys" version = "0.25.1" @@ -4270,7 +4245,6 @@ dependencies = [ "pulldown-cmark", "rand 0.8.5", "regex", - "rocksdb", "rpc", "serde", "serde_json", @@ -4769,15 +4743,6 @@ dependencies = [ "rmp", ] -[[package]] -name = "rocksdb" -version = "0.18.0" -source = "git+https://github.com/rust-rocksdb/rust-rocksdb?rev=39dc822dde743b2a26eb160b660e8fbdab079d49#39dc822dde743b2a26eb160b660e8fbdab079d49" -dependencies = [ - "libc", - "librocksdb-sys", -] - [[package]] name = "rope" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 8d2a3fcc407aba85766a3be828a4fc394eca3f38..7e3623af98b466ec9f79b9490f2bbd64f8c455cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,8 +18,6 @@ cocoa-foundation = { git = "https://github.com/servo/core-foundation-rs", rev = core-foundation = { git = "https://github.com/servo/core-foundation-rs", rev = "079665882507dd5e2ff77db3de5070c1f6c0fb85" } core-foundation-sys = { git = "https://github.com/servo/core-foundation-rs", rev = "079665882507dd5e2ff77db3de5070c1f6c0fb85" } core-graphics = { git = "https://github.com/servo/core-foundation-rs", rev = "079665882507dd5e2ff77db3de5070c1f6c0fb85" } -# TODO - Remove when a new version of RustRocksDB is released -rocksdb = { git = "https://github.com/rust-rocksdb/rust-rocksdb", rev = "39dc822dde743b2a26eb160b660e8fbdab079d49" } [profile.dev] split-debuginfo = "unpacked" diff --git a/crates/project/Cargo.toml b/crates/project/Cargo.toml index 4e6dc09e4e45cc8528c8382221f8e487e32e9c15..76c60f9556235605e59a62cc5bd8c70aa9aaff1b 100644 --- a/crates/project/Cargo.toml +++ b/crates/project/Cargo.toml @@ -52,7 +52,6 @@ similar = "1.3" smol = "1.2.5" thiserror = "1.0.29" toml = "0.5" -rocksdb = "0.18" [dev-dependencies] client = { path = "../client", features = ["test-support"] } From cbc15b6b58e08d779380f9110e42b86db46990b0 Mon Sep 17 00:00:00 2001 From: Julia Date: Wed, 19 Oct 2022 01:00:13 -0400 Subject: [PATCH 38/38] Lock trackpad scrolling in buffers to axis until broken free --- crates/editor/src/editor.rs | 86 +++++++++++++++++++++++++++++++++--- crates/editor/src/element.rs | 21 ++++++--- 2 files changed, 96 insertions(+), 11 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 07fc9655429b3bb79053a1dc0271fa0b43d0ad5d..1d660db1fbc1e3910fd38f44bbc3817b1fa2d9b5 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -35,9 +35,9 @@ use gpui::{ impl_actions, impl_internal_actions, platform::CursorStyle, serde_json::json, - text_layout, AnyViewHandle, AppContext, AsyncAppContext, ClipboardItem, Element, ElementBox, - Entity, ModelHandle, MouseButton, MutableAppContext, RenderContext, Subscription, Task, View, - ViewContext, ViewHandle, WeakViewHandle, + text_layout, AnyViewHandle, AppContext, AsyncAppContext, Axis, ClipboardItem, Element, + ElementBox, Entity, ModelHandle, MouseButton, MutableAppContext, RenderContext, Subscription, + Task, View, ViewContext, ViewHandle, WeakViewHandle, }; use highlight_matching_bracket::refresh_matching_bracket_highlights; use hover_popover::{hide_hover, HoverState}; @@ -84,6 +84,7 @@ const SCROLLBAR_SHOW_INTERVAL: Duration = Duration::from_secs(1); const MAX_LINE_LEN: usize = 1024; const MIN_NAVIGATION_HISTORY_ROW_DELTA: i64 = 10; const MAX_SELECTION_HISTORY_LEN: usize = 1024; +pub const SCROLL_EVENT_SEPARATION: Duration = Duration::from_millis(28); pub const FORMAT_TIMEOUT: Duration = Duration::from_secs(2); @@ -94,7 +95,10 @@ pub struct SelectNext { } #[derive(Clone, PartialEq)] -pub struct Scroll(pub Vector2F); +pub struct Scroll { + pub scroll_position: Vector2F, + pub axis: Option, +} #[derive(Clone, PartialEq)] pub struct Select(pub SelectPhase); @@ -263,7 +267,7 @@ struct ScrollbarAutoHide(bool); pub fn init(cx: &mut MutableAppContext) { cx.add_action(Editor::new_file); - cx.add_action(|this: &mut Editor, action: &Scroll, cx| this.set_scroll_position(action.0, cx)); + cx.add_action(Editor::scroll); cx.add_action(Editor::select); cx.add_action(Editor::cancel); cx.add_action(Editor::newline); @@ -429,6 +433,69 @@ pub type GetFieldEditorTheme = fn(&theme::Theme) -> theme::FieldEditor; type OverrideTextStyle = dyn Fn(&EditorStyle) -> Option; +#[derive(Clone, Copy)] +pub struct OngoingScroll { + last_timestamp: Instant, + axis: Option, +} + +impl OngoingScroll { + fn initial() -> OngoingScroll { + OngoingScroll { + last_timestamp: Instant::now() - SCROLL_EVENT_SEPARATION, + axis: None, + } + } + + fn update(&mut self, axis: Option) { + self.last_timestamp = Instant::now(); + self.axis = axis; + } + + pub fn filter(&self, delta: &mut Vector2F) -> Option { + const UNLOCK_PERCENT: f32 = 1.9; + const UNLOCK_LOWER_BOUND: f32 = 6.; + let mut axis = self.axis; + + let x = delta.x().abs(); + let y = delta.y().abs(); + let duration = Instant::now().duration_since(self.last_timestamp); + if duration > SCROLL_EVENT_SEPARATION { + //New ongoing scroll will start, determine axis + axis = if x <= y { + Some(Axis::Vertical) + } else { + Some(Axis::Horizontal) + }; + } else if x.max(y) >= UNLOCK_LOWER_BOUND { + //Check if the current ongoing will need to unlock + match axis { + Some(Axis::Vertical) => { + if x > y && x >= y * UNLOCK_PERCENT { + axis = None; + } + } + + Some(Axis::Horizontal) => { + if y > x && y >= x * UNLOCK_PERCENT { + axis = None; + } + } + + None => {} + } + } + + match axis { + Some(Axis::Vertical) => *delta = vec2f(0., delta.y()), + Some(Axis::Horizontal) => *delta = vec2f(delta.x(), 0.), + None => {} + } + + axis + } +} + pub struct Editor { handle: WeakViewHandle, buffer: ModelHandle, @@ -443,6 +510,7 @@ pub struct Editor { select_larger_syntax_node_stack: Vec]>>, ime_transaction: Option, active_diagnostics: Option, + ongoing_scroll: OngoingScroll, scroll_position: Vector2F, scroll_top_anchor: Anchor, autoscroll_request: Option<(Autoscroll, bool)>, @@ -486,6 +554,7 @@ pub struct EditorSnapshot { pub display_snapshot: DisplaySnapshot, pub placeholder_text: Option>, is_focused: bool, + ongoing_scroll: OngoingScroll, scroll_position: Vector2F, scroll_top_anchor: Anchor, } @@ -1097,6 +1166,7 @@ impl Editor { soft_wrap_mode_override: None, get_field_editor_theme, project, + ongoing_scroll: OngoingScroll::initial(), scroll_position: Vector2F::zero(), scroll_top_anchor: Anchor::min(), autoscroll_request: None, @@ -1189,6 +1259,7 @@ impl Editor { EditorSnapshot { mode: self.mode, display_snapshot: self.display_map.update(cx, |map, cx| map.snapshot(cx)), + ongoing_scroll: self.ongoing_scroll, scroll_position: self.scroll_position, scroll_top_anchor: self.scroll_top_anchor.clone(), placeholder_text: self.placeholder_text.clone(), @@ -1592,6 +1663,11 @@ impl Editor { }); } + fn scroll(&mut self, action: &Scroll, cx: &mut ViewContext) { + self.ongoing_scroll.update(action.axis); + self.set_scroll_position(action.scroll_position, cx); + } + fn select(&mut self, Select(phase): &Select, cx: &mut ViewContext) { self.hide_context_menu(cx); diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index d18c168fde136aca3b0f6300ef763e00a29b9571..d8f5c83daffd4805ee089a5717229dbb88855e6b 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -423,18 +423,27 @@ impl EditorElement { return false; } + let line_height = position_map.line_height; let max_glyph_width = position_map.em_width; - if !precise { - delta *= vec2f(max_glyph_width, position_map.line_height); - } + + let axis = if precise { + //Trackpad + position_map.snapshot.ongoing_scroll.filter(&mut delta) + } else { + //Not trackpad + delta *= vec2f(max_glyph_width, line_height); + None //Resets ongoing scroll + }; let scroll_position = position_map.snapshot.scroll_position(); let x = (scroll_position.x() * max_glyph_width - delta.x()) / max_glyph_width; - let y = - (scroll_position.y() * position_map.line_height - delta.y()) / position_map.line_height; + let y = (scroll_position.y() * line_height - delta.y()) / line_height; let scroll_position = vec2f(x, y).clamp(Vector2F::zero(), position_map.scroll_max); - cx.dispatch_action(Scroll(scroll_position)); + cx.dispatch_action(Scroll { + scroll_position, + axis, + }); true }