Clippy fixes for gpui2 (#3826)

Nathan Sobo created

It's not quite complete, but we gotta start somewhere.
Release Notes:

- N/A

Change summary

crates/gpui/src/platform/mac/renderer.rs                     |  48 +
crates/gpui2/src/app.rs                                      |  18 
crates/gpui2/src/app/async_context.rs                        |   2 
crates/gpui2/src/app/entity_map.rs                           |   4 
crates/gpui2/src/app/model_context.rs                        |   4 
crates/gpui2/src/color.rs                                    |   6 
crates/gpui2/src/element.rs                                  |   6 
crates/gpui2/src/elements/div.rs                             | 113 +---
crates/gpui2/src/elements/overlay.rs                         |   8 
crates/gpui2/src/elements/text.rs                            |   1 
crates/gpui2/src/elements/uniform_list.rs                    |   2 
crates/gpui2/src/executor.rs                                 |   6 
crates/gpui2/src/geometry.rs                                 |  49 +
crates/gpui2/src/interactive.rs                              |   4 
crates/gpui2/src/key_dispatch.rs                             |   2 
crates/gpui2/src/keymap/binding.rs                           |   2 
crates/gpui2/src/keymap/context.rs                           |   4 
crates/gpui2/src/platform/mac.rs                             |   4 
crates/gpui2/src/platform/mac/dispatcher.rs                  |   6 
crates/gpui2/src/platform/mac/display.rs                     |   2 
crates/gpui2/src/platform/mac/display_linker.rs              |   1 
crates/gpui2/src/platform/mac/metal_atlas.rs                 |   4 
crates/gpui2/src/platform/mac/metal_renderer.rs              |  74 +-
crates/gpui2/src/platform/mac/platform.rs                    |  18 
crates/gpui2/src/platform/mac/text_system.rs                 |  10 
crates/gpui2/src/platform/mac/window.rs                      |  18 
crates/gpui2/src/scene.rs                                    |  17 
crates/gpui2/src/shared_string.rs                            |  12 
crates/gpui2/src/style.rs                                    |   6 
crates/gpui2/src/subscription.rs                             |   6 
crates/gpui2/src/taffy.rs                                    |  25 
crates/gpui2/src/text_system.rs                              |  23 
crates/gpui2/src/text_system/line_wrapper.rs                 |  12 
crates/gpui2/src/view.rs                                     |  12 
crates/gpui2/src/window.rs                                   |  45 
crates/gpui2_macros/src/style_helpers.rs                     |   6 
crates/media/src/media.rs                                    | 140 ++---
crates/refineable/derive_refineable/src/derive_refineable.rs |   4 
crates/refineable/src/refineable.rs                          |   8 
crates/rope2/src/rope2.rs                                    |   2 
crates/sqlez/src/migrations.rs                               |   8 
crates/sqlez/src/statement.rs                                |   4 
crates/sqlez/src/thread_safe_connection.rs                   |   6 
crates/sum_tree/src/tree_map.rs                              |   6 
crates/text2/src/locator.rs                                  |   4 
crates/text2/src/subscription.rs                             |   2 
crates/text2/src/text2.rs                                    |   2 
crates/ui2/src/components/context_menu.rs                    |   2 
crates/util/src/paths.rs                                     |   6 
49 files changed, 359 insertions(+), 415 deletions(-)

Detailed changes

crates/gpui/src/platform/mac/renderer.rs 🔗

@@ -162,7 +162,7 @@ impl Renderer {
             "underline_fragment",
             PIXEL_FORMAT,
         );
-        let cv_texture_cache = CVMetalTextureCache::new(device.as_ptr()).unwrap();
+        let cv_texture_cache = unsafe { CVMetalTextureCache::new(device.as_ptr()).unwrap() };
         Self {
             layer,
             command_queue: device.new_command_queue(),
@@ -887,28 +887,30 @@ impl Renderer {
                 core_video::kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
             );
 
-            let y_texture = self
-                .cv_texture_cache
-                .create_texture_from_image(
-                    surface.image_buffer.as_concrete_TypeRef(),
-                    ptr::null(),
-                    MTLPixelFormat::R8Unorm,
-                    surface.image_buffer.plane_width(0),
-                    surface.image_buffer.plane_height(0),
-                    0,
-                )
-                .unwrap();
-            let cb_cr_texture = self
-                .cv_texture_cache
-                .create_texture_from_image(
-                    surface.image_buffer.as_concrete_TypeRef(),
-                    ptr::null(),
-                    MTLPixelFormat::RG8Unorm,
-                    surface.image_buffer.plane_width(1),
-                    surface.image_buffer.plane_height(1),
-                    1,
-                )
-                .unwrap();
+            let y_texture = unsafe {
+                self.cv_texture_cache
+                    .create_texture_from_image(
+                        surface.image_buffer.as_concrete_TypeRef(),
+                        ptr::null(),
+                        MTLPixelFormat::R8Unorm,
+                        surface.image_buffer.plane_width(0),
+                        surface.image_buffer.plane_height(0),
+                        0,
+                    )
+                    .unwrap()
+            };
+            let cb_cr_texture = unsafe {
+                self.cv_texture_cache
+                    .create_texture_from_image(
+                        surface.image_buffer.as_concrete_TypeRef(),
+                        ptr::null(),
+                        MTLPixelFormat::RG8Unorm,
+                        surface.image_buffer.plane_width(1),
+                        surface.image_buffer.plane_height(1),
+                        1,
+                    )
+                    .unwrap()
+            };
 
             align_offset(offset);
             let next_offset = *offset + mem::size_of::<shaders::GPUISurface>();

crates/gpui2/src/app.rs 🔗

@@ -52,7 +52,7 @@ pub struct AppCell {
 impl AppCell {
     #[track_caller]
     pub fn borrow(&self) -> AppRef {
-        if let Some(_) = option_env!("TRACK_THREAD_BORROWS") {
+        if option_env!("TRACK_THREAD_BORROWS").is_some() {
             let thread_id = std::thread::current().id();
             eprintln!("borrowed {thread_id:?}");
         }
@@ -61,7 +61,7 @@ impl AppCell {
 
     #[track_caller]
     pub fn borrow_mut(&self) -> AppRefMut {
-        if let Some(_) = option_env!("TRACK_THREAD_BORROWS") {
+        if option_env!("TRACK_THREAD_BORROWS").is_some() {
             let thread_id = std::thread::current().id();
             eprintln!("borrowed {thread_id:?}");
         }
@@ -74,7 +74,7 @@ pub struct AppRef<'a>(Ref<'a, AppContext>);
 
 impl<'a> Drop for AppRef<'a> {
     fn drop(&mut self) {
-        if let Some(_) = option_env!("TRACK_THREAD_BORROWS") {
+        if option_env!("TRACK_THREAD_BORROWS").is_some() {
             let thread_id = std::thread::current().id();
             eprintln!("dropped borrow from {thread_id:?}");
         }
@@ -86,7 +86,7 @@ pub struct AppRefMut<'a>(RefMut<'a, AppContext>);
 
 impl<'a> Drop for AppRefMut<'a> {
     fn drop(&mut self) {
-        if let Some(_) = option_env!("TRACK_THREAD_BORROWS") {
+        if option_env!("TRACK_THREAD_BORROWS").is_some() {
             let thread_id = std::thread::current().id();
             eprintln!("dropped {thread_id:?}");
         }
@@ -130,7 +130,7 @@ impl App {
         let this = Rc::downgrade(&self.0);
         self.0.borrow().platform.on_open_urls(Box::new(move |urls| {
             if let Some(app) = this.upgrade() {
-                callback(urls, &mut *app.borrow_mut());
+                callback(urls, &mut app.borrow_mut());
             }
         }));
         self
@@ -280,7 +280,7 @@ impl AppContext {
             }),
         });
 
-        init_app_menus(platform.as_ref(), &mut *app.borrow_mut());
+        init_app_menus(platform.as_ref(), &mut app.borrow_mut());
 
         platform.on_quit(Box::new({
             let cx = app.clone();
@@ -428,7 +428,7 @@ impl AppContext {
     pub fn windows(&self) -> Vec<AnyWindowHandle> {
         self.windows
             .values()
-            .filter_map(|window| Some(window.as_ref()?.handle.clone()))
+            .filter_map(|window| Some(window.as_ref()?.handle))
             .collect()
     }
 
@@ -808,7 +808,7 @@ impl AppContext {
         self.push_effect(Effect::NotifyGlobalObservers { global_type });
         self.globals_by_type
             .entry(global_type)
-            .or_insert_with(|| Box::new(G::default()))
+            .or_insert_with(|| Box::<G>::default())
             .downcast_mut::<G>()
             .unwrap()
     }
@@ -993,7 +993,7 @@ impl AppContext {
             (),
             Box::new(move |cx| {
                 let future = on_quit(cx);
-                async move { future.await }.boxed_local()
+                future.boxed_local()
             }),
         );
         activate();

crates/gpui2/src/app/async_context.rs 🔗

@@ -106,7 +106,7 @@ impl AsyncAppContext {
             .upgrade()
             .ok_or_else(|| anyhow!("app was released"))?;
         let mut lock = app.borrow_mut();
-        Ok(f(&mut *lock))
+        Ok(f(&mut lock))
     }
 
     pub fn open_window<V>(

crates/gpui2/src/app/entity_map.rs 🔗

@@ -327,9 +327,9 @@ impl<T: 'static> Model<T> {
         cx.entities.read(self)
     }
 
-    pub fn read_with<'a, R, C: Context>(
+    pub fn read_with<R, C: Context>(
         &self,
-        cx: &'a C,
+        cx: &C,
         f: impl FnOnce(&T, &AppContext) -> R,
     ) -> C::Result<R> {
         cx.read_model(self, f)

crates/gpui2/src/app/model_context.rs 🔗

@@ -262,12 +262,12 @@ impl<'a, T> Context for ModelContext<'a, T> {
 
 impl<T> Borrow<AppContext> for ModelContext<'_, T> {
     fn borrow(&self) -> &AppContext {
-        &self.app
+        self.app
     }
 }
 
 impl<T> BorrowMut<AppContext> for ModelContext<'_, T> {
     fn borrow_mut(&mut self) -> &mut AppContext {
-        &mut self.app
+        self.app
     }
 }

crates/gpui2/src/color.rs 🔗

@@ -34,7 +34,7 @@ impl fmt::Debug for Rgba {
 impl Rgba {
     pub fn blend(&self, other: Rgba) -> Self {
         if other.a >= 1.0 {
-            return other;
+            other
         } else if other.a <= 0.0 {
             return *self;
         } else {
@@ -117,7 +117,7 @@ impl TryFrom<&'_ str> for Rgba {
         const RRGGBB: usize = "rrggbb".len();
         const RRGGBBAA: usize = "rrggbbaa".len();
 
-        const EXPECTED_FORMATS: &'static str = "Expected #rgb, #rgba, #rrggbb, or #rrggbbaa";
+        const EXPECTED_FORMATS: &str = "Expected #rgb, #rgba, #rrggbb, or #rrggbbaa";
 
         let Some(("", hex)) = value.trim().split_once('#') else {
             bail!("invalid RGBA hex color: '{value}'. {EXPECTED_FORMATS}");
@@ -328,7 +328,7 @@ impl Hsla {
         let alpha = other.a;
 
         if alpha >= 1.0 {
-            return other;
+            other
         } else if alpha <= 0.0 {
             return self;
         } else {

crates/gpui2/src/element.rs 🔗

@@ -193,11 +193,7 @@ impl<C: RenderOnce> Element for Component<C> {
                 ((), element_state)
             });
         } else {
-            element.paint(
-                bounds,
-                &mut state.rendered_element_state.as_mut().unwrap(),
-                cx,
-            );
+            element.paint(bounds, state.rendered_element_state.as_mut().unwrap(), cx);
         }
     }
 }

crates/gpui2/src/elements/div.rs 🔗

@@ -176,21 +176,20 @@ impl Interactivity {
     {
         self.mouse_move_listeners
             .push(Box::new(move |event, bounds, phase, cx| {
-                if phase == DispatchPhase::Capture {
-                    if cx
+                if phase == DispatchPhase::Capture
+                    && cx
                         .active_drag
                         .as_ref()
                         .is_some_and(|drag| drag.value.as_ref().type_id() == TypeId::of::<T>())
-                    {
-                        (listener)(
-                            &DragMoveEvent {
-                                event: event.clone(),
-                                bounds: bounds.bounds,
-                                drag: PhantomData,
-                            },
-                            cx,
-                        );
-                    }
+                {
+                    (listener)(
+                        &DragMoveEvent {
+                            event: event.clone(),
+                            bounds: bounds.bounds,
+                            drag: PhantomData,
+                        },
+                        cx,
+                    );
                 }
             }));
     }
@@ -236,7 +235,7 @@ impl Interactivity {
 
     pub fn on_boxed_action(
         &mut self,
-        action: &Box<dyn Action>,
+        action: &dyn Action,
         listener: impl Fn(&Box<dyn Action>, &mut WindowContext) + 'static,
     ) {
         let action = action.boxed_clone();
@@ -511,7 +510,7 @@ pub trait InteractiveElement: Sized {
 
     fn on_boxed_action(
         mut self,
-        action: &Box<dyn Action>,
+        action: &dyn Action,
         listener: impl Fn(&Box<dyn Action>, &mut WindowContext) + 'static,
     ) -> Self {
         self.interactivity().on_boxed_action(action, listener);
@@ -878,6 +877,7 @@ impl DivState {
     }
 }
 
+#[derive(Default)]
 pub struct Interactivity {
     pub element_id: Option<ElementId>,
     pub key_context: Option<KeyContext>,
@@ -921,12 +921,12 @@ pub struct InteractiveBounds {
 
 impl InteractiveBounds {
     pub fn visibly_contains(&self, point: &Point<Pixels>, cx: &WindowContext) -> bool {
-        self.bounds.contains(point) && cx.was_top_layer(&point, &self.stacking_order)
+        self.bounds.contains(point) && cx.was_top_layer(point, &self.stacking_order)
     }
 
     pub fn drag_target_contains(&self, point: &Point<Pixels>, cx: &WindowContext) -> bool {
         self.bounds.contains(point)
-            && cx.was_top_layer_under_active_drag(&point, &self.stacking_order)
+            && cx.was_top_layer_under_active_drag(point, &self.stacking_order)
     }
 }
 
@@ -1009,8 +1009,7 @@ impl Interactivity {
                                         None,
                                     )
                                     .ok()
-                                    .map(|mut text| text.pop())
-                                    .flatten()
+                                    .and_then(|mut text| text.pop())
                                 {
                                     text.paint(bounds.origin, FONT_SIZE, cx).ok();
 
@@ -1024,7 +1023,6 @@ impl Interactivity {
                                     {
                                         let command_held = cx.modifiers().command;
                                         cx.on_key_event({
-                                            let text_bounds = text_bounds.clone();
                                             move |e: &crate::ModifiersChangedEvent, _phase, cx| {
                                                 if e.modifiers.command != command_held
                                                     && text_bounds.contains(&cx.mouse_position())
@@ -1037,17 +1035,16 @@ impl Interactivity {
                                         let hovered = bounds.contains(&cx.mouse_position());
                                         cx.on_mouse_event(
                                             move |event: &MouseMoveEvent, phase, cx| {
-                                                if phase == DispatchPhase::Capture {
-                                                    if bounds.contains(&event.position) != hovered {
-                                                        cx.notify();
-                                                    }
+                                                if phase == DispatchPhase::Capture
+                                                    && bounds.contains(&event.position) != hovered
+                                                {
+                                                    cx.notify();
                                                 }
                                             },
                                         );
 
                                         cx.on_mouse_event({
-                                            let location = self.location.clone().unwrap();
-                                            let text_bounds = text_bounds.clone();
+                                            let location = self.location.unwrap();
                                             move |e: &crate::MouseDownEvent, phase, cx| {
                                                 if text_bounds.contains(&e.position)
                                                     && phase.capture()
@@ -1188,10 +1185,10 @@ impl Interactivity {
                         if let Some(group_bounds) = hover_group_bounds {
                             let hovered = group_bounds.contains(&cx.mouse_position());
                             cx.on_mouse_event(move |event: &MouseMoveEvent, phase, cx| {
-                                if phase == DispatchPhase::Capture {
-                                    if group_bounds.contains(&event.position) != hovered {
-                                        cx.notify();
-                                    }
+                                if phase == DispatchPhase::Capture
+                                    && group_bounds.contains(&event.position) != hovered
+                                {
+                                    cx.notify();
                                 }
                             });
                         }
@@ -1203,10 +1200,10 @@ impl Interactivity {
                             let bounds = bounds.intersect(&cx.content_mask().bounds);
                             let hovered = bounds.contains(&cx.mouse_position());
                             cx.on_mouse_event(move |event: &MouseMoveEvent, phase, cx| {
-                                if phase == DispatchPhase::Capture {
-                                    if bounds.contains(&event.position) != hovered {
-                                        cx.notify();
-                                    }
+                                if phase == DispatchPhase::Capture
+                                    && bounds.contains(&event.position) != hovered
+                                {
+                                    cx.notify();
                                 }
                             });
                         }
@@ -1366,7 +1363,7 @@ impl Interactivity {
                                     && !cx.has_active_drag();
                                 let mut was_hovered = was_hovered.borrow_mut();
 
-                                if is_hovered != was_hovered.clone() {
+                                if is_hovered != *was_hovered {
                                     *was_hovered = is_hovered;
                                     drop(was_hovered);
 
@@ -1693,46 +1690,6 @@ impl Interactivity {
     }
 }
 
-impl Default for Interactivity {
-    fn default() -> Self {
-        Self {
-            element_id: None,
-            key_context: None,
-            focusable: false,
-            tracked_focus_handle: None,
-            scroll_handle: None,
-            // scroll_offset: Point::default(),
-            group: None,
-            base_style: Box::new(StyleRefinement::default()),
-            focus_style: None,
-            in_focus_style: None,
-            hover_style: None,
-            group_hover_style: None,
-            active_style: None,
-            group_active_style: None,
-            drag_over_styles: Vec::new(),
-            group_drag_over_styles: Vec::new(),
-            mouse_down_listeners: Vec::new(),
-            mouse_up_listeners: Vec::new(),
-            mouse_move_listeners: Vec::new(),
-            scroll_wheel_listeners: Vec::new(),
-            key_down_listeners: Vec::new(),
-            key_up_listeners: Vec::new(),
-            action_listeners: Vec::new(),
-            drop_listeners: Vec::new(),
-            can_drop_predicate: None,
-            click_listeners: Vec::new(),
-            drag_listener: None,
-            hover_listener: None,
-            tooltip_builder: None,
-            block_mouse: false,
-
-            #[cfg(debug_assertions)]
-            location: None,
-        }
-    }
-}
-
 #[derive(Default)]
 pub struct InteractiveElementState {
     pub focus_handle: Option<FocusHandle>,
@@ -1942,13 +1899,19 @@ struct ScrollHandleState {
 #[derive(Clone)]
 pub struct ScrollHandle(Rc<RefCell<ScrollHandleState>>);
 
+impl Default for ScrollHandle {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
 impl ScrollHandle {
     pub fn new() -> Self {
         Self(Rc::default())
     }
 
     pub fn offset(&self) -> Point<Pixels> {
-        self.0.borrow().offset.borrow().clone()
+        *self.0.borrow().offset.borrow()
     }
 
     pub fn top_item(&self) -> usize {

crates/gpui2/src/elements/overlay.rs 🔗

@@ -71,9 +71,11 @@ impl Element for Overlay {
             .map(|child| child.layout(cx))
             .collect::<SmallVec<_>>();
 
-        let mut overlay_style = Style::default();
-        overlay_style.position = Position::Absolute;
-        overlay_style.display = Display::Flex;
+        let overlay_style = Style {
+            position: Position::Absolute,
+            display: Display::Flex,
+            ..Style::default()
+        };
 
         let layout_id = cx.request_layout(&overlay_style, child_layout_ids.iter().copied());
 

crates/gpui2/src/elements/text.rs 🔗

@@ -171,7 +171,6 @@ impl TextState {
         let line_height = text_style
             .line_height
             .to_pixels(font_size.into(), cx.rem_size());
-        let text = SharedString::from(text);
 
         let runs = if let Some(runs) = runs {
             runs

crates/gpui2/src/elements/uniform_list.rs 🔗

@@ -41,7 +41,7 @@ where
         item_to_measure_index: 0,
         render_items: Box::new(render_range),
         interactivity: Interactivity {
-            element_id: Some(id.into()),
+            element_id: Some(id),
             base_style: Box::new(base_style),
 
             #[cfg(debug_assertions)]

crates/gpui2/src/executor.rs 🔗

@@ -80,6 +80,12 @@ impl<T> Future for Task<T> {
 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
 pub struct TaskLabel(NonZeroUsize);
 
+impl Default for TaskLabel {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
 impl TaskLabel {
     pub fn new() -> Self {
         static NEXT_TASK_LABEL: AtomicUsize = AtomicUsize::new(1);

crates/gpui2/src/geometry.rs 🔗

@@ -1601,13 +1601,13 @@ impl Edges<Pixels> {
     }
 }
 
-impl Into<Edges<Pixels>> for f32 {
-    fn into(self) -> Edges<Pixels> {
+impl From<f32> for Edges<Pixels> {
+    fn from(val: f32) -> Self {
         Edges {
-            top: self.into(),
-            right: self.into(),
-            bottom: self.into(),
-            left: self.into(),
+            top: val.into(),
+            right: val.into(),
+            bottom: val.into(),
+            left: val.into(),
         }
     }
 }
@@ -1840,24 +1840,24 @@ where
 
 impl<T> Copy for Corners<T> where T: Copy + Clone + Default + Debug {}
 
-impl Into<Corners<Pixels>> for f32 {
-    fn into(self) -> Corners<Pixels> {
+impl From<f32> for Corners<Pixels> {
+    fn from(val: f32) -> Self {
         Corners {
-            top_left: self.into(),
-            top_right: self.into(),
-            bottom_right: self.into(),
-            bottom_left: self.into(),
+            top_left: val.into(),
+            top_right: val.into(),
+            bottom_right: val.into(),
+            bottom_left: val.into(),
         }
     }
 }
 
-impl Into<Corners<Pixels>> for Pixels {
-    fn into(self) -> Corners<Pixels> {
+impl From<Pixels> for Corners<Pixels> {
+    fn from(val: Pixels) -> Self {
         Corners {
-            top_left: self,
-            top_right: self,
-            bottom_right: self,
-            bottom_left: self,
+            top_left: val,
+            top_right: val,
+            bottom_right: val,
+            bottom_left: val,
         }
     }
 }
@@ -1896,7 +1896,6 @@ impl Into<Corners<Pixels>> for Pixels {
     Div,
     DivAssign,
     PartialEq,
-    PartialOrd,
     Serialize,
     Deserialize,
 )]
@@ -2039,9 +2038,15 @@ impl Mul<Pixels> for Pixels {
 
 impl Eq for Pixels {}
 
+impl PartialOrd for Pixels {
+    fn partial_cmp(&self, other: &Self) -> Option<cmp::Ordering> {
+        self.0.partial_cmp(&other.0)
+    }
+}
+
 impl Ord for Pixels {
     fn cmp(&self, other: &Self) -> cmp::Ordering {
-        self.0.partial_cmp(&other.0).unwrap()
+        self.partial_cmp(other).unwrap()
     }
 }
 
@@ -2517,12 +2522,12 @@ impl Debug for Length {
 ///
 /// A `DefiniteLength` representing the relative length as a fraction of the parent's size.
 pub fn relative(fraction: f32) -> DefiniteLength {
-    DefiniteLength::Fraction(fraction).into()
+    DefiniteLength::Fraction(fraction)
 }
 
 /// Returns the Golden Ratio, i.e. `~(1.0 + sqrt(5.0)) / 2.0`.
 pub fn phi() -> DefiniteLength {
-    relative(1.61803398875)
+    relative(1.618_034)
 }
 
 /// Constructs a `Rems` value representing a length in rems.

crates/gpui2/src/interactive.rs 🔗

@@ -258,7 +258,7 @@ impl InputEvent {
         }
     }
 
-    pub fn mouse_event<'a>(&'a self) -> Option<&'a dyn Any> {
+    pub fn mouse_event(&self) -> Option<&dyn Any> {
         match self {
             InputEvent::KeyDown { .. } => None,
             InputEvent::KeyUp { .. } => None,
@@ -272,7 +272,7 @@ impl InputEvent {
         }
     }
 
-    pub fn keyboard_event<'a>(&'a self) -> Option<&'a dyn Any> {
+    pub fn keyboard_event(&self) -> Option<&dyn Any> {
         match self {
             InputEvent::KeyDown(event) => Some(event),
             InputEvent::KeyUp(event) => Some(event),

crates/gpui2/src/keymap/binding.rs 🔗

@@ -54,7 +54,7 @@ impl KeyBinding {
         pending_keystrokes: &[Keystroke],
         contexts: &[KeyContext],
     ) -> KeyMatch {
-        if self.keystrokes.as_ref().starts_with(&pending_keystrokes)
+        if self.keystrokes.as_ref().starts_with(pending_keystrokes)
             && self.matches_context(contexts)
         {
             // If the binding is completed, push it onto the matches list

crates/gpui2/src/keymap/context.rs 🔗

@@ -24,7 +24,7 @@ impl KeyContext {
     pub fn parse(source: &str) -> Result<Self> {
         let mut context = Self::default();
         let source = skip_whitespace(source);
-        Self::parse_expr(&source, &mut context)?;
+        Self::parse_expr(source, &mut context)?;
         Ok(context)
     }
 
@@ -220,7 +220,7 @@ impl KeyBindingContextPredicate {
             }
             '!' => {
                 let source = skip_whitespace(&source[1..]);
-                let (predicate, source) = Self::parse_expr(&source, PRECEDENCE_NOT)?;
+                let (predicate, source) = Self::parse_expr(source, PRECEDENCE_NOT)?;
                 Ok((KeyBindingContextPredicate::Not(Box::new(predicate)), source))
             }
             _ if is_identifier_char(next) => {

crates/gpui2/src/platform/mac.rs 🔗

@@ -1,5 +1,5 @@
-///! Macos screen have a y axis that goings up from the bottom of the screen and
-///! an origin at the bottom left of the main display.
+//! Macos screen have a y axis that goings up from the bottom of the screen and
+//! an origin at the bottom left of the main display.
 mod dispatcher;
 mod display;
 mod display_linker;

crates/gpui2/src/platform/mac/dispatcher.rs 🔗

@@ -23,6 +23,12 @@ pub struct MacDispatcher {
     parker: Arc<Mutex<Parker>>,
 }
 
+impl Default for MacDispatcher {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
 impl MacDispatcher {
     pub fn new() -> Self {
         MacDispatcher {

crates/gpui2/src/platform/mac/display.rs 🔗

@@ -41,7 +41,7 @@ impl MacDisplay {
                 CGGetActiveDisplayList(display_count, displays.as_mut_ptr(), &mut display_count);
                 displays.set_len(display_count as usize);
 
-                displays.into_iter().map(|display| MacDisplay(display))
+                displays.into_iter().map(MacDisplay)
             } else {
                 panic!("Failed to get active display list");
             }

crates/gpui2/src/platform/mac/metal_atlas.rs 🔗

@@ -64,7 +64,7 @@ impl PlatformAtlas for MetalAtlas {
     ) -> Result<AtlasTile> {
         let mut lock = self.0.lock();
         if let Some(tile) = lock.tiles_by_key.get(key) {
-            return Ok(tile.clone());
+            Ok(tile.clone())
         } else {
             let (size, bytes) = build()?;
             let tile = lock.allocate(size, key.texture_kind());
@@ -203,7 +203,7 @@ impl MetalAtlasTexture {
             region,
             0,
             bytes.as_ptr() as *const _,
-            u32::from(bounds.size.width.to_bytes(self.bytes_per_pixel())) as u64,
+            bounds.size.width.to_bytes(self.bytes_per_pixel()) as u64,
         );
     }
 

crates/gpui2/src/platform/mac/metal_renderer.rs 🔗

@@ -66,12 +66,10 @@ impl MetalRenderer {
             .expect("error building metal library");
 
         fn to_float2_bits(point: crate::PointF) -> u64 {
-            unsafe {
-                let mut output = mem::transmute::<_, u32>(point.y.to_bits()) as u64;
-                output <<= 32;
-                output |= mem::transmute::<_, u32>(point.x.to_bits()) as u64;
-                output
-            }
+            let mut output = point.y.to_bits() as u64;
+            output <<= 32;
+            output |= point.x.to_bits() as u64;
+            output
         }
 
         let unit_vertices = [
@@ -174,12 +172,12 @@ impl MetalRenderer {
             unit_vertices,
             instances,
             sprite_atlas,
-            core_video_texture_cache: CVMetalTextureCache::new(device.as_ptr()).unwrap(),
+            core_video_texture_cache: unsafe { CVMetalTextureCache::new(device.as_ptr()).unwrap() },
         }
     }
 
     pub fn layer(&self) -> &metal::MetalLayerRef {
-        &*self.layer
+        &self.layer
     }
 
     pub fn sprite_atlas(&self) -> &Arc<MetalAtlas> {
@@ -206,7 +204,7 @@ impl MetalRenderer {
         let command_buffer = command_queue.new_command_buffer();
         let mut instance_offset = 0;
 
-        let path_tiles = self.rasterize_paths(scene.paths(), &mut instance_offset, &command_buffer);
+        let path_tiles = self.rasterize_paths(scene.paths(), &mut instance_offset, command_buffer);
 
         let render_pass_descriptor = metal::RenderPassDescriptor::new();
         let color_attachment = render_pass_descriptor
@@ -429,7 +427,7 @@ impl MetalRenderer {
             &viewport_size as *const Size<DevicePixels> as *const _,
         );
 
-        let shadow_bytes_len = mem::size_of::<Shadow>() * shadows.len();
+        let shadow_bytes_len = std::mem::size_of_val(shadows);
         let buffer_contents = unsafe { (self.instances.contents() as *mut u8).add(*offset) };
         unsafe {
             ptr::copy_nonoverlapping(
@@ -489,7 +487,7 @@ impl MetalRenderer {
             &viewport_size as *const Size<DevicePixels> as *const _,
         );
 
-        let quad_bytes_len = mem::size_of::<Quad>() * quads.len();
+        let quad_bytes_len = std::mem::size_of_val(quads);
         let buffer_contents = unsafe { (self.instances.contents() as *mut u8).add(*offset) };
         unsafe {
             ptr::copy_nonoverlapping(quads.as_ptr() as *const u8, buffer_contents, quad_bytes_len);
@@ -537,7 +535,7 @@ impl MetalRenderer {
         let mut prev_texture_id = None;
         let mut sprites = SmallVec::<[_; 1]>::new();
         let mut paths_and_tiles = paths
-            .into_iter()
+            .iter()
             .map(|path| (path, tiles_by_path_id.get(&path.id).unwrap()))
             .peekable();
 
@@ -652,7 +650,7 @@ impl MetalRenderer {
             &viewport_size as *const Size<DevicePixels> as *const _,
         );
 
-        let quad_bytes_len = mem::size_of::<Underline>() * underlines.len();
+        let quad_bytes_len = std::mem::size_of_val(underlines);
         let buffer_contents = unsafe { (self.instances.contents() as *mut u8).add(*offset) };
         unsafe {
             ptr::copy_nonoverlapping(
@@ -723,7 +721,7 @@ impl MetalRenderer {
         );
         command_encoder.set_fragment_texture(SpriteInputIndex::AtlasTexture as u64, Some(&texture));
 
-        let sprite_bytes_len = mem::size_of::<MonochromeSprite>() * sprites.len();
+        let sprite_bytes_len = std::mem::size_of_val(sprites);
         let buffer_contents = unsafe { (self.instances.contents() as *mut u8).add(*offset) };
         unsafe {
             ptr::copy_nonoverlapping(
@@ -794,7 +792,7 @@ impl MetalRenderer {
         );
         command_encoder.set_fragment_texture(SpriteInputIndex::AtlasTexture as u64, Some(&texture));
 
-        let sprite_bytes_len = mem::size_of::<PolychromeSprite>() * sprites.len();
+        let sprite_bytes_len = std::mem::size_of_val(sprites);
         let buffer_contents = unsafe { (self.instances.contents() as *mut u8).add(*offset) };
         unsafe {
             ptr::copy_nonoverlapping(
@@ -849,28 +847,30 @@ impl MetalRenderer {
                 media::core_video::kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
             );
 
-            let y_texture = self
-                .core_video_texture_cache
-                .create_texture_from_image(
-                    surface.image_buffer.as_concrete_TypeRef(),
-                    ptr::null(),
-                    MTLPixelFormat::R8Unorm,
-                    surface.image_buffer.plane_width(0),
-                    surface.image_buffer.plane_height(0),
-                    0,
-                )
-                .unwrap();
-            let cb_cr_texture = self
-                .core_video_texture_cache
-                .create_texture_from_image(
-                    surface.image_buffer.as_concrete_TypeRef(),
-                    ptr::null(),
-                    MTLPixelFormat::RG8Unorm,
-                    surface.image_buffer.plane_width(1),
-                    surface.image_buffer.plane_height(1),
-                    1,
-                )
-                .unwrap();
+            let y_texture = unsafe {
+                self.core_video_texture_cache
+                    .create_texture_from_image(
+                        surface.image_buffer.as_concrete_TypeRef(),
+                        ptr::null(),
+                        MTLPixelFormat::R8Unorm,
+                        surface.image_buffer.plane_width(0),
+                        surface.image_buffer.plane_height(0),
+                        0,
+                    )
+                    .unwrap()
+            };
+            let cb_cr_texture = unsafe {
+                self.core_video_texture_cache
+                    .create_texture_from_image(
+                        surface.image_buffer.as_concrete_TypeRef(),
+                        ptr::null(),
+                        MTLPixelFormat::RG8Unorm,
+                        surface.image_buffer.plane_width(1),
+                        surface.image_buffer.plane_height(1),
+                        1,
+                    )
+                    .unwrap()
+            };
 
             align_offset(offset);
             let next_offset = *offset + mem::size_of::<Surface>();

crates/gpui2/src/platform/mac/platform.rs 🔗

@@ -166,6 +166,12 @@ pub struct MacPlatformState {
     finish_launching: Option<Box<dyn FnOnce()>>,
 }
 
+impl Default for MacPlatform {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
 impl MacPlatform {
     pub fn new() -> Self {
         let dispatcher = Arc::new(MacDispatcher::new());
@@ -219,7 +225,12 @@ impl MacPlatform {
             menu.setDelegate_(delegate);
 
             for item_config in menu_config.items {
-                menu.addItem_(self.create_menu_item(item_config, delegate, actions, keymap));
+                menu.addItem_(Self::create_menu_item(
+                    item_config,
+                    delegate,
+                    actions,
+                    keymap,
+                ));
             }
 
             let menu_item = NSMenuItem::new(nil).autorelease();
@@ -236,7 +247,6 @@ impl MacPlatform {
     }
 
     unsafe fn create_menu_item(
-        &self,
         item: MenuItem,
         delegate: id,
         actions: &mut Vec<Box<dyn Action>>,
@@ -342,7 +352,7 @@ impl MacPlatform {
                 let submenu = NSMenu::new(nil).autorelease();
                 submenu.setDelegate_(delegate);
                 for item in items {
-                    submenu.addItem_(self.create_menu_item(item, delegate, actions, keymap));
+                    submenu.addItem_(Self::create_menu_item(item, delegate, actions, keymap));
                 }
                 item.setSubmenu_(submenu);
                 item.setTitle_(ns_string(name));
@@ -475,7 +485,6 @@ impl Platform for MacPlatform {
 
     fn displays(&self) -> Vec<Rc<dyn PlatformDisplay>> {
         MacDisplay::all()
-            .into_iter()
             .map(|screen| Rc::new(screen) as Rc<_>)
             .collect()
     }
@@ -1035,7 +1044,6 @@ extern "C" fn will_terminate(this: &mut Object, _: Sel, _: id) {
 extern "C" fn open_urls(this: &mut Object, _: Sel, _: id, urls: id) {
     let urls = unsafe {
         (0..urls.count())
-            .into_iter()
             .filter_map(|i| {
                 let url = urls.objectAtIndex(i);
                 match CStr::from_ptr(url.absoluteString().UTF8String() as *mut c_char).to_str() {

crates/gpui2/src/platform/mac/text_system.rs 🔗

@@ -335,7 +335,7 @@ impl MacTextSystemState {
                 }
             }
 
-            Ok((bitmap_size.into(), bytes))
+            Ok((bitmap_size, bytes))
         }
     }
 
@@ -343,10 +343,10 @@ impl MacTextSystemState {
         // Construct the attributed string, converting UTF8 ranges to UTF16 ranges.
         let mut string = CFMutableAttributedString::new();
         {
-            string.replace_str(&CFString::new(text.as_ref()), CFRange::init(0, 0));
+            string.replace_str(&CFString::new(text), CFRange::init(0, 0));
             let utf16_line_len = string.char_len() as usize;
 
-            let mut ix_converter = StringIndexConverter::new(text.as_ref());
+            let mut ix_converter = StringIndexConverter::new(text);
             for run in font_runs {
                 let utf8_end = ix_converter.utf8_ix + run.len;
                 let utf16_start = ix_converter.utf16_ix;
@@ -390,7 +390,7 @@ impl MacTextSystemState {
             };
             let font_id = self.id_for_native_font(font);
 
-            let mut ix_converter = StringIndexConverter::new(text.as_ref());
+            let mut ix_converter = StringIndexConverter::new(text);
             let mut glyphs = SmallVec::new();
             for ((glyph_id, position), glyph_utf16_ix) in run
                 .glyphs()
@@ -453,7 +453,7 @@ impl MacTextSystemState {
                 if ix_converter.utf8_ix >= text.len() {
                     break;
                 }
-                break_indices.push(ix_converter.utf8_ix as usize);
+                break_indices.push(ix_converter.utf8_ix);
             }
             break_indices
         }

crates/gpui2/src/platform/mac/window.rs 🔗

@@ -487,7 +487,7 @@ impl MacWindow {
             let display = options
                 .display_id
                 .and_then(|display_id| MacDisplay::all().find(|display| display.id() == display_id))
-                .unwrap_or_else(|| MacDisplay::primary());
+                .unwrap_or_else(MacDisplay::primary);
 
             let mut target_screen = nil;
             let screens = NSScreen::screens(nil);
@@ -701,7 +701,7 @@ impl PlatformWindow for MacWindow {
     }
 
     fn content_size(&self) -> Size<Pixels> {
-        self.0.as_ref().lock().content_size().into()
+        self.0.as_ref().lock().content_size()
     }
 
     fn scale_factor(&self) -> f32 {
@@ -1338,12 +1338,10 @@ extern "C" fn window_did_change_key_status(this: &Object, selector: Sel, _: id)
     // The following code detects the spurious event and invokes `resignKeyWindow`:
     // in theory, we're not supposed to invoke this method manually but it balances out
     // the spurious `becomeKeyWindow` event and helps us work around that bug.
-    if selector == sel!(windowDidBecomeKey:) {
-        if !is_active {
-            unsafe {
-                let _: () = msg_send![lock.native_window, resignKeyWindow];
-                return;
-            }
+    if selector == sel!(windowDidBecomeKey:) && !is_active {
+        unsafe {
+            let _: () = msg_send![lock.native_window, resignKeyWindow];
+            return;
         }
     }
 
@@ -1664,11 +1662,11 @@ extern "C" fn accepts_first_mouse(this: &Object, _: Sel, _: id) -> BOOL {
     unsafe {
         let state = get_window_state(this);
         let lock = state.as_ref().lock();
-        return if lock.kind == WindowKind::PopUp {
+        if lock.kind == WindowKind::PopUp {
             YES
         } else {
             NO
-        };
+        }
     }
 }
 

crates/gpui2/src/scene.rs 🔗

@@ -14,6 +14,7 @@ pub type LayerId = u32;
 
 pub type DrawOrder = u32;
 
+#[derive(Default)]
 pub(crate) struct SceneBuilder {
     last_order: Option<(StackingOrder, LayerId)>,
     layers_by_order: BTreeMap<StackingOrder, LayerId>,
@@ -26,22 +27,6 @@ pub(crate) struct SceneBuilder {
     surfaces: Vec<Surface>,
 }
 
-impl Default for SceneBuilder {
-    fn default() -> Self {
-        SceneBuilder {
-            last_order: None,
-            layers_by_order: BTreeMap::new(),
-            shadows: Vec::new(),
-            quads: Vec::new(),
-            paths: Vec::new(),
-            underlines: Vec::new(),
-            monochrome_sprites: Vec::new(),
-            polychrome_sprites: Vec::new(),
-            surfaces: Vec::new(),
-        }
-    }
-}
-
 impl SceneBuilder {
     pub fn build(&mut self) -> Scene {
         let mut orders = vec![0; self.layers_by_order.len()];

crates/gpui2/src/shared_string.rs 🔗

@@ -60,9 +60,9 @@ impl<'a> PartialEq<&'a str> for SharedString {
     }
 }
 
-impl Into<Arc<str>> for SharedString {
-    fn into(self) -> Arc<str> {
-        match self.0 {
+impl From<SharedString> for Arc<str> {
+    fn from(val: SharedString) -> Self {
+        match val.0 {
             ArcCow::Borrowed(borrowed) => Arc::from(borrowed),
             ArcCow::Owned(owned) => owned.clone(),
         }
@@ -75,9 +75,9 @@ impl<T: Into<ArcCow<'static, str>>> From<T> for SharedString {
     }
 }
 
-impl Into<String> for SharedString {
-    fn into(self) -> String {
-        self.0.to_string()
+impl From<SharedString> for String {
+    fn from(val: SharedString) -> Self {
+        val.0.to_string()
     }
 }
 

crates/gpui2/src/style.rs 🔗

@@ -210,7 +210,7 @@ impl TextStyle {
     pub fn font(&self) -> Font {
         Font {
             family: self.font_family.clone(),
-            features: self.font_features.clone(),
+            features: self.font_features,
             weight: self.font_weight,
             style: self.font_style,
         }
@@ -232,7 +232,7 @@ impl TextStyle {
             },
             color: self.color,
             background_color: self.background_color,
-            underline: self.underline.clone(),
+            underline: self.underline,
         }
     }
 }
@@ -574,7 +574,7 @@ impl From<&TextStyle> for HighlightStyle {
             font_weight: Some(other.font_weight),
             font_style: Some(other.font_style),
             background_color: other.background_color,
-            underline: other.underline.clone(),
+            underline: other.underline,
             fade_out: None,
         }
     }

crates/gpui2/src/subscription.rs 🔗

@@ -53,7 +53,7 @@ where
         lock.subscribers
             .entry(emitter_key.clone())
             .or_default()
-            .get_or_insert_with(|| Default::default())
+            .get_or_insert_with(Default::default)
             .insert(
                 subscriber_id,
                 Subscriber {
@@ -90,7 +90,7 @@ where
     }
 
     pub fn remove(&self, emitter: &EmitterKey) -> impl IntoIterator<Item = Callback> {
-        let subscribers = self.0.lock().subscribers.remove(&emitter);
+        let subscribers = self.0.lock().subscribers.remove(emitter);
         subscribers
             .unwrap_or_default()
             .map(|s| s.into_values())
@@ -131,7 +131,7 @@ where
         let mut lock = self.0.lock();
 
         // Add any new subscribers that were added while invoking the callback.
-        if let Some(Some(new_subscribers)) = lock.subscribers.remove(&emitter) {
+        if let Some(Some(new_subscribers)) = lock.subscribers.remove(emitter) {
             subscribers.extend(new_subscribers);
         }
 

crates/gpui2/src/taffy.rs 🔗

@@ -29,8 +29,7 @@ pub struct TaffyLayoutEngine {
     >,
 }
 
-static EXPECT_MESSAGE: &'static str =
-    "we should avoid taffy layout errors by construction if possible";
+static EXPECT_MESSAGE: &str = "we should avoid taffy layout errors by construction if possible";
 
 impl TaffyLayoutEngine {
     pub fn new() -> Self {
@@ -246,7 +245,7 @@ impl ToTaffy<taffy::style::Style> for Style {
     fn to_taffy(&self, rem_size: Pixels) -> taffy::style::Style {
         taffy::style::Style {
             display: self.display,
-            overflow: self.overflow.clone().into(),
+            overflow: self.overflow.into(),
             scrollbar_width: self.scrollbar_width,
             position: self.position,
             inset: self.inset.to_taffy(rem_size),
@@ -378,14 +377,14 @@ where
     }
 }
 
-impl<T, T2> Into<TaffyPoint<T2>> for Point<T>
+impl<T, T2> From<Point<T>> for TaffyPoint<T2>
 where
     T: Into<T2> + Clone + Default + Debug,
 {
-    fn into(self) -> TaffyPoint<T2> {
+    fn from(val: Point<T>) -> Self {
         TaffyPoint {
-            x: self.x.into(),
-            y: self.y.into(),
+            x: val.x.into(),
+            y: val.y.into(),
         }
     }
 }
@@ -396,8 +395,8 @@ where
 {
     fn to_taffy(&self, rem_size: Pixels) -> TaffySize<U> {
         TaffySize {
-            width: self.width.to_taffy(rem_size).into(),
-            height: self.height.to_taffy(rem_size).into(),
+            width: self.width.to_taffy(rem_size),
+            height: self.height.to_taffy(rem_size),
         }
     }
 }
@@ -408,10 +407,10 @@ where
 {
     fn to_taffy(&self, rem_size: Pixels) -> TaffyRect<U> {
         TaffyRect {
-            top: self.top.to_taffy(rem_size).into(),
-            right: self.right.to_taffy(rem_size).into(),
-            bottom: self.bottom.to_taffy(rem_size).into(),
-            left: self.left.to_taffy(rem_size).into(),
+            top: self.top.to_taffy(rem_size),
+            right: self.right.to_taffy(rem_size),
+            bottom: self.bottom.to_taffy(rem_size),
+            left: self.left.to_taffy(rem_size),
         }
     }
 }

crates/gpui2/src/text_system.rs 🔗

@@ -106,7 +106,7 @@ impl TextSystem {
     }
 
     pub fn units_per_em(&self, font_id: FontId) -> u32 {
-        self.read_metrics(font_id, |metrics| metrics.units_per_em as u32)
+        self.read_metrics(font_id, |metrics| metrics.units_per_em)
     }
 
     pub fn cap_height(&self, font_id: FontId, font_size: Pixels) -> Pixels {
@@ -174,7 +174,7 @@ impl TextSystem {
 
         let layout = self
             .line_layout_cache
-            .layout_line(&text, font_size, &font_runs);
+            .layout_line(text, font_size, &font_runs);
 
         font_runs.clear();
         self.font_runs_pool.lock().push(font_runs);
@@ -208,7 +208,7 @@ impl TextSystem {
                 len: run.len as u32,
                 color: run.color,
                 background_color: run.background_color,
-                underline: run.underline.clone(),
+                underline: run.underline,
             });
         }
 
@@ -268,7 +268,7 @@ impl TextSystem {
                         len: run_len_within_line as u32,
                         color: run.color,
                         background_color: run.background_color,
-                        underline: run.underline.clone(),
+                        underline: run.underline,
                     });
                 }
 
@@ -287,7 +287,7 @@ impl TextSystem {
             lines.push(WrappedLine {
                 layout,
                 decoration_runs,
-                text: SharedString::from(line_text),
+                text: line_text,
             });
 
             // Skip `\n` character.
@@ -338,7 +338,7 @@ impl TextSystem {
     pub fn raster_bounds(&self, params: &RenderGlyphParams) -> Result<Bounds<DevicePixels>> {
         let raster_bounds = self.raster_bounds.upgradable_read();
         if let Some(bounds) = raster_bounds.get(params) {
-            Ok(bounds.clone())
+            Ok(*bounds)
         } else {
             let mut raster_bounds = RwLockUpgradableReadGuard::upgrade(raster_bounds);
             let bounds = self.platform_text_system.glyph_raster_bounds(params)?;
@@ -374,7 +374,7 @@ impl Drop for LineWrapperHandle {
         let wrapper = self.wrapper.take().unwrap();
         state
             .get_mut(&FontIdWithSize {
-                font_id: wrapper.font_id.clone(),
+                font_id: wrapper.font_id,
                 font_size: wrapper.font_size,
             })
             .unwrap()
@@ -438,9 +438,10 @@ impl FontWeight {
 }
 
 /// Allows italic or oblique faces to be selected.
-#[derive(Clone, Copy, Eq, PartialEq, Debug, Hash)]
+#[derive(Clone, Copy, Eq, PartialEq, Debug, Hash, Default)]
 pub enum FontStyle {
     /// A face that is neither italic not obliqued.
+    #[default]
     Normal,
     /// A form that is generally cursive in nature.
     Italic,
@@ -448,12 +449,6 @@ pub enum FontStyle {
     Oblique,
 }
 
-impl Default for FontStyle {
-    fn default() -> FontStyle {
-        FontStyle::Normal
-    }
-}
-
 impl Display for FontStyle {
     fn fmt(&self, f: &mut Formatter) -> fmt::Result {
         Debug::fmt(self, f)

crates/gpui2/src/text_system/line_wrapper.rs 🔗

@@ -97,14 +97,12 @@ impl LineWrapper {
                 self.cached_ascii_char_widths[c as usize] = Some(width);
                 width
             }
+        } else if let Some(cached_width) = self.cached_other_char_widths.get(&c) {
+            *cached_width
         } else {
-            if let Some(cached_width) = self.cached_other_char_widths.get(&c) {
-                *cached_width
-            } else {
-                let width = self.compute_width_for_char(c);
-                self.cached_other_char_widths.insert(c, width);
-                width
-            }
+            let width = self.compute_width_for_char(c);
+            self.cached_other_char_widths.insert(c, width);
+            width
         }
     }
 

crates/gpui2/src/view.rs 🔗

@@ -221,7 +221,7 @@ impl<V: Render> From<View<V>> for AnyView {
         AnyView {
             model: value.model.into_any(),
             layout: any_view::layout::<V>,
-            paint: any_view::paint::<V>,
+            paint: any_view::paint,
         }
     }
 }
@@ -243,7 +243,7 @@ impl Element for AnyView {
             state.is_some(),
             "state is None. Did you include an AnyView twice in the tree?"
         );
-        (self.paint)(&self, state.as_mut().unwrap(), cx)
+        (self.paint)(self, state.as_mut().unwrap(), cx)
     }
 }
 
@@ -293,7 +293,7 @@ impl<V: 'static + Render> From<WeakView<V>> for AnyWeakView {
         Self {
             model: view.model.into(),
             layout: any_view::layout::<V>,
-            paint: any_view::paint::<V>,
+            paint: any_view::paint,
         }
     }
 }
@@ -325,11 +325,7 @@ mod any_view {
         (layout_id, element)
     }
 
-    pub(crate) fn paint<V: 'static + Render>(
-        _view: &AnyView,
-        element: &mut AnyElement,
-        cx: &mut WindowContext,
-    ) {
+    pub(crate) fn paint(_view: &AnyView, element: &mut AnyElement, cx: &mut WindowContext) {
         element.paint(cx);
     }
 }

crates/gpui2/src/window.rs 🔗

@@ -26,6 +26,7 @@ use std::{
     any::{Any, TypeId},
     borrow::{Borrow, BorrowMut, Cow},
     cell::RefCell,
+    collections::hash_map::Entry,
     fmt::Debug,
     future::Future,
     hash::{Hash, Hasher},
@@ -403,7 +404,7 @@ impl Window {
             element_id_stack: GlobalElementId::default(),
             rendered_frame: Frame::new(DispatchTree::new(cx.keymap.clone(), cx.actions.clone())),
             next_frame: Frame::new(DispatchTree::new(cx.keymap.clone(), cx.actions.clone())),
-            frame_arena: Arena::new(1 * 1024 * 1024),
+            frame_arena: Arena::new(1024 * 1024),
             focus_handles: Arc::new(RwLock::new(SlotMap::with_key())),
             focus_listeners: SubscriberSet::new(),
             blur_listeners: SubscriberSet::new(),
@@ -637,7 +638,8 @@ impl<'a> WindowContext<'a> {
         let handle = self.window.handle;
         let display_id = self.window.display_id;
 
-        if !self.frame_consumers.contains_key(&display_id) {
+        let mut frame_consumers = std::mem::take(&mut self.app.frame_consumers);
+        if let Entry::Vacant(e) = frame_consumers.entry(display_id) {
             let (tx, mut rx) = mpsc::unbounded::<()>();
             self.platform.set_display_link_output_callback(
                 display_id,
@@ -669,8 +671,10 @@ impl<'a> WindowContext<'a> {
                     .ok();
                 }
             });
-            self.frame_consumers.insert(display_id, consumer_task);
+            e.insert(consumer_task);
         }
+        debug_assert!(self.app.frame_consumers.is_empty());
+        self.app.frame_consumers = frame_consumers;
 
         if self.next_frame_callbacks.is_empty() {
             self.platform.start_display_link(display_id);
@@ -718,7 +722,7 @@ impl<'a> WindowContext<'a> {
         children: impl IntoIterator<Item = LayoutId>,
     ) -> LayoutId {
         self.app.layout_id_buffer.clear();
-        self.app.layout_id_buffer.extend(children.into_iter());
+        self.app.layout_id_buffer.extend(children);
         let rem_size = self.rem_size();
 
         self.window.layout_engine.as_mut().unwrap().request_layout(
@@ -844,7 +848,7 @@ impl<'a> WindowContext<'a> {
         let text_style = self.text_style();
         text_style
             .line_height
-            .to_pixels(text_style.font_size.into(), rem_size)
+            .to_pixels(text_style.font_size, rem_size)
     }
 
     /// Call to prevent the default action of an event. Currently only used to prevent
@@ -966,7 +970,7 @@ impl<'a> WindowContext<'a> {
     pub fn add_opaque_layer(&mut self, bounds: Bounds<Pixels>) {
         let stacking_order = self.window.next_frame.z_index_stack.clone();
         let depth_map = &mut self.window.next_frame.depth_map;
-        match depth_map.binary_search_by(|(level, _)| stacking_order.cmp(&level)) {
+        match depth_map.binary_search_by(|(level, _)| stacking_order.cmp(level)) {
             Ok(i) | Err(i) => depth_map.insert(i, (stacking_order, bounds)),
         }
     }
@@ -1886,7 +1890,7 @@ impl Context for WindowContext<'_> {
         T: 'static,
     {
         let entity = self.entities.read(handle);
-        read(&*entity, &*self.app)
+        read(entity, &*self.app)
     }
 
     fn read_window<T, R>(
@@ -1946,7 +1950,7 @@ impl VisualContext for WindowContext<'_> {
         update: impl FnOnce(&mut T, &mut ViewContext<'_, T>) -> R,
     ) -> Self::Result<R> {
         let mut lease = self.app.entities.lease(&view.model);
-        let mut cx = ViewContext::new(&mut *self.app, &mut *self.window, &view);
+        let mut cx = ViewContext::new(&mut *self.app, &mut *self.window, view);
         let result = update(&mut *lease, &mut cx);
         cx.app.entities.end_lease(lease);
         result
@@ -1983,25 +1987,25 @@ impl<'a> std::ops::Deref for WindowContext<'a> {
     type Target = AppContext;
 
     fn deref(&self) -> &Self::Target {
-        &self.app
+        self.app
     }
 }
 
 impl<'a> std::ops::DerefMut for WindowContext<'a> {
     fn deref_mut(&mut self) -> &mut Self::Target {
-        &mut self.app
+        self.app
     }
 }
 
 impl<'a> Borrow<AppContext> for WindowContext<'a> {
     fn borrow(&self) -> &AppContext {
-        &self.app
+        self.app
     }
 }
 
 impl<'a> BorrowMut<AppContext> for WindowContext<'a> {
     fn borrow_mut(&mut self) -> &mut AppContext {
-        &mut self.app
+        self.app
     }
 }
 
@@ -2033,7 +2037,7 @@ pub trait BorrowWindow: BorrowMut<Window> + BorrowMut<AppContext> {
     ) -> R {
         if let Some(id) = id.map(Into::into) {
             let window = self.window_mut();
-            window.element_id_stack.push(id.into());
+            window.element_id_stack.push(id);
             let result = f(self);
             let window: &mut Window = self.borrow_mut();
             window.element_id_stack.pop();
@@ -2255,13 +2259,13 @@ pub trait BorrowWindow: BorrowMut<Window> + BorrowMut<AppContext> {
 
 impl Borrow<Window> for WindowContext<'_> {
     fn borrow(&self) -> &Window {
-        &self.window
+        self.window
     }
 }
 
 impl BorrowMut<Window> for WindowContext<'_> {
     fn borrow_mut(&mut self) -> &mut Window {
-        &mut self.window
+        self.window
     }
 }
 
@@ -2915,10 +2919,7 @@ impl<V> Copy for WindowHandle<V> {}
 
 impl<V> Clone for WindowHandle<V> {
     fn clone(&self) -> Self {
-        WindowHandle {
-            any_handle: self.any_handle,
-            state_type: PhantomData,
-        }
+        *self
     }
 }
 
@@ -2936,9 +2937,9 @@ impl<V> Hash for WindowHandle<V> {
     }
 }
 
-impl<V: 'static> Into<AnyWindowHandle> for WindowHandle<V> {
-    fn into(self) -> AnyWindowHandle {
-        self.any_handle
+impl<V: 'static> From<WindowHandle<V>> for AnyWindowHandle {
+    fn from(val: WindowHandle<V>) -> Self {
+        val.any_handle
     }
 }
 

crates/gpui2_macros/src/style_helpers.rs 🔗

@@ -102,7 +102,7 @@ fn generate_methods() -> Vec<TokenStream2> {
 fn generate_predefined_setter(
     name: &'static str,
     length: &'static str,
-    fields: &Vec<TokenStream2>,
+    fields: &[TokenStream2],
     length_tokens: &TokenStream2,
     negate: bool,
     doc_string: &str,
@@ -143,12 +143,12 @@ fn generate_predefined_setter(
 fn generate_custom_value_setter(
     prefix: &'static str,
     length_type: TokenStream2,
-    fields: &Vec<TokenStream2>,
+    fields: &[TokenStream2],
     doc_string: &str,
 ) -> TokenStream2 {
     let method_name = format_ident!("{}", prefix);
 
-    let mut iter = fields.into_iter();
+    let mut iter = fields.iter();
     let last = iter.next_back().unwrap();
     let field_assignments = iter
         .map(|field_tokens| {

crates/media/src/media.rs 🔗

@@ -108,25 +108,23 @@ pub mod core_video {
     impl_CFTypeDescription!(CVMetalTextureCache);
 
     impl CVMetalTextureCache {
-        pub fn new(metal_device: *mut MTLDevice) -> Result<Self> {
-            unsafe {
-                let mut this = ptr::null();
-                let result = CVMetalTextureCacheCreate(
-                    kCFAllocatorDefault,
-                    ptr::null(),
-                    metal_device,
-                    ptr::null(),
-                    &mut this,
-                );
-                if result == kCVReturnSuccess {
-                    Ok(CVMetalTextureCache::wrap_under_create_rule(this))
-                } else {
-                    Err(anyhow!("could not create texture cache, code: {}", result))
-                }
+        pub unsafe fn new(metal_device: *mut MTLDevice) -> Result<Self> {
+            let mut this = ptr::null();
+            let result = CVMetalTextureCacheCreate(
+                kCFAllocatorDefault,
+                ptr::null(),
+                metal_device,
+                ptr::null(),
+                &mut this,
+            );
+            if result == kCVReturnSuccess {
+                Ok(CVMetalTextureCache::wrap_under_create_rule(this))
+            } else {
+                Err(anyhow!("could not create texture cache, code: {}", result))
             }
         }
 
-        pub fn create_texture_from_image(
+        pub unsafe fn create_texture_from_image(
             &self,
             source: CVImageBufferRef,
             texture_attributes: CFDictionaryRef,
@@ -135,24 +133,22 @@ pub mod core_video {
             height: usize,
             plane_index: usize,
         ) -> Result<CVMetalTexture> {
-            unsafe {
-                let mut this = ptr::null();
-                let result = CVMetalTextureCacheCreateTextureFromImage(
-                    kCFAllocatorDefault,
-                    self.as_concrete_TypeRef(),
-                    source,
-                    texture_attributes,
-                    pixel_format,
-                    width,
-                    height,
-                    plane_index,
-                    &mut this,
-                );
-                if result == kCVReturnSuccess {
-                    Ok(CVMetalTexture::wrap_under_create_rule(this))
-                } else {
-                    Err(anyhow!("could not create texture, code: {}", result))
-                }
+            let mut this = ptr::null();
+            let result = CVMetalTextureCacheCreateTextureFromImage(
+                kCFAllocatorDefault,
+                self.as_concrete_TypeRef(),
+                source,
+                texture_attributes,
+                pixel_format,
+                width,
+                height,
+                plane_index,
+                &mut this,
+            );
+            if result == kCVReturnSuccess {
+                Ok(CVMetalTexture::wrap_under_create_rule(this))
+            } else {
+                Err(anyhow!("could not create texture, code: {}", result))
             }
         }
     }
@@ -438,60 +434,56 @@ pub mod video_toolbox {
     impl_CFTypeDescription!(VTCompressionSession);
 
     impl VTCompressionSession {
-        pub fn new(
+        pub unsafe fn new(
             width: usize,
             height: usize,
             codec: CMVideoCodecType,
             callback: VTCompressionOutputCallback,
             callback_data: *const c_void,
         ) -> Result<Self> {
-            unsafe {
-                let mut this = ptr::null();
-                let result = VTCompressionSessionCreate(
-                    ptr::null(),
-                    width as i32,
-                    height as i32,
-                    codec,
-                    ptr::null(),
-                    ptr::null(),
-                    ptr::null(),
-                    callback,
-                    callback_data,
-                    &mut this,
-                );
-
-                if result == 0 {
-                    Ok(Self::wrap_under_create_rule(this))
-                } else {
-                    Err(anyhow!(
-                        "error creating compression session, code {}",
-                        result
-                    ))
-                }
+            let mut this = ptr::null();
+            let result = VTCompressionSessionCreate(
+                ptr::null(),
+                width as i32,
+                height as i32,
+                codec,
+                ptr::null(),
+                ptr::null(),
+                ptr::null(),
+                callback,
+                callback_data,
+                &mut this,
+            );
+
+            if result == 0 {
+                Ok(Self::wrap_under_create_rule(this))
+            } else {
+                Err(anyhow!(
+                    "error creating compression session, code {}",
+                    result
+                ))
             }
         }
 
-        pub fn encode_frame(
+        pub unsafe fn encode_frame(
             &self,
             buffer: CVImageBufferRef,
             presentation_timestamp: CMTime,
             duration: CMTime,
         ) -> Result<()> {
-            unsafe {
-                let result = VTCompressionSessionEncodeFrame(
-                    self.as_concrete_TypeRef(),
-                    buffer,
-                    presentation_timestamp,
-                    duration,
-                    ptr::null(),
-                    ptr::null(),
-                    ptr::null_mut(),
-                );
-                if result == 0 {
-                    Ok(())
-                } else {
-                    Err(anyhow!("error encoding frame, code {}", result))
-                }
+            let result = VTCompressionSessionEncodeFrame(
+                self.as_concrete_TypeRef(),
+                buffer,
+                presentation_timestamp,
+                duration,
+                ptr::null(),
+                ptr::null(),
+                ptr::null_mut(),
+            );
+            if result == 0 {
+                Ok(())
+            } else {
+                Err(anyhow!("error encoding frame, code {}", result))
             }
         }
     }

crates/refineable/derive_refineable/src/derive_refineable.rs 🔗

@@ -85,9 +85,7 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream {
     // Append to where_clause or create a new one if it doesn't exist
     let where_clause = match where_clause.cloned() {
         Some(mut where_clause) => {
-            where_clause
-                .predicates
-                .extend(type_param_bounds.into_iter());
+            where_clause.predicates.extend(type_param_bounds);
             where_clause.clone()
         }
         None => WhereClause {

crates/refineable/src/refineable.rs 🔗

@@ -27,7 +27,7 @@ pub struct CascadeSlot(usize);
 impl<S: Refineable + Default> Cascade<S> {
     pub fn reserve(&mut self) -> CascadeSlot {
         self.0.push(None);
-        return CascadeSlot(self.0.len() - 1);
+        CascadeSlot(self.0.len() - 1)
     }
 
     pub fn base(&mut self) -> &mut S::Refinement {
@@ -40,10 +40,8 @@ impl<S: Refineable + Default> Cascade<S> {
 
     pub fn merged(&self) -> S::Refinement {
         let mut merged = self.0[0].clone().unwrap();
-        for refinement in self.0.iter().skip(1) {
-            if let Some(refinement) = refinement {
-                merged.refine(refinement);
-            }
+        for refinement in self.0.iter().skip(1).flatten() {
+            merged.refine(refinement);
         }
         merged
     }

crates/rope2/src/rope2.rs 🔗

@@ -906,7 +906,7 @@ impl Chunk {
 
     fn clip_offset_utf16(&self, target: OffsetUtf16, bias: Bias) -> OffsetUtf16 {
         let mut code_units = self.0.encode_utf16();
-        let mut offset = code_units.by_ref().take(target.0 as usize).count();
+        let mut offset = code_units.by_ref().take(target.0).count();
         if char::decode_utf16(code_units).next().transpose().is_err() {
             match bias {
                 Bias::Left => offset -= 1,

crates/sqlez/src/migrations.rs 🔗

@@ -20,8 +20,8 @@ impl Connection {
                 self.sqlite3,
                 sql_str.as_c_str().as_ptr(),
                 None,
-                0 as *mut _,
-                0 as *mut _,
+                std::ptr::null_mut(),
+                std::ptr::null_mut(),
             );
         }
         self.last_error()
@@ -59,10 +59,10 @@ impl Connection {
                     if completed_migration != migration {
                         return Err(anyhow!(formatdoc! {"
                             Migration changed for {} at step {}
-                            
+
                             Stored migration:
                             {}
-                            
+
                             Proposed migration:
                             {}", domain, index, completed_migration, migration}));
                     } else {

crates/sqlez/src/statement.rs 🔗

@@ -232,13 +232,13 @@ impl<'a> Statement<'a> {
             .last_error()
             .with_context(|| format!("Failed to read text length at {index}"))?;
 
-        let slice = unsafe { slice::from_raw_parts(pointer as *const u8, len) };
+        let slice = unsafe { slice::from_raw_parts(pointer, len) };
         Ok(str::from_utf8(slice)?)
     }
 
     pub fn bind<T: Bind>(&self, value: &T, index: i32) -> Result<i32> {
         debug_assert!(index > 0);
-        Ok(value.bind(self, index)?)
+        value.bind(self, index)
     }
 
     pub fn column<T: Column>(&mut self) -> Result<T> {

crates/sqlez/src/thread_safe_connection.rs 🔗

@@ -10,14 +10,14 @@ use crate::{connection::Connection, domain::Migrator, util::UnboundedSyncSender}
 const MIGRATION_RETRIES: usize = 10;
 
 type QueuedWrite = Box<dyn 'static + Send + FnOnce()>;
-type WriteQueueConstructor =
-    Box<dyn 'static + Send + FnMut() -> Box<dyn 'static + Send + Sync + Fn(QueuedWrite)>>;
+type WriteQueue = Box<dyn 'static + Send + Sync + Fn(QueuedWrite)>;
+type WriteQueueConstructor = Box<dyn 'static + Send + FnMut() -> WriteQueue>;
 lazy_static! {
     /// List of queues of tasks by database uri. This lets us serialize writes to the database
     /// and have a single worker thread per db file. This means many thread safe connections
     /// (possibly with different migrations) could all be communicating with the same background
     /// thread.
-    static ref QUEUES: RwLock<HashMap<Arc<str>, Box<dyn 'static + Send + Sync + Fn(QueuedWrite)>>> =
+    static ref QUEUES: RwLock<HashMap<Arc<str>, WriteQueue>> =
         Default::default();
 }
 

crates/sum_tree/src/tree_map.rs 🔗

@@ -40,7 +40,7 @@ impl<K: Clone + Debug + Default + Ord, V: Clone + Debug> TreeMap<K, V> {
         self.0.is_empty()
     }
 
-    pub fn get<'a>(&self, key: &'a K) -> Option<&V> {
+    pub fn get(&self, key: &K) -> Option<&V> {
         let mut cursor = self.0.cursor::<MapKeyRef<'_, K>>();
         cursor.seek(&MapKeyRef(Some(key)), Bias::Left, &());
         if let Some(item) = cursor.item() {
@@ -98,9 +98,7 @@ impl<K: Clone + Debug + Default + Ord, V: Clone + Debug> TreeMap<K, V> {
         let from_key = MapKeyRef(Some(from));
         cursor.seek(&from_key, Bias::Left, &());
 
-        cursor
-            .into_iter()
-            .map(|map_entry| (&map_entry.key, &map_entry.value))
+        cursor.map(|map_entry| (&map_entry.key, &map_entry.value))
     }
 
     pub fn update<F, T>(&mut self, key: &K, f: F) -> Option<T>

crates/text2/src/locator.rs 🔗

@@ -20,11 +20,11 @@ impl Locator {
     }
 
     pub fn min_ref() -> &'static Self {
-        &*MIN
+        &MIN
     }
 
     pub fn max_ref() -> &'static Self {
-        &*MAX
+        &MAX
     }
 
     pub fn assign(&mut self, other: &Self) {

crates/text2/src/subscription.rs 🔗

@@ -18,7 +18,7 @@ impl Topic {
     }
 
     pub fn publish(&self, edits: impl Clone + IntoIterator<Item = Edit<usize>>) {
-        publish(&mut *self.0.lock(), edits);
+        publish(&mut self.0.lock(), edits);
     }
 
     pub fn publish_mut(&mut self, edits: impl Clone + IntoIterator<Item = Edit<usize>>) {

crates/text2/src/text2.rs 🔗

@@ -2652,7 +2652,7 @@ impl LineEnding {
             max_ix -= 1;
         }
 
-        if let Some(ix) = text[..max_ix].find(&['\n']) {
+        if let Some(ix) = text[..max_ix].find(['\n']) {
             if ix > 0 && text.as_bytes()[ix - 1] == b'\r' {
                 Self::Windows
             } else {

crates/util/src/paths.rs 🔗

@@ -67,8 +67,8 @@ impl<T: AsRef<Path>> PathExt for T {
     fn icon_suffix(&self) -> Option<&str> {
         let file_name = self.as_ref().file_name()?.to_str()?;
 
-        if file_name.starts_with(".") {
-            return file_name.strip_prefix(".");
+        if file_name.starts_with('.') {
+            return file_name.strip_prefix('.');
         }
 
         self.as_ref()
@@ -213,7 +213,7 @@ impl Eq for PathMatcher {}
 impl PathMatcher {
     pub fn new(maybe_glob: &str) -> Result<Self, globset::Error> {
         Ok(PathMatcher {
-            glob: Glob::new(&maybe_glob)?.compile_matcher(),
+            glob: Glob::new(maybe_glob)?.compile_matcher(),
             maybe_path: PathBuf::from(maybe_glob),
         })
     }