Skip to content

Commit ba34347

Browse files
authored
1 parent d1dd57e commit ba34347

File tree

2 files changed

+46
-18
lines changed

2 files changed

+46
-18
lines changed

src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { InstallLocalExtensionsInRemoteAction, InstallRemoteExtensionsInLocalAct
2121
import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement';
2222
import { IWorkbenchExtensionEnablementService, IExtensionManagementServerService, IExtensionManagementServer } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
2323
import { ExtensionsInput } from 'vs/workbench/contrib/extensions/common/extensionsInput';
24-
import { ExtensionsListView, EnabledExtensionsView, DisabledExtensionsView, RecommendedExtensionsView, WorkspaceRecommendedExtensionsView, BuiltInFeatureExtensionsView, BuiltInThemesExtensionsView, BuiltInProgrammingLanguageExtensionsView, ServerInstalledExtensionsView, DefaultRecommendedExtensionsView, UntrustedWorkspaceUnsupportedExtensionsView, UntrustedWorkspacePartiallySupportedExtensionsView, VirtualWorkspaceUnsupportedExtensionsView, VirtualWorkspacePartiallySupportedExtensionsView, DefaultPopularExtensionsView } from 'vs/workbench/contrib/extensions/browser/extensionsViews';
24+
import { ExtensionsListView, EnabledExtensionsView, DisabledExtensionsView, RecommendedExtensionsView, WorkspaceRecommendedExtensionsView, BuiltInFeatureExtensionsView, BuiltInThemesExtensionsView, BuiltInProgrammingLanguageExtensionsView, ServerInstalledExtensionsView, DefaultRecommendedExtensionsView, UntrustedWorkspaceUnsupportedExtensionsView, UntrustedWorkspacePartiallySupportedExtensionsView, VirtualWorkspaceUnsupportedExtensionsView, VirtualWorkspacePartiallySupportedExtensionsView, DefaultPopularExtensionsView, DeprecatedExtensionsView } from 'vs/workbench/contrib/extensions/browser/extensionsViews';
2525
import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress';
2626
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
2727
import Severity from 'vs/base/common/severity';
@@ -70,6 +70,7 @@ const HasInstalledExtensionsContext = new RawContextKey<boolean>('hasInstalledEx
7070
const BuiltInExtensionsContext = new RawContextKey<boolean>('builtInExtensions', false);
7171
const SearchBuiltInExtensionsContext = new RawContextKey<boolean>('searchBuiltInExtensions', false);
7272
const SearchUnsupportedWorkspaceExtensionsContext = new RawContextKey<boolean>('searchUnsupportedWorkspaceExtensions', false);
73+
const SearchDeprecatedExtensionsContext = new RawContextKey<boolean>('searchDeprecatedExtensions', false);
7374
const RecommendedExtensionsContext = new RawContextKey<boolean>('recommendedExtensions', false);
7475

7576
export class ExtensionsViewletViewsContribution implements IWorkbenchContribution {
@@ -104,6 +105,9 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
104105
/* Trust Required extensions views */
105106
viewDescriptors.push(...this.createUnsupportedWorkspaceExtensionsViewDescriptors());
106107

108+
/* Other Local Filtered extensions views */
109+
viewDescriptors.push(...this.createOtherLocalFilteredExtensionsViewDescriptors());
110+
107111
Registry.as<IViewsRegistry>(Extensions.ViewsRegistry).registerViews(viewDescriptors, this.container);
108112
}
109113

@@ -414,6 +418,19 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
414418
return viewDescriptors;
415419
}
416420

421+
private createOtherLocalFilteredExtensionsViewDescriptors(): IViewDescriptor[] {
422+
const viewDescriptors: IViewDescriptor[] = [];
423+
424+
viewDescriptors.push({
425+
id: 'workbench.views.extensions.deprecatedExtensions',
426+
name: localize('deprecated', "Deprecated"),
427+
ctorDescriptor: new SyncDescriptor(DeprecatedExtensionsView, [{}]),
428+
when: ContextKeyExpr.and(SearchDeprecatedExtensionsContext),
429+
});
430+
431+
return viewDescriptors;
432+
}
433+
417434
}
418435

