Skip to content

Commit a7c16ee

Browse files
authored
Allow Continue On options to specify standalone command names (microsoft#167111)
* Fix microsoft#167106 * Allow Continue On options to specify standalone command names
1 parent 2683a6a commit a7c16ee

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

src/vs/workbench/contrib/editSessions/browser/editSessions.contribution.ts

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import { sha1Hex } from 'vs/base/browser/hash';
5757
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
5858
import { IActivityService, NumberBadge } from 'vs/workbench/services/activity/common/activity';
5959
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
60+
import { ILocalizedString } from 'vs/platform/action/common/action';
6061
import { Codicon } from 'vs/base/common/codicons';
6162

6263
registerSingleton(IEditSessionsLogService, EditSessionsLogService, InstantiationType.Delayed);
@@ -290,7 +291,7 @@ export class EditSessionsContribution extends Disposable implements IWorkbenchCo
290291
super(continueWorkingOnCommand);
291292
}
292293

293-
async run(accessor: ServicesAccessor, workspaceUri: URI | undefined): Promise<void> {
294+
async run(accessor: ServicesAccessor, workspaceUri: URI | undefined, destination: string | undefined): Promise<void> {
294295
type ContinueEditSessionEvent = {};
295296
type ContinueEditSessionClassification = {
296297
owner: 'joyceerhl'; comment: 'Reporting when the continue edit session action is run.';
@@ -299,12 +300,11 @@ export class EditSessionsContribution extends Disposable implements IWorkbenchCo
299300

300301
// First ask the user to pick a destination, if necessary
301302
let uri: URI | 'noDestinationUri' | undefined = workspaceUri;
302-
let destination;
303-
if (!uri) {
304-
destination = await that.pickContinueEditSessionDestination();
305-
}
306303
if (!destination && !uri) {
307-
return;
304+
destination = await that.pickContinueEditSessionDestination();
305+
if (!destination) {
306+
return;
307+
}
308308
}
309309

310310
// Determine if we need to store an edit session, asking for edit session auth if necessary
@@ -731,20 +731,43 @@ export class EditSessionsContribution extends Disposable implements IWorkbenchCo
731731

732732
const icon = command.icon;
733733
const title = typeof command.title === 'string' ? command.title : command.title.value;
734+
const when = ContextKeyExpr.deserialize(contribution.when);
734735

735736
continueEditSessionOptions.push(new ContinueEditSessionItem(
736737
ThemeIcon.isThemeIcon(icon) ? `$(${icon.id}) ${title}` : title,
737738
command.id,
738739
command.source,
739-
ContextKeyExpr.deserialize(contribution.when),
740+
when,
740741
contribution.documentation
741742
));
743+
744+
if (contribution.qualifiedName) {
745+
this.generateStandaloneOptionCommand(command.id, contribution.qualifiedName, command.category, when);
746+
}
742747
}
743748
}
744749
this.continueEditSessionOptions = continueEditSessionOptions;
745750
});
746751
}
747752

753+
private generateStandaloneOptionCommand(commandId: string, qualifiedName: string, category: string | ILocalizedString | undefined, when: ContextKeyExpression | undefined) {
754+
registerAction2(class StandaloneContinueOnOption extends Action2 {
755+
constructor() {
756+
super({
757+
id: `${continueWorkingOnCommand.id}.${commandId}`,
758+
title: { original: qualifiedName, value: qualifiedName },
759+
category: typeof category === 'string' ? { original: category, value: category } : category,
760+
precondition: when,
761+
f1: true
762+
});
763+
}
764+
765+
async run(accessor: ServicesAccessor): Promise<void> {
766+
return accessor.get(ICommandService).executeCommand(continueWorkingOnCommand.id, undefined, commandId);
767+
}
768+
});
769+
}
770+
748771
private registerContinueInLocalFolderAction(): void {
749772
const that = this;
750773
this._register(registerAction2(class ContinueInLocalFolderAction extends Action2 {
@@ -858,6 +881,7 @@ interface ICommand {
858881
group: string;
859882
when: string;
860883
documentation?: string;
884+
qualifiedName?: string;
861885
}
862886

863887
const continueEditSessionExtPoint = ExtensionsRegistry.registerExtensionPoint<ICommand[]>({
@@ -876,6 +900,10 @@ const continueEditSessionExtPoint = ExtensionsRegistry.registerExtensionPoint<IC
876900
description: localize('continueEditSessionExtPoint.group', 'Group into which this item belongs.'),
877901
type: 'string'
878902
},
903+
qualifiedName: {
904+
description: localize('continueEditSessionExtPoint.qualifiedName', 'A fully qualified name for this item which is used for display in menus.'),
905+
type: 'string'
906+
},
879907
description: {
880908
description: localize('continueEditSessionExtPoint.description', "The url, or a command that returns the url, to the option's documentation page."),
881909
type: 'string'

0 commit comments

Comments
 (0)