Path: blob/main/src/vs/workbench/electron-browser/actions/developerActions.ts
5248 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { localize, localize2 } from '../../../nls.js';6import { INativeHostService } from '../../../platform/native/common/native.js';7import { IEditorService } from '../../services/editor/common/editorService.js';8import { Action2, MenuId } from '../../../platform/actions/common/actions.js';9import { Categories } from '../../../platform/action/common/actionCommonCategories.js';10import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js';11import { IWorkbenchEnvironmentService } from '../../services/environment/common/environmentService.js';12import { KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js';13import { IsDevelopmentContext } from '../../../platform/contextkey/common/contextkeys.js';14import { KeyCode, KeyMod } from '../../../base/common/keyCodes.js';15import { INativeWorkbenchEnvironmentService } from '../../services/environment/electron-browser/environmentService.js';16import { URI } from '../../../base/common/uri.js';17import { getActiveWindow } from '../../../base/browser/dom.js';18import { IDialogService } from '../../../platform/dialogs/common/dialogs.js';19import { INativeEnvironmentService } from '../../../platform/environment/common/environment.js';20import { IProgressService, ProgressLocation } from '../../../platform/progress/common/progress.js';2122export class ToggleDevToolsAction extends Action2 {2324constructor() {25super({26id: 'workbench.action.toggleDevTools',27title: localize2('toggleDevTools', 'Toggle Developer Tools'),28category: Categories.Developer,29f1: true,30keybinding: {31weight: KeybindingWeight.WorkbenchContrib + 50,32when: IsDevelopmentContext,33primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyI,34mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KeyI }35},36menu: {37id: MenuId.MenubarHelpMenu,38group: '5_tools',39order: 140}41});42}4344async run(accessor: ServicesAccessor): Promise<void> {45const nativeHostService = accessor.get(INativeHostService);4647return nativeHostService.toggleDevTools({ targetWindowId: getActiveWindow().vscodeWindowId });48}49}5051export class ConfigureRuntimeArgumentsAction extends Action2 {5253constructor() {54super({55id: 'workbench.action.configureRuntimeArguments',56title: localize2('configureRuntimeArguments', 'Configure Runtime Arguments'),57category: Categories.Preferences,58f1: true59});60}6162async run(accessor: ServicesAccessor): Promise<void> {63const editorService = accessor.get(IEditorService);64const environmentService = accessor.get(IWorkbenchEnvironmentService);6566await editorService.openEditor({67resource: environmentService.argvResource,68options: { pinned: true }69});70}71}7273export class ReloadWindowWithExtensionsDisabledAction extends Action2 {7475constructor() {76super({77id: 'workbench.action.reloadWindowWithExtensionsDisabled',78title: localize2('reloadWindowWithExtensionsDisabled', 'Reload with Extensions Disabled'),79category: Categories.Developer,80f1: true81});82}8384async run(accessor: ServicesAccessor): Promise<void> {85return accessor.get(INativeHostService).reload({ disableExtensions: true });86}87}8889export class OpenUserDataFolderAction extends Action2 {9091constructor() {92super({93id: 'workbench.action.revealUserDataFolder',94title: localize2('revealUserDataFolder', 'Reveal User Data Folder'),95category: Categories.Developer,96f1: true97});98}99100async run(accessor: ServicesAccessor): Promise<void> {101const nativeHostService = accessor.get(INativeHostService);102const environmentService = accessor.get(INativeWorkbenchEnvironmentService);103104return nativeHostService.showItemInFolder(URI.file(environmentService.userDataPath).fsPath);105}106}107108export class ShowGPUInfoAction extends Action2 {109110constructor() {111super({112id: 'workbench.action.showGPUInfo',113title: localize2('showGPUInfo', 'Show GPU Info'),114category: Categories.Developer,115f1: true116});117}118119run(accessor: ServicesAccessor) {120const nativeHostService = accessor.get(INativeHostService);121nativeHostService.openGPUInfoWindow();122}123}124125export class ShowContentTracingAction extends Action2 {126127constructor() {128super({129id: 'workbench.action.showContentTracing',130title: localize2('showContentTracing', 'Show Content Tracing'),131category: Categories.Developer,132f1: true133});134}135136run(accessor: ServicesAccessor) {137const nativeHostService = accessor.get(INativeHostService);138nativeHostService.openContentTracingWindow();139}140}141142export class StopTracing extends Action2 {143144static readonly ID = 'workbench.action.stopTracing';145146constructor() {147super({148id: StopTracing.ID,149title: localize2('stopTracing', 'Stop Tracing'),150category: Categories.Developer,151f1: true152});153}154155override async run(accessor: ServicesAccessor): Promise<void> {156const environmentService = accessor.get(INativeEnvironmentService);157const dialogService = accessor.get(IDialogService);158const nativeHostService = accessor.get(INativeHostService);159const progressService = accessor.get(IProgressService);160161if (!environmentService.args.trace) {162const { confirmed } = await dialogService.confirm({163message: localize('stopTracing.message', "Tracing requires to launch with a '--trace' argument"),164primaryButton: localize({ key: 'stopTracing.button', comment: ['&& denotes a mnemonic'] }, "&&Relaunch and Enable Tracing"),165});166167if (confirmed) {168return nativeHostService.relaunch({ addArgs: ['--trace'] });169}170}171172await progressService.withProgress({173location: ProgressLocation.Dialog,174title: localize('stopTracing.title', "Creating trace file..."),175cancellable: false,176detail: localize('stopTracing.detail', "This can take up to one minute to complete.")177}, () => nativeHostService.stopTracing());178}179}180181182