Remove #[allow(unused)] annotations in zed2 crates (#3798)

Piotr Osiewicz created

Release Notes:

- N/A

Change summary

crates/copilot_button2/src/copilot_button.rs   |  56 ++--
crates/editor2/src/blink_manager.rs            |   3 
crates/editor2/src/display_map.rs              |  11 
crates/editor2/src/display_map/block_map.rs    |   2 
crates/editor2/src/display_map/wrap_map.rs     |   8 
crates/editor2/src/editor.rs                   |  94 +++----
crates/editor2/src/editor_tests.rs             | 230 ++++++++++----------
crates/editor2/src/element.rs                  |  57 ++--
crates/editor2/src/hover_popover.rs            |  10 
crates/editor2/src/inlay_hint_cache.rs         | 117 +++++-----
crates/editor2/src/items.rs                    |  44 ++-
crates/editor2/src/link_go_to_definition.rs    |   2 
crates/editor2/src/mouse_context_menu.rs       |   8 
crates/editor2/src/movement.rs                 |   4 
crates/editor2/src/rust_analyzer_ext.rs        |   4 
crates/editor2/src/scroll.rs                   |   2 
crates/editor2/src/scroll/actions.rs           |   2 
crates/editor2/src/scroll/autoscroll.rs        |  12 
crates/editor2/src/test/editor_test_context.rs |   3 
crates/workspace2/src/persistence.rs           |   2 
crates/zed2/src/open_listener.rs               |  11 
crates/zed2/src/zed2.rs                        |  13 
22 files changed, 341 insertions(+), 354 deletions(-)

Detailed changes

crates/copilot_button2/src/copilot_button.rs πŸ”—

