@codingame/monaco-vscode-debug-service-override 3.2.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/debug.js +4 -4
  2. package/package.json +2 -2
  3. package/external/rollup-plugin-styles/dist/runtime/inject-css.js +0 -3
  4. package/external/tslib/tslib.es6.js +0 -11
  5. package/override/vs/platform/dialogs/common/dialogs.js +0 -8
  6. package/vscode/src/vs/platform/debug/common/extensionHostDebugIpc.js +0 -73
  7. package/vscode/src/vs/workbench/contrib/debug/browser/callStackView.js +0 -1011
  8. package/vscode/src/vs/workbench/contrib/debug/browser/debug.contribution.js +0 -970
  9. package/vscode/src/vs/workbench/contrib/debug/browser/debugANSIHandling.js +0 -347
  10. package/vscode/src/vs/workbench/contrib/debug/browser/debugActionViewItems.js +0 -324
  11. package/vscode/src/vs/workbench/contrib/debug/browser/debugAdapterManager.js +0 -432
  12. package/vscode/src/vs/workbench/contrib/debug/browser/debugCommands.js +0 -1039
  13. package/vscode/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.js +0 -649
  14. package/vscode/src/vs/workbench/contrib/debug/browser/debugConsoleQuickAccess.js +0 -64
  15. package/vscode/src/vs/workbench/contrib/debug/browser/debugEditorActions.js +0 -636
  16. package/vscode/src/vs/workbench/contrib/debug/browser/debugEditorContribution.js +0 -725
  17. package/vscode/src/vs/workbench/contrib/debug/browser/debugHover.js +0 -398
  18. package/vscode/src/vs/workbench/contrib/debug/browser/debugMemory.js +0 -206
  19. package/vscode/src/vs/workbench/contrib/debug/browser/debugProgress.js +0 -80
  20. package/vscode/src/vs/workbench/contrib/debug/browser/debugQuickAccess.js +0 -169
  21. package/vscode/src/vs/workbench/contrib/debug/browser/debugService.js +0 -1271
  22. package/vscode/src/vs/workbench/contrib/debug/browser/debugSession.js +0 -1305
  23. package/vscode/src/vs/workbench/contrib/debug/browser/debugSessionPicker.js +0 -115
  24. package/vscode/src/vs/workbench/contrib/debug/browser/debugStatus.js +0 -77
  25. package/vscode/src/vs/workbench/contrib/debug/browser/debugTaskRunner.js +0 -307
  26. package/vscode/src/vs/workbench/contrib/debug/browser/debugTitle.js +0 -31
  27. package/vscode/src/vs/workbench/contrib/debug/browser/debugToolBar.js +0 -378
  28. package/vscode/src/vs/workbench/contrib/debug/browser/debugViewlet.js +0 -267
  29. package/vscode/src/vs/workbench/contrib/debug/browser/disassemblyView.js +0 -808
  30. package/vscode/src/vs/workbench/contrib/debug/browser/exceptionWidget.js +0 -121
  31. package/vscode/src/vs/workbench/contrib/debug/browser/extensionHostDebugService.js +0 -141
  32. package/vscode/src/vs/workbench/contrib/debug/browser/linkDetector.js +0 -262
  33. package/vscode/src/vs/workbench/contrib/debug/browser/loadedScriptsView.js +0 -669
  34. package/vscode/src/vs/workbench/contrib/debug/browser/media/debug.contribution.css.js +0 -6
  35. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugHover.css.js +0 -6
  36. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css.js +0 -6
  37. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css.js +0 -6
  38. package/vscode/src/vs/workbench/contrib/debug/browser/media/exceptionWidget.css.js +0 -6
  39. package/vscode/src/vs/workbench/contrib/debug/browser/media/repl.css.js +0 -6
  40. package/vscode/src/vs/workbench/contrib/debug/browser/rawDebugSession.js +0 -709
  41. package/vscode/src/vs/workbench/contrib/debug/browser/repl.js +0 -992
  42. package/vscode/src/vs/workbench/contrib/debug/browser/replFilter.js +0 -48
  43. package/vscode/src/vs/workbench/contrib/debug/browser/replViewer.js +0 -348
  44. package/vscode/src/vs/workbench/contrib/debug/browser/statusbarColorProvider.js +0 -119
  45. package/vscode/src/vs/workbench/contrib/debug/browser/variablesView.js +0 -763
  46. package/vscode/src/vs/workbench/contrib/debug/browser/watchExpressionsView.js +0 -501
  47. package/vscode/src/vs/workbench/contrib/debug/browser/welcomeView.js +0 -162
  48. package/vscode/src/vs/workbench/contrib/debug/common/breakpoints.js +0 -21
  49. package/vscode/src/vs/workbench/contrib/debug/common/debugCompoundRoot.js +0 -17
  50. package/vscode/src/vs/workbench/contrib/debug/common/debugContentProvider.js +0 -110
  51. package/vscode/src/vs/workbench/contrib/debug/common/debugLifecycle.js +0 -62
  52. package/vscode/src/vs/workbench/contrib/debug/common/debugSchemas.js +0 -460
  53. package/vscode/src/vs/workbench/contrib/debug/common/debugStorage.js +0 -162
  54. package/vscode/src/vs/workbench/contrib/debug/common/debugTelemetry.js +0 -36
  55. package/vscode/src/vs/workbench/contrib/debug/common/debugViewModel.js +0 -148
  56. package/vscode/src/vs/workbench/contrib/debug/common/debugger.js +0 -289
  57. package/vscode/src/vs/workbench/contrib/debug/common/loadedScriptsPicker.js +0 -87
  58. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariableCommands.js +0 -64
  59. package/vscode/src/vs/workbench/services/configurationResolver/browser/baseConfigurationResolverService.js +0 -311
  60. package/vscode/src/vs/workbench/services/configurationResolver/browser/configurationResolverService.js +0 -28
