From 6c4b9ae965b5d83fe7fd970ac5846f93bd2a2b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Raz=20Guzm=C3=A1n=20Macedo?= Date: Thu, 23 Jul 2026 07:54:43 +0000 Subject: [PATCH] Replace panicking unwraps in iterator and Option chains (#61277) # Objective Remove `.unwrap()` calls in iterator/`Option` chains that could panic at runtime. ## Solution Use `and_then`/`filter_map` with `.ok()` for fallible downcasts (`entry_view_state.rs`) and keystroke parsing (`vim/command.rs`); use a descriptive `expect` in `suggest_autoindents` where the invariant is intentional (`buffer.rs`). ## Testing - `cargo test -p language buffer` (69 passed) - `cargo test -p vim command` (26 passed) - `cargo test -p agent_ui entry_view` (3 passed) ## Self-Review Checklist: - [x] I have reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content adheres to Zed's UI standards - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A --- crates/agent_ui/src/entry_view_state.rs | 4 ++-- crates/language/src/buffer.rs | 7 ++++++- crates/vim/src/command.rs | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/crates/agent_ui/src/entry_view_state.rs b/crates/agent_ui/src/entry_view_state.rs index bdc79beacc..092450b0fb 100644 --- a/crates/agent_ui/src/entry_view_state.rs +++ b/crates/agent_ui/src/entry_view_state.rs @@ -566,7 +566,7 @@ impl Entry { self.content_map()? .get(&diff.entity_id()) .cloned() - .map(|entity| entity.downcast::().unwrap()) + .and_then(|entity| entity.downcast::().ok()) } pub fn terminal( @@ -576,7 +576,7 @@ impl Entry { self.content_map()? .get(&terminal.entity_id()) .cloned() - .map(|entity| entity.downcast::().unwrap()) + .and_then(|entity| entity.downcast::().ok()) } pub fn scroll_handle_for_assistant_message_chunk( diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 00cf28568a..e568a5db4f 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -3665,7 +3665,12 @@ impl BufferSnapshot { let indent_configs = matches .grammars() .iter() - .map(|grammar| grammar.indents_config.as_ref().unwrap()) + .map(|grammar| { + grammar + .indents_config + .as_ref() + .expect("grammar in indent match set has indents_config") + }) .collect::>(); let mut indent_ranges = Vec::>::new(); diff --git a/crates/vim/src/command.rs b/crates/vim/src/command.rs index df6a911329..316128d9cb 100644 --- a/crates/vim/src/command.rs +++ b/crates/vim/src/command.rs @@ -771,7 +771,7 @@ pub fn register(editor: &mut Editor, cx: &mut Context) { let keystrokes = action .command .chars() - .map(|c| Keystroke::parse(&c.to_string()).unwrap()) + .filter_map(|c| Keystroke::parse(&c.to_string()).ok()) .collect(); vim.switch_mode(Mode::Normal, true, window, cx); if let Some(override_rows) = &action.override_rows {