This commit is contained in:
Sandeep Somavarapu 2024-09-09 12:32:18 +02:00 коммит произвёл GitHub
Родитель 6abee1b852
Коммит 9b4a6d5e5e
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
17 изменённых файлов: 86 добавлений и 236 удалений

Просмотреть файл

@ -10,7 +10,7 @@ import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keyb
import { IListService } from '../../../../platform/list/browser/listService.js';
import { IDebugService, IEnablement, CONTEXT_BREAKPOINTS_FOCUSED, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_VARIABLES_FOCUSED, EDITOR_CONTRIBUTION_ID, IDebugEditorContribution, CONTEXT_IN_DEBUG_MODE, CONTEXT_EXPRESSION_SELECTED, IConfig, IStackFrame, IThread, IDebugSession, CONTEXT_DEBUG_STATE, IDebugConfiguration, CONTEXT_JUMP_TO_CURSOR_SUPPORTED, REPL_VIEW_ID, CONTEXT_DEBUGGERS_AVAILABLE, State, getStateLabel, CONTEXT_BREAKPOINT_INPUT_FOCUSED, CONTEXT_FOCUSED_SESSION_IS_ATTACH, VIEWLET_ID, CONTEXT_DISASSEMBLY_VIEW_FOCUS, CONTEXT_IN_DEBUG_REPL, CONTEXT_STEP_INTO_TARGETS_SUPPORTED, isFrameDeemphasized } from '../common/debug.js';
import { Expression, Variable, Breakpoint, FunctionBreakpoint, DataBreakpoint, Thread } from '../common/debugModel.js';
import { IExtensionsViewPaneContainer, VIEWLET_ID as EXTENSIONS_VIEWLET_ID } from '../../extensions/common/extensions.js';
import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
import { ICodeEditor, isCodeEditor } from '../../../../editor/browser/editorBrowser.js';
import { MenuRegistry, MenuId, Action2, registerAction2 } from '../../../../platform/actions/common/actions.js';
import { IEditorService } from '../../../services/editor/common/editorService.js';
@ -937,14 +937,12 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
when: undefined,
primary: undefined,
handler: async (accessor, query: string) => {
const paneCompositeService = accessor.get(IPaneCompositePartService);
const viewlet = (await paneCompositeService.openPaneComposite(EXTENSIONS_VIEWLET_ID, ViewContainerLocation.Sidebar, true))?.getViewPaneContainer() as IExtensionsViewPaneContainer;
const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
let searchFor = `@category:debuggers`;
if (typeof query === 'string') {
searchFor += ` ${query}`;
}
viewlet.search(searchFor);
viewlet.focus();
return extensionsWorkbenchService.openSearch(searchFor);
}
});

Просмотреть файл

@ -61,8 +61,7 @@ import { ILocalizedString } from '../../../../platform/action/common/action.js';
import { Codicon } from '../../../../base/common/codicons.js';
import { CancellationError } from '../../../../base/common/errors.js';
import { IRemoteAgentService } from '../../../services/remote/common/remoteAgentService.js';
import { IExtensionsViewPaneContainer, VIEWLET_ID } from '../../extensions/common/extensions.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
import { WorkspaceStateSynchroniser } from '../common/workspaceStateSync.js';
import { IUserDataProfilesService } from '../../../../platform/userDataProfile/common/userDataProfile.js';
import { IRequestService } from '../../../../platform/request/common/request.js';
@ -101,10 +100,7 @@ registerAction2(class extends Action2 {
}
async run(accessor: ServicesAccessor): Promise<void> {
const paneCompositePartService = accessor.get(IPaneCompositePartService);
const viewlet = await paneCompositePartService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
const view = viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer | undefined;
view?.search('@tag:continueOn');
return accessor.get(IExtensionsWorkbenchService).openSearch('@tag:continueOn');
}
});

Просмотреть файл

