From f855e045e6901338cbbeb640d24ede26fa0b9bfc Mon Sep 17 00:00:00 2001 From: Rachel Macfarlane Date: Mon, 17 Dec 2018 10:58:30 -0800 Subject: [PATCH] Simplify start debug command handler --- .../parts/debug/browser/debugCommands.ts | 39 ++++++++++++- .../electron-browser/debug.contribution.ts | 58 +------------------ 2 files changed, 40 insertions(+), 57 deletions(-) diff --git a/src/vs/workbench/parts/debug/browser/debugCommands.ts b/src/vs/workbench/parts/debug/browser/debugCommands.ts index 88d709b6eaa..cb0180013d6 100644 --- a/src/vs/workbench/parts/debug/browser/debugCommands.ts +++ b/src/vs/workbench/parts/debug/browser/debugCommands.ts @@ -9,7 +9,7 @@ import { List } from 'vs/base/browser/ui/list/listWidget'; import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { IListService } from 'vs/platform/list/browser/listService'; import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; -import { IDebugService, IEnablement, CONTEXT_BREAKPOINTS_FOCUSED, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_VARIABLES_FOCUSED, EDITOR_CONTRIBUTION_ID, IDebugEditorContribution, CONTEXT_IN_DEBUG_MODE, CONTEXT_EXPRESSION_SELECTED, CONTEXT_BREAKPOINT_SELECTED } from 'vs/workbench/parts/debug/common/debug'; +import { IDebugService, IEnablement, CONTEXT_BREAKPOINTS_FOCUSED, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_VARIABLES_FOCUSED, EDITOR_CONTRIBUTION_ID, IDebugEditorContribution, CONTEXT_IN_DEBUG_MODE, CONTEXT_EXPRESSION_SELECTED, CONTEXT_BREAKPOINT_SELECTED, IConfig } from 'vs/workbench/parts/debug/common/debug'; import { Expression, Variable, Breakpoint, FunctionBreakpoint } from 'vs/workbench/parts/debug/common/debugModel'; import { IExtensionsViewlet, VIEWLET_ID as EXTENSIONS_VIEWLET_ID } from 'vs/workbench/parts/extensions/common/extensions'; import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; @@ -23,12 +23,43 @@ import { INotificationService } from 'vs/platform/notification/common/notificati import { InputFocusedContext } from 'vs/platform/workbench/common/contextkeys'; import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { PanelFocusContext } from 'vs/workbench/browser/parts/panel/panelPart'; +import { StartAction } from 'vs/workbench/parts/debug/browser/debugActions'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { IHistoryService } from 'vs/workbench/services/history/common/history'; export const ADD_CONFIGURATION_ID = 'debug.addConfiguration'; export const TOGGLE_INLINE_BREAKPOINT_ID = 'editor.debug.action.toggleInlineBreakpoint'; export function registerCommands(): void { + KeybindingsRegistry.registerCommandAndKeybindingRule({ + id: StartAction.ID, + weight: KeybindingWeight.WorkbenchContrib, + when: CONTEXT_IN_DEBUG_MODE.toNegated(), + primary: KeyCode.F5, + handler: (accessor, config?: IConfig) => { + const notificationService = accessor.get(INotificationService); + const keybindingService = accessor.get(IKeybindingService); + const debugService = accessor.get(IDebugService); + const contextService = accessor.get(IWorkspaceContextService); + const historyService = accessor.get(IHistoryService); + + const startAction = new StartAction(StartAction.ID, StartAction.LABEL, debugService, keybindingService, contextService, historyService); + if (!startAction.enabled) { + startAction.dispose(); + return undefined; + } + + startAction.run(config).then(_ => { + startAction.dispose(); + }, err => { + startAction.dispose(); + notificationService.error(err); + }); + } + }); + + KeybindingsRegistry.registerCommandAndKeybindingRule({ id: 'debug.toggleBreakpoint', weight: KeybindingWeight.WorkbenchContrib + 5, @@ -226,6 +257,12 @@ export function registerCommands(): void { handler: inlineBreakpointHandler }); + MenuRegistry.addCommand({ + id: StartAction.ID, + title: StartAction.LABEL, + category: nls.localize('debug', "Debug") + }); + MenuRegistry.appendMenuItem(MenuId.CommandPalette, { command: { id: TOGGLE_INLINE_BREAKPOINT_ID, diff --git a/src/vs/workbench/parts/debug/electron-browser/debug.contribution.ts b/src/vs/workbench/parts/debug/electron-browser/debug.contribution.ts index 47228bbe56b..42a3d003000 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debug.contribution.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debug.contribution.ts @@ -10,7 +10,7 @@ import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; import { SyncActionDescriptor, MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; import { Registry } from 'vs/platform/registry/common/platform'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { KeybindingWeight, IKeybindings, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { KeybindingWeight, IKeybindings } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry'; import { IWorkbenchActionRegistry, Extensions as WorkbenchActionRegistryExtensions } from 'vs/workbench/common/actions'; import { ShowViewletAction, Extensions as ViewletExtensions, ViewletRegistry, ViewletDescriptor } from 'vs/workbench/browser/viewlet'; @@ -49,13 +49,11 @@ import { DebugViewlet } from 'vs/workbench/parts/debug/browser/debugViewlet'; import { Repl, ClearReplAction } from 'vs/workbench/parts/debug/electron-browser/repl'; import { DebugQuickOpenHandler } from 'vs/workbench/parts/debug/browser/debugQuickOpen'; import { DebugStatus } from 'vs/workbench/parts/debug/browser/debugStatus'; -import { LifecyclePhase, ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle'; +import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { launchSchemaId } from 'vs/workbench/services/configuration/common/configuration'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; import { LoadedScriptsView } from 'vs/workbench/parts/debug/browser/loadedScriptsView'; import { TOGGLE_LOG_POINT_ID, TOGGLE_CONDITIONAL_BREAKPOINT_ID, TOGGLE_BREAKPOINT_ID } from 'vs/workbench/parts/debug/browser/debugEditorActions'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; class OpenDebugViewletAction extends ShowViewletAction { public static readonly ID = VIEWLET_ID; @@ -132,58 +130,6 @@ Registry.as(WorkbenchExtensions.Workbench).regi const debugCategory = nls.localize('debugCategory', "Debug"); -const startDebugDescriptor = new SyncActionDescriptor(StartAction, StartAction.ID, StartAction.LABEL, { primary: KeyCode.F5 }, CONTEXT_IN_DEBUG_MODE.toNegated()); - -function startDebugHandler(accessor, args): Promise { - const notificationService = accessor.get(INotificationService); - const instantiationService = accessor.get(IInstantiationService); - const lifecycleService = accessor.get(ILifecycleService); - - return Promise.resolve(lifecycleService.when(LifecyclePhase.Ready).then(() => { - const actionInstance = instantiationService.createInstance(startDebugDescriptor.syncDescriptor); - try { - // don't run the action when not enabled - if (!actionInstance.enabled) { - actionInstance.dispose(); - - return void 0; - } - - const from = args && args.from || 'keybinding'; - - if (args) { - delete args.from; - } - - return Promise.resolve(actionInstance.run(args, { from })).then(() => { - actionInstance.dispose(); - }, err => { - actionInstance.dispose(); - - return Promise.reject(err); - }); - } catch (err) { - actionInstance.dispose(); - - return Promise.reject(err); - } - })).then(void 0, err => notificationService.error(err)); -} - -KeybindingsRegistry.registerCommandAndKeybindingRule({ - id: StartAction.ID, - weight: KeybindingWeight.WorkbenchContrib, - when: CONTEXT_IN_DEBUG_MODE.toNegated(), - primary: KeyCode.F5, - handler: startDebugHandler -}); - -MenuRegistry.addCommand({ - id: StartAction.ID, - title: StartAction.LABEL, - category: debugCategory -}); - registry.registerWorkbenchAction(new SyncActionDescriptor(StepOverAction, StepOverAction.ID, StepOverAction.LABEL, { primary: KeyCode.F10 }, CONTEXT_IN_DEBUG_MODE), 'Debug: Step Over', debugCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(StepIntoAction, StepIntoAction.ID, StepIntoAction.LABEL, { primary: KeyCode.F11 }, CONTEXT_IN_DEBUG_MODE, KeybindingWeight.WorkbenchContrib + 1), 'Debug: Step Into', debugCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(StepOutAction, StepOutAction.ID, StepOutAction.LABEL, { primary: KeyMod.Shift | KeyCode.F11 }, CONTEXT_IN_DEBUG_MODE), 'Debug: Step Out', debugCategory);