From b1af02ca710094452521965d02b1eb051c1911b9 Mon Sep 17 00:00:00 2001
From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com>
Date: Tue, 2 Dec 2025 17:38:18 -0300
Subject: [PATCH 001/621] debugger: Improve step icons (#44017)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes https://github.com/zed-industries/zed/issues/38475
Release Notes:
- N/A
---
assets/icons/debug_step_back.svg | 1 -
assets/icons/debug_step_into.svg | 6 ++-
assets/icons/debug_step_out.svg | 6 ++-
assets/icons/debug_step_over.svg | 6 ++-
crates/debugger_ui/src/debugger_panel.rs | 47 +++++++++++-------------
crates/icons/src/icons.rs | 1 -
6 files changed, 37 insertions(+), 30 deletions(-)
delete mode 100644 assets/icons/debug_step_back.svg
diff --git a/assets/icons/debug_step_back.svg b/assets/icons/debug_step_back.svg
deleted file mode 100644
index 61d45866f61cbabbd9a7ae9975809d342cb76ed5..0000000000000000000000000000000000000000
--- a/assets/icons/debug_step_back.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/assets/icons/debug_step_into.svg b/assets/icons/debug_step_into.svg
index 9a517fc7ca0762b17446a75cd90f39a91e1b51cf..0a5882354380b659425fecca2b4c6000516e422f 100644
--- a/assets/icons/debug_step_into.svg
+++ b/assets/icons/debug_step_into.svg
@@ -1 +1,5 @@
-
+
diff --git a/assets/icons/debug_step_out.svg b/assets/icons/debug_step_out.svg
index 147a44f930f34f6c3ddce94693a178a932129cb5..c128f56111f2b68d7229f9d2f61b6b2496f99bba 100644
--- a/assets/icons/debug_step_out.svg
+++ b/assets/icons/debug_step_out.svg
@@ -1 +1,5 @@
-
+
diff --git a/assets/icons/debug_step_over.svg b/assets/icons/debug_step_over.svg
index 336abc11deb866a128e8418dab47af01b6e4d3f6..5d8ccd5b7a20b2f8a108ab4c2e03694db4f6f8a8 100644
--- a/assets/icons/debug_step_over.svg
+++ b/assets/icons/debug_step_over.svg
@@ -1 +1,5 @@
-
+
diff --git a/crates/debugger_ui/src/debugger_panel.rs b/crates/debugger_ui/src/debugger_panel.rs
index 3890fa6326329d0d72aa6f81c6b94e7c2f364d34..ffdd4a22e3d092eb5d3d6626dcfe8b167ae03936 100644
--- a/crates/debugger_ui/src/debugger_panel.rs
+++ b/crates/debugger_ui/src/debugger_panel.rs
@@ -740,7 +740,7 @@ impl DebugPanel {
}
})
.child(
- IconButton::new("debug-step-over", IconName::ArrowRight)
+ IconButton::new("step-over", IconName::DebugStepOver)
.icon_size(IconSize::Small)
.on_click(window.listener_for(
running_state,
@@ -762,32 +762,29 @@ impl DebugPanel {
}),
)
.child(
- IconButton::new(
- "debug-step-into",
- IconName::ArrowDownRight,
- )
- .icon_size(IconSize::Small)
- .on_click(window.listener_for(
- running_state,
- |this, _, _window, cx| {
- this.step_in(cx);
- },
- ))
- .disabled(thread_status != ThreadStatus::Stopped)
- .tooltip({
- let focus_handle = focus_handle.clone();
- move |_window, cx| {
- Tooltip::for_action_in(
- "Step In",
- &StepInto,
- &focus_handle,
- cx,
- )
- }
- }),
+ IconButton::new("step-into", IconName::DebugStepInto)
+ .icon_size(IconSize::Small)
+ .on_click(window.listener_for(
+ running_state,
+ |this, _, _window, cx| {
+ this.step_in(cx);
+ },
+ ))
+ .disabled(thread_status != ThreadStatus::Stopped)
+ .tooltip({
+ let focus_handle = focus_handle.clone();
+ move |_window, cx| {
+ Tooltip::for_action_in(
+ "Step In",
+ &StepInto,
+ &focus_handle,
+ cx,
+ )
+ }
+ }),
)
.child(
- IconButton::new("debug-step-out", IconName::ArrowUpRight)
+ IconButton::new("step-out", IconName::DebugStepOut)
.icon_size(IconSize::Small)
.on_click(window.listener_for(
running_state,
diff --git a/crates/icons/src/icons.rs b/crates/icons/src/icons.rs
index da3b298751d9c1921d14722490e3cbc680292099..d28e2c1030c3c2378aa7997f4799c503cee97105 100644
--- a/crates/icons/src/icons.rs
+++ b/crates/icons/src/icons.rs
@@ -86,7 +86,6 @@ pub enum IconName {
DebugIgnoreBreakpoints,
DebugLogBreakpoint,
DebugPause,
- DebugStepBack,
DebugStepInto,
DebugStepOut,
DebugStepOver,
From d283338885d232c281907809c4b255eaad90a3af Mon Sep 17 00:00:00 2001
From: "Joseph T. Lyons"
Date: Tue, 2 Dec 2025 15:39:29 -0500
Subject: [PATCH 002/621] Add "File History" option to Git Panel entry context
menu (#44016)
Sublime Merge:
Fork:
Zed:
Release Notes:
- Added a "File History" option to Git Panel entry context menu
---
crates/git_ui/src/git_panel.rs | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/crates/git_ui/src/git_panel.rs b/crates/git_ui/src/git_panel.rs
index 8579cafa58a22ea6d182f23b753d3b1a365f37fa..092768c2cd97fa82079979301704ee66c969196e 100644
--- a/crates/git_ui/src/git_panel.rs
+++ b/crates/git_ui/src/git_panel.rs
@@ -6,7 +6,8 @@ use crate::project_diff::{self, Diff, ProjectDiff};
use crate::remote_output::{self, RemoteAction, SuccessMessage};
use crate::{branch_picker, picker_prompt, render_remote_button};
use crate::{
- git_panel_settings::GitPanelSettings, git_status_icon, repository_selector::RepositorySelector,
+ file_history_view::FileHistoryView, git_panel_settings::GitPanelSettings, git_status_icon,
+ repository_selector::RepositorySelector,
};
use agent_settings::AgentSettings;
use anyhow::Context as _;
@@ -842,6 +843,26 @@ impl GitPanel {
});
}
+ fn file_history(&mut self, _: &git::FileHistory, window: &mut Window, cx: &mut Context) {
+ maybe!({
+ let entry = self.entries.get(self.selected_entry?)?.status_entry()?;
+ let active_repo = self.active_repository.as_ref()?;
+ let repo_path = entry.repo_path.clone();
+ let git_store = self.project.read(cx).git_store();
+
+ FileHistoryView::open(
+ repo_path,
+ git_store.downgrade(),
+ active_repo.downgrade(),
+ self.workspace.clone(),
+ window,
+ cx,
+ );
+
+ Some(())
+ });
+ }
+
fn open_file(
&mut self,
_: &menu::SecondaryConfirm,
@@ -3997,6 +4018,8 @@ impl GitPanel {
.separator()
.action("Open Diff", Confirm.boxed_clone())
.action("Open File", SecondaryConfirm.boxed_clone())
+ .separator()
+ .action("File History", Box::new(git::FileHistory))
});
self.selected_entry = Some(ix);
self.set_context_menu(context_menu, position, window, cx);
@@ -4499,6 +4522,7 @@ impl Render for GitPanel {
.on_action(cx.listener(Self::close_panel))
.on_action(cx.listener(Self::open_diff))
.on_action(cx.listener(Self::open_file))
+ .on_action(cx.listener(Self::file_history))
.on_action(cx.listener(Self::focus_changes_list))
.on_action(cx.listener(Self::focus_editor))
.on_action(cx.listener(Self::expand_commit_editor))
From 4e043cd56b8ee15c5d40ad4a94a28ca7ee449f68 Mon Sep 17 00:00:00 2001
From: David Kleingeld
Date: Tue, 2 Dec 2025 21:40:26 +0100
Subject: [PATCH 003/621] Add git team to git in REVIEWERS.conl (#41841)
Release Notes:
- N/A
---
REVIEWERS.conl | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/REVIEWERS.conl b/REVIEWERS.conl
index 86658189d0ebc3861648c1dd410a3b0b8c199706..45155ba3468f29062b58aa9094defc7f86110885 100644
--- a/REVIEWERS.conl
+++ b/REVIEWERS.conl
@@ -53,6 +53,10 @@ extension
git
= @cole-miller
= @danilo-leal
+ = @dvdsk
+ = @kubkon
+ = @Anthony-Eid
+ = @cameron1024
gpui
= @Anthony-Eid
From 23e5477a4cc5921d1a6b35ef3ebbd6bf413b35aa Mon Sep 17 00:00:00 2001
From: Pranav Joglekar
Date: Wed, 3 Dec 2025 02:28:20 +0530
Subject: [PATCH 004/621] vim: Move to opening html tag from / in closing tag
(#42513)
Closes #41582
Release Notes:
- Improves the '%' vim motion for html by moving the cursor to the
opening tag when its positioned on the `/` ( slash ) of the closing tag
---
crates/vim/src/motion.rs | 31 +++++++++++++++++---
crates/vim/test_data/test_matching_tags.json | 5 ++++
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/crates/vim/src/motion.rs b/crates/vim/src/motion.rs
index dc108b0957d993b2229e8c04fed5923e9de250d4..6ba28a1c236ada7c08eeabac9d9189991434a807 100644
--- a/crates/vim/src/motion.rs
+++ b/crates/vim/src/motion.rs
@@ -2388,10 +2388,16 @@ fn matching(map: &DisplaySnapshot, display_point: DisplayPoint) -> DisplayPoint
.or_else(|| snapshot.innermost_enclosing_bracket_ranges(offset..offset, None));
if let Some((opening_range, closing_range)) = bracket_ranges {
- if opening_range.contains(&offset) {
- return closing_range.start.to_display_point(map);
- } else if closing_range.contains(&offset) {
- return opening_range.start.to_display_point(map);
+ let mut chars = map.buffer_snapshot().chars_at(offset);
+ match chars.next() {
+ Some('/') => {}
+ _ => {
+ if opening_range.contains(&offset) {
+ return closing_range.start.to_display_point(map);
+ } else if closing_range.contains(&offset) {
+ return opening_range.start.to_display_point(map);
+ }
+ }
}
}
@@ -3443,6 +3449,23 @@ mod test {
test = "test"
/>
"#});
+
+ // test nested closing tag
+ cx.set_shared_state(indoc! {r#"
+
+
+