@ -8,8 +8,6 @@ import { IWorkbenchContribution } from '../../../common/contributions.js';
import { INotificationService, Severity } from '../../../../platform/notification/common/notification.js';
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
import { localize } from '../../../../nls.js';
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
import { SearchExtensionsAction } from './extensionsActions.js';
import { distinct } from '../../../../base/common/arrays.js';
import { Disposable } from '../../../../base/common/lifecycle.js';
import { IExtensionManagementService } from '../../../../platform/extensionManagement/common/extensionManagement.js';
@ -24,7 +22,6 @@ export class DeprecatedExtensionsChecker extends Disposable implements IWorkbenc
@IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService,
@IStorageService private readonly storageService: IStorageService,
@INotificationService private readonly notificationService: INotificationService,
@IInstantiationService private readonly instantiationService: IInstantiationService,
) {
super();
this.checkForDeprecatedExtensions();
@ -56,12 +53,7 @@ export class DeprecatedExtensionsChecker extends Disposable implements IWorkbenc
label: localize('showDeprecated', "Show Deprecated Extensions"),
run: async () => {
this.setNotifiedDeprecatedExtensions(toNotify.map(e => e.identifier.id.toLowerCase()));
const action = this.instantiationService.createInstance(SearchExtensionsAction, toNotify.map(extension => `@id:${extension.identifier.id}`).join(' '));
try {
await action.run();
} finally {
action.dispose();
}
await this.extensionsWorkbenchService.openSearch(toNotify.map(extension => `@id:${extension.identifier.id}`).join(' '));
}
}, {
label: localize('neverShowAgain', "Don't Show Again"),

Просмотреть файл

@ -46,7 +46,6 @@ import { IColorTheme, ICssStyleCollector, IThemeService, registerThemingParticip
import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js';
import { EditorPane } from '../../../browser/parts/editor/editorPane.js';
import { IEditorOpenContext } from '../../../common/editor.js';
import { ViewContainerLocation } from '../../../common/views.js';
import { ExtensionFeaturesTab } from './extensionFeaturesTab.js';
import {
ButtonWithDropDownExtensionAction,
@ -76,7 +75,7 @@ import {
import { Delegate } from './extensionsList.js';
import { ExtensionData, ExtensionsGridView, ExtensionsTree, getExtensions } from './extensionsViewer.js';
import { ExtensionRecommendationWidget, ExtensionStatusWidget, ExtensionWidget, InstallCountWidget, RatingsWidget, RemoteBadgeWidget, SponsorWidget, VerifiedPublisherWidget, onClick } from './extensionsWidgets.js';
import { ExtensionContainers, ExtensionEditorTab, ExtensionState, IExtension, IExtensionContainer, IExtensionsViewPaneContainer, IExtensionsWorkbenchService, VIEWLET_ID } from '../common/extensions.js';
import { ExtensionContainers, ExtensionEditorTab, ExtensionState, IExtension, IExtensionContainer, IExtensionsWorkbenchService } from '../common/extensions.js';
import { ExtensionsInput, IExtensionEditorOptions } from '../common/extensionsInput.js';
import { IExplorerService } from '../../files/browser/files.js';
import { DEFAULT_MARKDOWN_STYLES, renderMarkdownDocument } from '../../markdown/browser/markdownDocumentRenderer.js';
@ -85,7 +84,6 @@ import { IEditorGroup } from '../../../services/editor/common/editorGroupsServic
import { IEditorService } from '../../../services/editor/common/editorService.js';
import { IExtensionRecommendationsService } from '../../../services/extensionRecommendations/common/extensionRecommendations.js';
import { IExtensionService } from '../../../services/extensions/common/extensions.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { IViewsService } from '../../../services/views/common/viewsService.js';
import { VIEW_ID as EXPLORER_VIEW_ID } from '../../files/common/files.js';
import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js';
@ -240,7 +238,6 @@ export class ExtensionEditor extends EditorPane {
group: IEditorGroup,
@ITelemetryService telemetryService: ITelemetryService,
@IInstantiationService private readonly instantiationService: IInstantiationService,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
@IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService,
@IThemeService themeService: IThemeService,
@ -586,11 +583,7 @@ export class ExtensionEditor extends EditorPane {
if (extension.url) {
this.transientDisposables.add(onClick(template.name, () => this.openerService.open(URI.parse(extension.url!))));
this.transientDisposables.add(onClick(template.rating, () => this.openerService.open(URI.parse(`${extension.url}&ssr=false#review-details`))));
this.transientDisposables.add(onClick(template.publisher, () => {
this.paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true)
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
.then(viewlet => viewlet.search(`publisher:"${extension.publisherDisplayName}"`));
}));
this.transientDisposables.add(onClick(template.publisher, () => this.extensionsWorkbenchService.openSearch(`publisher:"${extension.publisherDisplayName}"`)));
}
const manifest = await this.extensionManifest.get().promise;
@ -944,11 +937,8 @@ export class ExtensionEditor extends EditorPane {
append(categoriesContainer, $('.additional-details-title', undefined, localize('categories', "Categories")));
const categoriesElement = append(categoriesContainer, $('.categories'));
for (const category of extension.categories) {
this.transientDisposables.add(onClick(append(categoriesElement, $('span.category', { tabindex: '0' }, category)), () => {
this.paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true)
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
.then(viewlet => viewlet.search(`@category:"${category}"`));
}));
this.transientDisposables.add(onClick(append(categoriesElement, $('span.category', { tabindex: '0' }, category)),
() => this.extensionsWorkbenchService.openSearch(`@category:"${category}"`)));
}
}
}

Просмотреть файл

@ -3,13 +3,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IAction } from '../../../../base/common/actions.js';
import { distinct } from '../../../../base/common/arrays.js';
import { CancelablePromise, createCancelablePromise, Promises, raceCancellablePromises, raceCancellation, timeout } from '../../../../base/common/async.js';
import { CancellationToken } from '../../../../base/common/cancellation.js';
import { isCancellationError } from '../../../../base/common/errors.js';
import { Emitter, Event } from '../../../../base/common/event.js';
import { Disposable, DisposableStore, isDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';
import { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';
import { isString } from '../../../../base/common/types.js';
import { URI } from '../../../../base/common/uri.js';
import { localize } from '../../../../nls.js';
@ -17,13 +16,11 @@ import { IConfigurationService } from '../../../../platform/configuration/common
import { IGalleryExtension } from '../../../../platform/extensionManagement/common/extensionManagement.js';
import { areSameExtensions } from '../../../../platform/extensionManagement/common/extensionManagementUtil.js';
import { IExtensionRecommendationNotificationService, IExtensionRecommendations, RecommendationsNotificationResult, RecommendationSource, RecommendationSourceToString } from '../../../../platform/extensionRecommendations/common/extensionRecommendations.js';
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
import { INotificationHandle, INotificationService, IPromptChoice, IPromptChoiceWithMenu, NotificationPriority, Severity } from '../../../../platform/notification/common/notification.js';
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';
import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js';
import { IUserDataSyncEnablementService, SyncResource } from '../../../../platform/userDataSync/common/userDataSync.js';
import { SearchExtensionsAction } from './extensionsActions.js';
import { IExtension, IExtensionsWorkbenchService } from '../common/extensions.js';
import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js';
import { EnablementState, IWorkbenchExtensionManagementService, IWorkbenchExtensionEnablementService } from '../../../services/extensionManagement/common/extensionManagement.js';
@ -138,7 +135,6 @@ export class ExtensionRecommendationNotificationService extends Disposable imple
@IStorageService private readonly storageService: IStorageService,
@INotificationService private readonly notificationService: INotificationService,
@ITelemetryService private readonly telemetryService: ITelemetryService,
@IInstantiationService private readonly instantiationService: IInstantiationService,
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
@IWorkbenchExtensionManagementService private readonly extensionManagementService: IWorkbenchExtensionManagementService,
@IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService,
@ -282,7 +278,7 @@ export class ExtensionRecommendationNotificationService extends Disposable imple
let accepted = false;
const choices: (IPromptChoice | IPromptChoiceWithMenu)[] = [];
const installExtensions = async (isMachineScoped: boolean) => {
this.runAction(this.instantiationService.createInstance(SearchExtensionsAction, searchValue));
this.extensionsWorkbenchService.openSearch(searchValue);
onDidInstallRecommendedExtensions(extensions);
const galleryExtensions: IGalleryExtension[] = [], resourceExtensions: IExtension[] = [];
for (const extension of extensions) {
@ -313,7 +309,7 @@ export class ExtensionRecommendationNotificationService extends Disposable imple
for (const extension of extensions) {
this.extensionsWorkbenchService.open(extension, { pinned: true });
}
this.runAction(this.instantiationService.createInstance(SearchExtensionsAction, searchValue));
this.extensionsWorkbenchService.openSearch(searchValue);
}
}, {
label: donotShowAgainLabel,
@ -464,16 +460,6 @@ export class ExtensionRecommendationNotificationService extends Disposable imple
return result;
}
private async runAction(action: IAction): Promise<void> {
try {
await action.run();
} finally {
if (isDisposable(action)) {
action.dispose();
}
}
}
private addToImportantRecommendationsIgnore(id: string) {
const importantRecommendationsIgnoreList = [...this.ignoredRecommendations];
if (!importantRecommendationsIgnoreList.includes(id.toLowerCase())) {

Просмотреть файл

@ -14,7 +14,7 @@ import { IExtensionIgnoredRecommendationsService, IExtensionRecommendationsServi
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from '../../../common/contributions.js';
import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js';
import { VIEWLET_ID, IExtensionsWorkbenchService, IExtensionsViewPaneContainer, TOGGLE_IGNORE_EXTENSION_ACTION_ID, INSTALL_EXTENSION_FROM_VSIX_COMMAND_ID, WORKSPACE_RECOMMENDATIONS_VIEW_ID, IWorkspaceRecommendedExtensionsView, AutoUpdateConfigurationKey, HasOutdatedExtensionsContext, SELECT_INSTALL_VSIX_EXTENSION_COMMAND_ID, LIST_WORKSPACE_UNSUPPORTED_EXTENSIONS_COMMAND_ID, ExtensionEditorTab, THEME_ACTIONS_GROUP, INSTALL_ACTIONS_GROUP, OUTDATED_EXTENSIONS_VIEW_ID, CONTEXT_HAS_GALLERY, IExtension, extensionsSearchActionsMenu, UPDATE_ACTIONS_GROUP, IExtensionArg, ExtensionRuntimeActionType } from '../common/extensions.js';
import { ReinstallAction, InstallSpecificVersionOfExtensionAction, ConfigureWorkspaceRecommendedExtensionsAction, ConfigureWorkspaceFolderRecommendedExtensionsAction, PromptExtensionInstallFailureAction, SearchExtensionsAction, SetColorThemeAction, SetFileIconThemeAction, SetProductIconThemeAction, ClearLanguageAction, ToggleAutoUpdateForExtensionAction, ToggleAutoUpdatesForPublisherAction, TogglePreReleaseExtensionAction, InstallAnotherVersionAction, InstallAction } from './extensionsActions.js';
import { ReinstallAction, InstallSpecificVersionOfExtensionAction, ConfigureWorkspaceRecommendedExtensionsAction, ConfigureWorkspaceFolderRecommendedExtensionsAction, PromptExtensionInstallFailureAction, SetColorThemeAction, SetFileIconThemeAction, SetProductIconThemeAction, ClearLanguageAction, ToggleAutoUpdateForExtensionAction, ToggleAutoUpdatesForPublisherAction, TogglePreReleaseExtensionAction, InstallAnotherVersionAction, InstallAction } from './extensionsActions.js';
import { ExtensionsInput } from '../common/extensionsInput.js';
import { ExtensionEditor } from './extensionEditor.js';
import { StatusUpdater, MaliciousExtensionChecker, ExtensionsViewletViewsContribution, ExtensionsViewPaneContainer, BuiltInExtensionsContext, SearchMarketplaceExtensionsContext, RecommendedExtensionsContext, DefaultViewsContext, ExtensionsSortByContext, SearchHasTextContext } from './extensionsViewlet.js';
@ -68,7 +68,6 @@ import { WORKSPACE_TRUST_EXTENSION_SUPPORT } from '../../../services/workspaces/
import { ExtensionsCompletionItemsProvider } from './extensionsCompletionItemsProvider.js';
import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js';
import { Event } from '../../../../base/common/event.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { UnsupportedExtensionsMigrationContrib } from './unsupportedExtensionsMigrationContribution.js';
import { isWeb } from '../../../../base/common/platform.js';
import { ExtensionStorageService } from '../../../../platform/extensionManagement/common/extensionStorage.js';
@ -433,15 +432,7 @@ CommandsRegistry.registerCommand({
]
},
handler: async (accessor, query: string = '') => {
const paneCompositeService = accessor.get(IPaneCompositePartService);
const viewlet = await paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
if (!viewlet) {
return;
}
(viewlet.getViewPaneContainer() as IExtensionsViewPaneContainer).search(query);
viewlet.focus();
return accessor.get(IExtensionsWorkbenchService).openSearch(query);
}
});
@ -489,7 +480,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
@IExtensionManagementServerService private readonly extensionManagementServerService: IExtensionManagementServerService,
@IExtensionGalleryService extensionGalleryService: IExtensionGalleryService,
@IContextKeyService contextKeyService: IContextKeyService,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IViewsService private readonly viewsService: IViewsService,
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
@IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService,
@IInstantiationService private readonly instantiationService: IInstantiationService,
@ -561,7 +552,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
category: ExtensionsLocalizedLabel,
f1: true,
run: async (accessor: ServicesAccessor) => {
await accessor.get(IPaneCompositePartService).openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
await accessor.get(IExtensionsWorkbenchService).openSearch('');
}
});
@ -593,7 +584,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[MenuId.EditorTitle.id]: localize('importKeyboardShortcutsFroms', "Migrate Keyboard Shortcuts from...")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@recommended:keymaps '))
run: () => this.extensionsWorkbenchService.openSearch('@recommended:keymaps ')
});
this.registerExtensionAction({
@ -604,7 +595,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
id: MenuId.CommandPalette,
when: CONTEXT_HAS_GALLERY
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@recommended:languages '))
run: () => this.extensionsWorkbenchService.openSearch('@recommended:languages ')
});
this.registerExtensionAction({
@ -624,7 +615,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
await this.extensionsWorkbenchService.checkForUpdates();
const outdated = this.extensionsWorkbenchService.outdated;
if (outdated.length) {
return runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@outdated '));
return this.extensionsWorkbenchService.openSearch('@outdated ');
} else {
return this.dialogService.info(localize('noUpdatesAvailable', "All extensions are up to date."));
}
@ -937,7 +928,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('featured filter', "Featured")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@featured '))
run: () => this.extensionsWorkbenchService.openSearch('@featured ')
});
this.registerExtensionAction({
@ -956,7 +947,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('most popular filter', "Most Popular")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@popular '))
run: () => this.extensionsWorkbenchService.openSearch('@popular ')
});
this.registerExtensionAction({
@ -975,7 +966,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('most popular recommended', "Recommended")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@recommended '))
run: () => this.extensionsWorkbenchService.openSearch('@recommended ')
});
this.registerExtensionAction({
@ -994,7 +985,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('recently published filter', "Recently Published")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@recentlyPublished '))
run: () => this.extensionsWorkbenchService.openSearch('@recentlyPublished ')
});
const extensionsCategoryFilterSubMenu = new MenuId('extensionsCategoryFilterSubMenu');
@ -1015,7 +1006,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
when: CONTEXT_HAS_GALLERY,
order: index,
}],
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, `@category:"${category.toLowerCase()}"`))
run: () => this.extensionsWorkbenchService.openSearch(`@category:"${category.toLowerCase()}"`)
});
});
@ -1034,7 +1025,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('builtin filter', "Built-in")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@builtin '))
run: () => this.extensionsWorkbenchService.openSearch('@builtin ')
});
this.registerExtensionAction({
@ -1052,7 +1043,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('extension updates filter', "Updates")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@updates'))
run: () => this.extensionsWorkbenchService.openSearch('@updates')
});
this.registerExtensionAction({
@ -1071,7 +1062,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('workspace unsupported filter', "Workspace Unsupported")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@workspaceUnsupported'))
run: () => this.extensionsWorkbenchService.openSearch('@workspaceUnsupported')
});
this.registerExtensionAction({
@ -1089,7 +1080,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('enabled filter', "Enabled")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@enabled '))
run: () => this.extensionsWorkbenchService.openSearch('@enabled ')
});
this.registerExtensionAction({
@ -1107,7 +1098,7 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
menuTitles: {
[extensionsFilterSubMenu.id]: localize('disabled filter', "Disabled")
},
run: () => runAction(this.instantiationService.createInstance(SearchExtensionsAction, '@disabled '))
run: () => this.extensionsWorkbenchService.openSearch('@disabled ')
});
const extensionsSortSubMenu = new MenuId('extensionsSortSubMenu');
@ -1137,11 +1128,10 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
}],
toggled: ExtensionsSortByContext.isEqualTo(id),
run: async () => {
const viewlet = await this.paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
const extensionsViewPaneContainer = viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer;
const currentQuery = Query.parse(extensionsViewPaneContainer.searchValue || '');
extensionsViewPaneContainer.search(new Query(currentQuery.value, id).toString());
extensionsViewPaneContainer.focus();
const extensionsViewPaneContainer = ((await this.viewsService.openViewContainer(VIEWLET_ID, true))?.getViewPaneContainer()) as IExtensionsViewPaneContainer | undefined;
const currentQuery = Query.parse(extensionsViewPaneContainer?.searchValue ?? '');
extensionsViewPaneContainer?.search(new Query(currentQuery.value, id).toString());
extensionsViewPaneContainer?.focus();
}
});
});