419436
export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IExtensionsViewPaneContainer {
@@ -429,6 +446,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
429446
private builtInExtensionsContextKey: IContextKey<boolean>;
430447
private searchBuiltInExtensionsContextKey: IContextKey<boolean>;
431448
private searchWorkspaceUnsupportedExtensionsContextKey: IContextKey<boolean>;
449+
private searchDeprecatedExtensionsContextKey: IContextKey<boolean>;
432450
private recommendedExtensionsContextKey: IContextKey<boolean>;
433451

434452
private searchDelayer: Delayer<void>;
@@ -465,6 +483,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
465483
this.searchMarketplaceExtensionsContextKey = SearchMarketplaceExtensionsContext.bindTo(contextKeyService);
466484
this.searchInstalledExtensionsContextKey = SearchIntalledExtensionsContext.bindTo(contextKeyService);
467485
this.searchWorkspaceUnsupportedExtensionsContextKey = SearchUnsupportedWorkspaceExtensionsContext.bindTo(contextKeyService);
486+
this.searchDeprecatedExtensionsContextKey = SearchDeprecatedExtensionsContext.bindTo(contextKeyService);
468487
this.searchOutdatedExtensionsContextKey = SearchOutdatedExtensionsContext.bindTo(contextKeyService);
469488
this.searchEnabledExtensionsContextKey = SearchEnabledExtensionsContext.bindTo(contextKeyService);
470489
this.searchDisabledExtensionsContextKey = SearchDisabledExtensionsContext.bindTo(contextKeyService);
@@ -635,6 +654,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
635654
this.searchDisabledExtensionsContextKey.set(ExtensionsListView.isDisabledExtensionsQuery(value));
636655
this.searchBuiltInExtensionsContextKey.set(ExtensionsListView.isSearchBuiltInExtensionsQuery(value));
637656
this.searchWorkspaceUnsupportedExtensionsContextKey.set(ExtensionsListView.isSearchWorkspaceUnsupportedExtensionsQuery(value));
657+
this.searchDeprecatedExtensionsContextKey.set(ExtensionsListView.isSearchDeprecatedExtensionsQuery(value));
638658
this.builtInExtensionsContextKey.set(ExtensionsListView.isBuiltInExtensionsQuery(value));
639659
this.recommendedExtensionsContextKey.set(isRecommendedExtensionsQuery);
640660
this.searchMarketplaceExtensionsContextKey.set(!!value && !ExtensionsListView.isLocalExtensionsQuery(value) && !isRecommendedExtensionsQuery);

src/vs/workbench/contrib/extensions/browser/extensionsViews.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ export class ExtensionsListView extends ViewPane {
345345
private async queryLocal(query: Query, options: IQueryOptions): Promise<IQueryResult> {
346346
const local = await this.extensionsWorkbenchService.queryLocal(this.options.server);
347347
const runningExtensions = await this.extensionService.getExtensions();
348-
let { extensions, canIncludeInstalledExtensions } = this.filterLocal(local, runningExtensions, query, options);
348+
let { extensions, canIncludeInstalledExtensions } = await this.filterLocal(local, runningExtensions, query, options);
349349
const disposables = new DisposableStore();
350350
const onDidChangeModel = disposables.add(new Emitter<IPagedModel<IExtension>>());
351351

@@ -358,7 +358,7 @@ export class ExtensionsListView extends ViewPane {
358358
), () => undefined)(async () => {
359359
const local = this.options.server ? this.extensionsWorkbenchService.installed.filter(e => e.server === this.options.server) : this.extensionsWorkbenchService.local;
360360
const runningExtensions = await this.extensionService.getExtensions();
361-
const { extensions: newExtensions } = this.filterLocal(local, runningExtensions, query, options);
361+
const { extensions: newExtensions } = await this.filterLocal(local, runningExtensions, query, options);
362362
if (!isDisposed) {
363363
const mergedExtensions = this.mergeAddedExtensions(extensions, newExtensions);
364364
if (mergedExtensions) {
@@ -376,7 +376,7 @@ export class ExtensionsListView extends ViewPane {
376376
};
377377
}
378378

379-
private filterLocal(local: IExtension[], runningExtensions: IExtensionDescription[], query: Query, options: IQueryOptions): { extensions: IExtension[]; canIncludeInstalledExtensions: boolean } {
379+
private async filterLocal(local: IExtension[], runningExtensions: IExtensionDescription[], query: Query, options: IQueryOptions): Promise<{ extensions: IExtension[]; canIncludeInstalledExtensions: boolean }> {
380380
const value = query.value;
381381
let extensions: IExtension[] = [];
382382
let canIncludeInstalledExtensions = true;
@@ -406,6 +406,10 @@ export class ExtensionsListView extends ViewPane {
406406
extensions = this.filterWorkspaceUnsupportedExtensions(local, query, options);
407407
}
408408

409+
else if (/@deprecated/i.test(query.value)) {
410+
extensions = await this.filterDeprecatedExtensions(local, query, options);
411+
}
412+
409413
return { extensions, canIncludeInstalledExtensions };
410414
}
411415

@@ -616,6 +620,13 @@ export class ExtensionsListView extends ViewPane {
616620
return this.sortExtensions(local, options);
617621
}
618622

623+
private async filterDeprecatedExtensions(local: IExtension[], query: Query, options: IQueryOptions): Promise<IExtension[]> {
624+
const value = query.value.replace(/@deprecated/g, '').replace(/@sort:(\w+)(-\w*)?/g, '').trim().toLowerCase();
625+
const extensionsControlManifest = await this.extensionManagementService.getExtensionsControlManifest();
626+
const deprecatedExtensionIds = Object.keys(extensionsControlManifest.deprecated);
627+
local = local.filter(e => deprecatedExtensionIds.includes(e.identifier.id) && (!value || e.name.toLowerCase().indexOf(value) > -1 || e.displayName.toLowerCase().indexOf(value) > -1));
628+
return this.sortExtensions(local, options);
629+
}
619630

620631
private mergeAddedExtensions(extensions: IExtension[], newExtensions: IExtension[]): IExtension[] | undefined {
621632
const oldExtensions = [...extensions];
@@ -653,10 +664,6 @@ export class ExtensionsListView extends ViewPane {
653664
return this.queryRecommendations(query, options, token);
654665
}
655666

656-
if (/@deprecated/i.test(query.value)) {
657-
return this.getDeprecatedExtensions(options, token);
658-
}
659-
660667
if (/\bcurated:([^\s]+)\b/.test(query.value)) {
661668
return this.getCuratedModel(query, options, token);
662669
}
@@ -752,16 +759,6 @@ export class ExtensionsListView extends ViewPane {
752759
return new PagedModel([]);
753760
}
754761

755-
private async getDeprecatedExtensions(options: IQueryOptions, token: CancellationToken): Promise<IPagedModel<IExtension>> {
756-
const extensionsControlManifest = await this.extensionManagementService.getExtensionsControlManifest();
757-
const deprecatedExtensionIds = Object.keys(extensionsControlManifest.deprecated);
758-
if (deprecatedExtensionIds.length) {
759-
const pager = await this.extensionsWorkbenchService.queryGallery({ ...options, names: deprecatedExtensionIds, text: undefined }, token);
760-
return this.getPagedModel(pager);
761-
}
762-
return this.getPagedModel([]);
763-
}
764-
765762
private isRecommendationsQuery(query: Query): boolean {
766763
return ExtensionsListView.isWorkspaceRecommendedExtensionsQuery(query.value)
767764
|| ExtensionsListView.isKeymapsRecommendedExtensionsQuery(query.value)
@@ -1024,6 +1021,7 @@ export class ExtensionsListView extends ViewPane {
10241021
|| this.isBuiltInExtensionsQuery(query)
10251022
|| this.isSearchBuiltInExtensionsQuery(query)
10261023
|| this.isBuiltInGroupExtensionsQuery(query)
1024+
|| this.isSearchDeprecatedExtensionsQuery(query)
10271025
|| this.isSearchWorkspaceUnsupportedExtensionsQuery(query);
10281026
}
10291027

@@ -1059,6 +1057,10 @@ export class ExtensionsListView extends ViewPane {
10591057
return /@disabled/i.test(query);
10601058
}
10611059

1060+
static isSearchDeprecatedExtensionsQuery(query: string): boolean {
1061+
return /@deprecated\s?.*/i.test(query);
1062+
}
1063+
10621064
static isRecommendedExtensionsQuery(query: string): boolean {
10631065
return /^@recommended$/i.test(query.trim());
10641066
}
@@ -1194,6 +1196,12 @@ export class VirtualWorkspacePartiallySupportedExtensionsView extends Extensions
11941196
}
11951197
}
11961198

1199+
export class DeprecatedExtensionsView extends ExtensionsListView {
1200+
override async show(query: string): Promise<IPagedModel<IExtension>> {
1201+
return ExtensionsListView.isSearchDeprecatedExtensionsQuery(query) ? super.show(query) : this.showEmptyModel();
1202+
}
1203+
}
1204+
11971205
export class DefaultRecommendedExtensionsView extends ExtensionsListView {
11981206
private readonly recommendedExtensionsQuery = '@recommended:all';
11991207

0 commit comments

Comments
 (0)