@@ -1,11 +1,10 @@
-#![allow(unused)]
 use anyhow::Result;
 use copilot::{Copilot, SignOut, Status};
 use editor::{scroll::autoscroll::Autoscroll, Editor};
 use fs::Fs;
 use gpui::{
-    div, Action, AnchorCorner, AppContext, AsyncAppContext, AsyncWindowContext, Div, Entity,
-    ParentElement, Render, Subscription, View, ViewContext, WeakView, WindowContext,
+    div, Action, AnchorCorner, AppContext, AsyncWindowContext, Div, Entity, ParentElement, Render,
+    Subscription, View, ViewContext, WeakView, WindowContext,
 };
 use language::{
     language_settings::{self, all_language_settings, AllLanguageSettings},
@@ -17,10 +16,7 @@ use util::{paths, ResultExt};
 use workspace::{
     create_and_open_local_file,
     item::ItemHandle,
-    ui::{
-        popover_menu, ButtonCommon, Clickable, ContextMenu, Icon, IconButton, IconSize,
-        PopoverMenu, Tooltip,
-    },
+    ui::{popover_menu, ButtonCommon, Clickable, ContextMenu, Icon, IconButton, IconSize, Tooltip},
     StatusItemView, Toast, Workspace,
 };
 use zed_actions::OpenBrowser;
@@ -71,27 +67,31 @@ impl Render for CopilotButton {
             return div().child(
                 IconButton::new("copilot-error", icon)
                     .icon_size(IconSize::Small)
-                    .on_click(cx.listener(move |this, _, cx| {
+                    .on_click(cx.listener(move |_, _, cx| {
                         if let Some(workspace) = cx.window_handle().downcast::<Workspace>() {
-                            workspace.update(cx, |workspace, cx| {
-                                workspace.show_toast(
-                                    Toast::new(
-                                        COPILOT_ERROR_TOAST_ID,
-                                        format!("Copilot can't be started: {}", e),
-                                    )
-                                    .on_click(
-                                        "Reinstall Copilot",
-                                        |cx| {
-                                            if let Some(copilot) = Copilot::global(cx) {
-                                                copilot
-                                                    .update(cx, |copilot, cx| copilot.reinstall(cx))
-                                                    .detach();
-                                            }
-                                        },
-                                    ),
-                                    cx,
-                                );
-                            });
+                            workspace
+                                .update(cx, |workspace, cx| {
+                                    workspace.show_toast(
+                                        Toast::new(
+                                            COPILOT_ERROR_TOAST_ID,
+                                            format!("Copilot can't be started: {}", e),
+                                        )
+                                        .on_click(
+                                            "Reinstall Copilot",
+                                            |cx| {
+                                                if let Some(copilot) = Copilot::global(cx) {
+                                                    copilot
+                                                        .update(cx, |copilot, cx| {
+                                                            copilot.reinstall(cx)
+                                                        })
+                                                        .detach();
+                                                }
+                                            },
+                                        ),
+                                        cx,
+                                    );
+                                })
+                                .ok();
                         }
                     }))
                     .tooltip(|cx| Tooltip::text("GitHub Copilot", cx)),
@@ -134,7 +134,7 @@ impl CopilotButton {
 
     pub fn build_copilot_start_menu(&mut self, cx: &mut ViewContext<Self>) -> View<ContextMenu> {
         let fs = self.fs.clone();
-        ContextMenu::build(cx, |menu, cx| {
+        ContextMenu::build(cx, |menu, _| {
             menu.entry("Sign In", None, initiate_sign_in).entry(
                 "Disable Copilot",
                 None,
@@ -67,7 +67,8 @@ impl BlinkManager {
                 cx.spawn(|this, mut cx| async move {
                     Timer::after(interval).await;
                     if let Some(this) = this.upgrade() {
-                        this.update(&mut cx, |this, cx| this.blink_cursors(epoch, cx));
+                        this.update(&mut cx, |this, cx| this.blink_cursors(epoch, cx))
+                            .ok();
                     }
                 })
                 .detach();

crates/editor2/src/display_map.rs πŸ”—

@@ -12,10 +12,7 @@ use crate::{
 pub use block_map::{BlockMap, BlockPoint};
 use collections::{BTreeMap, HashMap, HashSet};
 use fold_map::FoldMap;
-use gpui::{
-    Font, FontId, HighlightStyle, Hsla, LineLayout, Model, ModelContext, Pixels, ShapedLine,
-    TextRun, UnderlineStyle, WrappedLine,
-};
+use gpui::{Font, HighlightStyle, Hsla, LineLayout, Model, ModelContext, Pixels, UnderlineStyle};
 use inlay_map::InlayMap;
 use language::{
     language_settings::language_settings, OffsetUtf16, Point, Subscription as BufferSubscription,
@@ -24,7 +21,7 @@ use lsp::DiagnosticSeverity;
 use std::{any::TypeId, borrow::Cow, fmt::Debug, num::NonZeroU32, ops::Range, sync::Arc};
 use sum_tree::{Bias, TreeMap};
 use tab_map::TabMap;
-use theme::{StatusColors, SyntaxTheme, Theme};
+
 use wrap_map::WrapMap;
 
 pub use block_map::{
@@ -1018,7 +1015,7 @@ pub mod tests {
             .map(|i| i.parse().expect("invalid `OPERATIONS` variable"))
             .unwrap_or(10);
 
-        let test_platform = &cx.test_platform;
+        let _test_platform = &cx.test_platform;
         let mut tab_size = rng.gen_range(1..=4);
         let buffer_start_excerpt_header_height = rng.gen_range(1..=5);
         let excerpt_header_height = rng.gen_range(1..=5);
@@ -1280,7 +1277,7 @@ pub mod tests {
         let editor = cx.editor.clone();
         let window = cx.window.clone();
 
-        cx.update_window(window, |_, cx| {
+        _ = cx.update_window(window, |_, cx| {
             let text_layout_details =
                 editor.update(cx, |editor, cx| editor.text_layout_details(cx));
 

crates/editor2/src/display_map/block_map.rs πŸ”—

@@ -1185,7 +1185,7 @@ mod tests {
     fn test_blocks_on_wrapped_lines(cx: &mut gpui::TestAppContext) {
         cx.update(|cx| init_test(cx));
 
-        let font_id = cx.text_system().font_id(&font("Helvetica")).unwrap();
+        let _font_id = cx.text_system().font_id(&font("Helvetica")).unwrap();
 
         let text = "one two three\nfour five six\nseven eight";
 

crates/editor2/src/display_map/wrap_map.rs πŸ”—

@@ -197,7 +197,8 @@ impl WrapMap {
                             this.background_task = None;
                             this.flush_edits(cx);
                             cx.notify();
-                        });
+                        })
+                        .ok();
                     }));
                 }
             }
@@ -277,7 +278,8 @@ impl WrapMap {
                                 this.background_task = None;
                                 this.flush_edits(cx);
                                 cx.notify();
-                            });
+                            })
+                            .ok();
                         }));
                     }
                 }
@@ -1057,7 +1059,7 @@ mod tests {
         };
         let tab_size = NonZeroU32::new(rng.gen_range(1..=4)).unwrap();
         let font = font("Helvetica");
-        let font_id = text_system.font_id(&font).unwrap();
+        let _font_id = text_system.font_id(&font).unwrap();
         let font_size = px(14.0);
 
         log::info!("Tab size: {}", tab_size);

crates/editor2/src/editor.rs πŸ”—

@@ -1,4 +1,3 @@
-#![allow(unused)]
 mod blink_manager;
 pub mod display_map;
 mod editor_settings;
@@ -42,11 +41,10 @@ use git::diff_hunk_to_display;
 use gpui::{
     actions, div, impl_actions, point, prelude::*, px, relative, rems, size, uniform_list, Action,
     AnyElement, AppContext, AsyncWindowContext, BackgroundExecutor, Bounds, ClipboardItem, Context,
-    DispatchPhase, Div, ElementId, EventEmitter, FocusHandle, FocusableView, FontFeatures,
-    FontStyle, FontWeight, HighlightStyle, Hsla, InputHandler, InteractiveText, KeyContext, Model,
-    MouseButton, ParentElement, Pixels, Render, RenderOnce, SharedString, Styled, StyledText,
-    Subscription, Task, TextRun, TextStyle, UniformListScrollHandle, View, ViewContext,
-    VisualContext, WeakView, WhiteSpace, WindowContext,
+    DispatchPhase, ElementId, EventEmitter, FocusHandle, FocusableView, FontStyle, FontWeight,
+    HighlightStyle, Hsla, InputHandler, InteractiveText, KeyContext, Model, MouseButton,
+    ParentElement, Pixels, Render, SharedString, Styled, StyledText, Subscription, Task, TextStyle,
+    UniformListScrollHandle, View, ViewContext, VisualContext, WeakView, WhiteSpace, WindowContext,
 };
 use highlight_matching_bracket::refresh_matching_bracket_highlights;
 use hover_popover::{hide_hover, HoverState};
@@ -61,7 +59,7 @@ use language::{
     LanguageRegistry, LanguageServerName, OffsetRangeExt, Point, Selection, SelectionGoal,
     TransactionId,
 };
-use lazy_static::lazy_static;
+
 use link_go_to_definition::{GoToDefinitionLink, InlayHighlight, LinkGoToDefinitionState};
 use lsp::{DiagnosticSeverity, LanguageServerId};
 use mouse_context_menu::MouseContextMenu;
@@ -72,7 +70,7 @@ pub use multi_buffer::{
     ToPoint,
 };
 use ordered_float::OrderedFloat;
-use parking_lot::{Mutex, RwLock};
+use parking_lot::RwLock;
 use project::{FormatTrigger, Location, Project, ProjectPath, ProjectTransaction};
 use rand::prelude::*;
 use rpc::proto::{self, *};
@@ -99,19 +97,11 @@ use std::{
 pub use sum_tree::Bias;
 use sum_tree::TreeMap;
 use text::{OffsetUtf16, Rope};
-use theme::{
-    ActiveTheme, DiagnosticStyle, PlayerColor, SyntaxTheme, Theme, ThemeColors, ThemeSettings,
-};
-use ui::{
-    h_stack, v_stack, ButtonSize, ButtonStyle, HighlightedLabel, Icon, IconButton, Popover, Tooltip,
-};
+use theme::{ActiveTheme, DiagnosticStyle, PlayerColor, SyntaxTheme, ThemeColors, ThemeSettings};
+use ui::{h_stack, ButtonSize, ButtonStyle, Icon, IconButton, Popover, Tooltip};
 use ui::{prelude::*, IconSize};
 use util::{post_inc, RangeExt, ResultExt, TryFutureExt};
-use workspace::{
-    item::{Item, ItemEvent, ItemHandle},
-    searchable::SearchEvent,
-    ItemNavHistory, Pane, SplitDirection, ViewId, Workspace,
-};
+use workspace::{searchable::SearchEvent, ItemNavHistory, Pane, SplitDirection, ViewId, Workspace};
 
 const CURSOR_BLINK_INTERVAL: Duration = Duration::from_millis(500);
 const MAX_LINE_LEN: usize = 1024;
@@ -439,7 +429,7 @@ pub fn init(cx: &mut AppContext) {
     workspace::register_followable_item::<Editor>(cx);
     workspace::register_deserializable_item::<Editor>(cx);
     cx.observe_new_views(
-        |workspace: &mut Workspace, cx: &mut ViewContext<Workspace>| {
+        |workspace: &mut Workspace, _cx: &mut ViewContext<Workspace>| {
             workspace.register_action(Editor::new_file);
             workspace.register_action(Editor::new_file_in_direction);
         },
@@ -1216,7 +1206,7 @@ impl CompletionsMenu {
             cx.view().clone(),
             "completions",
             matches.len(),
-            move |editor, range, cx| {
+            move |_editor, range, cx| {
                 let start_ix = range.start;
                 let completions_guard = completions.read();
 
@@ -1271,7 +1261,7 @@ impl CompletionsMenu {
                             })
                             .on_mouse_down(
                                 MouseButton::Left,
-                                cx.listener(move |editor, event, cx| {
+                                cx.listener(move |editor, _event, cx| {
                                     cx.stop_propagation();
                                     editor
                                         .confirm_completion(
@@ -1414,7 +1404,7 @@ impl CodeActionsMenu {
     fn render(
         &self,
         mut cursor_position: DisplayPoint,
-        style: &EditorStyle,
+        _style: &EditorStyle,
         max_height: Pixels,
         cx: &mut ViewContext<Editor>,
     ) -> (DisplayPoint, AnyElement) {
@@ -1425,7 +1415,7 @@ impl CodeActionsMenu {
             cx.view().clone(),
             "code_actions_menu",
             self.actions.len(),
-            move |this, range, cx| {
+            move |_this, range, cx| {
                 actions[range.clone()]
                     .iter()
                     .enumerate()
@@ -3418,9 +3408,11 @@ impl Editor {
         Some(cx.spawn(|editor, mut cx| async move {
             if let Some(transaction) = on_type_formatting.await? {
                 if push_to_client_history {
-                    buffer.update(&mut cx, |buffer, _| {
-                        buffer.push_transaction(transaction, Instant::now());
-                    });
+                    buffer
+                        .update(&mut cx, |buffer, _| {
+                            buffer.push_transaction(transaction, Instant::now());
+                        })
+                        .ok();
                 }
                 editor.update(&mut cx, |editor, cx| {
                     editor.refresh_document_highlights(cx);
@@ -4226,7 +4218,7 @@ impl Editor {
 
     pub fn render_code_actions_indicator(
         &self,
-        style: &EditorStyle,
+        _style: &EditorStyle,
         is_active: bool,
         cx: &mut ViewContext<Self>,
     ) -> Option<IconButton> {
@@ -4236,7 +4228,7 @@ impl Editor {
                     .icon_size(IconSize::Small)
                     .icon_color(Color::Muted)
                     .selected(is_active)
-                    .on_click(cx.listener(|editor, e, cx| {
+                    .on_click(cx.listener(|editor, _e, cx| {
                         editor.toggle_code_actions(
                             &ToggleCodeActions {
                                 deployed_from_indicator: true,
@@ -4253,10 +4245,10 @@ impl Editor {
     pub fn render_fold_indicators(
         &self,
         fold_data: Vec<Option<(FoldStatus, u32, bool)>>,
-        style: &EditorStyle,
+        _style: &EditorStyle,
         gutter_hovered: bool,
-        line_height: Pixels,
-        gutter_margin: Pixels,
+        _line_height: Pixels,
+        _gutter_margin: Pixels,
         cx: &mut ViewContext<Self>,
     ) -> Vec<Option<IconButton>> {
         fold_data
@@ -4267,7 +4259,7 @@ impl Editor {
                     .map(|(fold_status, buffer_row, active)| {
                         (active || gutter_hovered || fold_status == FoldStatus::Folded).then(|| {
                             IconButton::new(ix as usize, ui::Icon::ChevronDown)
-                                .on_click(cx.listener(move |editor, e, cx| match fold_status {
+                                .on_click(cx.listener(move |editor, _e, cx| match fold_status {
                                     FoldStatus::Folded => {
                                         editor.unfold_at(&UnfoldAt { buffer_row }, cx);
                                     }
@@ -7379,11 +7371,13 @@ impl Editor {
                     .filter_map(|location| location.transpose())
                     .collect::<Result<_>>()
                     .context("location tasks")?;
-                workspace.update(&mut cx, |workspace, cx| {
-                    Self::open_locations_in_multibuffer(
-                        workspace, locations, replica_id, title, split, cx,
-                    )
-                });
+                workspace
+                    .update(&mut cx, |workspace, cx| {
+                        Self::open_locations_in_multibuffer(
+                            workspace, locations, replica_id, title, split, cx,
+                        )
+                    })
+                    .ok();
 
                 anyhow::Ok(())
             })
@@ -7832,15 +7826,17 @@ impl Editor {
                 transaction = format.log_err().fuse() => transaction,
             };
 
-            buffer.update(&mut cx, |buffer, cx| {
-                if let Some(transaction) = transaction {
-                    if !buffer.is_singleton() {
-                        buffer.push_transaction(&transaction.0, cx);
+            buffer
+                .update(&mut cx, |buffer, cx| {
+                    if let Some(transaction) = transaction {
+                        if !buffer.is_singleton() {
+                            buffer.push_transaction(&transaction.0, cx);
+                        }
                     }
-                }
 
-                cx.notify();
-            });
+                    cx.notify();
+                })
+                .ok();
 
             Ok(())
         })
@@ -9119,7 +9115,7 @@ impl Editor {
         let listener = Arc::new(listener);
 
         self.editor_actions.push(Box::new(move |cx| {
-            let view = cx.view().clone();
+            let _view = cx.view().clone();
             let cx = cx.window_context();
             let listener = listener.clone();
             cx.on_action(TypeId::of::<A>(), move |action, phase, cx| {
@@ -9289,7 +9285,7 @@ pub enum EditorEvent {
 impl EventEmitter<EditorEvent> for Editor {}
 
 impl FocusableView for Editor {
-    fn focus_handle(&self, cx: &AppContext) -> FocusHandle {
+    fn focus_handle(&self, _cx: &AppContext) -> FocusHandle {
         self.focus_handle.clone()
     }
 }
@@ -9329,7 +9325,7 @@ impl Render for Editor {
 
         let background = match self.mode {
             EditorMode::SingleLine => cx.theme().system().transparent,
-            EditorMode::AutoHeight { max_lines } => cx.theme().system().transparent,
+            EditorMode::AutoHeight { max_lines: _ } => cx.theme().system().transparent,
             EditorMode::Full => cx.theme().colors().editor_background,
         };
 
@@ -9719,7 +9715,7 @@ impl InvalidationRegion for SnippetState {
     }
 }
 
-pub fn diagnostic_block_renderer(diagnostic: Diagnostic, is_valid: bool) -> RenderBlock {
+pub fn diagnostic_block_renderer(diagnostic: Diagnostic, _is_valid: bool) -> RenderBlock {
     let (text_without_backticks, code_ranges) = highlight_diagnostic_message(&diagnostic);
 
     Arc::new(move |cx: &mut BlockContext| {

crates/editor2/src/editor_tests.rs πŸ”—

@@ -12,7 +12,7 @@ use futures::StreamExt;
 use gpui::{
     div,
     serde_json::{self, json},
-    Div, Flatten, TestAppContext, VisualTestContext, WindowBounds, WindowOptions,
+    TestAppContext, VisualTestContext, WindowBounds, WindowOptions,
 };
 use indoc::indoc;
 use language::{
@@ -77,7 +77,7 @@ fn test_edit_events(cx: &mut TestAppContext) {
     assert_eq!(mem::take(&mut *events.borrow_mut()), []);
 
     // Mutating editor 1 will emit an `Edited` event only for that editor.
-    editor1.update(cx, |editor, cx| editor.insert("X", cx));
+    _ = editor1.update(cx, |editor, cx| editor.insert("X", cx));
     assert_eq!(
         mem::take(&mut *events.borrow_mut()),
         [
@@ -88,7 +88,7 @@ fn test_edit_events(cx: &mut TestAppContext) {
     );
 
     // Mutating editor 2 will emit an `Edited` event only for that editor.
-    editor2.update(cx, |editor, cx| editor.delete(&Delete, cx));
+    _ = editor2.update(cx, |editor, cx| editor.delete(&Delete, cx));
     assert_eq!(
         mem::take(&mut *events.borrow_mut()),
         [
@@ -99,7 +99,7 @@ fn test_edit_events(cx: &mut TestAppContext) {
     );
 
     // Undoing on editor 1 will emit an `Edited` event only for that editor.
-    editor1.update(cx, |editor, cx| editor.undo(&Undo, cx));
+    _ = editor1.update(cx, |editor, cx| editor.undo(&Undo, cx));
     assert_eq!(
         mem::take(&mut *events.borrow_mut()),
         [
@@ -110,7 +110,7 @@ fn test_edit_events(cx: &mut TestAppContext) {
     );
 
     // Redoing on editor 1 will emit an `Edited` event only for that editor.
-    editor1.update(cx, |editor, cx| editor.redo(&Redo, cx));
+    _ = editor1.update(cx, |editor, cx| editor.redo(&Redo, cx));
     assert_eq!(
         mem::take(&mut *events.borrow_mut()),
         [
@@ -121,7 +121,7 @@ fn test_edit_events(cx: &mut TestAppContext) {
     );
 
     // Undoing on editor 2 will emit an `Edited` event only for that editor.
-    editor2.update(cx, |editor, cx| editor.undo(&Undo, cx));
+    _ = editor2.update(cx, |editor, cx| editor.undo(&Undo, cx));
     assert_eq!(
         mem::take(&mut *events.borrow_mut()),
         [
@@ -132,7 +132,7 @@ fn test_edit_events(cx: &mut TestAppContext) {
     );
 
     // Redoing on editor 2 will emit an `Edited` event only for that editor.
-    editor2.update(cx, |editor, cx| editor.redo(&Redo, cx));
+    _ = editor2.update(cx, |editor, cx| editor.redo(&Redo, cx));
     assert_eq!(
         mem::take(&mut *events.borrow_mut()),
         [
@@ -143,7 +143,7 @@ fn test_edit_events(cx: &mut TestAppContext) {
     );
 
     // No event is emitted when the mutation is a no-op.
-    editor2.update(cx, |editor, cx| {
+    _ = editor2.update(cx, |editor, cx| {
         editor.change_selections(None, cx, |s| s.select_ranges([0..0]));
 
         editor.backspace(&Backspace, cx);
@@ -161,7 +161,7 @@ fn test_undo_redo_with_selection_restoration(cx: &mut TestAppContext) {
     let buffer = cx.build_model(|cx| MultiBuffer::singleton(buffer, cx));
     let editor = cx.add_window(|cx| build_editor(buffer.clone(), cx));
 
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         editor.start_transaction_at(now, cx);
         editor.change_selections(None, cx, |s| s.select_ranges([2..4]));
 
@@ -181,7 +181,7 @@ fn test_undo_redo_with_selection_restoration(cx: &mut TestAppContext) {
         editor.change_selections(None, cx, |s| s.select_ranges([2..2]));
 
         // Simulate an edit in another editor
-        buffer.update(cx, |buffer, cx| {
+        _ = buffer.update(cx, |buffer, cx| {
             buffer.start_transaction_at(now, cx);
             buffer.edit([(0..1, "a")], None, cx);
             buffer.edit([(1..1, "b")], None, cx);
@@ -334,7 +334,7 @@ fn test_selection_with_mouse(cx: &mut TestAppContext) {
         build_editor(buffer, cx)
     });
 
-    editor.update(cx, |view, cx| {
+    _ = editor.update(cx, |view, cx| {
         view.begin_selection(DisplayPoint::new(2, 2), false, 1, cx);
     });
     assert_eq!(
@@ -344,7 +344,7 @@ fn test_selection_with_mouse(cx: &mut TestAppContext) {
         [DisplayPoint::new(2, 2)..DisplayPoint::new(2, 2)]
     );
 
-    editor.update(cx, |view, cx| {
+    _ = editor.update(cx, |view, cx| {
         view.update_selection(
             DisplayPoint::new(3, 3),
             0,
@@ -360,7 +360,7 @@ fn test_selection_with_mouse(cx: &mut TestAppContext) {
         [DisplayPoint::new(2, 2)..DisplayPoint::new(3, 3)]
     );
 
-    editor.update(cx, |view, cx| {
+    _ = editor.update(cx, |view, cx| {
         view.update_selection(
             DisplayPoint::new(1, 1),
             0,
@@ -376,7 +376,7 @@ fn test_selection_with_mouse(cx: &mut TestAppContext) {
         [DisplayPoint::new(2, 2)..DisplayPoint::new(1, 1)]
     );
 
-    editor.update(cx, |view, cx| {
+    _ = editor.update(cx, |view, cx| {
         view.end_selection(cx);
         view.update_selection(
             DisplayPoint::new(3, 3),
@@ -393,7 +393,7 @@ fn test_selection_with_mouse(cx: &mut TestAppContext) {
         [DisplayPoint::new(2, 2)..DisplayPoint::new(1, 1)]
     );
 
-    editor.update(cx, |view, cx| {
+    _ = editor.update(cx, |view, cx| {
         view.begin_selection(DisplayPoint::new(3, 3), true, 1, cx);
         view.update_selection(
             DisplayPoint::new(0, 0),
@@ -413,7 +413,7 @@ fn test_selection_with_mouse(cx: &mut TestAppContext) {
         ]
     );
 
-    editor.update(cx, |view, cx| {
+    _ = editor.update(cx, |view, cx| {
         view.end_selection(cx);
     });
 
@@ -434,7 +434,7 @@ fn test_canceling_pending_selection(cx: &mut TestAppContext) {
         build_editor(buffer, cx)
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.begin_selection(DisplayPoint::new(2, 2), false, 1, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -442,7 +442,7 @@ fn test_canceling_pending_selection(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.update_selection(
             DisplayPoint::new(3, 3),
             0,
@@ -455,7 +455,7 @@ fn test_canceling_pending_selection(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.cancel(&Cancel, cx);
         view.update_selection(
             DisplayPoint::new(1, 1),
@@ -490,7 +490,7 @@ fn test_clone(cx: &mut TestAppContext) {
         build_editor(buffer, cx)
     });
 
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         editor.change_selections(None, cx, |s| s.select_ranges(selection_ranges.clone()));
         editor.fold_ranges(
             [
@@ -557,7 +557,7 @@ async fn test_navigation_history(cx: &mut TestAppContext) {
         .update(cx, |workspace, _| workspace.active_pane().clone())
         .unwrap();
 
-    workspace.update(cx, |v, cx| {
+    _ = workspace.update(cx, |_v, cx| {
         cx.build_view(|cx| {
             let buffer = MultiBuffer::build_simple(&sample_text(300, 5, 'a'), cx);
             let mut editor = build_editor(buffer.clone(), cx);
@@ -671,7 +671,7 @@ fn test_cancel(cx: &mut TestAppContext) {
         build_editor(buffer, cx)
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.begin_selection(DisplayPoint::new(3, 4), false, 1, cx);
         view.update_selection(
             DisplayPoint::new(1, 1),
@@ -698,7 +698,7 @@ fn test_cancel(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.cancel(&Cancel, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -706,7 +706,7 @@ fn test_cancel(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.cancel(&Cancel, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -744,7 +744,7 @@ fn test_fold_action(cx: &mut TestAppContext) {
         build_editor(buffer.clone(), cx)
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([DisplayPoint::new(8, 0)..DisplayPoint::new(12, 0)]);
         });
@@ -812,7 +812,7 @@ fn test_move_cursor(cx: &mut TestAppContext) {
     let buffer = cx.update(|cx| MultiBuffer::build_simple(&sample_text(6, 6, 'a'), cx));
     let view = cx.add_window(|cx| build_editor(buffer.clone(), cx));
 
-    buffer.update(cx, |buffer, cx| {
+    _ = buffer.update(cx, |buffer, cx| {
         buffer.edit(
             vec![
                 (Point::new(1, 0)..Point::new(1, 0), "\t"),
@@ -822,7 +822,7 @@ fn test_move_cursor(cx: &mut TestAppContext) {
             cx,
         );
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         assert_eq!(
             view.selections.display_ranges(cx),
             &[DisplayPoint::new(0, 0)..DisplayPoint::new(0, 0)]
@@ -893,7 +893,7 @@ fn test_move_cursor_multibyte(cx: &mut TestAppContext) {
     assert_eq!('ⓐ'.len_utf8(), 3);
     assert_eq!('Ξ±'.len_utf8(), 2);
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.fold_ranges(
             vec![
                 Point::new(0, 6)..Point::new(0, 12),
@@ -1006,7 +1006,7 @@ fn test_move_cursor_different_line_lengths(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple("ⓐⓑⓒⓓⓔ\nabcd\nΞ±Ξ²Ξ³\nabcd\nⓐⓑⓒⓓⓔ\n", cx);
         build_editor(buffer.clone(), cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([empty_range(0, "ⓐⓑⓒⓓⓔ".len())]);
         });
@@ -1056,7 +1056,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple("abc\n  def", cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 1)..DisplayPoint::new(0, 1),
@@ -1065,7 +1065,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         });
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_to_beginning_of_line(&MoveToBeginningOfLine, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -1076,7 +1076,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_to_beginning_of_line(&MoveToBeginningOfLine, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -1087,7 +1087,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_to_beginning_of_line(&MoveToBeginningOfLine, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -1098,7 +1098,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_to_end_of_line(&MoveToEndOfLine, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -1110,7 +1110,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
     });
 
     // Moving to the end of line again is a no-op.
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_to_end_of_line(&MoveToEndOfLine, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -1121,7 +1121,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_left(&MoveLeft, cx);
         view.select_to_beginning_of_line(
             &SelectToBeginningOfLine {
@@ -1138,7 +1138,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_to_beginning_of_line(
             &SelectToBeginningOfLine {
                 stop_at_soft_wraps: true,
@@ -1154,7 +1154,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_to_beginning_of_line(
             &SelectToBeginningOfLine {
                 stop_at_soft_wraps: true,
@@ -1170,7 +1170,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_to_end_of_line(
             &SelectToEndOfLine {
                 stop_at_soft_wraps: true,
@@ -1186,7 +1186,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.delete_to_end_of_line(&DeleteToEndOfLine, cx);
         assert_eq!(view.display_text(cx), "ab\n  de");
         assert_eq!(
@@ -1198,7 +1198,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.delete_to_beginning_of_line(&DeleteToBeginningOfLine, cx);
         assert_eq!(view.display_text(cx), "\n");
         assert_eq!(
@@ -1219,7 +1219,7 @@ fn test_prev_next_word_boundary(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple("use std::str::{foo, bar}\n\n  {baz.qux()}", cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 11)..DisplayPoint::new(0, 11),
@@ -1273,7 +1273,7 @@ fn test_prev_next_word_bounds_with_soft_wrap(cx: &mut TestAppContext) {
         build_editor(buffer, cx)
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.set_wrap_width(Some(140.0.into()), cx);
         assert_eq!(
             view.display_text(cx),
@@ -1714,7 +1714,7 @@ fn test_delete_to_word_boundary(cx: &mut TestAppContext) {
         build_editor(buffer.clone(), cx)
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 // an empty selection - the preceding word fragment is deleted
@@ -1727,7 +1727,7 @@ fn test_delete_to_word_boundary(cx: &mut TestAppContext) {
         assert_eq!(view.buffer.read(cx).read(cx).text(), "e two te four");
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 // an empty selection - the following word fragment is deleted
@@ -1750,7 +1750,7 @@ fn test_newline(cx: &mut TestAppContext) {
         build_editor(buffer.clone(), cx)
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 2)..DisplayPoint::new(0, 2),
@@ -1793,7 +1793,7 @@ fn test_newline_with_old_selections(cx: &mut TestAppContext) {
         editor
     });
 
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         // Edit the buffer directly, deleting ranges surrounding the editor's selections
         editor.buffer.update(cx, |buffer, cx| {
             buffer.edit(
@@ -2003,7 +2003,7 @@ fn test_insert_with_old_selections(cx: &mut TestAppContext) {
         editor
     });
 
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         // Edit the buffer directly, deleting ranges surrounding the editor's selections
         editor.buffer.update(cx, |buffer, cx| {
             buffer.edit([(2..5, ""), (10..13, ""), (18..21, "")], None, cx);
@@ -2514,7 +2514,7 @@ fn test_delete_line(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 1)..DisplayPoint::new(0, 1),
@@ -2537,7 +2537,7 @@ fn test_delete_line(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([DisplayPoint::new(2, 0)..DisplayPoint::new(0, 1)])
         });
@@ -2946,7 +2946,7 @@ fn test_duplicate_line(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 0)..DisplayPoint::new(0, 1),
@@ -2972,7 +2972,7 @@ fn test_duplicate_line(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 1)..DisplayPoint::new(1, 1),
@@ -2999,7 +2999,7 @@ fn test_move_line_up_down(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple(&sample_text(10, 5, 'a'), cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.fold_ranges(
             vec![
                 Point::new(0, 2)..Point::new(1, 2),
@@ -3038,7 +3038,7 @@ fn test_move_line_up_down(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_line_down(&MoveLineDown, cx);
         assert_eq!(
             view.display_text(cx),
@@ -3055,7 +3055,7 @@ fn test_move_line_up_down(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_line_down(&MoveLineDown, cx);
         assert_eq!(
             view.display_text(cx),
@@ -3072,7 +3072,7 @@ fn test_move_line_up_down(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.move_line_up(&MoveLineUp, cx);
         assert_eq!(
             view.display_text(cx),
@@ -3098,7 +3098,7 @@ fn test_move_line_up_down_with_blocks(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple(&sample_text(10, 5, 'a'), cx);
         build_editor(buffer, cx)
     });
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         let snapshot = editor.buffer.read(cx).snapshot(cx);
         editor.insert_blocks(
             [BlockProperties {
@@ -3420,7 +3420,7 @@ fn test_select_all(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple("abc\nde\nfgh", cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_all(&SelectAll, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -3437,7 +3437,7 @@ fn test_select_line(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple(&sample_text(6, 5, 'a'), cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 0)..DisplayPoint::new(0, 1),
@@ -3456,7 +3456,7 @@ fn test_select_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_line(&SelectLine, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -3467,7 +3467,7 @@ fn test_select_line(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_line(&SelectLine, cx);
         assert_eq!(
             view.selections.display_ranges(cx),
@@ -3484,7 +3484,7 @@ fn test_split_selection_into_lines(cx: &mut TestAppContext) {
         let buffer = MultiBuffer::build_simple(&sample_text(9, 5, 'a'), cx);
         build_editor(buffer, cx)
     });
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.fold_ranges(
             vec![
                 Point::new(0, 2)..Point::new(1, 2),
@@ -3505,7 +3505,7 @@ fn test_split_selection_into_lines(cx: &mut TestAppContext) {
         assert_eq!(view.display_text(cx), "aaβ‹―bbb\ncccβ‹―eeee\nfffff\nggggg\nβ‹―i");
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.split_selection_into_lines(&SplitSelectionIntoLines, cx);
         assert_eq!(
             view.display_text(cx),
@@ -3522,7 +3522,7 @@ fn test_split_selection_into_lines(cx: &mut TestAppContext) {
         );
     });
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([DisplayPoint::new(5, 0)..DisplayPoint::new(0, 1)])
         });
@@ -3916,7 +3916,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
     view.condition::<crate::EditorEvent>(&cx, |view, cx| !view.buffer.read(cx).is_parsing(cx))
         .await;
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 25)..DisplayPoint::new(0, 25),
@@ -3935,7 +3935,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
         ]
     );
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_larger_syntax_node(&SelectLargerSyntaxNode, cx);
     });
     assert_eq!(
@@ -3946,7 +3946,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
         ]
     );
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_larger_syntax_node(&SelectLargerSyntaxNode, cx);
     });
     assert_eq!(
@@ -3955,7 +3955,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
     );
 
     // Trying to expand the selected syntax node one more time has no effect.
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_larger_syntax_node(&SelectLargerSyntaxNode, cx);
     });
     assert_eq!(
@@ -3963,7 +3963,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
         &[DisplayPoint::new(5, 0)..DisplayPoint::new(0, 0)]
     );
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_smaller_syntax_node(&SelectSmallerSyntaxNode, cx);
     });
     assert_eq!(
@@ -3974,7 +3974,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
         ]
     );
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_smaller_syntax_node(&SelectSmallerSyntaxNode, cx);
     });
     assert_eq!(
@@ -3986,7 +3986,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
         ]
     );
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_smaller_syntax_node(&SelectSmallerSyntaxNode, cx);
     });
     assert_eq!(
@@ -3999,7 +3999,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
     );
 
     // Trying to shrink the selected syntax node one more time has no effect.
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.select_smaller_syntax_node(&SelectSmallerSyntaxNode, cx);
     });
     assert_eq!(
@@ -4013,7 +4013,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) {
 
     // Ensure that we keep expanding the selection if the larger selection starts or ends within
     // a fold.
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.fold_ranges(
             vec![
                 Point::new(0, 21)..Point::new(0, 24),
@@ -4082,7 +4082,7 @@ async fn test_autoindent_selections(cx: &mut gpui::TestAppContext) {
         .condition::<crate::EditorEvent>(cx, |editor, cx| !editor.buffer.read(cx).is_parsing(cx))
         .await;
 
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         editor.change_selections(None, cx, |s| s.select_ranges([5..5, 8..8, 9..9]));
         editor.newline(&Newline, cx);
         assert_eq!(editor.text(cx), "fn a(\n    \n) {\n    \n}\n");
@@ -4646,7 +4646,7 @@ async fn test_surround_with_pair(cx: &mut gpui::TestAppContext) {
     view.condition::<crate::EditorEvent>(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx))
         .await;
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 0)..DisplayPoint::new(0, 1),
@@ -4797,7 +4797,7 @@ async fn test_delete_autoclose_pair(cx: &mut gpui::TestAppContext) {
         .condition::<crate::EditorEvent>(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx))
         .await;
 
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         editor.change_selections(None, cx, |s| {
             s.select_ranges([
                 Point::new(0, 1)..Point::new(0, 1),
@@ -4883,9 +4883,9 @@ async fn test_snippets(cx: &mut gpui::TestAppContext) {
     );
 
     let buffer = cx.update(|cx| MultiBuffer::build_simple(&text, cx));
-    let (editor, mut cx) = cx.add_window_view(|cx| build_editor(buffer, cx));
+    let (editor, cx) = cx.add_window_view(|cx| build_editor(buffer, cx));
 
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         let snippet = Snippet::parse("f(${1:one}, ${2:two}, ${1:three})$0").unwrap();
 
         editor
@@ -5003,7 +5003,7 @@ async fn test_document_format_during_save(cx: &mut gpui::TestAppContext) {
     fs.insert_file("/file.rs", Default::default()).await;
 
     let project = Project::test(fs, ["/file.rs".as_ref()], cx).await;
-    project.update(cx, |project, _| project.languages().add(Arc::new(language)));
+    _ = project.update(cx, |project, _| project.languages().add(Arc::new(language)));
     let buffer = project
         .update(cx, |project, cx| project.open_local_buffer("/file.rs", cx))
         .await
@@ -5014,7 +5014,7 @@ async fn test_document_format_during_save(cx: &mut gpui::TestAppContext) {
 
     let buffer = cx.build_model(|cx| MultiBuffer::singleton(buffer, cx));
     let (editor, cx) = cx.add_window_view(|cx| build_editor(buffer, cx));
-    editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
+    _ = editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
     assert!(cx.read(|cx| editor.is_dirty(cx)));
 
     let save = editor
@@ -5035,7 +5035,7 @@ async fn test_document_format_during_save(cx: &mut gpui::TestAppContext) {
         .next()
         .await;
     cx.executor().start_waiting();
-    let x = save.await;
+    let _x = save.await;
 
     assert_eq!(
         editor.update(cx, |editor, cx| editor.text(cx)),
@@ -5043,7 +5043,7 @@ async fn test_document_format_during_save(cx: &mut gpui::TestAppContext) {
     );
     assert!(!cx.read(|cx| editor.is_dirty(cx)));
 
-    editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
+    _ = editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
     assert!(cx.read(|cx| editor.is_dirty(cx)));
 
     // Ensure we can still save even if formatting hangs.
@@ -5122,7 +5122,7 @@ async fn test_range_format_during_save(cx: &mut gpui::TestAppContext) {
     fs.insert_file("/file.rs", Default::default()).await;
 
     let project = Project::test(fs, ["/file.rs".as_ref()], cx).await;
-    project.update(cx, |project, _| project.languages().add(Arc::new(language)));
+    _ = project.update(cx, |project, _| project.languages().add(Arc::new(language)));
     let buffer = project
         .update(cx, |project, cx| project.open_local_buffer("/file.rs", cx))
         .await
@@ -5133,7 +5133,7 @@ async fn test_range_format_during_save(cx: &mut gpui::TestAppContext) {
 
     let buffer = cx.build_model(|cx| MultiBuffer::singleton(buffer, cx));
     let (editor, cx) = cx.add_window_view(|cx| build_editor(buffer, cx));
-    editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
+    _ = editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
     assert!(cx.read(|cx| editor.is_dirty(cx)));
 
     let save = editor
@@ -5161,7 +5161,7 @@ async fn test_range_format_during_save(cx: &mut gpui::TestAppContext) {
     );
     assert!(!cx.read(|cx| editor.is_dirty(cx)));
 
-    editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
+    _ = editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
     assert!(cx.read(|cx| editor.is_dirty(cx)));
 
     // Ensure we can still save even if formatting hangs.
@@ -5247,7 +5247,7 @@ async fn test_document_format_manual_trigger(cx: &mut gpui::TestAppContext) {
     fs.insert_file("/file.rs", Default::default()).await;
 
     let project = Project::test(fs, ["/file.rs".as_ref()], cx).await;
-    project.update(cx, |project, _| {
+    _ = project.update(cx, |project, _| {
         project.languages().add(Arc::new(language));
     });
     let buffer = project
@@ -5260,7 +5260,7 @@ async fn test_document_format_manual_trigger(cx: &mut gpui::TestAppContext) {
 
     let buffer = cx.build_model(|cx| MultiBuffer::singleton(buffer, cx));
     let (editor, cx) = cx.add_window_view(|cx| build_editor(buffer, cx));
-    editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
+    _ = editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
 
     let format = editor
         .update(cx, |editor, cx| {
@@ -5288,7 +5288,7 @@ async fn test_document_format_manual_trigger(cx: &mut gpui::TestAppContext) {
         "one, two\nthree\n"
     );
 
-    editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
+    _ = editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx));
     // Ensure we don't lock if formatting hangs.
     fake_server.handle_request::<lsp::request::Formatting, _, _>(move |params, _| async move {
         assert_eq!(
@@ -5627,7 +5627,7 @@ async fn test_completion(cx: &mut gpui::TestAppContext) {
     handle_resolve_completion_request(&mut cx, None).await;
     apply_additional_edits.await.unwrap();
 
-    cx.update(|cx| {
+    _ = cx.update(|cx| {
         cx.update_global::<SettingsStore, _>(|settings, cx| {
             settings.update_user_settings::<EditorSettings>(cx, |settings| {
                 settings.show_completions_on_input = Some(false);
@@ -6046,7 +6046,7 @@ fn test_editing_disjoint_excerpts(cx: &mut TestAppContext) {
     });
 
     let (view, cx) = cx.add_window_view(|cx| build_editor(multibuffer, cx));
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         assert_eq!(view.text(cx), "aaaa\nbbbb");
         view.change_selections(None, cx, |s| {
             s.select_ranges([
@@ -6116,7 +6116,7 @@ fn test_editing_overlapping_excerpts(cx: &mut TestAppContext) {
     });
 
     let (view, cx) = cx.add_window_view(|cx| build_editor(multibuffer, cx));
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         let (expected_text, selection_ranges) = marked_text_ranges(
             indoc! {"
                 aaaa
@@ -6210,7 +6210,7 @@ fn test_refresh_selections(cx: &mut TestAppContext) {
     });
 
     // Refreshing selections is a no-op when excerpts haven't changed.
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         editor.change_selections(None, cx, |s| s.refresh());
         assert_eq!(
             editor.selections.ranges(cx),
@@ -6221,10 +6221,10 @@ fn test_refresh_selections(cx: &mut TestAppContext) {
         );
     });
 
-    multibuffer.update(cx, |multibuffer, cx| {
+    _ = multibuffer.update(cx, |multibuffer, cx| {
         multibuffer.remove_excerpts([excerpt1_id.unwrap()], cx);
     });
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         // Removing an excerpt causes the first selection to become degenerate.
         assert_eq!(
             editor.selections.ranges(cx),
@@ -6289,10 +6289,10 @@ fn test_refresh_selections_while_selecting_with_mouse(cx: &mut TestAppContext) {
         editor
     });
 
-    multibuffer.update(cx, |multibuffer, cx| {
+    _ = multibuffer.update(cx, |multibuffer, cx| {
         multibuffer.remove_excerpts([excerpt1_id.unwrap()], cx);
     });
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         assert_eq!(
             editor.selections.ranges(cx),
             [Point::new(0, 0)..Point::new(0, 0)]
@@ -6356,7 +6356,7 @@ async fn test_extra_newline_insertion(cx: &mut gpui::TestAppContext) {
     view.condition::<crate::EditorEvent>(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx))
         .await;
 
-    view.update(cx, |view, cx| {
+    _ = view.update(cx, |view, cx| {
         view.change_selections(None, cx, |s| {
             s.select_display_ranges([
                 DisplayPoint::new(0, 2)..DisplayPoint::new(0, 3),
@@ -6393,7 +6393,7 @@ fn test_highlighted_ranges(cx: &mut TestAppContext) {
         build_editor(buffer.clone(), cx)
     });
 
-    editor.update(cx, |editor, cx| {
+    _ = editor.update(cx, |editor, cx| {
         struct Type1;
         struct Type2;
 
@@ -6498,7 +6498,7 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
     let is_still_following = Rc::new(RefCell::new(true));
     let follower_edit_event_count = Rc::new(RefCell::new(0));
     let pending_update = Rc::new(RefCell::new(None));
-    follower.update(cx, {
+    _ = follower.update(cx, {
         let update = pending_update.clone();
         let is_still_following = is_still_following.clone();
         let follower_edit_event_count = follower_edit_event_count.clone();
@@ -6515,7 +6515,7 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
 
             cx.subscribe(
                 &follower.root_view(cx).unwrap(),
-                move |_, _, event: &EditorEvent, cx| {
+                move |_, _, event: &EditorEvent, _cx| {
                     if matches!(Editor::to_follow_event(event), Some(FollowEvent::Unfollow)) {
                         *is_still_following.borrow_mut() = false;
                     }
@@ -6530,7 +6530,7 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
     });
 
     // Update the selections only
-    leader.update(cx, |leader, cx| {
+    _ = leader.update(cx, |leader, cx| {
         leader.change_selections(None, cx, |s| s.select_ranges([1..1]));
     });
     follower
@@ -6540,14 +6540,14 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
         .unwrap()
         .await
         .unwrap();
-    follower.update(cx, |follower, cx| {
+    _ = follower.update(cx, |follower, cx| {
         assert_eq!(follower.selections.ranges(cx), vec![1..1]);
     });
     assert_eq!(*is_still_following.borrow(), true);
     assert_eq!(*follower_edit_event_count.borrow(), 0);
 
     // Update the scroll position only
-    leader.update(cx, |leader, cx| {
+    _ = leader.update(cx, |leader, cx| {
         leader.set_scroll_position(gpui::Point::new(1.5, 3.5), cx);
     });
     follower
@@ -6568,7 +6568,7 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
 
     // Update the selections and scroll position. The follower's scroll position is updated
     // via autoscroll, not via the leader's exact scroll position.
-    leader.update(cx, |leader, cx| {
+    _ = leader.update(cx, |leader, cx| {
         leader.change_selections(None, cx, |s| s.select_ranges([0..0]));
         leader.request_autoscroll(Autoscroll::newest(), cx);
         leader.set_scroll_position(gpui::Point::new(1.5, 3.5), cx);
@@ -6580,14 +6580,14 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
         .unwrap()
         .await
         .unwrap();
-    follower.update(cx, |follower, cx| {
+    _ = follower.update(cx, |follower, cx| {
         assert_eq!(follower.scroll_position(cx), gpui::Point::new(1.5, 0.0));
         assert_eq!(follower.selections.ranges(cx), vec![0..0]);
     });
     assert_eq!(*is_still_following.borrow(), true);
 
     // Creating a pending selection that precedes another selection
-    leader.update(cx, |leader, cx| {
+    _ = leader.update(cx, |leader, cx| {
         leader.change_selections(None, cx, |s| s.select_ranges([1..1]));
         leader.begin_selection(DisplayPoint::new(0, 0), true, 1, cx);
     });
@@ -6598,13 +6598,13 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
         .unwrap()
         .await
         .unwrap();
-    follower.update(cx, |follower, cx| {
+    _ = follower.update(cx, |follower, cx| {
         assert_eq!(follower.selections.ranges(cx), vec![0..0, 1..1]);
     });
     assert_eq!(*is_still_following.borrow(), true);
 
     // Extend the pending selection so that it surrounds another selection
-    leader.update(cx, |leader, cx| {
+    _ = leader.update(cx, |leader, cx| {
         leader.extend_selection(DisplayPoint::new(0, 2), 1, cx);
     });
     follower
@@ -6614,12 +6614,12 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
         .unwrap()
         .await
         .unwrap();
-    follower.update(cx, |follower, cx| {
+    _ = follower.update(cx, |follower, cx| {
         assert_eq!(follower.selections.ranges(cx), vec![0..2]);
     });
 
     // Scrolling locally breaks the follow
-    follower.update(cx, |follower, cx| {
+    _ = follower.update(cx, |follower, cx| {
         let top_anchor = follower.buffer().read(cx).read(cx).anchor_after(0);
         follower.set_scroll_anchor(
             ScrollAnchor {
@@ -6695,7 +6695,7 @@ async fn test_following_with_multiple_excerpts(cx: &mut gpui::TestAppContext) {
     });
 
     // Insert some excerpts.
-    leader.update(cx, |leader, cx| {
+    _ = leader.update(cx, |leader, cx| {
         leader.buffer.update(cx, |multibuffer, cx| {
             let excerpt_ids = multibuffer.push_excerpts(
                 buffer_1.clone(),
@@ -6771,7 +6771,7 @@ async fn test_following_with_multiple_excerpts(cx: &mut gpui::TestAppContext) {
     );
 
     // Remove some excerpts.
-    leader.update(cx, |leader, cx| {
+    _ = leader.update(cx, |leader, cx| {
         leader.buffer.update(cx, |multibuffer, cx| {
             let excerpt_ids = multibuffer.excerpt_ids();
             multibuffer.remove_excerpts([excerpt_ids[1], excerpt_ids[2]], cx);
@@ -6814,8 +6814,8 @@ async fn go_to_prev_overlapping_diagnostic(
         }
     "});
 
-    cx.update(|cx| {
-        project.update(cx, |project, cx| {
+    _ = cx.update(|cx| {
+        _ = project.update(cx, |project, cx| {
             project
                 .update_diagnostics(
                     LanguageServerId(0),
@@ -7113,7 +7113,7 @@ async fn test_copilot(executor: BackgroundExecutor, cx: &mut gpui::TestAppContex
     init_test(cx, |_| {});
 
     let (copilot, copilot_lsp) = Copilot::fake(cx);
-    cx.update(|cx| cx.set_global(copilot));
+    _ = cx.update(|cx| cx.set_global(copilot));
     let mut cx = EditorLspTestContext::new_rust(
         lsp::ServerCapabilities {
             completion_provider: Some(lsp::CompletionOptions {

crates/editor2/src/element.rs πŸ”—

@@ -16,24 +16,23 @@ use crate::{
     mouse_context_menu,
     scroll::scroll_amount::ScrollAmount,
     CursorShape, DisplayPoint, Editor, EditorMode, EditorSettings, EditorSnapshot, EditorStyle,
-    HalfPageDown, HalfPageUp, LineDown, LineUp, MoveDown, OpenExcerpts, PageDown, PageUp, Point,
-    SelectPhase, Selection, SoftWrap, ToPoint, MAX_LINE_LEN,
+    HalfPageDown, HalfPageUp, LineDown, LineUp, OpenExcerpts, PageDown, PageUp, Point, SelectPhase,
+    Selection, SoftWrap, ToPoint, MAX_LINE_LEN,
 };
 use anyhow::Result;
 use collections::{BTreeMap, HashMap};
 use git::diff::DiffHunkStatus;
 use gpui::{
     div, fill, outline, overlay, point, px, quad, relative, size, transparent_black, Action,
-    AnchorCorner, AnyElement, AsyncWindowContext, AvailableSpace, BorrowWindow, Bounds,
-    ContentMask, Corners, CursorStyle, DispatchPhase, Edges, Element, ElementId,
-    ElementInputHandler, Entity, EntityId, Hsla, InteractiveBounds, InteractiveElement,
-    IntoElement, LineLayout, ModifiersChangedEvent, MouseButton, MouseDownEvent, MouseMoveEvent,
-    MouseUpEvent, ParentElement, Pixels, RenderOnce, ScrollWheelEvent, ShapedLine, SharedString,
-    Size, StackingOrder, StatefulInteractiveElement, Style, Styled, TextRun, TextStyle, View,
-    ViewContext, WeakView, WindowContext, WrappedLine,
+    AnchorCorner, AnyElement, AvailableSpace, BorrowWindow, Bounds, ContentMask, Corners,
+    CursorStyle, DispatchPhase, Edges, Element, ElementInputHandler, Hsla, InteractiveBounds,
+    InteractiveElement, IntoElement, ModifiersChangedEvent, MouseButton, MouseDownEvent,
+    MouseMoveEvent, MouseUpEvent, ParentElement, Pixels, ScrollWheelEvent, ShapedLine,
+    SharedString, Size, StackingOrder, StatefulInteractiveElement, Style, Styled, TextRun,
+    TextStyle, View, ViewContext, WindowContext,
 };
 use itertools::Itertools;
-use language::{language_settings::ShowWhitespaceSetting, Language};
+use language::language_settings::ShowWhitespaceSetting;
 use multi_buffer::Anchor;
 use project::{
     project_settings::{GitGutterSetting, ProjectSettings},
@@ -52,15 +51,11 @@ use std::{
 };
 use sum_tree::Bias;
 use theme::{ActiveTheme, PlayerColor};
-use ui::{
-    h_stack, ButtonLike, ButtonStyle, Disclosure, IconButton, IconElement, IconSize, Label, Tooltip,
-};
-use ui::{prelude::*, Icon};
+use ui::prelude::*;
+use ui::{h_stack, ButtonLike, ButtonStyle, IconButton, Label, Tooltip};
 use util::ResultExt;
 use workspace::item::Item;
 
-enum FoldMarkers {}
-
 struct SelectionLayout {
     head: DisplayPoint,
     cursor_shape: CursorShape,
@@ -732,7 +727,7 @@ impl EditorElement {
                         ix as f32 * line_height - (scroll_top % line_height),
                     );
 
-                line.paint(line_origin, line_height, cx);
+                line.paint(line_origin, line_height, cx).log_err();
             }
         }
 
@@ -2687,11 +2682,13 @@ impl LineWithInvisibles {
         let line_height = layout.position_map.line_height;
         let line_y = line_height * row as f32 - layout.position_map.scroll_position.y;
 
-        self.line.paint(
-            content_origin + gpui::point(-layout.position_map.scroll_position.x, line_y),
-            line_height,
-            cx,
-        );
+        self.line
+            .paint(
+                content_origin + gpui::point(-layout.position_map.scroll_position.x, line_y),
+                line_height,
+                cx,
+            )
+            .log_err();
 
         self.draw_invisibles(
             &selection_ranges,
@@ -2746,7 +2743,7 @@ impl LineWithInvisibles {
                     continue;
                 }
             }
-            invisible_symbol.paint(origin, line_height, cx);
+            invisible_symbol.paint(origin, line_height, cx).log_err();
         }
     }
 }
@@ -3090,7 +3087,9 @@ impl Cursor {
         cx.paint_quad(cursor);
 
         if let Some(block_text) = &self.block_text {
-            block_text.paint(self.origin + origin, self.line_height, cx);
+            block_text
+                .paint(self.origin + origin, self.line_height, cx)
+                .log_err();
         }
     }
 
@@ -3251,7 +3250,7 @@ mod tests {
         editor_tests::{init_test, update_test_language_settings},
         Editor, MultiBuffer,
     };
-    use gpui::{EmptyView, TestAppContext};
+    use gpui::TestAppContext;
     use language::language_settings;
     use log::info;
     use std::{num::NonZeroU32, sync::Arc};
@@ -3432,7 +3431,7 @@ mod tests {
         let editor = window.root(cx).unwrap();
         let style = cx.update(|cx| editor.read(cx).style().unwrap().clone());
         let mut element = EditorElement::new(&editor, style);
-        let state = window.update(cx, |editor, cx| {
+        let _state = window.update(cx, |editor, cx| {
             editor.cursor_shape = CursorShape::Block;
             editor.change_selections(None, cx, |s| {
                 s.select_display_ranges([
@@ -3504,7 +3503,7 @@ mod tests {
             .unwrap();
 
         let mut element = EditorElement::new(&editor, style);
-        let mut state = cx
+        let state = cx
             .update_window(window.into(), |_, cx| {
                 element.compute_layout(
                     Bounds {
@@ -3768,17 +3767,15 @@ fn compute_auto_height_layout(
         .width;
 
     let mut snapshot = editor.snapshot(cx);
-    let gutter_padding;
     let gutter_width;
     let gutter_margin;
     if snapshot.show_gutter {
         let descent = cx.text_system().descent(font_id, font_size);
         let gutter_padding_factor = 3.5;
-        gutter_padding = (em_width * gutter_padding_factor).round();
+        let gutter_padding = (em_width * gutter_padding_factor).round();
         gutter_width = max_line_number_width + gutter_padding * 2.0;
         gutter_margin = -descent;
     } else {
-        gutter_padding = Pixels::ZERO;
         gutter_width = Pixels::ZERO;
         gutter_margin = Pixels::ZERO;
     };

crates/editor2/src/hover_popover.rs πŸ”—

@@ -6,12 +6,12 @@ use crate::{
 };
 use futures::FutureExt;
 use gpui::{
-    actions, div, px, AnyElement, AppContext, CursorStyle, InteractiveElement, IntoElement, Model,
-    MouseButton, ParentElement, Pixels, SharedString, Size, StatefulInteractiveElement, Styled,
-    Task, ViewContext, WeakView,
+    actions, div, px, AnyElement, CursorStyle, InteractiveElement, IntoElement, Model, MouseButton,
+    ParentElement, Pixels, SharedString, Size, StatefulInteractiveElement, Styled, Task,
+    ViewContext, WeakView,
 };
 use language::{markdown, Bias, DiagnosticEntry, Language, LanguageRegistry, ParsedMarkdown};
-use lsp::DiagnosticSeverity;
+
 use project::{HoverBlock, HoverBlockKind, InlayHintLabelPart, Project};
 use settings::Settings;
 use std::{ops::Range, sync::Arc, time::Duration};
@@ -869,7 +869,7 @@ mod tests {
 
         let editor = cx.add_window(|cx| Editor::single_line(cx));
         editor
-            .update(cx, |editor, cx| {
+            .update(cx, |editor, _cx| {
                 let style = editor.style.clone().unwrap();
 
                 struct Row {

crates/editor2/src/inlay_hint_cache.rs πŸ”—

@@ -1203,7 +1203,7 @@ pub mod tests {
         ExcerptRange,
     };
     use futures::StreamExt;
-    use gpui::{Context, TestAppContext, View, WindowHandle};
+    use gpui::{Context, TestAppContext, WindowHandle};
     use itertools::Itertools;
     use language::{
         language_settings::AllLanguageSettingsContent, FakeLspAdapter, Language, LanguageConfig,
@@ -1214,7 +1214,6 @@ pub mod tests {
     use serde_json::json;
     use settings::SettingsStore;
     use text::{Point, ToPoint};
-    use workspace::Workspace;
 
     use crate::editor_tests::update_test_language_settings;
 
@@ -1273,7 +1272,7 @@ pub mod tests {
         cx.executor().run_until_parked();
 
         let mut edits_made = 1;
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["0".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1292,13 +1291,13 @@ pub mod tests {
             );
         });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.change_selections(None, cx, |s| s.select_ranges([13..13]));
             editor.handle_input("some change", cx);
             edits_made += 1;
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["0".to_string(), "1".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1323,7 +1322,7 @@ pub mod tests {
             .expect("inlay refresh request failed");
         edits_made += 1;
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["0".to_string(), "1".to_string(), "2".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1383,7 +1382,7 @@ pub mod tests {
         cx.executor().run_until_parked();
 
         let mut edits_made = 1;
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["0".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1414,7 +1413,7 @@ pub mod tests {
         });
         cx.executor().run_until_parked();
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["0".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1438,7 +1437,7 @@ pub mod tests {
         cx.executor().run_until_parked();
 
         edits_made += 1;
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["1".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1543,7 +1542,7 @@ pub mod tests {
             .next()
             .await;
         cx.executor().run_until_parked();
-        rs_editor.update(cx, |editor, cx| {
+        _ = rs_editor.update(cx, |editor, cx| {
             let expected_hints = vec!["0".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1594,7 +1593,7 @@ pub mod tests {
             .next()
             .await;
         cx.executor().run_until_parked();
-        md_editor.update(cx, |editor, cx| {
+        _ = md_editor.update(cx, |editor, cx| {
             let expected_hints = vec!["0".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1605,12 +1604,12 @@ pub mod tests {
             assert_eq!(editor.inlay_hint_cache().version, 1);
         });
 
-        rs_editor.update(cx, |editor, cx| {
+        _ = rs_editor.update(cx, |editor, cx| {
             editor.change_selections(None, cx, |s| s.select_ranges([13..13]));
             editor.handle_input("some rs change", cx);
         });
         cx.executor().run_until_parked();
-        rs_editor.update(cx, |editor, cx| {
+        _ = rs_editor.update(cx, |editor, cx| {
             let expected_hints = vec!["1".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1624,7 +1623,7 @@ pub mod tests {
                 "Every time hint cache changes, cache version should be incremented"
             );
         });
-        md_editor.update(cx, |editor, cx| {
+        _ = md_editor.update(cx, |editor, cx| {
             let expected_hints = vec!["0".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1635,12 +1634,12 @@ pub mod tests {
             assert_eq!(editor.inlay_hint_cache().version, 1);
         });
 
-        md_editor.update(cx, |editor, cx| {
+        _ = md_editor.update(cx, |editor, cx| {
             editor.change_selections(None, cx, |s| s.select_ranges([13..13]));
             editor.handle_input("some md change", cx);
         });
         cx.executor().run_until_parked();
-        md_editor.update(cx, |editor, cx| {
+        _ = md_editor.update(cx, |editor, cx| {
             let expected_hints = vec!["1".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1650,7 +1649,7 @@ pub mod tests {
             assert_eq!(expected_hints, visible_hint_labels(editor, cx));
             assert_eq!(editor.inlay_hint_cache().version, 2);
         });
-        rs_editor.update(cx, |editor, cx| {
+        _ = rs_editor.update(cx, |editor, cx| {
             let expected_hints = vec!["1".to_string()];
             assert_eq!(
                 expected_hints,
@@ -1725,7 +1724,7 @@ pub mod tests {
         cx.executor().run_until_parked();
 
         let mut edits_made = 1;
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert_eq!(
                 lsp_request_count.load(Ordering::Relaxed),
                 1,
@@ -1760,7 +1759,7 @@ pub mod tests {
             .await
             .expect("inlay refresh request failed");
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert_eq!(
                 lsp_request_count.load(Ordering::Relaxed),
                 2,
@@ -1832,7 +1831,7 @@ pub mod tests {
                 })
             });
             cx.executor().run_until_parked();
-            editor.update(cx, |editor, cx| {
+            _ = editor.update(cx, |editor, cx| {
                 assert_eq!(
                     lsp_request_count.load(Ordering::Relaxed),
                     2,
@@ -1876,7 +1875,7 @@ pub mod tests {
             })
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert_eq!(
                 lsp_request_count.load(Ordering::Relaxed),
                 2,
@@ -1906,7 +1905,7 @@ pub mod tests {
             .await
             .expect("inlay refresh request failed");
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert_eq!(
                 lsp_request_count.load(Ordering::Relaxed),
                 2,
@@ -1932,7 +1931,7 @@ pub mod tests {
             })
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert_eq!(
                 lsp_request_count.load(Ordering::Relaxed),
                 3,
@@ -1968,7 +1967,7 @@ pub mod tests {
             .await
             .expect("inlay refresh request failed");
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert_eq!(
                 lsp_request_count.load(Ordering::Relaxed),
                 4,
@@ -2035,7 +2034,7 @@ pub mod tests {
             "initial change #2",
             "initial change #3",
         ] {
-            editor.update(cx, |editor, cx| {
+            _ = editor.update(cx, |editor, cx| {
                 editor.change_selections(None, cx, |s| s.select_ranges([13..13]));
                 editor.handle_input(change_after_opening, cx);
             });
@@ -2044,7 +2043,7 @@ pub mod tests {
 
         cx.executor().run_until_parked();
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let current_text = editor.text(cx);
             for change in &expected_changes {
                 assert!(
@@ -2079,7 +2078,7 @@ pub mod tests {
             expected_changes.push(async_later_change);
             let task_editor = editor.clone();
             edits.push(cx.spawn(|mut cx| async move {
-                task_editor.update(&mut cx, |editor, cx| {
+                _ = task_editor.update(&mut cx, |editor, cx| {
                     editor.change_selections(None, cx, |s| s.select_ranges([13..13]));
                     editor.handle_input(async_later_change, cx);
                 });
@@ -2088,7 +2087,7 @@ pub mod tests {
         let _ = future::join_all(edits).await;
         cx.executor().run_until_parked();
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let current_text = editor.text(cx);
             for change in &expected_changes {
                 assert!(
@@ -2246,7 +2245,7 @@ pub mod tests {
             lsp::Position::new(initial_visible_range.end.row * 2, 2);
         let mut expected_invisible_query_start = lsp_initial_visible_range.end;
         expected_invisible_query_start.character += 1;
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let ranges = lsp_request_ranges.lock().drain(..).collect::<Vec<_>>();
             assert_eq!(ranges.len(), 2,
                 "When scroll is at the edge of a big document, its visible part and the same range further should be queried in order, but got: {ranges:?}");
@@ -2273,7 +2272,7 @@ pub mod tests {
             );
         });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.scroll_screen(&ScrollAmount::Page(1.0), cx);
             editor.scroll_screen(&ScrollAmount::Page(1.0), cx);
         });
@@ -2343,7 +2342,7 @@ pub mod tests {
             })
             .unwrap();
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.change_selections(Some(Autoscroll::center()), cx, |s| {
                 s.select_ranges([selection_in_cached_range..selection_in_cached_range])
             });
@@ -2352,7 +2351,7 @@ pub mod tests {
             INVISIBLE_RANGES_HINTS_REQUEST_DELAY_MILLIS + 100,
         ));
         cx.executor().run_until_parked();
-        editor.update(cx, |_, _| {
+        _ = editor.update(cx, |_, _| {
             let ranges = lsp_request_ranges
                 .lock()
                 .drain(..)
@@ -2362,14 +2361,14 @@ pub mod tests {
             assert_eq!(lsp_request_count.load(Ordering::Acquire), 4);
         });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.handle_input("++++more text++++", cx);
         });
         cx.executor().advance_clock(Duration::from_millis(
             INVISIBLE_RANGES_HINTS_REQUEST_DELAY_MILLIS + 100,
         ));
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let mut ranges = lsp_request_ranges.lock().drain(..).collect::<Vec<_>>();
             ranges.sort_by_key(|r| r.start);
 
@@ -2597,7 +2596,7 @@ pub mod tests {
             .await;
         cx.executor().run_until_parked();
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
                 let expected_hints = vec![
                     "main hint #0".to_string(),
                     "main hint #1".to_string(),
@@ -2615,7 +2614,7 @@ pub mod tests {
                 assert_eq!(editor.inlay_hint_cache().version, expected_hints.len(), "Every visible excerpt hints should bump the verison");
             });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.change_selections(Some(Autoscroll::Next), cx, |s| {
                 s.select_ranges([Point::new(4, 0)..Point::new(4, 0)])
             });
@@ -2627,7 +2626,7 @@ pub mod tests {
             });
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
                 let expected_hints = vec![
                     "main hint #0".to_string(),
                     "main hint #1".to_string(),
@@ -2646,7 +2645,7 @@ pub mod tests {
                     "Due to every excerpt having one hint, we update cache per new excerpt scrolled");
             });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.change_selections(Some(Autoscroll::Next), cx, |s| {
                 s.select_ranges([Point::new(100, 0)..Point::new(100, 0)])
             });
@@ -2677,13 +2676,13 @@ pub mod tests {
                 expected_hints.len()
             }).unwrap();
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.change_selections(Some(Autoscroll::Next), cx, |s| {
                 s.select_ranges([Point::new(4, 0)..Point::new(4, 0)])
             });
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
                 let expected_hints = vec![
                     "main hint #0".to_string(),
                     "main hint #1".to_string(),
@@ -2705,7 +2704,7 @@ pub mod tests {
             });
 
         editor_edited.store(true, Ordering::Release);
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.change_selections(None, cx, |s| {
                 // TODO if this gets set to hint boundary (e.g. 56) we sometimes get an extra cache version bump, why?
                 s.select_ranges([Point::new(57, 0)..Point::new(57, 0)])
@@ -2713,7 +2712,7 @@ pub mod tests {
             editor.handle_input("++++more text++++", cx);
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec![
                 "main hint(edited) #0".to_string(),
                 "main hint(edited) #1".to_string(),
@@ -2895,7 +2894,7 @@ pub mod tests {
             .await;
         cx.executor().run_until_parked();
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert_eq!(
                 vec!["main hint #0".to_string(), "other hint #0".to_string()],
                 cached_hint_labels(editor),
@@ -2912,13 +2911,13 @@ pub mod tests {
             );
         });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.buffer().update(cx, |multibuffer, cx| {
                 multibuffer.remove_excerpts(buffer_2_excerpts, cx)
             })
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert_eq!(
                 vec!["main hint #0".to_string()],
                 cached_hint_labels(editor),
@@ -2944,7 +2943,7 @@ pub mod tests {
             })
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["main hint #0".to_string()];
             assert_eq!(
                 expected_hints,
@@ -3041,13 +3040,13 @@ pub mod tests {
             .await;
 
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.change_selections(None, cx, |s| {
                 s.select_ranges([Point::new(10, 0)..Point::new(10, 0)])
             })
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["1".to_string()];
             assert_eq!(expected_hints, cached_hint_labels(editor));
             assert_eq!(expected_hints, visible_hint_labels(editor, cx));
@@ -3068,7 +3067,7 @@ pub mod tests {
 
         let (file_with_hints, editor, fake_server) = prepare_test_objects(cx).await;
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.toggle_inlay_hints(&crate::ToggleInlayHints, cx)
         });
         cx.executor().start_waiting();
@@ -3099,7 +3098,7 @@ pub mod tests {
             .next()
             .await;
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["1".to_string()];
             assert_eq!(
                 expected_hints,
@@ -3114,11 +3113,11 @@ pub mod tests {
             );
         });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.toggle_inlay_hints(&crate::ToggleInlayHints, cx)
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert!(
                 cached_hint_labels(editor).is_empty(),
                 "Should clear hints after 2nd toggle"
@@ -3136,7 +3135,7 @@ pub mod tests {
             })
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["2".to_string()];
             assert_eq!(
                 expected_hints,
@@ -3147,11 +3146,11 @@ pub mod tests {
             assert_eq!(editor.inlay_hint_cache().version, 3);
         });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.toggle_inlay_hints(&crate::ToggleInlayHints, cx)
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert!(
                 cached_hint_labels(editor).is_empty(),
                 "Should clear hints after enabling in settings and a 3rd toggle"
@@ -3160,11 +3159,11 @@ pub mod tests {
             assert_eq!(editor.inlay_hint_cache().version, 4);
         });
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             editor.toggle_inlay_hints(&crate::ToggleInlayHints, cx)
         });
         cx.executor().run_until_parked();
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             let expected_hints = vec!["3".to_string()];
             assert_eq!(
                 expected_hints,
@@ -3223,7 +3222,7 @@ pub mod tests {
         .await;
 
         let project = Project::test(fs, ["/a".as_ref()], cx).await;
-        project.update(cx, |project, _| project.languages().add(Arc::new(language)));
+        _ = project.update(cx, |project, _| project.languages().add(Arc::new(language)));
         let buffer = project
             .update(cx, |project, cx| {
                 project.open_local_buffer("/a/main.rs", cx)
@@ -3235,7 +3234,7 @@ pub mod tests {
         let fake_server = fake_servers.next().await.unwrap();
         let editor = cx.add_window(|cx| Editor::for_buffer(buffer, Some(project), cx));
 
-        editor.update(cx, |editor, cx| {
+        _ = editor.update(cx, |editor, cx| {
             assert!(cached_hint_labels(editor).is_empty());
             assert!(visible_hint_labels(editor, cx).is_empty());
             assert_eq!(editor.inlay_hint_cache().version, 0);

crates/editor2/src/items.rs πŸ”—

@@ -1,17 +1,15 @@
 use crate::{
     editor_settings::SeedQuerySetting, link_go_to_definition::hide_link_definition,
-    movement::surrounding_word, persistence::DB, scroll::ScrollAnchor, Anchor, Autoscroll, Editor,
-    EditorEvent, EditorSettings, ExcerptId, ExcerptRange, MultiBuffer, MultiBufferSnapshot,
-    NavigationData, ToPoint as _,
+    persistence::DB, scroll::ScrollAnchor, Anchor, Autoscroll, Editor, EditorEvent, EditorSettings,
+    ExcerptId, ExcerptRange, MultiBuffer, MultiBufferSnapshot, NavigationData, ToPoint as _,
 };
 use anyhow::{anyhow, Context as _, Result};
 use collections::HashSet;
 use futures::future::try_join_all;
 use gpui::{
-    div, point, AnyElement, AppContext, AsyncAppContext, AsyncWindowContext, Context, Div, Entity,
-    EntityId, EventEmitter, FocusHandle, IntoElement, Model, ParentElement, Pixels, Render,
-    SharedString, Styled, Subscription, Task, View, ViewContext, VisualContext, WeakView,
-    WindowContext,
+    div, point, AnyElement, AppContext, AsyncWindowContext, Context, Div, Entity, EntityId,
+    EventEmitter, IntoElement, Model, ParentElement, Pixels, Render, SharedString, Styled,
+    Subscription, Task, View, ViewContext, VisualContext, WeakView, WindowContext,
 };
 use language::{
     proto::serialize_anchor as serialize_text_anchor, Bias, Buffer, CharKind, OffsetRangeExt,
@@ -20,7 +18,7 @@ use language::{
 use project::{search::SearchQuery, FormatTrigger, Item as _, Project, ProjectPath};
 use rpc::proto::{self, update_view, PeerId};
 use settings::Settings;
-use smallvec::SmallVec;
+
 use std::fmt::Write;
 use std::{
     borrow::Cow,
@@ -581,7 +579,7 @@ impl Item for Editor {
     }
 
     fn tab_content(&self, detail: Option<usize>, selected: bool, cx: &WindowContext) -> AnyElement {
-        let theme = cx.theme();
+        let _theme = cx.theme();
 
         let description = detail.and_then(|detail| {
             let path = path_for_buffer(&self.buffer, detail, false, cx)?;
@@ -697,12 +695,14 @@ impl Item for Editor {
                     })?
                     .await?;
                 for buffer in clean_buffers {
-                    buffer.update(&mut cx, |buffer, cx| {
-                        let version = buffer.saved_version().clone();
-                        let fingerprint = buffer.saved_version_fingerprint();
-                        let mtime = buffer.saved_mtime();
-                        buffer.did_save(version, fingerprint, mtime, cx);
-                    });
+                    buffer
+                        .update(&mut cx, |buffer, cx| {
+                            let version = buffer.saved_version().clone();
+                            let fingerprint = buffer.saved_version_fingerprint();
+                            let mtime = buffer.saved_mtime();
+                            buffer.did_save(version, fingerprint, mtime, cx);
+                        })
+                        .ok();
                 }
             }
 
@@ -742,13 +742,15 @@ impl Item for Editor {
             this.update(&mut cx, |editor, cx| {
                 editor.request_autoscroll(Autoscroll::fit(), cx)
             })?;
-            buffer.update(&mut cx, |buffer, cx| {
-                if let Some(transaction) = transaction {
-                    if !buffer.is_singleton() {
-                        buffer.push_transaction(&transaction.0, cx);
+            buffer
+                .update(&mut cx, |buffer, cx| {
+                    if let Some(transaction) = transaction {
+                        if !buffer.is_singleton() {
+                            buffer.push_transaction(&transaction.0, cx);
+                        }
                     }
-                }
-            });
+                })
+                .ok();
             Ok(())
         })
     }
@@ -618,7 +618,7 @@ mod tests {
         test::editor_lsp_test_context::EditorLspTestContext,
     };
     use futures::StreamExt;
-    use gpui::{Modifiers, ModifiersChangedEvent, View};
+    use gpui::{Modifiers, ModifiersChangedEvent};
     use indoc::indoc;
     use language::language_settings::InlayHintSettings;
     use lsp::request::{GotoDefinition, GotoTypeDefinition};

crates/editor2/src/mouse_context_menu.rs πŸ”—

@@ -36,7 +36,7 @@ pub fn deploy_context_menu(
         s.set_pending_display_range(point..point, SelectMode::Character);
     });
 
-    let context_menu = ui::ContextMenu::build(cx, |menu, cx| {
+    let context_menu = ui::ContextMenu::build(cx, |menu, _cx| {
         menu.action("Rename Symbol", Box::new(Rename))
             .action("Go to Definition", Box::new(GoToDefinition))
             .action("Go to Type Definition", Box::new(GoToTypeDefinition))
@@ -53,7 +53,7 @@ pub fn deploy_context_menu(
     let context_menu_focus = context_menu.focus_handle(cx);
     cx.focus(&context_menu_focus);
 
-    let _subscription = cx.subscribe(&context_menu, move |this, _, event: &DismissEvent, cx| {
+    let _subscription = cx.subscribe(&context_menu, move |this, _, _event: &DismissEvent, cx| {
         this.mouse_context_menu.take();
         if context_menu_focus.contains_focused(cx) {
             this.focus(cx);
@@ -97,7 +97,7 @@ mod tests {
                 do_wˇork();
             }
         "});
-        cx.editor(|editor, app| assert!(editor.mouse_context_menu.is_none()));
+        cx.editor(|editor, _app| assert!(editor.mouse_context_menu.is_none()));
         cx.update_editor(|editor, cx| deploy_context_menu(editor, Default::default(), point, cx));
 
         cx.assert_editor_state(indoc! {"
@@ -105,6 +105,6 @@ mod tests {
                 do_wˇork();
             }
         "});
-        cx.editor(|editor, app| assert!(editor.mouse_context_menu.is_some()));
+        cx.editor(|editor, _app| assert!(editor.mouse_context_menu.is_some()));
     }
 }

crates/editor2/src/movement.rs πŸ”—

@@ -2,7 +2,7 @@ use super::{Bias, DisplayPoint, DisplaySnapshot, SelectionGoal, ToDisplayPoint};
 use crate::{char_kind, CharKind, EditorStyle, ToOffset, ToPoint};
 use gpui::{px, Pixels, TextSystem};
 use language::Point;
-use serde::de::IntoDeserializer;
+
 use std::{ops::Range, sync::Arc};
 
 #[derive(Debug, PartialEq)]
@@ -757,7 +757,7 @@ mod tests {
         let mut cx = EditorTestContext::new(cx).await;
         let editor = cx.editor.clone();
         let window = cx.window.clone();
-        cx.update_window(window, |_, cx| {
+        _ = cx.update_window(window, |_, cx| {
             let text_layout_details =
                 editor.update(cx, |editor, cx| editor.text_layout_details(cx));
 

crates/editor2/src/rust_analyzer_ext.rs πŸ”—

@@ -1,7 +1,7 @@
 use std::sync::Arc;
 
 use anyhow::Context as _;
-use gpui::{Context, Model, View, ViewContext, VisualContext, WindowContext};
+use gpui::{Context, View, ViewContext, VisualContext, WindowContext};
 use language::Language;
 use multi_buffer::MultiBuffer;
 use project::lsp_ext_command::ExpandMacro;
@@ -91,7 +91,7 @@ pub fn expand_macro_recursively(
             cx,
         )
     });
-    cx.spawn(|editor, mut cx| async move {
+    cx.spawn(|_editor, mut cx| async move {
         let macro_expansion = expand_macro_task.await.context("expand macro")?;
         if macro_expansion.is_empty() {
             log::info!("Empty macro expansion for position {position:?}");

crates/editor2/src/scroll.rs πŸ”—

@@ -9,7 +9,7 @@ use crate::{
     Anchor, DisplayPoint, Editor, EditorEvent, EditorMode, InlayHintRefreshReason,
     MultiBufferSnapshot, ToPoint,
 };
-use gpui::{point, px, AppContext, Entity, Pixels, Styled, Task, ViewContext};
+use gpui::{point, px, AppContext, Entity, Pixels, Task, ViewContext};
 use language::{Bias, Point};
 use std::{
     cmp::Ordering,

crates/editor2/src/scroll/actions.rs πŸ”—

@@ -3,7 +3,7 @@ use crate::{
     Autoscroll, Bias, Editor, EditorMode, NextScreen, ScrollAnchor, ScrollCursorBottom,
     ScrollCursorCenter, ScrollCursorTop,
 };
-use gpui::{actions, AppContext, Point, ViewContext};
+use gpui::{Point, ViewContext};
 
 impl Editor {
     pub fn next_screen(&mut self, _: &NextScreen, cx: &mut ViewContext<Editor>) {

crates/editor2/src/scroll/autoscroll.rs πŸ”—

@@ -61,7 +61,7 @@ impl Editor {
             display_map.max_point().row() as f32
         };
         if scroll_position.y > max_scroll_top {
-            scroll_position.y = (max_scroll_top);
+            scroll_position.y = max_scroll_top;
             self.set_scroll_position(scroll_position, cx);
         }
 
@@ -143,24 +143,24 @@ impl Editor {
                 let needs_scroll_down = target_bottom >= end_row;
 
                 if needs_scroll_up && !needs_scroll_down {
-                    scroll_position.y = (target_top);
+                    scroll_position.y = target_top;
                     self.set_scroll_position_internal(scroll_position, local, true, cx);
                 }
                 if !needs_scroll_up && needs_scroll_down {
-                    scroll_position.y = (target_bottom - visible_lines);
+                    scroll_position.y = target_bottom - visible_lines;
                     self.set_scroll_position_internal(scroll_position, local, true, cx);
                 }
             }
             AutoscrollStrategy::Center => {
-                scroll_position.y = ((target_top - margin).max(0.0));
+                scroll_position.y = (target_top - margin).max(0.0);
                 self.set_scroll_position_internal(scroll_position, local, true, cx);
             }
             AutoscrollStrategy::Top => {
-                scroll_position.y = ((target_top).max(0.0));
+                scroll_position.y = (target_top).max(0.0);
                 self.set_scroll_position_internal(scroll_position, local, true, cx);
             }
             AutoscrollStrategy::Bottom => {
-                scroll_position.y = ((target_bottom - visible_lines).max(0.0));
+                scroll_position.y = (target_bottom - visible_lines).max(0.0);
                 self.set_scroll_position_internal(scroll_position, local, true, cx);
             }
         }

crates/editor2/src/test/editor_test_context.rs πŸ”—

@@ -4,8 +4,7 @@ use crate::{
 use collections::BTreeMap;
 use futures::Future;
 use gpui::{
-    AnyWindowHandle, AppContext, ForegroundExecutor, Keystroke, ModelContext, View, ViewContext,
-    VisualTestContext, WindowHandle,
+    AnyWindowHandle, AppContext, Keystroke, ModelContext, View, ViewContext, VisualTestContext,
 };
 use indoc::indoc;
 use itertools::Itertools;

crates/zed2/src/open_listener.rs πŸ”—

@@ -251,12 +251,11 @@ pub async fn handle_cli_connection(
                                 let wait = async move {
                                     if paths.is_empty() {
                                         let (done_tx, done_rx) = oneshot::channel();
-                                        let _subscription =
-                                            workspace.update(&mut cx, |workspace, cx| {
-                                                cx.on_release(move |_, _, _| {
-                                                    let _ = done_tx.send(());
-                                                })
-                                            });
+                                        let _subscription = workspace.update(&mut cx, |_, cx| {
+                                            cx.on_release(move |_, _, _| {
+                                                let _ = done_tx.send(());
+                                            })
+                                        });
                                         let _ = done_rx.await;
                                     } else {
                                         let _ = futures::future::try_join_all(item_release_futures)

crates/zed2/src/zed2.rs πŸ”—

@@ -1,6 +1,3 @@
-#![allow(unused_variables, unused_mut)]
-//todo!()
-
 mod app_menus;
 mod assets;
 pub mod languages;
@@ -37,9 +34,8 @@ use util::{
 use uuid::Uuid;
 use workspace::Pane;
 use workspace::{
-    create_and_open_local_file, dock::PanelHandle,
-    notifications::simple_message_notification::MessageNotification, open_new, AppState, NewFile,
-    NewWindow, Workspace, WorkspaceSettings,
+    create_and_open_local_file, notifications::simple_message_notification::MessageNotification,
+    open_new, AppState, NewFile, NewWindow, Workspace, WorkspaceSettings,
 };
 use zed_actions::{OpenBrowser, OpenSettings, OpenZedURL, Quit};
 
@@ -184,7 +180,6 @@ pub fn initialize_workspace(app_state: Arc<AppState>, cx: &mut AppContext) {
             )?;
 
             workspace_handle.update(&mut cx, |workspace, cx| {
-                let project_panel_position = project_panel.position(cx);
                 workspace.add_panel(project_panel, cx);
                 workspace.add_panel(terminal_panel, cx);
                 workspace.add_panel(assistant_panel, cx);
@@ -473,7 +468,7 @@ fn quit(_: &mut Workspace, _: &Quit, cx: &mut gpui::ViewContext<Workspace>) {
         })
         .log_err();
 
-        if let (true, Some(window)) = (should_confirm, workspace_windows.first().copied()) {
+        if let (true, Some(_)) = (should_confirm, workspace_windows.first().copied()) {
             let answer = cx
                 .update(|_, cx| {
                     cx.prompt(
@@ -484,7 +479,7 @@ fn quit(_: &mut Workspace, _: &Quit, cx: &mut gpui::ViewContext<Workspace>) {
                 })
                 .log_err();
 
-            if let Some(mut answer) = answer {
+            if let Some(answer) = answer {
                 let answer = answer.await.ok();
                 if answer != Some(0) {
                     return Ok(());