@@ -320,6 +320,7 @@ pub struct ExtensionsPage {
320320 remote_extension_entries : Vec < ExtensionMetadata > ,
321321 dev_extension_entries : Vec < Arc < ExtensionManifest > > ,
322322 filtered_remote_extension_indices : Vec < usize > ,
323+ filtered_dev_extension_indices : Vec < usize > ,
323324 query_editor : Entity < Editor > ,
324325 query_contains_error : bool ,
325326 provides_filter : Option < ExtensionProvides > ,
@@ -381,6 +382,7 @@ impl ExtensionsPage {
381382 filter : ExtensionFilter :: All ,
382383 dev_extension_entries : Vec :: new ( ) ,
383384 filtered_remote_extension_indices : Vec :: new ( ) ,
385+ filtered_dev_extension_indices : Vec :: new ( ) ,
384386 remote_extension_entries : Vec :: new ( ) ,
385387 query_contains_error : false ,
386388 provides_filter,
@@ -493,6 +495,19 @@ impl ExtensionsPage {
493495 } )
494496 . map ( |( ix, _) | ix) ,
495497 ) ;
498+
499+ self . filtered_dev_extension_indices . clear ( ) ;
500+ self . filtered_dev_extension_indices . extend (
501+ self . dev_extension_entries
502+ . iter ( )
503+ . enumerate ( )
504+ . filter ( |( _, manifest) | match self . provides_filter {
505+ Some ( provides) => dev_extension_matches_provides ( manifest, provides) ,
506+ None => true ,
507+ } )
508+ . map ( |( ix, _) | ix) ,
509+ ) ;
510+
496511 cx. notify ( ) ;
497512 }
498513
@@ -601,14 +616,15 @@ impl ExtensionsPage {
601616 cx : & mut Context < Self > ,
602617 ) -> Vec < ExtensionCard > {
603618 let dev_extension_entries_len = if self . filter . include_dev_extensions ( ) {
604- self . dev_extension_entries . len ( )
619+ self . filtered_dev_extension_indices . len ( )
605620 } else {
606621 0
607622 } ;
608623 range
609624 . map ( |ix| {
610625 if ix < dev_extension_entries_len {
611- let extension = & self . dev_extension_entries [ ix] ;
626+ let dev_ix = self . filtered_dev_extension_indices [ ix] ;
627+ let extension = & self . dev_extension_entries [ dev_ix] ;
612628 self . render_dev_extension ( extension, cx)
613629 } else {
614630 let extension_ix =
@@ -1821,7 +1837,7 @@ impl Render for ExtensionsPage {
18211837 . child ( v_flex ( ) . px_4 ( ) . size_full ( ) . overflow_y_hidden ( ) . map ( |this| {
18221838 let mut count = self . filtered_remote_extension_indices . len ( ) ;
18231839 if self . filter . include_dev_extensions ( ) {
1824- count += self . dev_extension_entries . len ( ) ;
1840+ count += self . filtered_dev_extension_indices . len ( ) ;
18251841 }
18261842
18271843 if count == 0 {
@@ -1868,3 +1884,22 @@ impl Item for ExtensionsPage {
18681884 f ( * event)
18691885 }
18701886}
1887+
1888+ fn dev_extension_matches_provides (
1889+ manifest : & ExtensionManifest ,
1890+ provides : ExtensionProvides ,
1891+ ) -> bool {
1892+ match provides {
1893+ ExtensionProvides :: Themes => !manifest. themes . is_empty ( ) ,
1894+ ExtensionProvides :: IconThemes => !manifest. icon_themes . is_empty ( ) ,
1895+ ExtensionProvides :: Languages => !manifest. languages . is_empty ( ) ,
1896+ ExtensionProvides :: Grammars => !manifest. grammars . is_empty ( ) ,
1897+ ExtensionProvides :: LanguageServers => !manifest. language_servers . is_empty ( ) ,
1898+ ExtensionProvides :: ContextServers => !manifest. context_servers . is_empty ( ) ,
1899+ ExtensionProvides :: AgentServers => !manifest. agent_servers . is_empty ( ) ,
1900+ ExtensionProvides :: SlashCommands => !manifest. slash_commands . is_empty ( ) ,
1901+ ExtensionProvides :: IndexedDocsProviders => false ,
1902+ ExtensionProvides :: Snippets => manifest. snippets . is_some ( ) ,
1903+ ExtensionProvides :: DebugAdapters => !manifest. debug_adapters . is_empty ( ) ,
1904+ }
1905+ }
0 commit comments