@codingame/monaco-vscode-debug-service-override 25.1.2 → 26.0.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.
- package/package.json +2 -2
- package/vscode/src/vs/platform/debug/common/extensionHostDebugIpc.js +41 -29
- package/vscode/src/vs/workbench/contrib/debug/browser/callStackView.js +379 -255
- package/vscode/src/vs/workbench/contrib/debug/browser/debug.contribution.js +606 -325
- package/vscode/src/vs/workbench/contrib/debug/browser/debugAdapterManager.js +132 -91
- package/vscode/src/vs/workbench/contrib/debug/browser/debugChatIntegration.js +105 -103
- package/vscode/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.js +258 -147
- package/vscode/src/vs/workbench/contrib/debug/browser/debugConsoleQuickAccess.js +14 -10
- package/vscode/src/vs/workbench/contrib/debug/browser/debugEditorActions.js +163 -121
- package/vscode/src/vs/workbench/contrib/debug/browser/debugMemory.js +92 -41
- package/vscode/src/vs/workbench/contrib/debug/browser/debugProgress.js +13 -12
- package/vscode/src/vs/workbench/contrib/debug/browser/debugQuickAccess.js +68 -39
- package/vscode/src/vs/workbench/contrib/debug/browser/debugService.js +290 -214
- package/vscode/src/vs/workbench/contrib/debug/browser/debugSession.js +409 -260
- package/vscode/src/vs/workbench/contrib/debug/browser/debugSettingMigration.js +14 -12
- package/vscode/src/vs/workbench/contrib/debug/browser/debugStatus.js +19 -21
- package/vscode/src/vs/workbench/contrib/debug/browser/debugTaskRunner.js +126 -100
- package/vscode/src/vs/workbench/contrib/debug/browser/debugTitle.js +8 -9
- package/vscode/src/vs/workbench/contrib/debug/browser/debugToolBar.js +160 -89
- package/vscode/src/vs/workbench/contrib/debug/browser/debugViewlet.js +87 -71
- package/vscode/src/vs/workbench/contrib/debug/browser/disassemblyView.js +270 -181
- package/vscode/src/vs/workbench/contrib/debug/browser/extensionHostDebugService.js +79 -48
- package/vscode/src/vs/workbench/contrib/debug/browser/loadedScriptsView.js +149 -113
- package/vscode/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css +24 -3
- package/vscode/src/vs/workbench/contrib/debug/browser/rawDebugSession.js +201 -189
- package/vscode/src/vs/workbench/contrib/debug/browser/replAccessibilityHelp.js +28 -35
- package/vscode/src/vs/workbench/contrib/debug/browser/replAccessibleView.js +10 -12
- package/vscode/src/vs/workbench/contrib/debug/browser/runAndDebugAccessibilityHelp.js +66 -86
- package/vscode/src/vs/workbench/contrib/debug/browser/statusbarColorProvider.js +24 -31
- package/vscode/src/vs/workbench/contrib/debug/browser/watchExpressionsView.js +177 -138
- package/vscode/src/vs/workbench/contrib/debug/browser/welcomeView.js +55 -33
- package/vscode/src/vs/workbench/contrib/debug/common/breakpoints.js +2 -4
- package/vscode/src/vs/workbench/contrib/debug/common/debugAccessibilityAnnouncer.js +8 -12
- package/vscode/src/vs/workbench/contrib/debug/common/debugContentProvider.js +23 -19
- package/vscode/src/vs/workbench/contrib/debug/common/debugLifecycle.js +9 -15
- package/vscode/src/vs/workbench/contrib/debug/common/debugSchemas.js +156 -133
- package/vscode/src/vs/workbench/contrib/debug/common/debugStorage.js +81 -52
- package/vscode/src/vs/workbench/contrib/debug/common/debugTelemetry.js +3 -5
- package/vscode/src/vs/workbench/contrib/debug/common/debugViewModel.js +22 -14
- package/vscode/src/vs/workbench/contrib/debug/common/debugVisualizers.js +46 -30
- package/vscode/src/vs/workbench/contrib/debug/common/debugger.js +74 -52
- package/vscode/src/vs/workbench/contrib/debug/common/replAccessibilityAnnouncer.js +11 -10
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariableCommands.js +7 -7
|
@@ -69,20 +69,20 @@ function getStackFrameContext(element) {
|
|
|
69
69
|
...getThreadContext(element.thread),
|
|
70
70
|
frameId: element.getId(),
|
|
71
71
|
frameName: element.name,
|
|
72
|
-
frameLocation: {
|
|
72
|
+
frameLocation: {
|
|
73
|
+
range: element.range,
|
|
74
|
+
source: element.source.raw
|
|
75
|
+
}
|
|
73
76
|
};
|
|
74
77
|
}
|
|
75
78
|
function getContext(element) {
|
|
76
79
|
if (element instanceof StackFrame) {
|
|
77
80
|
return getStackFrameContext(element);
|
|
78
|
-
}
|
|
79
|
-
else if (element instanceof Thread) {
|
|
81
|
+
} else if (element instanceof Thread) {
|
|
80
82
|
return getThreadContext(element);
|
|
81
|
-
}
|
|
82
|
-
else if (isDebugSession(element)) {
|
|
83
|
+
} else if (isDebugSession(element)) {
|
|
83
84
|
return getSessionContext(element);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
85
|
+
} else {
|
|
86
86
|
return undefined;
|
|
87
87
|
}
|
|
88
88
|
}
|
|
@@ -99,7 +99,7 @@ function getContextForContributedActions(element) {
|
|
|
99
99
|
if (isDebugSession(element)) {
|
|
100
100
|
return element.getId();
|
|
101
101
|
}
|
|
102
|
-
return
|
|
102
|
+
return "";
|
|
103
103
|
}
|
|
104
104
|
function getSpecificSourceName(stackFrame) {
|
|
105
105
|
let callStack = stackFrame.thread.getStaleCallStack();
|
|
@@ -114,8 +114,11 @@ function getSpecificSourceName(stackFrame) {
|
|
|
114
114
|
if (suffixLength === 0) {
|
|
115
115
|
return stackFrame.source.name;
|
|
116
116
|
}
|
|
117
|
-
const from = Math.max(
|
|
118
|
-
|
|
117
|
+
const from = Math.max(
|
|
118
|
+
0,
|
|
119
|
+
stackFrame.source.uri.path.lastIndexOf(posix.sep, stackFrame.source.uri.path.length - suffixLength - 1)
|
|
120
|
+
);
|
|
121
|
+
return (from > 0 ? "..." : "") + stackFrame.source.uri.path.substring(from);
|
|
119
122
|
}
|
|
120
123
|
async function expandTo(session, tree) {
|
|
121
124
|
if (session.parentSession) {
|
|
@@ -124,8 +127,32 @@ async function expandTo(session, tree) {
|
|
|
124
127
|
await tree.expand(session);
|
|
125
128
|
}
|
|
126
129
|
let CallStackView = class CallStackView extends ViewPane {
|
|
127
|
-
constructor(
|
|
128
|
-
|
|
130
|
+
constructor(
|
|
131
|
+
options,
|
|
132
|
+
contextMenuService,
|
|
133
|
+
debugService,
|
|
134
|
+
keybindingService,
|
|
135
|
+
instantiationService,
|
|
136
|
+
viewDescriptorService,
|
|
137
|
+
configurationService,
|
|
138
|
+
contextKeyService,
|
|
139
|
+
openerService,
|
|
140
|
+
themeService,
|
|
141
|
+
hoverService,
|
|
142
|
+
menuService
|
|
143
|
+
) {
|
|
144
|
+
super(
|
|
145
|
+
options,
|
|
146
|
+
keybindingService,
|
|
147
|
+
contextMenuService,
|
|
148
|
+
configurationService,
|
|
149
|
+
contextKeyService,
|
|
150
|
+
viewDescriptorService,
|
|
151
|
+
instantiationService,
|
|
152
|
+
openerService,
|
|
153
|
+
themeService,
|
|
154
|
+
hoverService
|
|
155
|
+
);
|
|
129
156
|
this.options = options;
|
|
130
157
|
this.debugService = debugService;
|
|
131
158
|
this.menuService = menuService;
|
|
@@ -141,19 +168,17 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
141
168
|
}
|
|
142
169
|
const thread = sessions.length === 1 && sessions[0].getAllThreads().length === 1 ? sessions[0].getAllThreads()[0] : undefined;
|
|
143
170
|
const stoppedDetails = sessions.length === 1 ? sessions[0].getStoppedDetails() : undefined;
|
|
144
|
-
if (stoppedDetails && (thread || typeof stoppedDetails.threadId !==
|
|
171
|
+
if (stoppedDetails && (thread || typeof stoppedDetails.threadId !== "number")) {
|
|
145
172
|
this.stateMessageLabel.textContent = stoppedDescription(stoppedDetails);
|
|
146
173
|
this.stateMessageLabelHover.update(stoppedText(stoppedDetails));
|
|
147
|
-
this.stateMessageLabel.classList.toggle(
|
|
174
|
+
this.stateMessageLabel.classList.toggle("exception", stoppedDetails.reason === "exception");
|
|
148
175
|
this.stateMessage.hidden = false;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
this.stateMessageLabel.textContent = ( localize(6569, "Running"));
|
|
176
|
+
} else if (sessions.length === 1 && sessions[0].state === State.Running) {
|
|
177
|
+
this.stateMessageLabel.textContent = ( localize(6879, "Running"));
|
|
152
178
|
this.stateMessageLabelHover.update(sessions[0].getLabel());
|
|
153
|
-
this.stateMessageLabel.classList.remove(
|
|
179
|
+
this.stateMessageLabel.classList.remove("exception");
|
|
154
180
|
this.stateMessage.hidden = false;
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
181
|
+
} else {
|
|
157
182
|
this.stateMessage.hidden = true;
|
|
158
183
|
}
|
|
159
184
|
this.updateActions();
|
|
@@ -170,9 +195,7 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
170
195
|
await expandTo(session, this.tree);
|
|
171
196
|
this.autoExpandedSessions.add(session);
|
|
172
197
|
}
|
|
173
|
-
}
|
|
174
|
-
catch (e) {
|
|
175
|
-
}
|
|
198
|
+
} catch (e) {}
|
|
176
199
|
if (this.selectionNeedsUpdate) {
|
|
177
200
|
this.selectionNeedsUpdate = false;
|
|
178
201
|
await this.updateTreeSelection();
|
|
@@ -181,79 +204,94 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
181
204
|
}
|
|
182
205
|
renderHeaderTitle(container) {
|
|
183
206
|
super.renderHeaderTitle(container, this.options.title);
|
|
184
|
-
this.stateMessage = append(container, $(
|
|
207
|
+
this.stateMessage = append(container, $("span.call-stack-state-message"));
|
|
185
208
|
this.stateMessage.hidden = true;
|
|
186
|
-
this.stateMessageLabel = append(this.stateMessage, $(
|
|
187
|
-
this.stateMessageLabelHover = this._register(
|
|
209
|
+
this.stateMessageLabel = append(this.stateMessage, $("span.label"));
|
|
210
|
+
this.stateMessageLabelHover = this._register(
|
|
211
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), this.stateMessage, "")
|
|
212
|
+
);
|
|
188
213
|
}
|
|
189
214
|
renderBody(container) {
|
|
190
215
|
super.renderBody(container);
|
|
191
|
-
this.element.classList.add(
|
|
192
|
-
container.classList.add(
|
|
216
|
+
this.element.classList.add("debug-pane");
|
|
217
|
+
container.classList.add("debug-call-stack");
|
|
193
218
|
const treeContainer = renderViewTree(container);
|
|
194
219
|
this.dataSource = ( new CallStackDataSource(this.debugService));
|
|
195
|
-
this.tree = this.instantiationService.createInstance(
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
( new
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
return `${e.name} ${e.stateLabel}`;
|
|
224
|
-
}
|
|
225
|
-
if (e instanceof StackFrame || typeof e === 'string') {
|
|
226
|
-
return e;
|
|
227
|
-
}
|
|
228
|
-
if (e instanceof ThreadAndSessionIds) {
|
|
229
|
-
return LoadMoreRenderer.LABEL;
|
|
220
|
+
this.tree = this.instantiationService.createInstance(
|
|
221
|
+
WorkbenchCompressibleAsyncDataTree,
|
|
222
|
+
"CallStackView",
|
|
223
|
+
treeContainer,
|
|
224
|
+
( new CallStackDelegate()),
|
|
225
|
+
( new CallStackCompressionDelegate(this.debugService)),
|
|
226
|
+
[
|
|
227
|
+
this.instantiationService.createInstance(SessionsRenderer),
|
|
228
|
+
this.instantiationService.createInstance(ThreadsRenderer),
|
|
229
|
+
this.instantiationService.createInstance(StackFramesRenderer),
|
|
230
|
+
this.instantiationService.createInstance(ErrorsRenderer),
|
|
231
|
+
( new LoadMoreRenderer()),
|
|
232
|
+
( new ShowMoreRenderer())
|
|
233
|
+
],
|
|
234
|
+
this.dataSource,
|
|
235
|
+
{
|
|
236
|
+
accessibilityProvider: ( new CallStackAccessibilityProvider()),
|
|
237
|
+
compressionEnabled: true,
|
|
238
|
+
autoExpandSingleChildren: true,
|
|
239
|
+
identityProvider: {
|
|
240
|
+
getId: element => {
|
|
241
|
+
if (typeof element === "string") {
|
|
242
|
+
return element;
|
|
243
|
+
}
|
|
244
|
+
if (element instanceof Array) {
|
|
245
|
+
return `showMore ${element[0].getId()}`;
|
|
246
|
+
}
|
|
247
|
+
return element.getId();
|
|
230
248
|
}
|
|
231
|
-
return localize(6570, "Show More Stack Frames");
|
|
232
249
|
},
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
250
|
+
keyboardNavigationLabelProvider: {
|
|
251
|
+
getKeyboardNavigationLabel: e => {
|
|
252
|
+
if (isDebugSession(e)) {
|
|
253
|
+
return e.getLabel();
|
|
254
|
+
}
|
|
255
|
+
if (e instanceof Thread) {
|
|
256
|
+
return `${e.name} ${e.stateLabel}`;
|
|
257
|
+
}
|
|
258
|
+
if (e instanceof StackFrame || typeof e === "string") {
|
|
259
|
+
return e;
|
|
260
|
+
}
|
|
261
|
+
if (e instanceof ThreadAndSessionIds) {
|
|
262
|
+
return LoadMoreRenderer.LABEL;
|
|
263
|
+
}
|
|
264
|
+
return localize(6880, "Show More Stack Frames");
|
|
265
|
+
},
|
|
266
|
+
getCompressedNodeKeyboardNavigationLabel: e => {
|
|
267
|
+
const firstItem = e[0];
|
|
268
|
+
if (isDebugSession(firstItem)) {
|
|
269
|
+
return firstItem.getLabel();
|
|
270
|
+
}
|
|
271
|
+
return "";
|
|
237
272
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
});
|
|
273
|
+
},
|
|
274
|
+
expandOnlyOnTwistieClick: true,
|
|
275
|
+
overrideStyles: this.getLocationBasedColors().listOverrideStyles
|
|
276
|
+
}
|
|
277
|
+
);
|
|
244
278
|
CONTEXT_CALLSTACK_FOCUSED.bindTo(this.tree.contextKeyService);
|
|
245
279
|
this.tree.setInput(this.debugService.getModel());
|
|
246
280
|
this._register(this.tree);
|
|
247
|
-
this._register(this.tree.onDidOpen(async
|
|
281
|
+
this._register(this.tree.onDidOpen(async e => {
|
|
248
282
|
if (this.ignoreSelectionChangedEvent) {
|
|
249
283
|
return;
|
|
250
284
|
}
|
|
251
285
|
const focusStackFrame = (stackFrame, thread, session, options = {}) => {
|
|
252
286
|
this.ignoreFocusStackFrameEvent = true;
|
|
253
287
|
try {
|
|
254
|
-
this.debugService.focusStackFrame(stackFrame, thread, session, {
|
|
255
|
-
|
|
256
|
-
|
|
288
|
+
this.debugService.focusStackFrame(stackFrame, thread, session, {
|
|
289
|
+
...options,
|
|
290
|
+
...{
|
|
291
|
+
explicit: true
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
} finally {
|
|
257
295
|
this.ignoreFocusStackFrameEvent = false;
|
|
258
296
|
}
|
|
259
297
|
};
|
|
@@ -277,7 +315,7 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
277
315
|
const thread = session && session.getThread(element.threadId);
|
|
278
316
|
if (thread) {
|
|
279
317
|
const totalFrames = thread.stoppedDetails?.totalFrames;
|
|
280
|
-
const remainingFramesCount = typeof totalFrames ===
|
|
318
|
+
const remainingFramesCount = typeof totalFrames === "number" ? (totalFrames - thread.getCallStack().length) : undefined;
|
|
281
319
|
await thread.fetchCallStack(remainingFramesCount);
|
|
282
320
|
await this.tree.updateChildren();
|
|
283
321
|
}
|
|
@@ -296,7 +334,10 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
296
334
|
this.onCallStackChangeScheduler.schedule();
|
|
297
335
|
}
|
|
298
336
|
}));
|
|
299
|
-
const onFocusChange = Event.any(
|
|
337
|
+
const onFocusChange = Event.any(
|
|
338
|
+
this.debugService.getViewModel().onDidFocusStackFrame,
|
|
339
|
+
this.debugService.getViewModel().onDidFocusSession
|
|
340
|
+
);
|
|
300
341
|
this._register(onFocusChange(async () => {
|
|
301
342
|
if (this.ignoreFocusStackFrameEvent) {
|
|
302
343
|
return;
|
|
@@ -349,19 +390,16 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
349
390
|
if (!this.tree || !this.tree.getInput()) {
|
|
350
391
|
return;
|
|
351
392
|
}
|
|
352
|
-
const updateSelectionAndReveal =
|
|
393
|
+
const updateSelectionAndReveal = element => {
|
|
353
394
|
this.ignoreSelectionChangedEvent = true;
|
|
354
395
|
try {
|
|
355
396
|
this.tree.setSelection([element]);
|
|
356
397
|
if (this.tree.getRelativeTop(element) === null) {
|
|
357
398
|
this.tree.reveal(element, 0.5);
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
399
|
+
} else {
|
|
360
400
|
this.tree.reveal(element);
|
|
361
401
|
}
|
|
362
|
-
}
|
|
363
|
-
catch (e) { }
|
|
364
|
-
finally {
|
|
402
|
+
} catch (e) {} finally {
|
|
365
403
|
this.ignoreSelectionChangedEvent = false;
|
|
366
404
|
}
|
|
367
405
|
};
|
|
@@ -371,20 +409,16 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
371
409
|
if (!thread) {
|
|
372
410
|
if (!session) {
|
|
373
411
|
this.tree.setSelection([]);
|
|
374
|
-
}
|
|
375
|
-
else {
|
|
412
|
+
} else {
|
|
376
413
|
updateSelectionAndReveal(session);
|
|
377
414
|
}
|
|
378
|
-
}
|
|
379
|
-
else {
|
|
415
|
+
} else {
|
|
380
416
|
try {
|
|
381
417
|
await expandTo(thread.session, this.tree);
|
|
382
|
-
}
|
|
383
|
-
catch (e) { }
|
|
418
|
+
} catch (e) {}
|
|
384
419
|
try {
|
|
385
420
|
await this.tree.expand(thread);
|
|
386
|
-
}
|
|
387
|
-
catch (e) { }
|
|
421
|
+
} catch (e) {}
|
|
388
422
|
const toReveal = stackFrame || session;
|
|
389
423
|
if (toReveal) {
|
|
390
424
|
updateSelectionAndReveal(toReveal);
|
|
@@ -396,16 +430,17 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
396
430
|
let overlay = [];
|
|
397
431
|
if (isDebugSession(element)) {
|
|
398
432
|
overlay = getSessionContextOverlay(element);
|
|
399
|
-
}
|
|
400
|
-
else if (element instanceof Thread) {
|
|
433
|
+
} else if (element instanceof Thread) {
|
|
401
434
|
overlay = getThreadContextOverlay(element);
|
|
402
|
-
}
|
|
403
|
-
else if (element instanceof StackFrame) {
|
|
435
|
+
} else if (element instanceof StackFrame) {
|
|
404
436
|
overlay = getStackFrameContextOverlay(element);
|
|
405
437
|
}
|
|
406
438
|
const contextKeyService = this.contextKeyService.createOverlay(overlay);
|
|
407
|
-
const menu = this.menuService.getMenuActions(MenuId.DebugCallStackContext, contextKeyService, {
|
|
408
|
-
|
|
439
|
+
const menu = this.menuService.getMenuActions(MenuId.DebugCallStackContext, contextKeyService, {
|
|
440
|
+
arg: getContextForContributedActions(element),
|
|
441
|
+
shouldForwardArgs: true
|
|
442
|
+
});
|
|
443
|
+
const result = getContextMenuActions(menu, "inline");
|
|
409
444
|
this.contextMenuService.showContextMenu({
|
|
410
445
|
getAnchor: () => e.anchor,
|
|
411
446
|
getActions: () => result.secondary,
|
|
@@ -413,30 +448,25 @@ let CallStackView = class CallStackView extends ViewPane {
|
|
|
413
448
|
});
|
|
414
449
|
}
|
|
415
450
|
};
|
|
416
|
-
CallStackView = ( __decorate([
|
|
417
|
-
( __param(1, IContextMenuService)),
|
|
418
|
-
( __param(2, IDebugService)),
|
|
419
|
-
( __param(3, IKeybindingService)),
|
|
420
|
-
( __param(4, IInstantiationService)),
|
|
421
|
-
( __param(5, IViewDescriptorService)),
|
|
422
|
-
( __param(6, IConfigurationService)),
|
|
423
|
-
( __param(7, IContextKeyService)),
|
|
424
|
-
( __param(8, IOpenerService)),
|
|
425
|
-
( __param(9, IThemeService)),
|
|
426
|
-
( __param(10, IHoverService)),
|
|
427
|
-
( __param(11, IMenuService))
|
|
428
|
-
], CallStackView));
|
|
451
|
+
CallStackView = ( __decorate([( __param(1, IContextMenuService)), ( __param(2, IDebugService)), ( __param(3, IKeybindingService)), ( __param(4, IInstantiationService)), ( __param(5, IViewDescriptorService)), ( __param(6, IConfigurationService)), ( __param(7, IContextKeyService)), ( __param(8, IOpenerService)), ( __param(9, IThemeService)), ( __param(10, IHoverService)), ( __param(11, IMenuService))], CallStackView));
|
|
429
452
|
function getSessionContextOverlay(session) {
|
|
430
453
|
return [
|
|
431
|
-
[CONTEXT_CALLSTACK_ITEM_TYPE.key,
|
|
454
|
+
[CONTEXT_CALLSTACK_ITEM_TYPE.key, "session"],
|
|
432
455
|
[CONTEXT_CALLSTACK_SESSION_IS_ATTACH.key, isSessionAttach(session)],
|
|
433
456
|
[CONTEXT_CALLSTACK_ITEM_STOPPED.key, session.state === State.Stopped],
|
|
434
|
-
[
|
|
457
|
+
[
|
|
458
|
+
CONTEXT_CALLSTACK_SESSION_HAS_ONE_THREAD.key,
|
|
459
|
+
session.getAllThreads().length === 1
|
|
460
|
+
]
|
|
435
461
|
];
|
|
436
462
|
}
|
|
437
463
|
let SessionsRenderer = class SessionsRenderer {
|
|
438
|
-
static {
|
|
439
|
-
|
|
464
|
+
static {
|
|
465
|
+
SessionsRenderer_1 = this;
|
|
466
|
+
}
|
|
467
|
+
static {
|
|
468
|
+
this.ID = "session";
|
|
469
|
+
}
|
|
440
470
|
constructor(instantiationService, contextKeyService, hoverService, menuService) {
|
|
441
471
|
this.instantiationService = instantiationService;
|
|
442
472
|
this.contextKeyService = contextKeyService;
|
|
@@ -447,10 +477,10 @@ let SessionsRenderer = class SessionsRenderer {
|
|
|
447
477
|
return SessionsRenderer_1.ID;
|
|
448
478
|
}
|
|
449
479
|
renderTemplate(container) {
|
|
450
|
-
const session = append(container, $(
|
|
480
|
+
const session = append(container, $(".session"));
|
|
451
481
|
append(session, $(ThemeIcon.asCSSSelector(callstackViewSession)));
|
|
452
|
-
const name = append(session, $(
|
|
453
|
-
const stateLabel = append(session, $(
|
|
482
|
+
const name = append(session, $(".name"));
|
|
483
|
+
const stateLabel = append(session, $("span.state.label.monaco-count-badge.long"));
|
|
454
484
|
const templateDisposable = ( new DisposableStore());
|
|
455
485
|
const label = templateDisposable.add(( new HighlightedLabel(name)));
|
|
456
486
|
const stopActionViewItemDisposables = templateDisposable.add(( new DisposableStore()));
|
|
@@ -458,22 +488,38 @@ let SessionsRenderer = class SessionsRenderer {
|
|
|
458
488
|
actionViewItemProvider: (action, options) => {
|
|
459
489
|
if ((action.id === STOP_ID || action.id === DISCONNECT_ID) && action instanceof MenuItemAction) {
|
|
460
490
|
stopActionViewItemDisposables.clear();
|
|
461
|
-
const item = this.instantiationService.invokeFunction(
|
|
491
|
+
const item = this.instantiationService.invokeFunction(
|
|
492
|
+
accessor => createDisconnectMenuItemAction(action, stopActionViewItemDisposables, accessor, {
|
|
493
|
+
...options,
|
|
494
|
+
menuAsChild: false
|
|
495
|
+
})
|
|
496
|
+
);
|
|
462
497
|
if (item) {
|
|
463
498
|
return item;
|
|
464
499
|
}
|
|
465
500
|
}
|
|
466
501
|
if (action instanceof MenuItemAction) {
|
|
467
|
-
return this.instantiationService.createInstance(MenuEntryActionViewItem, action, {
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
502
|
+
return this.instantiationService.createInstance(MenuEntryActionViewItem, action, {
|
|
503
|
+
hoverDelegate: options.hoverDelegate
|
|
504
|
+
});
|
|
505
|
+
} else if (action instanceof SubmenuItemAction) {
|
|
506
|
+
return this.instantiationService.createInstance(SubmenuEntryActionViewItem, action, {
|
|
507
|
+
hoverDelegate: options.hoverDelegate
|
|
508
|
+
});
|
|
471
509
|
}
|
|
472
510
|
return undefined;
|
|
473
511
|
}
|
|
474
512
|
})));
|
|
475
513
|
const elementDisposable = templateDisposable.add(( new DisposableStore()));
|
|
476
|
-
return {
|
|
514
|
+
return {
|
|
515
|
+
session,
|
|
516
|
+
name,
|
|
517
|
+
stateLabel,
|
|
518
|
+
label,
|
|
519
|
+
actionBar,
|
|
520
|
+
elementDisposable,
|
|
521
|
+
templateDisposable
|
|
522
|
+
};
|
|
477
523
|
}
|
|
478
524
|
renderElement(element, _, data) {
|
|
479
525
|
this.doRenderElement(element.element, createMatches(element.filterData), data);
|
|
@@ -484,34 +530,44 @@ let SessionsRenderer = class SessionsRenderer {
|
|
|
484
530
|
this.doRenderElement(lastElement, matches, templateData);
|
|
485
531
|
}
|
|
486
532
|
doRenderElement(session, matches, data) {
|
|
487
|
-
const sessionHover = data.elementDisposable.add(
|
|
533
|
+
const sessionHover = data.elementDisposable.add(
|
|
534
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), data.session, ( localize(6881, "Session")))
|
|
535
|
+
);
|
|
488
536
|
data.label.set(session.getLabel(), matches);
|
|
489
537
|
const stoppedDetails = session.getStoppedDetails();
|
|
490
538
|
const thread = session.getAllThreads().find(t => t.stopped);
|
|
491
539
|
const contextKeyService = this.contextKeyService.createOverlay(getSessionContextOverlay(session));
|
|
492
|
-
const menu = data.elementDisposable.add(
|
|
540
|
+
const menu = data.elementDisposable.add(
|
|
541
|
+
this.menuService.createMenu(MenuId.DebugCallStackContext, contextKeyService)
|
|
542
|
+
);
|
|
493
543
|
const setupActionBar = () => {
|
|
494
544
|
data.actionBar.clear();
|
|
495
|
-
const {
|
|
496
|
-
|
|
545
|
+
const {
|
|
546
|
+
primary
|
|
547
|
+
} = getActionBarActions(menu.getActions({
|
|
548
|
+
arg: getContextForContributedActions(session),
|
|
549
|
+
shouldForwardArgs: true
|
|
550
|
+
}), "inline");
|
|
551
|
+
data.actionBar.push(primary, {
|
|
552
|
+
icon: true,
|
|
553
|
+
label: false
|
|
554
|
+
});
|
|
497
555
|
data.actionBar.context = getContext(session);
|
|
498
556
|
};
|
|
499
557
|
data.elementDisposable.add(menu.onDidChange(() => setupActionBar()));
|
|
500
558
|
setupActionBar();
|
|
501
|
-
data.stateLabel.style.display =
|
|
559
|
+
data.stateLabel.style.display = "";
|
|
502
560
|
if (stoppedDetails) {
|
|
503
561
|
data.stateLabel.textContent = stoppedDescription(stoppedDetails);
|
|
504
562
|
sessionHover.update(`${session.getLabel()}: ${stoppedText(stoppedDetails)}`);
|
|
505
|
-
data.stateLabel.classList.toggle(
|
|
506
|
-
}
|
|
507
|
-
else if (thread && thread.stoppedDetails) {
|
|
563
|
+
data.stateLabel.classList.toggle("exception", stoppedDetails.reason === "exception");
|
|
564
|
+
} else if (thread && thread.stoppedDetails) {
|
|
508
565
|
data.stateLabel.textContent = stoppedDescription(thread.stoppedDetails);
|
|
509
566
|
sessionHover.update(`${session.getLabel()}: ${stoppedText(thread.stoppedDetails)}`);
|
|
510
|
-
data.stateLabel.classList.toggle(
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
data.stateLabel.
|
|
514
|
-
data.stateLabel.classList.remove('exception');
|
|
567
|
+
data.stateLabel.classList.toggle("exception", thread.stoppedDetails.reason === "exception");
|
|
568
|
+
} else {
|
|
569
|
+
data.stateLabel.textContent = ( localize(6879, "Running"));
|
|
570
|
+
data.stateLabel.classList.remove("exception");
|
|
515
571
|
}
|
|
516
572
|
}
|
|
517
573
|
disposeTemplate(templateData) {
|
|
@@ -524,21 +580,20 @@ let SessionsRenderer = class SessionsRenderer {
|
|
|
524
580
|
templateData.elementDisposable.clear();
|
|
525
581
|
}
|
|
526
582
|
};
|
|
527
|
-
SessionsRenderer = SessionsRenderer_1 = ( __decorate([
|
|
528
|
-
( __param(0, IInstantiationService)),
|
|
529
|
-
( __param(1, IContextKeyService)),
|
|
530
|
-
( __param(2, IHoverService)),
|
|
531
|
-
( __param(3, IMenuService))
|
|
532
|
-
], SessionsRenderer));
|
|
583
|
+
SessionsRenderer = SessionsRenderer_1 = ( __decorate([( __param(0, IInstantiationService)), ( __param(1, IContextKeyService)), ( __param(2, IHoverService)), ( __param(3, IMenuService))], SessionsRenderer));
|
|
533
584
|
function getThreadContextOverlay(thread) {
|
|
534
585
|
return [
|
|
535
|
-
[CONTEXT_CALLSTACK_ITEM_TYPE.key,
|
|
586
|
+
[CONTEXT_CALLSTACK_ITEM_TYPE.key, "thread"],
|
|
536
587
|
[CONTEXT_CALLSTACK_ITEM_STOPPED.key, thread.stopped]
|
|
537
588
|
];
|
|
538
589
|
}
|
|
539
590
|
let ThreadsRenderer = class ThreadsRenderer {
|
|
540
|
-
static {
|
|
541
|
-
|
|
591
|
+
static {
|
|
592
|
+
ThreadsRenderer_1 = this;
|
|
593
|
+
}
|
|
594
|
+
static {
|
|
595
|
+
this.ID = "thread";
|
|
596
|
+
}
|
|
542
597
|
constructor(contextKeyService, hoverService, menuService) {
|
|
543
598
|
this.contextKeyService = contextKeyService;
|
|
544
599
|
this.hoverService = hoverService;
|
|
@@ -548,34 +603,54 @@ let ThreadsRenderer = class ThreadsRenderer {
|
|
|
548
603
|
return ThreadsRenderer_1.ID;
|
|
549
604
|
}
|
|
550
605
|
renderTemplate(container) {
|
|
551
|
-
const thread = append(container, $(
|
|
552
|
-
const name = append(thread, $(
|
|
553
|
-
const stateLabel = append(thread, $(
|
|
606
|
+
const thread = append(container, $(".thread"));
|
|
607
|
+
const name = append(thread, $(".name"));
|
|
608
|
+
const stateLabel = append(thread, $("span.state.label.monaco-count-badge.long"));
|
|
554
609
|
const templateDisposable = ( new DisposableStore());
|
|
555
610
|
const label = templateDisposable.add(( new HighlightedLabel(name)));
|
|
556
611
|
const actionBar = templateDisposable.add(( new ActionBar(thread)));
|
|
557
612
|
const elementDisposable = templateDisposable.add(( new DisposableStore()));
|
|
558
|
-
return {
|
|
613
|
+
return {
|
|
614
|
+
thread,
|
|
615
|
+
name,
|
|
616
|
+
stateLabel,
|
|
617
|
+
label,
|
|
618
|
+
actionBar,
|
|
619
|
+
elementDisposable,
|
|
620
|
+
templateDisposable
|
|
621
|
+
};
|
|
559
622
|
}
|
|
560
623
|
renderElement(element, _index, data) {
|
|
561
624
|
const thread = element.element;
|
|
562
|
-
data.elementDisposable.add(
|
|
625
|
+
data.elementDisposable.add(
|
|
626
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), data.thread, thread.name)
|
|
627
|
+
);
|
|
563
628
|
data.label.set(thread.name, createMatches(element.filterData));
|
|
564
629
|
data.stateLabel.textContent = thread.stateLabel;
|
|
565
|
-
data.stateLabel.classList.toggle(
|
|
630
|
+
data.stateLabel.classList.toggle("exception", thread.stoppedDetails?.reason === "exception");
|
|
566
631
|
const contextKeyService = this.contextKeyService.createOverlay(getThreadContextOverlay(thread));
|
|
567
|
-
const menu = data.elementDisposable.add(
|
|
632
|
+
const menu = data.elementDisposable.add(
|
|
633
|
+
this.menuService.createMenu(MenuId.DebugCallStackContext, contextKeyService)
|
|
634
|
+
);
|
|
568
635
|
const setupActionBar = () => {
|
|
569
636
|
data.actionBar.clear();
|
|
570
|
-
const {
|
|
571
|
-
|
|
637
|
+
const {
|
|
638
|
+
primary
|
|
639
|
+
} = getActionBarActions(menu.getActions({
|
|
640
|
+
arg: getContextForContributedActions(thread),
|
|
641
|
+
shouldForwardArgs: true
|
|
642
|
+
}), "inline");
|
|
643
|
+
data.actionBar.push(primary, {
|
|
644
|
+
icon: true,
|
|
645
|
+
label: false
|
|
646
|
+
});
|
|
572
647
|
data.actionBar.context = getContext(thread);
|
|
573
648
|
};
|
|
574
649
|
data.elementDisposable.add(menu.onDidChange(() => setupActionBar()));
|
|
575
650
|
setupActionBar();
|
|
576
651
|
}
|
|
577
652
|
renderCompressedElements(_node, _index, _templateData) {
|
|
578
|
-
throw ( new Error(
|
|
653
|
+
throw ( new Error("Method not implemented."));
|
|
579
654
|
}
|
|
580
655
|
disposeElement(_element, _index, templateData) {
|
|
581
656
|
templateData.elementDisposable.clear();
|
|
@@ -584,20 +659,20 @@ let ThreadsRenderer = class ThreadsRenderer {
|
|
|
584
659
|
templateData.templateDisposable.dispose();
|
|
585
660
|
}
|
|
586
661
|
};
|
|
587
|
-
ThreadsRenderer = ThreadsRenderer_1 = ( __decorate([
|
|
588
|
-
( __param(0, IContextKeyService)),
|
|
589
|
-
( __param(1, IHoverService)),
|
|
590
|
-
( __param(2, IMenuService))
|
|
591
|
-
], ThreadsRenderer));
|
|
662
|
+
ThreadsRenderer = ThreadsRenderer_1 = ( __decorate([( __param(0, IContextKeyService)), ( __param(1, IHoverService)), ( __param(2, IMenuService))], ThreadsRenderer));
|
|
592
663
|
function getStackFrameContextOverlay(stackFrame) {
|
|
593
664
|
return [
|
|
594
|
-
[CONTEXT_CALLSTACK_ITEM_TYPE.key,
|
|
665
|
+
[CONTEXT_CALLSTACK_ITEM_TYPE.key, "stackFrame"],
|
|
595
666
|
[CONTEXT_STACK_FRAME_SUPPORTS_RESTART.key, stackFrame.canRestart]
|
|
596
667
|
];
|
|
597
668
|
}
|
|
598
669
|
let StackFramesRenderer = class StackFramesRenderer {
|
|
599
|
-
static {
|
|
600
|
-
|
|
670
|
+
static {
|
|
671
|
+
StackFramesRenderer_1 = this;
|
|
672
|
+
}
|
|
673
|
+
static {
|
|
674
|
+
this.ID = "stackFrame";
|
|
675
|
+
}
|
|
601
676
|
constructor(hoverService, labelService, notificationService) {
|
|
602
677
|
this.hoverService = hoverService;
|
|
603
678
|
this.labelService = labelService;
|
|
@@ -607,30 +682,44 @@ let StackFramesRenderer = class StackFramesRenderer {
|
|
|
607
682
|
return StackFramesRenderer_1.ID;
|
|
608
683
|
}
|
|
609
684
|
renderTemplate(container) {
|
|
610
|
-
const stackFrame = append(container, $(
|
|
611
|
-
const labelDiv = append(stackFrame, $(
|
|
612
|
-
const file = append(stackFrame, $(
|
|
613
|
-
const fileName = append(file, $(
|
|
614
|
-
const wrapper = append(file, $(
|
|
615
|
-
const lineNumber = append(wrapper, $(
|
|
685
|
+
const stackFrame = append(container, $(".stack-frame"));
|
|
686
|
+
const labelDiv = append(stackFrame, $("span.label.expression"));
|
|
687
|
+
const file = append(stackFrame, $(".file"));
|
|
688
|
+
const fileName = append(file, $("span.file-name"));
|
|
689
|
+
const wrapper = append(file, $("span.line-number-wrapper"));
|
|
690
|
+
const lineNumber = append(wrapper, $("span.line-number.monaco-count-badge"));
|
|
616
691
|
const templateDisposable = ( new DisposableStore());
|
|
617
692
|
const elementDisposables = ( new DisposableStore());
|
|
618
693
|
templateDisposable.add(elementDisposables);
|
|
619
694
|
const label = templateDisposable.add(( new HighlightedLabel(labelDiv)));
|
|
620
695
|
const actionBar = templateDisposable.add(( new ActionBar(stackFrame)));
|
|
621
|
-
return {
|
|
696
|
+
return {
|
|
697
|
+
file,
|
|
698
|
+
fileName,
|
|
699
|
+
label,
|
|
700
|
+
lineNumber,
|
|
701
|
+
stackFrame,
|
|
702
|
+
actionBar,
|
|
703
|
+
templateDisposable,
|
|
704
|
+
elementDisposables
|
|
705
|
+
};
|
|
622
706
|
}
|
|
623
707
|
renderElement(element, index, data) {
|
|
624
708
|
const stackFrame = element.element;
|
|
625
|
-
data.stackFrame.classList.toggle(
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
709
|
+
data.stackFrame.classList.toggle(
|
|
710
|
+
"disabled",
|
|
711
|
+
!stackFrame.source || !stackFrame.source.available || isFrameDeemphasized(stackFrame)
|
|
712
|
+
);
|
|
713
|
+
data.stackFrame.classList.toggle("label", stackFrame.presentationHint === "label");
|
|
714
|
+
const hasActions = !!stackFrame.thread.session.capabilities.supportsRestartFrame && stackFrame.presentationHint !== "label" && stackFrame.presentationHint !== "subtle" && stackFrame.canRestart;
|
|
715
|
+
data.stackFrame.classList.toggle("has-actions", hasActions);
|
|
629
716
|
let title = stackFrame.source.inMemory ? stackFrame.source.uri.path : this.labelService.getUriLabel(stackFrame.source.uri);
|
|
630
717
|
if (stackFrame.source.raw.origin) {
|
|
631
718
|
title += `\n${stackFrame.source.raw.origin}`;
|
|
632
719
|
}
|
|
633
|
-
data.elementDisposables.add(
|
|
720
|
+
data.elementDisposables.add(
|
|
721
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), data.file, title)
|
|
722
|
+
);
|
|
634
723
|
data.label.set(stackFrame.name, createMatches(element.filterData), stackFrame.name);
|
|
635
724
|
data.fileName.textContent = getSpecificSourceName(stackFrame);
|
|
636
725
|
if (stackFrame.range.startLineNumber !== undefined) {
|
|
@@ -638,26 +727,27 @@ let StackFramesRenderer = class StackFramesRenderer {
|
|
|
638
727
|
if (stackFrame.range.startColumn) {
|
|
639
728
|
data.lineNumber.textContent += `:${stackFrame.range.startColumn}`;
|
|
640
729
|
}
|
|
641
|
-
data.lineNumber.classList.remove(
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
data.lineNumber.classList.add('unavailable');
|
|
730
|
+
data.lineNumber.classList.remove("unavailable");
|
|
731
|
+
} else {
|
|
732
|
+
data.lineNumber.classList.add("unavailable");
|
|
645
733
|
}
|
|
646
734
|
data.actionBar.clear();
|
|
647
735
|
if (hasActions) {
|
|
648
|
-
const action = data.elementDisposables.add(( new Action(
|
|
736
|
+
const action = data.elementDisposables.add(( new Action("debug.callStack.restartFrame", ( localize(6882, "Restart Frame")), ThemeIcon.asClassName(debugRestartFrame), true, async () => {
|
|
649
737
|
try {
|
|
650
738
|
await stackFrame.restart();
|
|
651
|
-
}
|
|
652
|
-
catch (e) {
|
|
739
|
+
} catch (e) {
|
|
653
740
|
this.notificationService.error(e);
|
|
654
741
|
}
|
|
655
742
|
})));
|
|
656
|
-
data.actionBar.push(action, {
|
|
743
|
+
data.actionBar.push(action, {
|
|
744
|
+
icon: true,
|
|
745
|
+
label: false
|
|
746
|
+
});
|
|
657
747
|
}
|
|
658
748
|
}
|
|
659
749
|
renderCompressedElements(node, index, templateData) {
|
|
660
|
-
throw ( new Error(
|
|
750
|
+
throw ( new Error("Method not implemented."));
|
|
661
751
|
}
|
|
662
752
|
disposeElement(element, index, templateData) {
|
|
663
753
|
templateData.elementDisposables.clear();
|
|
@@ -666,14 +756,14 @@ let StackFramesRenderer = class StackFramesRenderer {
|
|
|
666
756
|
templateData.templateDisposable.dispose();
|
|
667
757
|
}
|
|
668
758
|
};
|
|
669
|
-
StackFramesRenderer = StackFramesRenderer_1 = ( __decorate([
|
|
670
|
-
( __param(0, IHoverService)),
|
|
671
|
-
( __param(1, ILabelService)),
|
|
672
|
-
( __param(2, INotificationService))
|
|
673
|
-
], StackFramesRenderer));
|
|
759
|
+
StackFramesRenderer = StackFramesRenderer_1 = ( __decorate([( __param(0, IHoverService)), ( __param(1, ILabelService)), ( __param(2, INotificationService))], StackFramesRenderer));
|
|
674
760
|
let ErrorsRenderer = class ErrorsRenderer {
|
|
675
|
-
static {
|
|
676
|
-
|
|
761
|
+
static {
|
|
762
|
+
ErrorsRenderer_1 = this;
|
|
763
|
+
}
|
|
764
|
+
static {
|
|
765
|
+
this.ID = "error";
|
|
766
|
+
}
|
|
677
767
|
get templateId() {
|
|
678
768
|
return ErrorsRenderer_1.ID;
|
|
679
769
|
}
|
|
@@ -681,78 +771,89 @@ let ErrorsRenderer = class ErrorsRenderer {
|
|
|
681
771
|
this.hoverService = hoverService;
|
|
682
772
|
}
|
|
683
773
|
renderTemplate(container) {
|
|
684
|
-
const label = append(container, $(
|
|
685
|
-
return {
|
|
774
|
+
const label = append(container, $(".error"));
|
|
775
|
+
return {
|
|
776
|
+
label,
|
|
777
|
+
templateDisposable: ( new DisposableStore())
|
|
778
|
+
};
|
|
686
779
|
}
|
|
687
780
|
renderElement(element, index, data) {
|
|
688
781
|
const error = element.element;
|
|
689
782
|
data.label.textContent = error;
|
|
690
|
-
data.templateDisposable.add(
|
|
783
|
+
data.templateDisposable.add(
|
|
784
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), data.label, error)
|
|
785
|
+
);
|
|
691
786
|
}
|
|
692
787
|
renderCompressedElements(node, index, templateData) {
|
|
693
|
-
throw ( new Error(
|
|
694
|
-
}
|
|
695
|
-
disposeTemplate(templateData) {
|
|
788
|
+
throw ( new Error("Method not implemented."));
|
|
696
789
|
}
|
|
790
|
+
disposeTemplate(templateData) {}
|
|
697
791
|
};
|
|
698
|
-
ErrorsRenderer = ErrorsRenderer_1 = ( __decorate([
|
|
699
|
-
( __param(0, IHoverService))
|
|
700
|
-
], ErrorsRenderer));
|
|
792
|
+
ErrorsRenderer = ErrorsRenderer_1 = ( __decorate([( __param(0, IHoverService))], ErrorsRenderer));
|
|
701
793
|
class LoadMoreRenderer {
|
|
702
|
-
static {
|
|
703
|
-
|
|
704
|
-
|
|
794
|
+
static {
|
|
795
|
+
this.ID = "loadMore";
|
|
796
|
+
}
|
|
797
|
+
static {
|
|
798
|
+
this.LABEL = ( localize(6883, "Load More Stack Frames"));
|
|
799
|
+
}
|
|
800
|
+
constructor() {}
|
|
705
801
|
get templateId() {
|
|
706
802
|
return LoadMoreRenderer.ID;
|
|
707
803
|
}
|
|
708
804
|
renderTemplate(container) {
|
|
709
|
-
const label = append(container, $(
|
|
805
|
+
const label = append(container, $(".load-all"));
|
|
710
806
|
label.style.color = asCssVariable(textLinkForeground);
|
|
711
|
-
return {
|
|
807
|
+
return {
|
|
808
|
+
label
|
|
809
|
+
};
|
|
712
810
|
}
|
|
713
811
|
renderElement(element, index, data) {
|
|
714
812
|
data.label.textContent = LoadMoreRenderer.LABEL;
|
|
715
813
|
}
|
|
716
814
|
renderCompressedElements(node, index, templateData) {
|
|
717
|
-
throw ( new Error(
|
|
718
|
-
}
|
|
719
|
-
disposeTemplate(templateData) {
|
|
815
|
+
throw ( new Error("Method not implemented."));
|
|
720
816
|
}
|
|
817
|
+
disposeTemplate(templateData) {}
|
|
721
818
|
}
|
|
722
819
|
class ShowMoreRenderer {
|
|
723
|
-
static {
|
|
724
|
-
|
|
820
|
+
static {
|
|
821
|
+
this.ID = "showMore";
|
|
822
|
+
}
|
|
823
|
+
constructor() {}
|
|
725
824
|
get templateId() {
|
|
726
825
|
return ShowMoreRenderer.ID;
|
|
727
826
|
}
|
|
728
827
|
renderTemplate(container) {
|
|
729
|
-
const label = append(container, $(
|
|
828
|
+
const label = append(container, $(".show-more"));
|
|
730
829
|
label.style.color = asCssVariable(textLinkForeground);
|
|
731
|
-
return {
|
|
830
|
+
return {
|
|
831
|
+
label
|
|
832
|
+
};
|
|
732
833
|
}
|
|
733
834
|
renderElement(element, index, data) {
|
|
734
835
|
const stackFrames = element.element;
|
|
735
|
-
if (stackFrames.every(
|
|
836
|
+
if (stackFrames.every(
|
|
837
|
+
sf => !!(sf.source && sf.source.origin && sf.source.origin === stackFrames[0].source.origin)
|
|
838
|
+
)) {
|
|
736
839
|
data.label.textContent = ( localize(
|
|
737
|
-
|
|
840
|
+
6884,
|
|
738
841
|
"Show {0} More: {1}",
|
|
739
842
|
stackFrames.length,
|
|
740
843
|
stackFrames[0].source.origin
|
|
741
844
|
));
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
data.label.textContent = ( localize(6575, "Show {0} More Stack Frames", stackFrames.length));
|
|
845
|
+
} else {
|
|
846
|
+
data.label.textContent = ( localize(6885, "Show {0} More Stack Frames", stackFrames.length));
|
|
745
847
|
}
|
|
746
848
|
}
|
|
747
849
|
renderCompressedElements(node, index, templateData) {
|
|
748
|
-
throw ( new Error(
|
|
749
|
-
}
|
|
750
|
-
disposeTemplate(templateData) {
|
|
850
|
+
throw ( new Error("Method not implemented."));
|
|
751
851
|
}
|
|
852
|
+
disposeTemplate(templateData) {}
|
|
752
853
|
}
|
|
753
854
|
class CallStackDelegate {
|
|
754
855
|
getHeight(element) {
|
|
755
|
-
if (element instanceof StackFrame && element.presentationHint ===
|
|
856
|
+
if (element instanceof StackFrame && element.presentationHint === "label") {
|
|
756
857
|
return 16;
|
|
757
858
|
}
|
|
758
859
|
if (element instanceof ThreadAndSessionIds || element instanceof Array) {
|
|
@@ -770,7 +871,7 @@ class CallStackDelegate {
|
|
|
770
871
|
if (element instanceof StackFrame) {
|
|
771
872
|
return StackFramesRenderer.ID;
|
|
772
873
|
}
|
|
773
|
-
if (typeof element ===
|
|
874
|
+
if (typeof element === "string") {
|
|
774
875
|
return ErrorsRenderer.ID;
|
|
775
876
|
}
|
|
776
877
|
if (element instanceof ThreadAndSessionIds) {
|
|
@@ -783,14 +884,13 @@ function stoppedText(stoppedDetails) {
|
|
|
783
884
|
return stoppedDetails.text ?? stoppedDescription(stoppedDetails);
|
|
784
885
|
}
|
|
785
886
|
function stoppedDescription(stoppedDetails) {
|
|
786
|
-
return stoppedDetails.description ||
|
|
787
|
-
(stoppedDetails.reason ? ( localize(6576, "Paused on {0}", stoppedDetails.reason)) : ( localize(6577, "Paused")));
|
|
887
|
+
return stoppedDetails.description || (stoppedDetails.reason ? ( localize(6886, "Paused on {0}", stoppedDetails.reason)) : ( localize(6887, "Paused")));
|
|
788
888
|
}
|
|
789
889
|
function isDebugModel(obj) {
|
|
790
|
-
return !!obj && typeof obj.getSessions ===
|
|
890
|
+
return !!obj && typeof obj.getSessions === "function";
|
|
791
891
|
}
|
|
792
892
|
function isDebugSession(obj) {
|
|
793
|
-
return !!obj && typeof obj.getAllThreads ===
|
|
893
|
+
return !!obj && typeof obj.getAllThreads === "function";
|
|
794
894
|
}
|
|
795
895
|
class CallStackDataSource {
|
|
796
896
|
constructor(debugService) {
|
|
@@ -815,8 +915,7 @@ class CallStackDataSource {
|
|
|
815
915
|
}
|
|
816
916
|
const threads = sessions[0].getAllThreads();
|
|
817
917
|
return threads.length === 1 ? this.getThreadChildren(threads[0]) : Promise.resolve(threads);
|
|
818
|
-
}
|
|
819
|
-
else if (isDebugSession(element)) {
|
|
918
|
+
} else if (isDebugSession(element)) {
|
|
820
919
|
const childSessions = this.debugService.getModel().getSessions().filter(s => s.parentSession === element);
|
|
821
920
|
const threads = element.getAllThreads();
|
|
822
921
|
if (threads.length === 1) {
|
|
@@ -824,8 +923,7 @@ class CallStackDataSource {
|
|
|
824
923
|
return children.concat(childSessions);
|
|
825
924
|
}
|
|
826
925
|
return Promise.resolve(threads.concat(childSessions));
|
|
827
|
-
}
|
|
828
|
-
else {
|
|
926
|
+
} else {
|
|
829
927
|
return this.getThreadChildren(element);
|
|
830
928
|
}
|
|
831
929
|
}
|
|
@@ -874,21 +972,21 @@ class CallStackDataSource {
|
|
|
874
972
|
}
|
|
875
973
|
class CallStackAccessibilityProvider {
|
|
876
974
|
getWidgetAriaLabel() {
|
|
877
|
-
return localize(
|
|
975
|
+
return localize(6888, "Debug Call Stack");
|
|
878
976
|
}
|
|
879
977
|
getWidgetRole() {
|
|
880
|
-
return
|
|
978
|
+
return "treegrid";
|
|
881
979
|
}
|
|
882
980
|
getRole(_element) {
|
|
883
|
-
return
|
|
981
|
+
return "row";
|
|
884
982
|
}
|
|
885
983
|
getAriaLabel(element) {
|
|
886
984
|
if (element instanceof Thread) {
|
|
887
|
-
return localize(
|
|
985
|
+
return localize(6889, "Thread {0} {1}", element.name, element.stateLabel);
|
|
888
986
|
}
|
|
889
987
|
if (element instanceof StackFrame) {
|
|
890
988
|
return localize(
|
|
891
|
-
|
|
989
|
+
6890,
|
|
892
990
|
"Stack Frame {0}, line {1}, {2}",
|
|
893
991
|
element.name,
|
|
894
992
|
element.range.startLineNumber,
|
|
@@ -897,14 +995,14 @@ class CallStackAccessibilityProvider {
|
|
|
897
995
|
}
|
|
898
996
|
if (isDebugSession(element)) {
|
|
899
997
|
const thread = element.getAllThreads().find(t => t.stopped);
|
|
900
|
-
const state = thread ? thread.stateLabel : ( localize(
|
|
901
|
-
return localize(
|
|
998
|
+
const state = thread ? thread.stateLabel : ( localize(6879, "Running"));
|
|
999
|
+
return localize(6891, "Session {0} {1}", element.getLabel(), state);
|
|
902
1000
|
}
|
|
903
|
-
if (typeof element ===
|
|
1001
|
+
if (typeof element === "string") {
|
|
904
1002
|
return element;
|
|
905
1003
|
}
|
|
906
1004
|
if (element instanceof Array) {
|
|
907
|
-
return localize(
|
|
1005
|
+
return localize(6885, "Show {0} More Stack Frames", element.length);
|
|
908
1006
|
}
|
|
909
1007
|
return LoadMoreRenderer.LABEL;
|
|
910
1008
|
}
|
|
@@ -930,17 +1028,17 @@ class CallStackCompressionDelegate {
|
|
|
930
1028
|
registerAction2(class Collapse extends ViewAction {
|
|
931
1029
|
constructor() {
|
|
932
1030
|
super({
|
|
933
|
-
id:
|
|
1031
|
+
id: "callStack.collapse",
|
|
934
1032
|
viewId: CALLSTACK_VIEW_ID,
|
|
935
|
-
title: ( localize(
|
|
1033
|
+
title: ( localize(6892, "Collapse All")),
|
|
936
1034
|
f1: false,
|
|
937
1035
|
icon: Codicon.collapseAll,
|
|
938
1036
|
precondition: ( CONTEXT_DEBUG_STATE.isEqualTo(getStateLabel(State.Stopped))),
|
|
939
1037
|
menu: {
|
|
940
1038
|
id: MenuId.ViewTitle,
|
|
941
1039
|
order: 10,
|
|
942
|
-
group:
|
|
943
|
-
when: ( ContextKeyExpr.equals(
|
|
1040
|
+
group: "navigation",
|
|
1041
|
+
when: ( ContextKeyExpr.equals("view", CALLSTACK_VIEW_ID))
|
|
944
1042
|
}
|
|
945
1043
|
});
|
|
946
1044
|
}
|
|
@@ -950,20 +1048,46 @@ registerAction2(class Collapse extends ViewAction {
|
|
|
950
1048
|
});
|
|
951
1049
|
function registerCallStackInlineMenuItem(id, title, icon, when, order, precondition) {
|
|
952
1050
|
MenuRegistry.appendMenuItem(MenuId.DebugCallStackContext, {
|
|
953
|
-
group:
|
|
1051
|
+
group: "inline",
|
|
954
1052
|
order,
|
|
955
1053
|
when,
|
|
956
|
-
command: {
|
|
1054
|
+
command: {
|
|
1055
|
+
id,
|
|
1056
|
+
title,
|
|
1057
|
+
icon,
|
|
1058
|
+
precondition
|
|
1059
|
+
}
|
|
957
1060
|
});
|
|
958
1061
|
}
|
|
959
|
-
const threadOrSessionWithOneThread = ( ContextKeyExpr.or(( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo(
|
|
1062
|
+
const threadOrSessionWithOneThread = ( ContextKeyExpr.or(( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo("thread")), ( ContextKeyExpr.and(( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo("session")), CONTEXT_CALLSTACK_SESSION_HAS_ONE_THREAD))));
|
|
960
1063
|
registerCallStackInlineMenuItem(PAUSE_ID, PAUSE_LABEL, debugPause, ( ContextKeyExpr.and(threadOrSessionWithOneThread, ( CONTEXT_CALLSTACK_ITEM_STOPPED.toNegated()))), 10, ( CONTEXT_FOCUSED_SESSION_IS_NO_DEBUG.toNegated()));
|
|
961
1064
|
registerCallStackInlineMenuItem(CONTINUE_ID, CONTINUE_LABEL, debugContinue, ( ContextKeyExpr.and(threadOrSessionWithOneThread, CONTEXT_CALLSTACK_ITEM_STOPPED)), 10);
|
|
962
|
-
registerCallStackInlineMenuItem(
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
1065
|
+
registerCallStackInlineMenuItem(
|
|
1066
|
+
STEP_OVER_ID,
|
|
1067
|
+
STEP_OVER_LABEL,
|
|
1068
|
+
debugStepOver,
|
|
1069
|
+
threadOrSessionWithOneThread,
|
|
1070
|
+
20,
|
|
1071
|
+
CONTEXT_CALLSTACK_ITEM_STOPPED
|
|
1072
|
+
);
|
|
1073
|
+
registerCallStackInlineMenuItem(
|
|
1074
|
+
STEP_INTO_ID,
|
|
1075
|
+
STEP_INTO_LABEL,
|
|
1076
|
+
debugStepInto,
|
|
1077
|
+
threadOrSessionWithOneThread,
|
|
1078
|
+
30,
|
|
1079
|
+
CONTEXT_CALLSTACK_ITEM_STOPPED
|
|
1080
|
+
);
|
|
1081
|
+
registerCallStackInlineMenuItem(
|
|
1082
|
+
STEP_OUT_ID,
|
|
1083
|
+
STEP_OUT_LABEL,
|
|
1084
|
+
debugStepOut,
|
|
1085
|
+
threadOrSessionWithOneThread,
|
|
1086
|
+
40,
|
|
1087
|
+
CONTEXT_CALLSTACK_ITEM_STOPPED
|
|
1088
|
+
);
|
|
1089
|
+
registerCallStackInlineMenuItem(RESTART_SESSION_ID, RESTART_LABEL, debugRestart, ( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo("session")), 50);
|
|
1090
|
+
registerCallStackInlineMenuItem(STOP_ID, STOP_LABEL, debugStop, ( ContextKeyExpr.and(( CONTEXT_CALLSTACK_SESSION_IS_ATTACH.toNegated()), ( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo("session")))), 60);
|
|
1091
|
+
registerCallStackInlineMenuItem(DISCONNECT_ID, DISCONNECT_LABEL, debugDisconnect, ( ContextKeyExpr.and(CONTEXT_CALLSTACK_SESSION_IS_ATTACH, ( CONTEXT_CALLSTACK_ITEM_TYPE.isEqualTo("session")))), 60);
|
|
968
1092
|
|
|
969
1093
|
export { CallStackView, getContext, getContextForContributedActions, getSpecificSourceName };
|