@@ -1,1011 +0,0 @@
1
- import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
- import { append, $ as $$1 } from 'vscode/vscode/vs/base/browser/dom';
3
- import { ActionBar } from 'vscode/vscode/vs/base/browser/ui/actionbar/actionbar';
4
- import { HighlightedLabel } from 'vscode/vscode/vs/base/browser/ui/highlightedlabel/highlightedLabel';
5
- import { Action } from 'vscode/vscode/vs/base/common/actions';
6
- import { RunOnceScheduler } from 'vscode/vscode/vs/base/common/async';
7
- import { Codicon } from 'vscode/vscode/vs/base/common/codicons';
8
- import { Event } from 'vscode/vscode/vs/base/common/event';
9
- import { createMatches } from 'vscode/vscode/vs/base/common/filters';
10
- import { DisposableStore, dispose } from 'vscode/vscode/vs/base/common/lifecycle';
11
- import { posix } from 'vscode/vscode/vs/base/common/path';
12
- import { commonSuffixLength } from 'vscode/vscode/vs/base/common/strings';
13
- import { localizeWithPath } from 'vscode/vscode/vs/nls';
14
- import { MenuEntryActionViewItem, SubmenuEntryActionViewItem, createAndFillInContextMenuActions, createAndFillInActionBarActions } from 'vscode/vscode/vs/platform/actions/browser/menuEntryActionViewItem';
15
- import { MenuItemAction, SubmenuItemAction, MenuId, registerAction2, MenuRegistry, IMenuService } from 'vscode/vscode/vs/platform/actions/common/actions';
16
- import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration';
17
- import { ContextKeyExpr, IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
18
- import { IContextMenuService } from 'vscode/vscode/vs/platform/contextview/browser/contextView';
19
- import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
20
- import { IKeybindingService } from 'vscode/vscode/vs/platform/keybinding/common/keybinding';
21
- import { ILabelService } from 'vscode/vscode/vs/platform/label/common/label';
22
- import { WorkbenchCompressibleAsyncDataTree } from 'vscode/vscode/vs/platform/list/browser/listService';
23
- import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification';
24
- import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener';
25
- import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry';
26
- import { asCssVariable, textLinkForeground } from 'vscode/vscode/vs/platform/theme/common/colorRegistry';
27
- import { IThemeService } from 'vscode/vscode/vs/platform/theme/common/themeService';
28
- import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
29
- import { ViewAction, ViewPane } from 'vscode/vscode/vs/workbench/browser/parts/views/viewPane';
30
- import { IViewDescriptorService } from 'vscode/vscode/vs/workbench/common/views';
31
- import { renderViewTree } from 'vscode/vscode/vs/workbench/contrib/debug/browser/baseDebugView';
32
- import { STOP_ID, DISCONNECT_ID, PAUSE_LABEL, PAUSE_ID, CONTINUE_LABEL, CONTINUE_ID, RESTART_LABEL, RESTART_SESSION_ID, STOP_LABEL, DISCONNECT_LABEL, STEP_OVER_LABEL, STEP_OVER_ID, STEP_INTO_LABEL, STEP_INTO_ID, STEP_OUT_LABEL, STEP_OUT_ID } from './debugCommands.js';
33
- import { callstackViewSession, debugRestartFrame, debugPause, debugContinue, debugRestart, debugStop, debugDisconnect, debugStepOver, debugStepInto, debugStepOut } from 'vscode/vscode/vs/workbench/contrib/debug/browser/debugIcons';
34
- import { createDisconnectMenuItemAction } from './debugToolBar.js';
35
- import { CALLSTACK_VIEW_ID, CONTEXT_DEBUG_STATE, getStateLabel, CONTEXT_CALLSTACK_ITEM_TYPE, CONTEXT_CALLSTACK_SESSION_HAS_ONE_THREAD, CONTEXT_FOCUSED_SESSION_IS_NO_DEBUG, CONTEXT_CALLSTACK_ITEM_STOPPED, CONTEXT_CALLSTACK_SESSION_IS_ATTACH, CONTEXT_STACK_FRAME_SUPPORTS_RESTART, IDebugService } from 'vscode/vscode/vs/workbench/contrib/debug/common/debug';
36
- import { Thread, StackFrame, ThreadAndSessionIds } from 'vscode/vscode/vs/workbench/contrib/debug/common/debugModel';
37
- import { isSessionAttach } from 'vscode/vscode/vs/workbench/contrib/debug/common/debugUtils';
38
-
39
- var SessionsRenderer_1, ThreadsRenderer_1, StackFramesRenderer_1;
40
- const $ = $$1;
41
- function assignSessionContext(element, context) {
42
- context.sessionId = element.getId();
43
- return context;
44
- }
45
- function assignThreadContext(element, context) {
46
- context.threadId = element.getId();
47
- assignSessionContext(element.session, context);
48
- return context;
49
- }
50
- function assignStackFrameContext(element, context) {
51
- context.frameId = element.getId();
52
- context.frameName = element.name;
53
- context.frameLocation = { range: element.range, source: element.source.raw };
54
- assignThreadContext(element.thread, context);
55
- return context;
56
- }
57
- function getContext(element) {
58
- if (element instanceof StackFrame) {
59
- return assignStackFrameContext(element, {});
60
- }
61
- else if (element instanceof Thread) {
62
- return assignThreadContext(element, {});
63
- }
64
- else if (isDebugSession(element)) {
65
- return assignSessionContext(element, {});
66
- }
67
- else {
68
- return undefined;
69
- }
70
- }
71
- function getContextForContributedActions(element) {
72
- if (element instanceof StackFrame) {
73
- if (element.source.inMemory) {
74
- return element.source.raw.path || element.source.reference || element.source.name;
75
- }
76
- return ( element.source.uri.toString());
77
- }
78
- if (element instanceof Thread) {
79
- return element.threadId;
80
- }
81
- if (isDebugSession(element)) {
82
- return element.getId();
83
- }
84
- return '';
85
- }
86
- function getSpecificSourceName(stackFrame) {
87
- let callStack = stackFrame.thread.getStaleCallStack();
88
- callStack = callStack.length > 0 ? callStack : stackFrame.thread.getCallStack();
89
- const otherSources = ( callStack.map(sf => sf.source)).filter(s => s !== stackFrame.source);
90
- let suffixLength = 0;
91
- otherSources.forEach(s => {
92
- if (s.name === stackFrame.source.name) {
93
- suffixLength = Math.max(suffixLength, commonSuffixLength(stackFrame.source.uri.path, s.uri.path));
94
- }
95
- });
96
- if (suffixLength === 0) {
97
- return stackFrame.source.name;
98
- }
99
- const from = Math.max(0, stackFrame.source.uri.path.lastIndexOf(posix.sep, stackFrame.source.uri.path.length - suffixLength - 1));
100
- return (from > 0 ? '...' : '') + stackFrame.source.uri.path.substring(from);
101
- }
102
- async function expandTo(session, tree) {
103
- if (session.parentSession) {
104
- await expandTo(session.parentSession, tree);
105
- }
106
- await tree.expand(session);
107
- }
108
- let CallStackView = class CallStackView extends ViewPane {
109
- constructor(options, contextMenuService, debugService, keybindingService, instantiationService, viewDescriptorService, configurationService, contextKeyService, openerService, themeService, telemetryService, menuService) {
110
- super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService);
111
- this.options = options;
112
- this.debugService = debugService;
113
- this.menuService = menuService;
114
- this.needsRefresh = false;
115
- this.ignoreSelectionChangedEvent = false;
116
- this.ignoreFocusStackFrameEvent = false;
117
- this.autoExpandedSessions = ( new Set());
118
- this.selectionNeedsUpdate = false;
119
- this.onCallStackChangeScheduler = this._register(( new RunOnceScheduler(async () => {
120
- const sessions = this.debugService.getModel().getSessions();
121
- if (sessions.length === 0) {
122
- this.autoExpandedSessions.clear();
123
- }
124
- const thread = sessions.length === 1 && sessions[0].getAllThreads().length === 1 ? sessions[0].getAllThreads()[0] : undefined;
125
- const stoppedDetails = sessions.length === 1 ? sessions[0].getStoppedDetails() : undefined;
126
- if (stoppedDetails && (thread || typeof stoppedDetails.threadId !== 'number')) {
127
- this.stateMessageLabel.textContent = stoppedDescription(stoppedDetails);
128
- this.stateMessageLabel.title = stoppedText(stoppedDetails);
129
- this.stateMessageLabel.classList.toggle('exception', stoppedDetails.reason === 'exception');
130
- this.stateMessage.hidden = false;
131
- }
132
- else if (sessions.length === 1 && sessions[0].state === 3 ) {
133
- this.stateMessageLabel.textContent = ( localizeWithPath(
134
- 'vs/workbench/contrib/debug/browser/callStackView',
135
- { key: 'running', comment: ['indicates state'] },
136
- "Running"
137
- ));
138
- this.stateMessageLabel.title = sessions[0].getLabel();
139
- this.stateMessageLabel.classList.remove('exception');
140
- this.stateMessage.hidden = false;
141
- }
142
- else {
143
- this.stateMessage.hidden = true;
144
- }
145
- this.updateActions();
146
- this.needsRefresh = false;
147
- this.dataSource.deemphasizedStackFramesToShow = [];
148
- await this.tree.updateChildren();
149
- try {
150
- const toExpand = ( new Set());
151
- sessions.forEach(s => {
152
- if (s.parentSession && !( this.autoExpandedSessions.has(s.parentSession))) {
153
- toExpand.add(s.parentSession);
154
- }
155
- });
156
- for (const session of toExpand) {
157
- await expandTo(session, this.tree);
158
- this.autoExpandedSessions.add(session);
159
- }
160
- }
161
- catch (e) {
162
- }
163
- if (this.selectionNeedsUpdate) {
164
- this.selectionNeedsUpdate = false;
165
- await this.updateTreeSelection();
166
- }
167
- }, 50)));
168
- }
169
- renderHeaderTitle(container) {
170
- super.renderHeaderTitle(container, this.options.title);
171
- this.stateMessage = append(container, $('span.call-stack-state-message'));
172
- this.stateMessage.hidden = true;
173
- this.stateMessageLabel = append(this.stateMessage, $('span.label'));
174
- }
175
- renderBody(container) {
176
- super.renderBody(container);
177
- this.element.classList.add('debug-pane');
178
- container.classList.add('debug-call-stack');
179
- const treeContainer = renderViewTree(container);
180
- this.dataSource = ( new CallStackDataSource(this.debugService));
181
- this.tree = this.instantiationService.createInstance(WorkbenchCompressibleAsyncDataTree, 'CallStackView', treeContainer, ( new CallStackDelegate()), ( new CallStackCompressionDelegate(this.debugService)), [
182
- this.instantiationService.createInstance(SessionsRenderer),
183
- this.instantiationService.createInstance(ThreadsRenderer),
184
- this.instantiationService.createInstance(StackFramesRenderer),
185
- ( new ErrorsRenderer()),
186
- ( new LoadMoreRenderer()),
187
- ( new ShowMoreRenderer())
188
- ], this.dataSource, {
189
- accessibilityProvider: ( new CallStackAccessibilityProvider()),
190
- compressionEnabled: true,
191
- autoExpandSingleChildren: true,
192
- identityProvider: {
193
- getId: (element) => {
194
- if (typeof element === 'string') {
195
- return element;
196
- }
197
- if (element instanceof Array) {
198
- return `showMore ${element[0].getId()}`;
199
- }
200
- return element.getId();
201
- }
202
- },
203
- keyboardNavigationLabelProvider: {
204
- getKeyboardNavigationLabel: (e) => {
205
- if (isDebugSession(e)) {
206
- return e.getLabel();
207
- }
208
- if (e instanceof Thread) {
209
- return `${e.name} ${e.stateLabel}`;
210
- }
211
- if (e instanceof StackFrame || typeof e === 'string') {
212
- return e;
213
- }
214
- if (e instanceof ThreadAndSessionIds) {
215
- return LoadMoreRenderer.LABEL;
216
- }
217
- return ( localizeWithPath(
218
- 'vs/workbench/contrib/debug/browser/callStackView',
219
- 'showMoreStackFrames2',
220
- "Show More Stack Frames"
221
- ));
222
- },
223
- getCompressedNodeKeyboardNavigationLabel: (e) => {
224
- const firstItem = e[0];
225
- if (isDebugSession(firstItem)) {
226
- return firstItem.getLabel();
227
- }
228
- return '';
229
- }
230
- },
231
- expandOnlyOnTwistieClick: true,
232
- overrideStyles: {
233
- listBackground: this.getBackgroundColor()
234
- }
235
- });
236
- this.tree.setInput(this.debugService.getModel());
237
- this._register(this.tree);
238
- this._register(this.tree.onDidOpen(async (e) => {
239
- if (this.ignoreSelectionChangedEvent) {
240
- return;
241
- }
242
- const focusStackFrame = (stackFrame, thread, session, options = {}) => {
243
- this.ignoreFocusStackFrameEvent = true;
244
- try {
245
- this.debugService.focusStackFrame(stackFrame, thread, session, { ...options, ...{ explicit: true } });
246
- }
247
- finally {
248
- this.ignoreFocusStackFrameEvent = false;
249
- }
250
- };
251
- const element = e.element;
252
- if (element instanceof StackFrame) {
253
- const opts = {
254
- preserveFocus: e.editorOptions.preserveFocus,
255
- sideBySide: e.sideBySide,
256
- pinned: e.editorOptions.pinned
257
- };
258
- focusStackFrame(element, element.thread, element.thread.session, opts);
259
- }
260
- if (element instanceof Thread) {
261
- focusStackFrame(undefined, element, element.session);
262
- }
263
- if (isDebugSession(element)) {
264
- focusStackFrame(undefined, undefined, element);
265
- }
266
- if (element instanceof ThreadAndSessionIds) {
267
- const session = this.debugService.getModel().getSession(element.sessionId);
268
- const thread = session && session.getThread(element.threadId);
269
- if (thread) {
270
- const totalFrames = thread.stoppedDetails?.totalFrames;
271
- const remainingFramesCount = typeof totalFrames === 'number' ? (totalFrames - thread.getCallStack().length) : undefined;
272
- await thread.fetchCallStack(remainingFramesCount);
273
- await this.tree.updateChildren();
274
- }
275
- }
276
- if (element instanceof Array) {
277
- this.dataSource.deemphasizedStackFramesToShow.push(...element);
278
- this.tree.updateChildren();
279
- }
280
- }));
281
- this._register(this.debugService.getModel().onDidChangeCallStack(() => {
282
- if (!this.isBodyVisible()) {
283
- this.needsRefresh = true;
284
- return;
285
- }
286
- if (!this.onCallStackChangeScheduler.isScheduled()) {
287
- this.onCallStackChangeScheduler.schedule();
288
- }
289
- }));
290
- const onFocusChange = Event.any(this.debugService.getViewModel().onDidFocusStackFrame, this.debugService.getViewModel().onDidFocusSession);
291
- this._register(onFocusChange(async () => {
292
- if (this.ignoreFocusStackFrameEvent) {
293
- return;
294
- }
295
- if (!this.isBodyVisible()) {
296
- this.needsRefresh = true;
297
- return;
298
- }
299
- if (this.onCallStackChangeScheduler.isScheduled()) {
300
- this.selectionNeedsUpdate = true;
301
- return;
302
- }
303
- await this.updateTreeSelection();
304
- }));
305
- this._register(this.tree.onContextMenu(e => this.onContextMenu(e)));
306
- if (this.debugService.state === 2 ) {
307
- this.onCallStackChangeScheduler.schedule(0);
308
- }
309
- this._register(this.onDidChangeBodyVisibility(visible => {
310
- if (visible && this.needsRefresh) {
311
- this.onCallStackChangeScheduler.schedule();
312
- }
313
- }));
314
- this._register(this.debugService.onDidNewSession(s => {
315
- const sessionListeners = [];
316
- sessionListeners.push(s.onDidChangeName(() => {
317
- if (this.tree.hasNode(s)) {
318
- this.tree.rerender(s);
319
- }
320
- }));
321
- sessionListeners.push(s.onDidEndAdapter(() => dispose(sessionListeners)));
322
- if (s.parentSession) {
323
- this.autoExpandedSessions.delete(s.parentSession);
324
- }
325
- }));
326
- }
327
- layoutBody(height, width) {
328
- super.layoutBody(height, width);
329
- this.tree.layout(height, width);
330
- }
331
- focus() {
332
- super.focus();
333
- this.tree.domFocus();
334
- }
335
- collapseAll() {
336
- this.tree.collapseAll();
337
- }
338
- async updateTreeSelection() {
339
- if (!this.tree || !this.tree.getInput()) {
340
- return;
341
- }
342
- const updateSelectionAndReveal = (element) => {
343
- this.ignoreSelectionChangedEvent = true;
344
- try {
345
- this.tree.setSelection([element]);
346
- if (this.tree.getRelativeTop(element) === null) {
347
- this.tree.reveal(element, 0.5);
348
- }
349
- else {
350
- this.tree.reveal(element);
351
- }
352
- }
353
- catch (e) { }
354
- finally {
355
- this.ignoreSelectionChangedEvent = false;
356
- }
357
- };
358
- const thread = this.debugService.getViewModel().focusedThread;
359
- const session = this.debugService.getViewModel().focusedSession;
360
- const stackFrame = this.debugService.getViewModel().focusedStackFrame;
361
- if (!thread) {
362
- if (!session) {
363
- this.tree.setSelection([]);
364
- }
365
- else {
366
- updateSelectionAndReveal(session);
367
- }
368
- }
369
- else {
370
- try {
371
- await expandTo(thread.session, this.tree);
372
- }
373
- catch (e) { }
374
- try {
375
- await this.tree.expand(thread);
376
- }
377
- catch (e) { }
378
- const toReveal = stackFrame || session;
379
- if (toReveal) {
380
- updateSelectionAndReveal(toReveal);
381
- }
382
- }
383
- }
384
- onContextMenu(e) {
385
- const element = e.element;
386
- let overlay = [];
387
- if (isDebugSession(element)) {
388
- overlay = getSessionContextOverlay(element);
389
- }
390
- else if (element instanceof Thread) {
391
- overlay = getThreadContextOverlay(element);
392
- }
393
- else if (element instanceof StackFrame) {
394
- overlay = getStackFrameContextOverlay(element);
395
- }
396
- const primary = [];
397
- const secondary = [];
398
- const result = { primary, secondary };
399
- const contextKeyService = this.contextKeyService.createOverlay(overlay);
400
- const menu = this.menuService.createMenu(MenuId.DebugCallStackContext, contextKeyService);
401
- createAndFillInContextMenuActions(menu, { arg: getContextForContributedActions(element), shouldForwardArgs: true }, result, 'inline');
402
- menu.dispose();
403
- this.contextMenuService.showContextMenu({
404
- getAnchor: () => e.anchor,
405
- getActions: () => result.secondary,
406
- getActionsContext: () => getContext(element)
407
- });
408
- }
409
- };
410
- CallStackView = ( __decorate([
411
- ( __param(1, IContextMenuService)),
412
- ( __param(2, IDebugService)),
413
- ( __param(3, IKeybindingService)),
414
- ( __param(4, IInstantiationService)),
415
- ( __param(5, IViewDescriptorService)),
416
- ( __param(6, IConfigurationService)),
417
- ( __param(7, IContextKeyService)),
418
- ( __param(8, IOpenerService)),
419
- ( __param(9, IThemeService)),
420
- ( __param(10, ITelemetryService)),
421
- ( __param(11, IMenuService))
422
- ], CallStackView));
423
- function getSessionContextOverlay(session) {
424
- return [
425
- [CONTEXT_CALLSTACK_ITEM_TYPE.key, 'session'],
426
- [CONTEXT_CALLSTACK_SESSION_IS_ATTACH.key, isSessionAttach(session)],
427
- [CONTEXT_CALLSTACK_ITEM_STOPPED.key, session.state === 2 ],
428
- [CONTEXT_CALLSTACK_SESSION_HAS_ONE_THREAD.key, session.getAllThreads().length === 1],
429
- ];
430
- }
431
- let SessionsRenderer = class SessionsRenderer {
432
- static { SessionsRenderer_1 = this; }
433
- static { this.ID = 'session'; }
434
- constructor(instantiationService, contextKeyService, menuService) {
435
- this.instantiationService = instantiationService;
436
- this.contextKeyService = contextKeyService;
437
- this.menuService = menuService;
438
- }
439
- get templateId() {
440
- return SessionsRenderer_1.ID;
441
- }
442
- renderTemplate(container) {
443
- const session = append(container, $('.session'));
444
- append(session, $(ThemeIcon.asCSSSelector(callstackViewSession)));
445
- const name = append(session, $('.name'));
446
- const stateLabel = append(session, $('span.state.label.monaco-count-badge.long'));
447
- const label = ( new HighlightedLabel(name));
448
- const templateDisposable = ( new DisposableStore());
449
- const stopActionViewItemDisposables = templateDisposable.add(( new DisposableStore()));
450
- const actionBar = templateDisposable.add(( new ActionBar(session, {
451
- actionViewItemProvider: (action, options) => {
452
- if ((action.id === STOP_ID || action.id === DISCONNECT_ID) && action instanceof MenuItemAction) {
453
- stopActionViewItemDisposables.clear();
454
- const item = this.instantiationService.invokeFunction(accessor => createDisconnectMenuItemAction(action, stopActionViewItemDisposables, accessor, options));
455
- if (item) {
456
- return item;
457
- }
458
- }
459
- if (action instanceof MenuItemAction) {
460
- return this.instantiationService.createInstance(MenuEntryActionViewItem, action, undefined);
461
- }
462
- else if (action instanceof SubmenuItemAction) {
463
- return this.instantiationService.createInstance(SubmenuEntryActionViewItem, action, undefined);
464
- }
465
- return undefined;
466
- }
467
- })));
468
- const elementDisposable = templateDisposable.add(( new DisposableStore()));
469
- return { session, name, stateLabel, label, actionBar, elementDisposable, templateDisposable };
470
- }
471
- renderElement(element, _, data) {
472
- this.doRenderElement(element.element, createMatches(element.filterData), data);
473
- }
474
- renderCompressedElements(node, _index, templateData) {
475
- const lastElement = node.element.elements[node.element.elements.length - 1];
476
- const matches = createMatches(node.filterData);
477
- this.doRenderElement(lastElement, matches, templateData);
478
- }
479
- doRenderElement(session, matches, data) {
480
- data.session.title = ( localizeWithPath(
481
- 'vs/workbench/contrib/debug/browser/callStackView',
482
- { key: 'session', comment: ['Session is a noun'] },
483
- "Session"
484
- ));
485
- data.label.set(session.getLabel(), matches);
486
- const stoppedDetails = session.getStoppedDetails();
487
- const thread = session.getAllThreads().find(t => t.stopped);
488
- const contextKeyService = this.contextKeyService.createOverlay(getSessionContextOverlay(session));
489
- const menu = data.elementDisposable.add(this.menuService.createMenu(MenuId.DebugCallStackContext, contextKeyService));
490
- const setupActionBar = () => {
491
- data.actionBar.clear();
492
- const primary = [];
493
- const secondary = [];
494
- const result = { primary, secondary };
495
- createAndFillInActionBarActions(menu, { arg: getContextForContributedActions(session), shouldForwardArgs: true }, result, 'inline');
496
- data.actionBar.push(primary, { icon: true, label: false });
497
- data.actionBar.context = getContext(session);
498
- };
499
- data.elementDisposable.add(menu.onDidChange(() => setupActionBar()));
500
- setupActionBar();
501
- data.stateLabel.style.display = '';
502
- if (stoppedDetails) {
503
- data.stateLabel.textContent = stoppedDescription(stoppedDetails);
504
- data.session.title = `${session.getLabel()}: ${stoppedText(stoppedDetails)}`;
505
- data.stateLabel.classList.toggle('exception', stoppedDetails.reason === 'exception');
506
- }
507
- else if (thread && thread.stoppedDetails) {
508
- data.stateLabel.textContent = stoppedDescription(thread.stoppedDetails);
509
- data.session.title = `${session.getLabel()}: ${stoppedText(thread.stoppedDetails)}`;
510
- data.stateLabel.classList.toggle('exception', thread.stoppedDetails.reason === 'exception');
511
- }
512
- else {
513
- data.stateLabel.textContent = ( localizeWithPath(
514
- 'vs/workbench/contrib/debug/browser/callStackView',
515
- { key: 'running', comment: ['indicates state'] },
516
- "Running"
517
- ));
518
- data.stateLabel.classList.remove('exception');
519
- }
520
- }
521
- disposeTemplate(templateData) {
522
- templateData.templateDisposable.dispose();
523
- }
524
- disposeElement(_element, _, templateData) {
525
- templateData.elementDisposable.clear();
526
- }
527
- disposeCompressedElements(node, index, templateData, height) {
528
- templateData.elementDisposable.clear();
529
- }
530
- };
531
- SessionsRenderer = SessionsRenderer_1 = ( __decorate([
532
- ( __param(0, IInstantiationService)),
533
- ( __param(1, IContextKeyService)),
534
- ( __param(2, IMenuService))
535
- ], SessionsRenderer));
536
- function getThreadContextOverlay(thread) {
537
- return [
538
- [CONTEXT_CALLSTACK_ITEM_TYPE.key, 'thread'],
539
- [CONTEXT_CALLSTACK_ITEM_STOPPED.key, thread.stopped]
540
- ];
541
- }
542
- let ThreadsRenderer = class ThreadsRenderer {
543
- static { ThreadsRenderer_1 = this; }
544
- static { this.ID = 'thread'; }
545
- constructor(contextKeyService, menuService) {
546
- this.contextKeyService = contextKeyService;
547
- this.menuService = menuService;
548
- }
549
- get templateId() {
550
- return ThreadsRenderer_1.ID;
551
- }
552
- renderTemplate(container) {
553
- const thread = append(container, $('.thread'));
554
- const name = append(thread, $('.name'));
555
- const stateLabel = append(thread, $('span.state.label.monaco-count-badge.long'));
556
- const label = ( new HighlightedLabel(name));
557
- const templateDisposable = ( new DisposableStore());
558
- const actionBar = templateDisposable.add(( new ActionBar(thread)));
559
- const elementDisposable = templateDisposable.add(( new DisposableStore()));
560
- return { thread, name, stateLabel, label, actionBar, elementDisposable, templateDisposable };
561
- }
562
- renderElement(element, _index, data) {
563
- const thread = element.element;
564
- data.thread.title = thread.name;
565
- data.label.set(thread.name, createMatches(element.filterData));
566
- data.stateLabel.textContent = thread.stateLabel;
567
- data.stateLabel.classList.toggle('exception', thread.stoppedDetails?.reason === 'exception');
568
- const contextKeyService = this.contextKeyService.createOverlay(getThreadContextOverlay(thread));
569
- const menu = data.elementDisposable.add(this.menuService.createMenu(MenuId.DebugCallStackContext, contextKeyService));
570
- const setupActionBar = () => {
571
- data.actionBar.clear();
572
- const primary = [];
573
- const secondary = [];
574
- const result = { primary, secondary };
575
- createAndFillInActionBarActions(menu, { arg: getContextForContributedActions(thread), shouldForwardArgs: true }, result, 'inline');
576
- data.actionBar.push(primary, { icon: true, label: false });
577
- data.actionBar.context = getContext(thread);
578
- };
579
- data.elementDisposable.add(menu.onDidChange(() => setupActionBar()));
580
- setupActionBar();
581
- }
582
- renderCompressedElements(_node, _index, _templateData, _height) {
583
- throw new Error('Method not implemented.');
584
- }
585
- disposeElement(_element, _index, templateData) {
586
- templateData.elementDisposable.clear();
587
- }
588
- disposeTemplate(templateData) {
589
- templateData.templateDisposable.dispose();
590
- }
591
- };
592
- ThreadsRenderer = ThreadsRenderer_1 = ( __decorate([
593
- ( __param(0, IContextKeyService)),
594
- ( __param(1, IMenuService))
595
- ], ThreadsRenderer));
596
- function getStackFrameContextOverlay(stackFrame) {
597
- return [
598
- [CONTEXT_CALLSTACK_ITEM_TYPE.key, 'stackFrame'],
599
- [CONTEXT_STACK_FRAME_SUPPORTS_RESTART.key, stackFrame.canRestart]
600
- ];
601
- }
602
- let StackFramesRenderer = class StackFramesRenderer {
603
- static { StackFramesRenderer_1 = this; }
604
- static { this.ID = 'stackFrame'; }
605
- constructor(labelService, notificationService) {
606
- this.labelService = labelService;
607
- this.notificationService = notificationService;
608
- }
609
- get templateId() {
610
- return StackFramesRenderer_1.ID;
611
- }
612
- renderTemplate(container) {
613
- const stackFrame = append(container, $('.stack-frame'));
614
- const labelDiv = append(stackFrame, $('span.label.expression'));
615
- const file = append(stackFrame, $('.file'));
616
- const fileName = append(file, $('span.file-name'));
617
- const wrapper = append(file, $('span.line-number-wrapper'));
618
- const lineNumber = append(wrapper, $('span.line-number.monaco-count-badge'));
619
- const label = ( new HighlightedLabel(labelDiv));
620
- const templateDisposable = ( new DisposableStore());
621
- const actionBar = templateDisposable.add(( new ActionBar(stackFrame)));
622
- return { file, fileName, label, lineNumber, stackFrame, actionBar, templateDisposable };
623
- }
624
- renderElement(element, index, data) {
625
- const stackFrame = element.element;
626
- data.stackFrame.classList.toggle('disabled', !stackFrame.source || !stackFrame.source.available || isDeemphasized(stackFrame));
627
- data.stackFrame.classList.toggle('label', stackFrame.presentationHint === 'label');
628
- data.stackFrame.classList.toggle('subtle', stackFrame.presentationHint === 'subtle');
629
- const hasActions = !!stackFrame.thread.session.capabilities.supportsRestartFrame && stackFrame.presentationHint !== 'label' && stackFrame.presentationHint !== 'subtle' && stackFrame.canRestart;
630
- data.stackFrame.classList.toggle('has-actions', hasActions);
631
- data.file.title = stackFrame.source.inMemory ? stackFrame.source.uri.path : this.labelService.getUriLabel(stackFrame.source.uri);
632
- if (stackFrame.source.raw.origin) {
633
- data.file.title += `\n${stackFrame.source.raw.origin}`;
634
- }
635
- data.label.set(stackFrame.name, createMatches(element.filterData), stackFrame.name);
636
- data.fileName.textContent = getSpecificSourceName(stackFrame);
637
- if (stackFrame.range.startLineNumber !== undefined) {
638
- data.lineNumber.textContent = `${stackFrame.range.startLineNumber}`;
639
- if (stackFrame.range.startColumn) {
640
- data.lineNumber.textContent += `:${stackFrame.range.startColumn}`;
641
- }
642
- data.lineNumber.classList.remove('unavailable');
643
- }
644
- else {
645
- data.lineNumber.classList.add('unavailable');
646
- }
647
- data.actionBar.clear();
648
- if (hasActions) {
649
- const action = ( new Action('debug.callStack.restartFrame', ( localizeWithPath(
650
- 'vs/workbench/contrib/debug/browser/callStackView',
651
- 'restartFrame',
652
- "Restart Frame"
653
- )), ThemeIcon.asClassName(debugRestartFrame), true, async () => {
654
- try {
655
- await stackFrame.restart();
656
- }
657
- catch (e) {
658
- this.notificationService.error(e);
659
- }
660
- }));
661
- data.actionBar.push(action, { icon: true, label: false });
662
- }
663
- }
664
- renderCompressedElements(node, index, templateData, height) {
665
- throw new Error('Method not implemented.');
666
- }
667
- disposeTemplate(templateData) {
668
- templateData.actionBar.dispose();
669
- }
670
- };
671
- StackFramesRenderer = StackFramesRenderer_1 = ( __decorate([
672
- ( __param(0, ILabelService)),
673
- ( __param(1, INotificationService))
674
- ], StackFramesRenderer));
675
- class ErrorsRenderer {
676
- static { this.ID = 'error'; }
677
- get templateId() {
678
- return ErrorsRenderer.ID;
679
- }
680
- renderTemplate(container) {
681
- const label = append(container, $('.error'));
682
- return { label };
683
- }
684
- renderElement(element, index, data) {
685
- const error = element.element;
686
- data.label.textContent = error;
687
- data.label.title = error;
688
- }
689
- renderCompressedElements(node, index, templateData, height) {
690
- throw new Error('Method not implemented.');
691
- }
692
- disposeTemplate(templateData) {
693
- }
694
- }
695
- class LoadMoreRenderer {
696
- static { this.ID = 'loadMore'; }
697
- static { this.LABEL = ( localizeWithPath(
698
- 'vs/workbench/contrib/debug/browser/callStackView',
699
- 'loadAllStackFrames',
700
- "Load More Stack Frames"
701
- )); }
702
- constructor() { }
703
- get templateId() {
704
- return LoadMoreRenderer.ID;
705
- }
706
- renderTemplate(container) {
707
- const label = append(container, $('.load-all'));
708
- label.style.color = asCssVariable(textLinkForeground);
709
- return { label };
710
- }
711
- renderElement(element, index, data) {
712
- data.label.textContent = LoadMoreRenderer.LABEL;
713
- }
714
- renderCompressedElements(node, index, templateData, height) {
715
- throw new Error('Method not implemented.');
716
- }
717
- disposeTemplate(templateData) {
718
- }
719
- }
720
- class ShowMoreRenderer {
721
- static { this.ID = 'showMore'; }
722
- constructor() { }
723
- get templateId() {
724
- return ShowMoreRenderer.ID;
725
- }
726
- renderTemplate(container) {
727
- const label = append(container, $('.show-more'));
728
- label.style.color = asCssVariable(textLinkForeground);
729
- return { label };
730
- }
731
- renderElement(element, index, data) {
732
- const stackFrames = element.element;
733
- if (stackFrames.every(sf => !!(sf.source && sf.source.origin && sf.source.origin === stackFrames[0].source.origin))) {
734
- data.label.textContent = ( localizeWithPath(
735
- 'vs/workbench/contrib/debug/browser/callStackView',
736
- 'showMoreAndOrigin',
737
- "Show {0} More: {1}",
738
- stackFrames.length,
739
- stackFrames[0].source.origin
740
- ));
741
- }
742
- else {
743
- data.label.textContent = ( localizeWithPath(
744
- 'vs/workbench/contrib/debug/browser/callStackView',
745
- 'showMoreStackFrames',
746
- "Show {0} More Stack Frames",
747
- stackFrames.length
748
- ));
749
- }
750
- }
751
- renderCompressedElements(node, index, templateData, height) {
752
- throw new Error('Method not implemented.');
753
- }
754
- disposeTemplate(templateData) {
755
- }
756
- }
757
- class CallStackDelegate {
758
- getHeight(element) {
759
- if (element instanceof StackFrame && element.presentationHint === 'label') {
760
- return 16;
761
- }
762
- if (element instanceof ThreadAndSessionIds || element instanceof Array) {
763
- return 16;
764
- }
765
- return 22;
766
- }
767
- getTemplateId(element) {
768
- if (isDebugSession(element)) {
769
- return SessionsRenderer.ID;
770
- }
771
- if (element instanceof Thread) {
772
- return ThreadsRenderer.ID;
773
- }
774
- if (element instanceof StackFrame) {
775
- return StackFramesRenderer.ID;
776
- }
777
- if (typeof element === 'string') {
778
- return ErrorsRenderer.ID;
779
- }
780
- if (element instanceof ThreadAndSessionIds) {
781
- return LoadMoreRenderer.ID;
782
- }
783
- return ShowMoreRenderer.ID;
784
- }
785
- }
786
- function stoppedText(stoppedDetails) {
787
- return stoppedDetails.text ?? stoppedDescription(stoppedDetails);
788
- }
789
- function stoppedDescription(stoppedDetails) {
790
- return stoppedDetails.description ||
791
- (stoppedDetails.reason ? ( localizeWithPath(
792
- 'vs/workbench/contrib/debug/browser/callStackView',
793
- { key: 'pausedOn', comment: ['indicates reason for program being paused'] },
794
- "Paused on {0}",
795
- stoppedDetails.reason
796
- )) : ( localizeWithPath('vs/workbench/contrib/debug/browser/callStackView', 'paused', "Paused")));
797
- }
798
- function isDebugModel(obj) {
799
- return typeof obj.getSessions === 'function';
800
- }
801
- function isDebugSession(obj) {
802
- return obj && typeof obj.getAllThreads === 'function';
803
- }
804
- function isDeemphasized(frame) {
805
- return frame.source.presentationHint === 'deemphasize' || frame.presentationHint === 'deemphasize';
806
- }
807
- class CallStackDataSource {
808
- constructor(debugService) {
809
- this.debugService = debugService;
810
- this.deemphasizedStackFramesToShow = [];
811
- }
812
- hasChildren(element) {
813
- if (isDebugSession(element)) {
814
- const threads = element.getAllThreads();
815
- return (threads.length > 1) || (threads.length === 1 && threads[0].stopped) || !!(this.debugService.getModel().getSessions().find(s => s.parentSession === element));
816
- }
817
- return isDebugModel(element) || (element instanceof Thread && element.stopped);
818
- }
819
- async getChildren(element) {
820
- if (isDebugModel(element)) {
821
- const sessions = element.getSessions();
822
- if (sessions.length === 0) {
823
- return Promise.resolve([]);
824
- }
825
- if (sessions.length > 1 || this.debugService.getViewModel().isMultiSessionView()) {
826
- return Promise.resolve(sessions.filter(s => !s.parentSession));
827
- }
828
- const threads = sessions[0].getAllThreads();
829
- return threads.length === 1 ? this.getThreadChildren(threads[0]) : Promise.resolve(threads);
830
- }
831
- else if (isDebugSession(element)) {
832
- const childSessions = this.debugService.getModel().getSessions().filter(s => s.parentSession === element);
833
- const threads = element.getAllThreads();
834
- if (threads.length === 1) {
835
- const children = await this.getThreadChildren(threads[0]);
836
- return children.concat(childSessions);
837
- }
838
- return Promise.resolve(threads.concat(childSessions));
839
- }
840
- else {
841
- return this.getThreadChildren(element);
842
- }
843
- }
844
- getThreadChildren(thread) {
845
- return this.getThreadCallstack(thread).then(children => {
846
- const result = [];
847
- children.forEach((child, index) => {
848
- if (child instanceof StackFrame && child.source && isDeemphasized(child)) {
849
- if (this.deemphasizedStackFramesToShow.indexOf(child) === -1) {
850
- if (result.length) {
851
- const last = result[result.length - 1];
852
- if (last instanceof Array) {
853
- last.push(child);
854
- return;
855
- }
856
- }
857
- const nextChild = index < children.length - 1 ? children[index + 1] : undefined;
858
- if (nextChild instanceof StackFrame && nextChild.source && isDeemphasized(nextChild)) {
859
- result.push([child]);
860
- return;
861
- }
862
- }
863
- }
864
- result.push(child);
865
- });
866
- return result;
867
- });
868
- }
869
- async getThreadCallstack(thread) {
870
- let callStack = thread.getCallStack();
871
- if (!callStack || !callStack.length) {
872
- await thread.fetchCallStack();
873
- callStack = thread.getCallStack();
874
- }
875
- if (callStack.length === 1 && thread.session.capabilities.supportsDelayedStackTraceLoading && thread.stoppedDetails && thread.stoppedDetails.totalFrames && thread.stoppedDetails.totalFrames > 1) {
876
- callStack = callStack.concat(thread.getStaleCallStack().slice(1));
877
- }
878
- if (thread.stoppedDetails && thread.stoppedDetails.framesErrorMessage) {
879
- callStack = callStack.concat([thread.stoppedDetails.framesErrorMessage]);
880
- }
881
- if (!thread.reachedEndOfCallStack && thread.stoppedDetails) {
882
- callStack = callStack.concat([( new ThreadAndSessionIds(thread.session.getId(), thread.threadId))]);
883
- }
884
- return callStack;
885
- }
886
- }
887
- class CallStackAccessibilityProvider {
888
- getWidgetAriaLabel() {
889
- return ( localizeWithPath(
890
- 'vs/workbench/contrib/debug/browser/callStackView',
891
- { comment: ['Debug is a noun in this context, not a verb.'], key: 'callStackAriaLabel' },
892
- "Debug Call Stack"
893
- ));
894
- }
895
- getWidgetRole() {
896
- return 'treegrid';
897
- }
898
- getRole(_element) {
899
- return 'row';
900
- }
901
- getAriaLabel(element) {
902
- if (element instanceof Thread) {
903
- return ( localizeWithPath(
904
- 'vs/workbench/contrib/debug/browser/callStackView',
905
- { key: 'threadAriaLabel', comment: ['Placeholders stand for the thread name and the thread state.For example "Thread 1" and "Stopped'] },
906
- "Thread {0} {1}",
907
- element.name,
908
- element.stateLabel
909
- ));
910
- }
911
- if (element instanceof StackFrame) {
912
- return ( localizeWithPath(
913
- 'vs/workbench/contrib/debug/browser/callStackView',
914
- 'stackFrameAriaLabel',
915
- "Stack Frame {0}, line {1}, {2}",
916
- element.name,
917
- element.range.startLineNumber,
918
- getSpecificSourceName(element)
919
- ));
920
- }
921
- if (isDebugSession(element)) {
922
- const thread = element.getAllThreads().find(t => t.stopped);
923
- const state = thread ? thread.stateLabel : ( localizeWithPath(
924
- 'vs/workbench/contrib/debug/browser/callStackView',
925
- { key: 'running', comment: ['indicates state'] },
926
- "Running"
927
- ));
928
- return ( localizeWithPath(
929
- 'vs/workbench/contrib/debug/browser/callStackView',
930
- { key: 'sessionLabel', comment: ['Placeholders stand for the session name and the session state. For example "Launch Program" and "Running"'] },
931
- "Session {0} {1}",
932
- element.getLabel(),
933
- state
934
- ));
935
- }
936
- if (typeof element === 'string') {
937
- return element;
938
- }
939
- if (element instanceof Array) {
940
- return ( localizeWithPath(
941
- 'vs/workbench/contrib/debug/browser/callStackView',
942
- 'showMoreStackFrames',
943
- "Show {0} More Stack Frames",
944
- element.length
945
- ));
946
- }
947
- return LoadMoreRenderer.LABEL;
948
- }
949
- }
950
- class CallStackCompressionDelegate {
951
- constructor(debugService) {
952
- this.debugService = debugService;
953
- }
954
- isIncompressible(stat) {
955
- if (isDebugSession(stat)) {
956
- if (stat.compact) {
957
- return false;
958
- }
959
- const sessions = this.debugService.getModel().getSessions();
960
- if (( sessions.some(s => s.parentSession === stat && s.compact))) {
961
- return false;
962
- }
963
- return true;
964
- }
965
- return true;
966
- }
967
- }
968
- registerAction2(class Collapse extends ViewAction {
969
- constructor() {
970
- super({
971
- id: 'callStack.collapse',
972
- viewId: CALLSTACK_VIEW_ID,
973
- title: ( localizeWithPath(
974
- 'vs/workbench/contrib/debug/browser/callStackView',
975
- 'collapse',
976
- "Collapse All"
977
- )),
978
- f1: false,
979
- icon: Codicon.collapseAll,
980
- precondition: ( CONTEXT_DEBUG_STATE.isEqualTo(getStateLabel(2 ))),
981
- menu: {
982
- id: MenuId.ViewTitle,
983
- order: 10,
984
- group: 'navigation',
985
- when: ( ContextKeyExpr.equals('view', CALLSTACK_VIEW_ID))
986
- }
987
- });
988
- }
989
- runInView(_accessor, view) {
990
- view.collapseAll();
991
- }
992
- });
993
- function registerCallStackInlineMenuItem(id, title, icon, when, order, precondition) {
994
- MenuRegistry.appendMenuItem(MenuId.DebugCallStackContext, {
995
- group: 'inline',
996
- order,
997
- when,
998
- command: { id, title, icon, precondition }
999
- });
1000
- }
1001
- const threadOrSessionWithOneThread = ( ContextKeyExpr.or(( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo('thread')), ( ContextKeyExpr.and(( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo('session')), CONTEXT_CALLSTACK_SESSION_HAS_ONE_THREAD))));
1002
- registerCallStackInlineMenuItem(PAUSE_ID, PAUSE_LABEL, debugPause, ( ContextKeyExpr.and(threadOrSessionWithOneThread, ( CONTEXT_CALLSTACK_ITEM_STOPPED.toNegated()))), 10, ( CONTEXT_FOCUSED_SESSION_IS_NO_DEBUG.toNegated()));
1003
- registerCallStackInlineMenuItem(CONTINUE_ID, CONTINUE_LABEL, debugContinue, ( ContextKeyExpr.and(threadOrSessionWithOneThread, CONTEXT_CALLSTACK_ITEM_STOPPED)), 10);
1004
- registerCallStackInlineMenuItem(STEP_OVER_ID, STEP_OVER_LABEL, debugStepOver, threadOrSessionWithOneThread, 20, CONTEXT_CALLSTACK_ITEM_STOPPED);
1005
- registerCallStackInlineMenuItem(STEP_INTO_ID, STEP_INTO_LABEL, debugStepInto, threadOrSessionWithOneThread, 30, CONTEXT_CALLSTACK_ITEM_STOPPED);
1006
- registerCallStackInlineMenuItem(STEP_OUT_ID, STEP_OUT_LABEL, debugStepOut, threadOrSessionWithOneThread, 40, CONTEXT_CALLSTACK_ITEM_STOPPED);
1007
- registerCallStackInlineMenuItem(RESTART_SESSION_ID, RESTART_LABEL, debugRestart, ( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo('session')), 50);
1008
- registerCallStackInlineMenuItem(STOP_ID, STOP_LABEL, debugStop, ( ContextKeyExpr.and(( CONTEXT_CALLSTACK_SESSION_IS_ATTACH.toNegated()), ( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo('session')))), 60);
1009
- registerCallStackInlineMenuItem(DISCONNECT_ID, DISCONNECT_LABEL, debugDisconnect, ( ContextKeyExpr.and(CONTEXT_CALLSTACK_SESSION_IS_ATTACH, ( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo('session')))), 60);
1010
-
1011
- export { CallStackView, getContext, getContextForContributedActions, getSpecificSourceName };