From f3c6dcfa19196b2674cc6476658a6ff462ffa7f2 Mon Sep 17 00:00:00 2001 From: chenwuji2000-cyber Date: Mon, 16 Feb 2026 10:51:23 +0800 Subject: [PATCH] extensions_ui: Apply category filter to dev extensions (#48954) Following up on #49183 which fixed the category filter for remote extensions. This PR applies the same category filter logic to **dev extensions**. Previously, dev extensions were always shown regardless of the selected category filter (e.g., "Themes", "Languages"). Changes: - Add `filtered_dev_extension_indices` to track which dev extensions match the active `provides_filter` - Add `dev_extension_matches_provides()` helper to map `ExtensionManifest` fields to `ExtensionProvides` variants - Update `render_extensions()` and list count to use filtered dev extension indices Release Notes: - Fixed extension category filter not applying to dev extensions in the extensions panel. --------- Co-authored-by: Claude Co-authored-by: Marshall Bowers --- crates/extensions_ui/src/extensions_ui.rs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/crates/extensions_ui/src/extensions_ui.rs b/crates/extensions_ui/src/extensions_ui.rs index bc02c7eef148aacc5de65dee7fea20fcf0899b73..03bbe92927a345c753dc8ac43f15ebf83b2055a3 100644 --- a/crates/extensions_ui/src/extensions_ui.rs +++ b/crates/extensions_ui/src/extensions_ui.rs @@ -320,6 +320,7 @@ pub struct ExtensionsPage { remote_extension_entries: Vec, dev_extension_entries: Vec>, filtered_remote_extension_indices: Vec, + filtered_dev_extension_indices: Vec, query_editor: Entity, query_contains_error: bool, provides_filter: Option, @@ -381,6 +382,7 @@ impl ExtensionsPage { filter: ExtensionFilter::All, dev_extension_entries: Vec::new(), filtered_remote_extension_indices: Vec::new(), + filtered_dev_extension_indices: Vec::new(), remote_extension_entries: Vec::new(), query_contains_error: false, provides_filter, @@ -493,6 +495,19 @@ impl ExtensionsPage { }) .map(|(ix, _)| ix), ); + + self.filtered_dev_extension_indices.clear(); + self.filtered_dev_extension_indices.extend( + self.dev_extension_entries + .iter() + .enumerate() + .filter(|(_, manifest)| match self.provides_filter { + Some(provides) => manifest.provides().contains(&provides), + None => true, + }) + .map(|(ix, _)| ix), + ); + cx.notify(); } @@ -601,14 +616,15 @@ impl ExtensionsPage { cx: &mut Context, ) -> Vec { let dev_extension_entries_len = if self.filter.include_dev_extensions() { - self.dev_extension_entries.len() + self.filtered_dev_extension_indices.len() } else { 0 }; range .map(|ix| { if ix < dev_extension_entries_len { - let extension = &self.dev_extension_entries[ix]; + let dev_ix = self.filtered_dev_extension_indices[ix]; + let extension = &self.dev_extension_entries[dev_ix]; self.render_dev_extension(extension, cx) } else { let extension_ix = @@ -1821,7 +1837,7 @@ impl Render for ExtensionsPage { .child(v_flex().px_4().size_full().overflow_y_hidden().map(|this| { let mut count = self.filtered_remote_extension_indices.len(); if self.filter.include_dev_extensions() { - count += self.dev_extension_entries.len(); + count += self.filtered_dev_extension_indices.len(); } if count == 0 {