Просмотреть файл

@ -12,7 +12,7 @@ import { Emitter, Event } from '../../../../base/common/event.js';
import * as json from '../../../../base/common/json.js';
import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js';
import { disposeIfDisposable } from '../../../../base/common/lifecycle.js';
import { IExtension, ExtensionState, IExtensionsWorkbenchService, VIEWLET_ID, IExtensionsViewPaneContainer, IExtensionContainer, TOGGLE_IGNORE_EXTENSION_ACTION_ID, SELECT_INSTALL_VSIX_EXTENSION_COMMAND_ID, THEME_ACTIONS_GROUP, INSTALL_ACTIONS_GROUP, UPDATE_ACTIONS_GROUP, ExtensionEditorTab, ExtensionRuntimeActionType, IExtensionArg, AutoUpdateConfigurationKey } from '../common/extensions.js';
import { IExtension, ExtensionState, IExtensionsWorkbenchService, IExtensionContainer, TOGGLE_IGNORE_EXTENSION_ACTION_ID, SELECT_INSTALL_VSIX_EXTENSION_COMMAND_ID, THEME_ACTIONS_GROUP, INSTALL_ACTIONS_GROUP, UPDATE_ACTIONS_GROUP, ExtensionEditorTab, ExtensionRuntimeActionType, IExtensionArg, AutoUpdateConfigurationKey } from '../common/extensions.js';
import { ExtensionsConfigurationInitialContent } from '../common/extensionsFileTemplate.js';
import { IGalleryExtension, IExtensionGalleryService, ILocalExtension, InstallOptions, InstallOperation, TargetPlatformToString, ExtensionManagementErrorCode } from '../../../../platform/extensionManagement/common/extensionManagement.js';
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IWorkbenchExtensionManagementService } from '../../../services/extensionManagement/common/extensionManagement.js';
@ -60,8 +60,6 @@ import { IExtensionManifestPropertiesService } from '../../../services/extension
import { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService } from '../../../../platform/workspace/common/workspaceTrust.js';
import { isVirtualWorkspace } from '../../../../platform/workspace/common/virtualWorkspace.js';
import { escapeMarkdownSyntaxTokens, IMarkdownString, MarkdownString } from '../../../../base/common/htmlContent.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { ViewContainerLocation } from '../../../common/views.js';
import { fromNow } from '../../../../base/common/date.js';
import { IPreferencesService } from '../../../services/preferences/common/preferences.js';
import { getLocale } from '../../../../platform/languagePacks/common/languagePacks.js';
@ -2015,7 +2013,6 @@ export class ShowRecommendedExtensionAction extends Action {
constructor(
extensionId: string,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IExtensionsWorkbenchService private readonly extensionWorkbenchService: IExtensionsWorkbenchService,
) {
super(ShowRecommendedExtensionAction.ID, ShowRecommendedExtensionAction.LABEL, undefined, false);
@ -2023,10 +2020,7 @@ export class ShowRecommendedExtensionAction extends Action {
}
override async run(): Promise<any> {
const paneComposite = await this.paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
const paneContainer = paneComposite?.getViewPaneContainer() as IExtensionsViewPaneContainer;
paneContainer.search(`@id:${this.extensionId}`);
paneContainer.focus();
await this.extensionWorkbenchService.openSearch(`@id:${this.extensionId}`);
const [extension] = await this.extensionWorkbenchService.getExtensions([{ id: this.extensionId }], { source: 'install-recommendation' }, CancellationToken.None);
if (extension) {
return this.extensionWorkbenchService.open(extension);
@ -2044,7 +2038,6 @@ export class InstallRecommendedExtensionAction extends Action {
constructor(
extensionId: string,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IInstantiationService private readonly instantiationService: IInstantiationService,
@IExtensionsWorkbenchService private readonly extensionWorkbenchService: IExtensionsWorkbenchService,
) {
@ -2053,10 +2046,7 @@ export class InstallRecommendedExtensionAction extends Action {
}
override async run(): Promise<any> {
const viewlet = await this.paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
const viewPaneContainer = viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer;
viewPaneContainer.search(`@id:${this.extensionId}`);
viewPaneContainer.focus();
await this.extensionWorkbenchService.openSearch(`@id:${this.extensionId}`);
const [extension] = await this.extensionWorkbenchService.getExtensions([{ id: this.extensionId }], { source: 'install-recommendation' }, CancellationToken.None);
if (extension) {
await this.extensionWorkbenchService.open(extension);
@ -2115,22 +2105,6 @@ export class UndoIgnoreExtensionRecommendationAction extends Action {
}
}
export class SearchExtensionsAction extends Action {
constructor(
private readonly searchValue: string,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService
) {
super('extensions.searchExtensions', localize('search recommendations', "Search Extensions"), undefined, true);
}
override async run(): Promise<void> {
const viewPaneContainer = (await this.paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true))?.getViewPaneContainer() as IExtensionsViewPaneContainer;
viewPaneContainer.search(this.searchValue);
viewPaneContainer.focus();
}
}
export abstract class AbstractConfigureRecommendedExtensionsAction extends Action {
constructor(
@ -2786,7 +2760,6 @@ export class ReinstallAction extends Action {
@IQuickInputService private readonly quickInputService: IQuickInputService,
@INotificationService private readonly notificationService: INotificationService,
@IHostService private readonly hostService: IHostService,
@IInstantiationService private readonly instantiationService: IInstantiationService,
@IExtensionService private readonly extensionService: IExtensionService
) {
super(id, label);
@ -2819,7 +2792,7 @@ export class ReinstallAction extends Action {
}
private reinstallExtension(extension: IExtension): Promise<void> {
return this.instantiationService.createInstance(SearchExtensionsAction, '@installed ').run()
return this.extensionsWorkbenchService.openSearch('@installed ')
.then(() => {
return this.extensionsWorkbenchService.reinstall(extension)
.then(extension => {
@ -2865,7 +2838,7 @@ export class InstallSpecificVersionOfExtensionAction extends Action {
if (extensionPick && extensionPick.extension) {
const action = this.instantiationService.createInstance(InstallAnotherVersionAction, extensionPick.extension, true);
await action.run();
await this.instantiationService.createInstance(SearchExtensionsAction, extensionPick.extension.identifier.id).run();
await this.extensionsWorkbenchService.openSearch(extensionPick.extension.identifier.id);
}
}
@ -3107,29 +3080,14 @@ export class InstallRemoteExtensionsInLocalAction extends AbstractInstallExtensi
}
CommandsRegistry.registerCommand('workbench.extensions.action.showExtensionsForLanguage', function (accessor: ServicesAccessor, fileExtension: string) {
const paneCompositeService = accessor.get(IPaneCompositePartService);
return paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true)
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
.then(viewlet => {
viewlet.search(`ext:${fileExtension.replace(/^\./, '')}`);
viewlet.focus();
});
const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
return extensionsWorkbenchService.openSearch(`ext:${fileExtension.replace(/^\./, '')}`);
});
export const showExtensionsWithIdsCommandId = 'workbench.extensions.action.showExtensionsWithIds';
CommandsRegistry.registerCommand(showExtensionsWithIdsCommandId, function (accessor: ServicesAccessor, extensionIds: string[]) {
const paneCompositeService = accessor.get(IPaneCompositePartService);
return paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true)
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
.then(viewlet => {
const query = extensionIds
.map(id => `@id:${id}`)
.join(' ');
viewlet.search(query);
viewlet.focus();
});
const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
return extensionsWorkbenchService.openSearch(extensionIds.map(id => `@id:${id}`).join(' '));
});
registerColor('extensionButton.background', {

Просмотреть файл

@ -7,20 +7,18 @@ import { IQuickPickSeparator } from '../../../../platform/quickinput/common/quic
import { IPickerQuickAccessItem, PickerQuickAccessProvider } from '../../../../platform/quickinput/browser/pickerQuickAccess.js';
import { CancellationToken } from '../../../../base/common/cancellation.js';
import { localize } from '../../../../nls.js';
import { VIEWLET_ID, IExtensionsViewPaneContainer } from '../common/extensions.js';
import { IExtensionGalleryService, IExtensionManagementService, IGalleryExtension } from '../../../../platform/extensionManagement/common/extensionManagement.js';
import { INotificationService } from '../../../../platform/notification/common/notification.js';
import { ILogService } from '../../../../platform/log/common/log.js';
import { DisposableStore } from '../../../../base/common/lifecycle.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { ViewContainerLocation } from '../../../common/views.js';
import { IExtensionsWorkbenchService } from '../common/extensions.js';
export class InstallExtensionQuickAccessProvider extends PickerQuickAccessProvider<IPickerQuickAccessItem> {
static PREFIX = 'ext install ';
constructor(
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
@IExtensionGalleryService private readonly galleryService: IExtensionGalleryService,
@IExtensionManagementService private readonly extensionsService: IExtensionManagementService,
@INotificationService private readonly notificationService: INotificationService,
@ -40,7 +38,7 @@ export class InstallExtensionQuickAccessProvider extends PickerQuickAccessProvid
const genericSearchPickItem: IPickerQuickAccessItem = {
label: localize('searchFor', "Press Enter to search for extension '{0}'.", filter),
accept: () => this.searchExtension(filter)
accept: () => this.extensionsWorkbenchService.openSearch(filter)
};
// Extension ID typed: try to find it
@ -80,37 +78,26 @@ export class InstallExtensionQuickAccessProvider extends PickerQuickAccessProvid
private async installExtension(extension: IGalleryExtension, name: string): Promise<void> {
try {
await openExtensionsViewlet(this.paneCompositeService, `@id:${name}`);
await this.extensionsWorkbenchService.openSearch(`@id:${name}`);
await this.extensionsService.installFromGallery(extension);
} catch (error) {
this.notificationService.error(error);
}
}
private async searchExtension(name: string): Promise<void> {
openExtensionsViewlet(this.paneCompositeService, name);
}
}
export class ManageExtensionsQuickAccessProvider extends PickerQuickAccessProvider<IPickerQuickAccessItem> {
static PREFIX = 'ext ';
constructor(@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService) {
constructor(@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService) {
super(ManageExtensionsQuickAccessProvider.PREFIX);
}
protected _getPicks(): Array<IPickerQuickAccessItem | IQuickPickSeparator> {
return [{
label: localize('manage', "Press Enter to manage your extensions."),
accept: () => openExtensionsViewlet(this.paneCompositeService)
accept: () => this.extensionsWorkbenchService.openSearch('')
}];
}
}
async function openExtensionsViewlet(paneCompositeService: IPaneCompositePartService, search = ''): Promise<void> {
const viewlet = await paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
const view = viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer | undefined;
view?.search(search);
view?.focus();
}

Просмотреть файл

@ -25,7 +25,7 @@ import { IInstantiationService } from '../../../../platform/instantiation/common
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
import { IHostService } from '../../../services/host/browser/host.js';
import { URI } from '../../../../base/common/uri.js';
import { IExtension, ExtensionState, IExtensionsWorkbenchService, AutoUpdateConfigurationKey, AutoCheckUpdatesConfigurationKey, HasOutdatedExtensionsContext, AutoUpdateConfigurationValue, InstallExtensionOptions, ExtensionRuntimeState, ExtensionRuntimeActionType, AutoRestartConfigurationKey } from '../common/extensions.js';
import { IExtension, ExtensionState, IExtensionsWorkbenchService, AutoUpdateConfigurationKey, AutoCheckUpdatesConfigurationKey, HasOutdatedExtensionsContext, AutoUpdateConfigurationValue, InstallExtensionOptions, ExtensionRuntimeState, ExtensionRuntimeActionType, AutoRestartConfigurationKey, VIEWLET_ID, IExtensionsViewPaneContainer } from '../common/extensions.js';
import { IEditorService, SIDE_GROUP, ACTIVE_GROUP } from '../../../services/editor/common/editorService.js';
import { IURLService, IURLHandler, IOpenURLOptions } from '../../../../platform/url/common/url.js';
import { ExtensionsInput, IExtensionEditorOptions } from '../common/extensionsInput.js';
@ -61,6 +61,7 @@ import { IWorkspaceContextService } from '../../../../platform/workspace/common/
import { ShowCurrentReleaseNotesActionId } from '../../update/common/update.js';
import { Registry } from '../../../../platform/registry/common/platform.js';
import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from '../../../../platform/configuration/common/configurationRegistry.js';
import { IViewsService } from '../../../services/views/common/viewsService.js';
interface IExtensionStateProvider<T> {
(extension: Extension): T;
@ -947,6 +948,7 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
@IUpdateService private readonly updateService: IUpdateService,
@IUriIdentityService private readonly uriIdentityService: IUriIdentityService,
@IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService,
@IViewsService private readonly viewsService: IViewsService,
) {
super();
const preferPreReleasesValue = configurationService.getValue('_extensions.preferPreReleases');
@ -1389,6 +1391,14 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
await this.editorService.openEditor(this.instantiationService.createInstance(ExtensionsInput, extension), options, options?.sideByside ? SIDE_GROUP : ACTIVE_GROUP);
}
async openSearch(searchValue: string, preserveFoucs?: boolean): Promise<void> {
const viewPaneContainer = (await this.viewsService.openViewContainer(VIEWLET_ID, true))?.getViewPaneContainer() as IExtensionsViewPaneContainer;
viewPaneContainer.search(searchValue);
if (!preserveFoucs) {
viewPaneContainer.focus();
}
}
getExtensionStatus(extension: IExtension): IExtensionsStatus | undefined {
const extensionsStatus = this.extensionService.getExtensionsStatus();
for (const id of Object.keys(extensionsStatus)) {

Просмотреть файл

@ -141,6 +141,7 @@ export interface IExtensionsWorkbenchService {
shouldRequireConsentToUpdate(extension: IExtension): Promise<string | undefined>;
updateAutoUpdateForAllExtensions(value: boolean): Promise<void>;
open(extension: IExtension | string, options?: IExtensionEditorOptions): Promise<void>;
openSearch(searchValue: string, focus?: boolean): Promise<void>;
getAutoUpdateValue(): AutoUpdateConfigurationValue;
checkForUpdates(): Promise<void>;
getExtensionStatus(extension: IExtension): IExtensionsStatus | undefined;

Просмотреть файл

@ -12,19 +12,10 @@ import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextke
import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js';
import { ICommandService } from '../../../../platform/commands/common/commands.js';
import { INotificationService } from '../../../../platform/notification/common/notification.js';
import { VIEWLET_ID, IExtensionsViewPaneContainer } from '../../extensions/common/extensions.js';
import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { ViewContainerLocation } from '../../../common/views.js';
import { ILanguageFeaturesService } from '../../../../editor/common/services/languageFeatures.js';
async function showExtensionQuery(paneCompositeService: IPaneCompositePartService, query: string) {
const viewlet = await paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true);
if (viewlet) {
(viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer).search(query);
}
}
registerEditorAction(class FormatDocumentMultipleAction extends EditorAction {
constructor() {
@ -48,7 +39,7 @@ registerEditorAction(class FormatDocumentMultipleAction extends EditorAction {
}
const commandService = accessor.get(ICommandService);
const paneCompositeService = accessor.get(IPaneCompositePartService);
const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
const notificationService = accessor.get(INotificationService);
const dialogService = accessor.get(IDialogService);
const languageFeaturesService = accessor.get(ILanguageFeaturesService);
@ -70,7 +61,7 @@ registerEditorAction(class FormatDocumentMultipleAction extends EditorAction {
primaryButton: nls.localize({ key: 'install.formatter', comment: ['&& denotes a mnemonic'] }, "&&Install Formatter...")
});
if (confirmed) {
showExtensionQuery(paneCompositeService, `category:formatters ${langName}`);
extensionsWorkbenchService.openSearch(`category:formatters ${langName}`);
}
}
}

Просмотреть файл

@ -12,12 +12,10 @@ import { IExtensionManagementService, IExtensionGalleryService, InstallOperation
import { INotificationService, NeverShowAgainScope } from '../../../../platform/notification/common/notification.js';
import Severity from '../../../../base/common/severity.js';
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
import { VIEWLET_ID as EXTENSIONS_VIEWLET_ID, IExtensionsViewPaneContainer } from '../../extensions/common/extensions.js';
import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
import { minimumTranslatedStrings } from './minimalTranslations.js';
import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';
import { CancellationToken } from '../../../../base/common/cancellation.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { ViewContainerLocation } from '../../../common/views.js';
import { ILocaleService } from '../../../services/localization/common/locale.js';
import { IProductService } from '../../../../platform/product/common/productService.js';
import { BaseLocalizationWorkbenchContribution } from '../common/localization.contribution.js';
@ -32,7 +30,7 @@ class NativeLocalizationWorkbenchContribution extends BaseLocalizationWorkbenchC
@IStorageService private readonly storageService: IStorageService,
@IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService,
@IExtensionGalleryService private readonly galleryService: IExtensionGalleryService,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
@ITelemetryService private readonly telemetryService: ITelemetryService,
) {
super();
@ -168,16 +166,7 @@ class NativeLocalizationWorkbenchContribution extends BaseLocalizationWorkbenchC
label: translations['searchMarketplace'],
run: async () => {
logUserReaction('search');
const viewlet = await this.paneCompositeService.openPaneComposite(EXTENSIONS_VIEWLET_ID, ViewContainerLocation.Sidebar, true);
if (!viewlet) {
return;
}
const container = viewlet.getViewPaneContainer();
if (!container) {
return;
}
(container as IExtensionsViewPaneContainer).search(`tag:lp-${locale}`);
container.focus();
await this.extensionsWorkbenchService.openSearch(`tag:lp-${locale}`);
}
};

Просмотреть файл

@ -19,8 +19,7 @@ import { IInstantiationService } from '../../../../../../platform/instantiation/
import { IOpenerService } from '../../../../../../platform/opener/common/opener.js';
import { IQuickInputService, IQuickPickItem } from '../../../../../../platform/quickinput/common/quickInput.js';
import { ThemeIcon } from '../../../../../../base/common/themables.js';
import { ViewContainerLocation } from '../../../../../common/views.js';
import { IExtensionsViewPaneContainer, VIEWLET_ID as EXTENSION_VIEWLET_ID } from '../../../../extensions/common/extensions.js';
import { IExtensionsWorkbenchService } from '../../../../extensions/common/extensions.js';
import { ICellOutputViewModel, ICellViewModel, IInsetRenderOutput, INotebookEditorDelegate, JUPYTER_EXTENSION_ID, RenderOutputType } from '../../notebookBrowser.js';
import { mimetypeIcon } from '../../notebookIcons.js';
import { CellContentPart } from '../cellPart.js';
@ -31,7 +30,6 @@ import { CellUri, IOrderedMimeType, NotebookCellExecutionState, NotebookCellOutp
import { INotebookExecutionStateService } from '../../../common/notebookExecutionStateService.js';
import { INotebookKernel } from '../../../common/notebookKernelService.js';
import { INotebookService } from '../../../common/notebookService.js';
import { IPaneCompositePartService } from '../../../../../services/panecomposite/browser/panecomposite.js';
import { COPY_OUTPUT_COMMAND_ID } from '../../controller/cellOutputActions.js';
import { TEXT_BASED_MIMETYPES } from '../../contrib/clipboard/cellOutputClipboard.js';
import { autorun, observableValue } from '../../../../../../base/common/observable.js';
@ -80,7 +78,7 @@ class CellOutputElement extends Disposable {
@IQuickInputService private readonly quickInputService: IQuickInputService,
@IContextKeyService parentContextKeyService: IContextKeyService,
@IMenuService private readonly menuService: IMenuService,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
@IInstantiationService private readonly instantiationService: IInstantiationService,
) {
super();
@ -430,9 +428,7 @@ class CellOutputElement extends Disposable {
}
private async _showJupyterExtension() {
const viewlet = await this.paneCompositeService.openPaneComposite(EXTENSION_VIEWLET_ID, ViewContainerLocation.Sidebar, true);
const view = viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer | undefined;
view?.search(`@id:${JUPYTER_EXTENSION_ID}`);
await this.extensionsWorkbenchService.openSearch(`@id:${JUPYTER_EXTENSION_ID}`);
}
private _generateRendererInfo(renderId: string): string {

Просмотреть файл

@ -22,15 +22,13 @@ import { IProductService } from '../../../../../platform/product/common/productS
import { ProgressLocation } from '../../../../../platform/progress/common/progress.js';
import { IQuickInputButton, IQuickInputService, IQuickPick, IQuickPickItem, QuickPickInput } from '../../../../../platform/quickinput/common/quickInput.js';
import { ThemeIcon } from '../../../../../base/common/themables.js';
import { ViewContainerLocation } from '../../../../common/views.js';
import { IExtension, IExtensionsViewPaneContainer, IExtensionsWorkbenchService, VIEWLET_ID as EXTENSION_VIEWLET_ID } from '../../../extensions/common/extensions.js';
import { IExtension, IExtensionsWorkbenchService } from '../../../extensions/common/extensions.js';
import { IActiveNotebookEditor, INotebookExtensionRecommendation, JUPYTER_EXTENSION_ID, KERNEL_RECOMMENDATIONS } from '../notebookBrowser.js';
import { NotebookEditorWidget } from '../notebookEditorWidget.js';
import { executingStateIcon, selectKernelIcon } from '../notebookIcons.js';
import { NotebookTextModel } from '../../common/model/notebookTextModel.js';
import { INotebookKernel, INotebookKernelHistoryService, INotebookKernelMatchResult, INotebookKernelService, ISourceAction } from '../../common/notebookKernelService.js';
import { IExtensionService } from '../../../../services/extensions/common/extensions.js';
import { IPaneCompositePartService } from '../../../../services/panecomposite/browser/panecomposite.js';
import { URI } from '../../../../../base/common/uri.js';
import { IOpenerService } from '../../../../../platform/opener/common/opener.js';
import { INotebookTextModel } from '../../common/notebookCommon.js';
@ -105,7 +103,6 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
protected readonly _quickInputService: IQuickInputService,
protected readonly _labelService: ILabelService,
protected readonly _logService: ILogService,
protected readonly _paneCompositePartService: IPaneCompositePartService,
protected readonly _extensionWorkbenchService: IExtensionsWorkbenchService,
protected readonly _extensionService: IExtensionService,
protected readonly _commandService: ICommandService
@ -255,7 +252,6 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
// actions
if (isSearchMarketplacePick(pick)) {
await this._showKernelExtension(
this._paneCompositePartService,
this._extensionWorkbenchService,
this._extensionService,
editor.textModel.viewType,
@ -264,7 +260,6 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
// suggestedExtension must be defined for this option to be shown, but still check to make TS happy
} else if (isInstallExtensionPick(pick)) {
await this._showKernelExtension(
this._paneCompositePartService,
this._extensionWorkbenchService,
this._extensionService,
editor.textModel.viewType,
@ -284,7 +279,6 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
}
protected async _showKernelExtension(
paneCompositePartService: IPaneCompositePartService,
extensionWorkbenchService: IExtensionsWorkbenchService,
extensionService: IExtensionService,
viewType: string,
@ -337,10 +331,8 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
return;
}
const viewlet = await paneCompositePartService.openPaneComposite(EXTENSION_VIEWLET_ID, ViewContainerLocation.Sidebar, true);
const view = viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer | undefined;
const pascalCased = viewType.split(/[^a-z0-9]/ig).map(uppercaseFirstLetter).join('');
view?.search(`@tag:notebookKernel${pascalCased}`);
await extensionWorkbenchService.openSearch(`@tag:notebookKernel${pascalCased}`);
}
private async _showInstallKernelExtensionRecommendation(
@ -441,7 +433,6 @@ export class KernelPickerMRUStrategy extends KernelPickerStrategyBase {
@IQuickInputService _quickInputService: IQuickInputService,
@ILabelService _labelService: ILabelService,
@ILogService _logService: ILogService,
@IPaneCompositePartService _paneCompositePartService: IPaneCompositePartService,
@IExtensionsWorkbenchService _extensionWorkbenchService: IExtensionsWorkbenchService,
@IExtensionService _extensionService: IExtensionService,
@ICommandService _commandService: ICommandService,
@ -455,7 +446,6 @@ export class KernelPickerMRUStrategy extends KernelPickerStrategyBase {
_quickInputService,
_labelService,
_logService,
_paneCompositePartService,
_extensionWorkbenchService,
_extensionService,
_commandService,
@ -617,7 +607,6 @@ export class KernelPickerMRUStrategy extends KernelPickerStrategyBase {
}
} else if (isSearchMarketplacePick(selectedKernelPickItem)) {
await this._showKernelExtension(
this._paneCompositePartService,
this._extensionWorkbenchService,
this._extensionService,
editor.textModel.viewType,
@ -626,7 +615,6 @@ export class KernelPickerMRUStrategy extends KernelPickerStrategyBase {
return true;
} else if (isInstallExtensionPick(selectedKernelPickItem)) {
await this._showKernelExtension(
this._paneCompositePartService,
this._extensionWorkbenchService,
this._extensionService,
editor.textModel.viewType,

Просмотреть файл

@ -30,12 +30,10 @@ import { getCodiconAriaLabel } from '../../../../base/common/iconLabels.js';
import { ILogService } from '../../../../platform/log/common/log.js';
import { ReloadWindowAction } from '../../../browser/actions/windowActions.js';
import { EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT, IExtensionGalleryService, IExtensionManagementService } from '../../../../platform/extensionManagement/common/extensionManagement.js';
import { IExtensionsViewPaneContainer, LIST_WORKSPACE_UNSUPPORTED_EXTENSIONS_COMMAND_ID, VIEWLET_ID } from '../../extensions/common/extensions.js';
import { IExtensionsWorkbenchService, LIST_WORKSPACE_UNSUPPORTED_EXTENSIONS_COMMAND_ID } from '../../extensions/common/extensions.js';
import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';
import { IMarkdownString, MarkdownString } from '../../../../base/common/htmlContent.js';
import { RemoteNameContext, VirtualWorkspaceContext } from '../../../common/contextkeys.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { ViewContainerLocation } from '../../../common/views.js';
import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';
import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../../base/common/actions.js';
import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js';
@ -227,13 +225,8 @@ export class RemoteStatusIndicator extends Disposable implements IWorkbenchContr
});
}
run = (accessor: ServicesAccessor, input: string) => {
const paneCompositeService = accessor.get(IPaneCompositePartService);
return paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true).then(viewlet => {
if (viewlet) {
(viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer).search(`@recommended:remotes`);
viewlet.focus();
}
});
const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
return extensionsWorkbenchService.openSearch(`@recommended:remotes`);
};
}));
}

Просмотреть файл

@ -38,8 +38,7 @@ import { widgetClose } from '../../../../platform/theme/common/iconRegistry.js';
import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js';
import { ViewAction } from '../../../browser/parts/views/viewPane.js';
import { FocusedViewContext } from '../../../common/contextkeys.js';
import { ViewContainerLocation } from '../../../common/views.js';
import { VIEWLET_ID as EXTENSIONS_VIEWLET_ID, IExtensionsViewPaneContainer } from '../../extensions/common/extensions.js';
import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
import { TestExplorerTreeElement, TestItemTreeElement } from './explorerProjections/index.js';
import * as icons from './icons.js';
import { TestingExplorerView } from './testingExplorerView.js';
@ -58,7 +57,6 @@ import { ITestingContinuousRunService } from '../common/testingContinuousRunServ
import { ITestingPeekOpener } from '../common/testingPeekOpener.js';
import { isFailedState } from '../common/testingStates.js';
import { IEditorService } from '../../../services/editor/common/editorService.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { IViewsService } from '../../../services/views/common/viewsService.js';
const category = Categories.Test;
@ -1556,10 +1554,7 @@ export class SearchForTestExtension extends Action2 {
}
public async run(accessor: ServicesAccessor) {
const paneCompositeService = accessor.get(IPaneCompositePartService);
const viewlet = (await paneCompositeService.openPaneComposite(EXTENSIONS_VIEWLET_ID, ViewContainerLocation.Sidebar, true))?.getViewPaneContainer() as IExtensionsViewPaneContainer;
viewlet.search('@category:"testing"');
viewlet.focus();
accessor.get(IExtensionsWorkbenchService).openSearch('@category:"testing"');
}
}

Просмотреть файл

@ -10,7 +10,7 @@ import { equalsIgnoreCase } from '../../../../base/common/strings.js';
import { Registry } from '../../../../platform/registry/common/platform.js';
import { Categories } from '../../../../platform/action/common/actionCommonCategories.js';
import { IWorkbenchThemeService, IWorkbenchTheme, ThemeSettingTarget, IWorkbenchColorTheme, IWorkbenchFileIconTheme, IWorkbenchProductIconTheme, ThemeSettings, ThemeSettingDefaults } from '../../../services/themes/common/workbenchThemeService.js';
import { VIEWLET_ID, IExtensionsViewPaneContainer } from '../../extensions/common/extensions.js';
import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
import { IExtensionGalleryService, IExtensionManagementService, IGalleryExtension } from '../../../../platform/extensionManagement/common/extensionManagement.js';
import { IColorRegistry, Extensions as ColorRegistryExtensions } from '../../../../platform/theme/common/colorRegistry.js';
import { IEditorService } from '../../../services/editor/common/editorService.js';
@ -20,8 +20,6 @@ import { colorThemeSchemaId } from '../../../services/themes/common/colorThemeSc
import { isCancellationError, onUnexpectedError } from '../../../../base/common/errors.js';
import { IQuickInputButton, IQuickInputService, IQuickInputToggle, IQuickPick, IQuickPickItem, QuickPickInput } from '../../../../platform/quickinput/common/quickInput.js';
import { DEFAULT_PRODUCT_ICON_THEME_ID, ProductIconThemeData } from '../../../services/themes/browser/productIconThemeData.js';
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js';
import { ViewContainerLocation } from '../../../common/views.js';
import { ThrottledDelayer } from '../../../../base/common/async.js';
import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js';
import { ILogService } from '../../../../platform/log/common/log.js';
@ -81,7 +79,7 @@ class MarketplaceThemesPicker {
@IQuickInputService private readonly quickInputService: IQuickInputService,
@ILogService private readonly logService: ILogService,
@IProgressService private readonly progressService: IProgressService,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
@IDialogService private readonly dialogService: IDialogService
) {
this._installedExtensions = extensionManagementService.getInstalled().then(installed => {
@ -197,9 +195,9 @@ class MarketplaceThemesPicker {
if (isItem(e.item)) {
const extensionId = e.item.theme?.extensionData?.extensionId;
if (extensionId) {
openExtensionViewlet(this.paneCompositeService, `@id:${extensionId}`);
this.extensionsWorkbenchService.openSearch(`@id:${extensionId}`);
} else {
openExtensionViewlet(this.paneCompositeService, `${this.marketplaceQuery} ${quickpick.value}`);
this.extensionsWorkbenchService.openSearch(`${this.marketplaceQuery} ${quickpick.value}`);
}
}
}));
@ -248,7 +246,7 @@ class MarketplaceThemesPicker {
}
private async installExtension(galleryExtension: IGalleryExtension) {
openExtensionViewlet(this.paneCompositeService, `@id:${galleryExtension.identifier.id}`);
this.extensionsWorkbenchService.openSearch(`@id:${galleryExtension.identifier.id}`);
const result = await this.dialogService.confirm({
message: localize('installExtension.confirm', "This will install extension '{0}' published by '{1}'. Do you want to continue?", galleryExtension.displayName, galleryExtension.publisherDisplayName),
primaryButton: localize('installExtension.button.ok', "OK")
@ -303,7 +301,7 @@ class InstalledThemesPicker {
private readonly getMarketplaceColorThemes: (publisher: string, name: string, version: string) => Promise<IWorkbenchTheme[]>,
@IQuickInputService private readonly quickInputService: IQuickInputService,
@IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService,
@IPaneCompositePartService private readonly paneCompositeService: IPaneCompositePartService,
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
@IExtensionResourceLoaderService private readonly extensionResourceLoaderService: IExtensionResourceLoaderService,
@IInstantiationService private readonly instantiationService: IInstantiationService
) {
@ -361,7 +359,7 @@ class InstalledThemesPicker {
const theme = quickpick.selectedItems[0];
if (!theme || theme.configureItem) { // 'pick in marketplace' entry
if (!theme || theme.configureItem === ConfigureItem.EXTENSIONS_VIEW) {
openExtensionViewlet(this.paneCompositeService, `${this.options.marketplaceTag} ${quickpick.value}`);
this.extensionsWorkbenchService.openSearch(`${this.options.marketplaceTag} ${quickpick.value}`);
} else if (theme.configureItem === ConfigureItem.BROWSE_GALLERY) {
if (marketplaceThemePicker) {
const res = await marketplaceThemePicker.openQuickPick(quickpick.value, currentTheme, selectTheme);
@ -389,9 +387,9 @@ class InstalledThemesPicker {
if (isItem(e.item)) {
const extensionId = e.item.theme?.extensionData?.extensionId;
if (extensionId) {
openExtensionViewlet(this.paneCompositeService, `@id:${extensionId}`);
this.extensionsWorkbenchService.openSearch(`@id:${extensionId}`);
} else {
openExtensionViewlet(this.paneCompositeService, `${this.options.marketplaceTag} ${quickpick.value}`);
this.extensionsWorkbenchService.openSearch(`${this.options.marketplaceTag} ${quickpick.value}`);
}
}
}));
@ -606,14 +604,6 @@ function configurationEntry(label: string, configureItem: ConfigureItem): QuickP
};
}
function openExtensionViewlet(paneCompositeService: IPaneCompositePartService, query: string) {
return paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar, true).then(viewlet => {
if (viewlet) {
(viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer).search(query);
viewlet.focus();
}
});
}
interface ThemeItem extends IQuickPickItem {
readonly id: string | undefined;
readonly theme?: IWorkbenchTheme;