@codingame/monaco-vscode-debug-service-override 1.82.4 → 1.82.5-next.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 (73) hide show
  1. package/debug.d.ts +5 -0
  2. package/debug.js +24 -0
  3. package/external/rollup-plugin-styles/dist/runtime/inject-css.js +3 -0
  4. package/external/tslib/tslib.es6.js +11 -0
  5. package/index.d.ts +1 -1
  6. package/index.js +1 -1
  7. package/override/vs/platform/dialogs/common/dialogs.js +8 -0
  8. package/package.json +2 -2
  9. package/vscode/src/vs/editor/common/services/languageFeaturesService.js +44 -0
  10. package/vscode/src/vs/workbench/contrib/debug/browser/baseDebugView.js +200 -0
  11. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.js +785 -0
  12. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointWidget.js +399 -0
  13. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointsView.js +1298 -0
  14. package/vscode/src/vs/workbench/contrib/debug/browser/callStackEditorContribution.js +178 -0
  15. package/vscode/src/vs/workbench/contrib/debug/browser/callStackView.js +960 -0
  16. package/vscode/src/vs/workbench/contrib/debug/browser/debug.contribution.js +497 -0
  17. package/vscode/src/vs/workbench/contrib/debug/browser/debugANSIHandling.js +347 -0
  18. package/vscode/src/vs/workbench/contrib/debug/browser/debugActionViewItems.js +299 -0
  19. package/vscode/src/vs/workbench/contrib/debug/browser/debugAdapterManager.js +400 -0
  20. package/vscode/src/vs/workbench/contrib/debug/browser/debugCommands.js +827 -0
  21. package/vscode/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.js +621 -0
  22. package/vscode/src/vs/workbench/contrib/debug/browser/debugConsoleQuickAccess.js +60 -0
  23. package/vscode/src/vs/workbench/contrib/debug/browser/debugEditorActions.js +527 -0
  24. package/vscode/src/vs/workbench/contrib/debug/browser/debugEditorContribution.js +681 -0
  25. package/vscode/src/vs/workbench/contrib/debug/browser/debugHover.js +356 -0
  26. package/vscode/src/vs/workbench/contrib/debug/browser/debugMemory.js +206 -0
  27. package/vscode/src/vs/workbench/contrib/debug/browser/debugProgress.js +82 -0
  28. package/vscode/src/vs/workbench/contrib/debug/browser/debugQuickAccess.js +143 -0
  29. package/vscode/src/vs/workbench/contrib/debug/browser/debugService.js +1174 -0
  30. package/vscode/src/vs/workbench/contrib/debug/browser/debugSession.js +1144 -0
  31. package/vscode/src/vs/workbench/contrib/debug/browser/debugSessionPicker.js +106 -0
  32. package/vscode/src/vs/workbench/contrib/debug/browser/debugStatus.js +68 -0
  33. package/vscode/src/vs/workbench/contrib/debug/browser/debugTaskRunner.js +275 -0
  34. package/vscode/src/vs/workbench/contrib/debug/browser/debugToolBar.js +314 -0
  35. package/vscode/src/vs/workbench/contrib/debug/browser/debugViewlet.js +168 -0
  36. package/vscode/src/vs/workbench/contrib/debug/browser/disassemblyView.js +663 -0
  37. package/vscode/src/vs/workbench/contrib/debug/browser/exceptionWidget.js +105 -0
  38. package/vscode/src/vs/workbench/contrib/debug/browser/linkDetector.js +231 -0
  39. package/vscode/src/vs/workbench/contrib/debug/browser/loadedScriptsView.js +631 -0
  40. package/vscode/src/vs/workbench/contrib/debug/browser/media/breakpointWidget.css.js +6 -0
  41. package/vscode/src/vs/workbench/contrib/debug/browser/media/callStackEditorContribution.css.js +6 -0
  42. package/vscode/src/vs/workbench/contrib/debug/browser/media/debug.contribution.css.js +6 -0
  43. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugHover.css.js +6 -0
  44. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css.js +6 -0
  45. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css.js +6 -0
  46. package/vscode/src/vs/workbench/contrib/debug/browser/media/exceptionWidget.css.js +6 -0
  47. package/vscode/src/vs/workbench/contrib/debug/browser/media/repl.css.js +6 -0
  48. package/vscode/src/vs/workbench/contrib/debug/browser/rawDebugSession.js +695 -0
  49. package/vscode/src/vs/workbench/contrib/debug/browser/repl.js +953 -0
  50. package/vscode/src/vs/workbench/contrib/debug/browser/replFilter.js +48 -0
  51. package/vscode/src/vs/workbench/contrib/debug/browser/replViewer.js +336 -0
  52. package/vscode/src/vs/workbench/contrib/debug/browser/statusbarColorProvider.js +98 -0
  53. package/vscode/src/vs/workbench/contrib/debug/browser/variablesView.js +575 -0
  54. package/vscode/src/vs/workbench/contrib/debug/browser/watchExpressionsView.js +415 -0
  55. package/vscode/src/vs/workbench/contrib/debug/browser/welcomeView.js +102 -0
  56. package/vscode/src/vs/workbench/contrib/debug/common/breakpoints.js +21 -0
  57. package/vscode/src/vs/workbench/contrib/debug/common/debugCompoundRoot.js +17 -0
  58. package/vscode/src/vs/workbench/contrib/debug/common/debugContentProvider.js +100 -0
  59. package/vscode/src/vs/workbench/contrib/debug/common/debugLifecycle.js +59 -0
  60. package/vscode/src/vs/workbench/contrib/debug/common/debugModel.js +1482 -0
  61. package/vscode/src/vs/workbench/contrib/debug/common/debugSchemas.js +346 -0
  62. package/vscode/src/vs/workbench/contrib/debug/common/debugSource.js +123 -0
  63. package/vscode/src/vs/workbench/contrib/debug/common/debugStorage.js +175 -0
  64. package/vscode/src/vs/workbench/contrib/debug/common/debugTelemetry.js +36 -0
  65. package/vscode/src/vs/workbench/contrib/debug/common/debugViewModel.js +117 -0
  66. package/vscode/src/vs/workbench/contrib/debug/common/debugger.js +260 -0
  67. package/vscode/src/vs/workbench/contrib/debug/common/disassemblyViewInput.js +27 -0
  68. package/vscode/src/vs/workbench/contrib/debug/common/loadedScriptsPicker.js +83 -0
  69. package/vscode/src/vs/workbench/contrib/debug/common/replModel.js +283 -0
  70. package/vscode/src/vs/workbench/services/configurationResolver/browser/baseConfigurationResolverService.js +305 -0
  71. package/vscode/src/vs/workbench/services/configurationResolver/browser/configurationResolverService.js +28 -0
  72. package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverSchema.js +176 -0
  73. package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverUtils.js +12 -0
@@ -0,0 +1,785 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import { isSafari } from 'monaco-editor/esm/vs/base/browser/browser.js';
3
+ import { BrowserFeatures } from 'monaco-editor/esm/vs/base/browser/canIUse.js';
4
+ import * as dom from 'monaco-editor/esm/vs/base/browser/dom.js';
5
+ import { StandardMouseEvent } from 'monaco-editor/esm/vs/base/browser/mouseEvent.js';
6
+ import { Action, SubmenuAction, Separator } from 'monaco-editor/esm/vs/base/common/actions.js';
7
+ import { distinct } from 'monaco-editor/esm/vs/base/common/arrays.js';
8
+ import { RunOnceScheduler, timeout } from 'monaco-editor/esm/vs/base/common/async.js';
9
+ import { memoize } from 'monaco-editor/esm/vs/base/common/decorators.js';
10
+ import { onUnexpectedError } from 'monaco-editor/esm/vs/base/common/errors.js';
11
+ import { MarkdownString } from 'monaco-editor/esm/vs/base/common/htmlContent.js';
12
+ import { dispose, disposeIfDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
13
+ import * as platform from 'monaco-editor/esm/vs/base/common/platform.js';
14
+ import Severity from 'monaco-editor/esm/vs/base/common/severity.js';
15
+ import { noBreakWhitespace } from 'monaco-editor/esm/vs/base/common/strings.js';
16
+ import { ThemeIcon } from 'monaco-editor/esm/vs/base/common/themables.js';
17
+ import { generateUuid } from 'monaco-editor/esm/vs/base/common/uuid.js';
18
+ import { Range } from 'monaco-editor/esm/vs/editor/common/core/range.js';
19
+ import { ILanguageService } from 'monaco-editor/esm/vs/editor/common/languages/language.js';
20
+ import { GlyphMarginLane, OverviewRulerLane } from 'monaco-editor/esm/vs/editor/common/model.js';
21
+ import * as nls from 'monaco-editor/esm/vs/nls.js';
22
+ import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
23
+ import { IContextKeyService } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkey.js';
24
+ import { IContextMenuService } from 'monaco-editor/esm/vs/platform/contextview/browser/contextView.js';
25
+ import '../../../../../../../override/vs/platform/dialogs/common/dialogs.js';
26
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
27
+ import { ILabelService } from 'monaco-editor/esm/vs/platform/label/common/label.js';
28
+ import { registerColor } from 'monaco-editor/esm/vs/platform/theme/common/colorRegistry.js';
29
+ import { registerThemingParticipant, themeColorFromId } from 'monaco-editor/esm/vs/platform/theme/common/themeService.js';
30
+ import { GutterActionsRegistry } from 'vscode/vscode/vs/workbench/contrib/codeEditor/browser/editorLineNumberMenu';
31
+ import { getBreakpointMessageAndIcon } from './breakpointsView.js';
32
+ import { BreakpointWidget } from './breakpointWidget.js';
33
+ import { debugBreakpointHint, allBreakpoints, debugBreakpointUnsupported, breakpoint, debugStackframeFocused, debugStackframe } from 'vscode/vscode/vs/workbench/contrib/debug/browser/debugIcons';
34
+ import { IDebugService, BREAKPOINT_EDITOR_CONTRIBUTION_ID, CONTEXT_BREAKPOINT_WIDGET_VISIBLE, DebuggerString } from 'vscode/vscode/vs/workbench/contrib/debug/common/debug';
35
+ import { IDialogService } from 'vscode/vscode/vs/platform/dialogs/common/dialogs';
36
+
37
+ const $ = dom.$;
38
+ const breakpointHelperDecoration = {
39
+ description: 'breakpoint-helper-decoration',
40
+ glyphMarginClassName: ThemeIcon.asClassName(debugBreakpointHint),
41
+ glyphMargin: { position: GlyphMarginLane.Right },
42
+ stickiness: 1
43
+ };
44
+ function createBreakpointDecorations(accessor, model, breakpoints, state, breakpointsActivated, showBreakpointsInOverviewRuler) {
45
+ const result = [];
46
+ breakpoints.forEach((breakpoint) => {
47
+ if (breakpoint.lineNumber > model.getLineCount()) {
48
+ return;
49
+ }
50
+ const hasOtherBreakpointsOnLine = ( (breakpoints.some(bp => bp !== breakpoint && bp.lineNumber === breakpoint.lineNumber)));
51
+ const column = model.getLineFirstNonWhitespaceColumn(breakpoint.lineNumber);
52
+ const range = model.validateRange(breakpoint.column ? ( (new Range(
53
+ breakpoint.lineNumber,
54
+ breakpoint.column,
55
+ breakpoint.lineNumber,
56
+ breakpoint.column + 1
57
+ )))
58
+ : ( (new Range(breakpoint.lineNumber, column, breakpoint.lineNumber, column + 1)))
59
+ );
60
+ result.push({
61
+ options: getBreakpointDecorationOptions(accessor, model, breakpoint, state, breakpointsActivated, showBreakpointsInOverviewRuler, hasOtherBreakpointsOnLine),
62
+ range
63
+ });
64
+ });
65
+ return result;
66
+ }
67
+ function getBreakpointDecorationOptions(accessor, model, breakpoint, state, breakpointsActivated, showBreakpointsInOverviewRuler, hasOtherBreakpointsOnLine) {
68
+ const debugService = accessor.get(IDebugService);
69
+ const languageService = accessor.get(ILanguageService);
70
+ const { icon, message, showAdapterUnverifiedMessage } = getBreakpointMessageAndIcon(state, breakpointsActivated, breakpoint, undefined);
71
+ let glyphMarginHoverMessage;
72
+ let unverifiedMessage;
73
+ if (showAdapterUnverifiedMessage) {
74
+ let langId;
75
+ unverifiedMessage = ( (debugService.getModel().getSessions().map(s => {
76
+ const dbg = debugService.getAdapterManager().getDebugger(s.configuration.type);
77
+ const message = dbg?.strings?.[DebuggerString.UnverifiedBreakpoints];
78
+ if (message) {
79
+ if (!langId) {
80
+ langId = languageService.guessLanguageIdByFilepathOrFirstLine(breakpoint.uri) ?? undefined;
81
+ }
82
+ return langId && dbg.interestedInLanguage(langId) ? message : undefined;
83
+ }
84
+ return undefined;
85
+ })))
86
+ .find(messages => !!messages);
87
+ }
88
+ if (message) {
89
+ glyphMarginHoverMessage = ( (new MarkdownString(undefined, { isTrusted: true, supportThemeIcons: true })));
90
+ if (breakpoint.condition || breakpoint.hitCondition) {
91
+ const languageId = model.getLanguageId();
92
+ glyphMarginHoverMessage.appendCodeblock(languageId, message);
93
+ if (unverifiedMessage) {
94
+ glyphMarginHoverMessage.appendMarkdown('$(warning) ' + unverifiedMessage);
95
+ }
96
+ }
97
+ else {
98
+ glyphMarginHoverMessage.appendText(message);
99
+ if (unverifiedMessage) {
100
+ glyphMarginHoverMessage.appendMarkdown('\n\n$(warning) ' + unverifiedMessage);
101
+ }
102
+ }
103
+ }
104
+ else if (unverifiedMessage) {
105
+ glyphMarginHoverMessage = ( (new MarkdownString(undefined, { isTrusted: true, supportThemeIcons: true }))).appendMarkdown(unverifiedMessage);
106
+ }
107
+ let overviewRulerDecoration = null;
108
+ if (showBreakpointsInOverviewRuler) {
109
+ overviewRulerDecoration = {
110
+ color: themeColorFromId(debugIconBreakpointForeground),
111
+ position: OverviewRulerLane.Left
112
+ };
113
+ }
114
+ const renderInline = breakpoint.column && (hasOtherBreakpointsOnLine || breakpoint.column > model.getLineFirstNonWhitespaceColumn(breakpoint.lineNumber));
115
+ return {
116
+ description: 'breakpoint-decoration',
117
+ glyphMargin: { position: GlyphMarginLane.Right },
118
+ glyphMarginClassName: ThemeIcon.asClassName(icon),
119
+ glyphMarginHoverMessage,
120
+ stickiness: 1 ,
121
+ before: renderInline ? {
122
+ content: noBreakWhitespace,
123
+ inlineClassName: `debug-breakpoint-placeholder`,
124
+ inlineClassNameAffectsLetterSpacing: true
125
+ } : undefined,
126
+ overviewRuler: overviewRulerDecoration,
127
+ zIndex: 9999
128
+ };
129
+ }
130
+ async function requestBreakpointCandidateLocations(model, lineNumbers, session) {
131
+ if (!session.capabilities.supportsBreakpointLocationsRequest) {
132
+ return [];
133
+ }
134
+ return await Promise.all(( (distinct(lineNumbers, l => l).map(async (lineNumber) => {
135
+ try {
136
+ return { lineNumber, positions: await session.breakpointsLocations(model.uri, lineNumber) };
137
+ }
138
+ catch {
139
+ return { lineNumber, positions: [] };
140
+ }
141
+ }))));
142
+ }
143
+ function createCandidateDecorations(model, breakpointDecorations, lineBreakpoints) {
144
+ const result = [];
145
+ for (const { positions, lineNumber } of lineBreakpoints) {
146
+ if (positions.length === 0) {
147
+ continue;
148
+ }
149
+ const firstColumn = model.getLineFirstNonWhitespaceColumn(lineNumber);
150
+ const lastColumn = model.getLineLastNonWhitespaceColumn(lineNumber);
151
+ positions.forEach(p => {
152
+ const range = ( (new Range(p.lineNumber, p.column, p.lineNumber, p.column + 1)));
153
+ if ((p.column <= firstColumn && !( (breakpointDecorations.some(
154
+ bp => bp.range.startColumn > firstColumn && bp.range.startLineNumber === p.lineNumber
155
+ )))) || p.column > lastColumn) {
156
+ return;
157
+ }
158
+ const breakpointAtPosition = breakpointDecorations.find(bpd => bpd.range.equalsRange(range));
159
+ if (breakpointAtPosition && breakpointAtPosition.inlineWidget) {
160
+ return;
161
+ }
162
+ result.push({
163
+ range,
164
+ options: {
165
+ description: 'breakpoint-placeholder-decoration',
166
+ stickiness: 1 ,
167
+ before: breakpointAtPosition ? undefined : {
168
+ content: noBreakWhitespace,
169
+ inlineClassName: `debug-breakpoint-placeholder`,
170
+ inlineClassNameAffectsLetterSpacing: true
171
+ },
172
+ },
173
+ breakpoint: breakpointAtPosition ? breakpointAtPosition.breakpoint : undefined
174
+ });
175
+ });
176
+ }
177
+ return result;
178
+ }
179
+ let BreakpointEditorContribution = class BreakpointEditorContribution {
180
+ constructor(editor, debugService, contextMenuService, instantiationService, contextKeyService, dialogService, configurationService, labelService) {
181
+ this.editor = editor;
182
+ this.debugService = debugService;
183
+ this.contextMenuService = contextMenuService;
184
+ this.instantiationService = instantiationService;
185
+ this.dialogService = dialogService;
186
+ this.configurationService = configurationService;
187
+ this.labelService = labelService;
188
+ this.breakpointHintDecoration = null;
189
+ this.toDispose = [];
190
+ this.ignoreDecorationsChangedEvent = false;
191
+ this.ignoreBreakpointsChangeEvent = false;
192
+ this.breakpointDecorations = [];
193
+ this.candidateDecorations = [];
194
+ this.breakpointWidgetVisible = CONTEXT_BREAKPOINT_WIDGET_VISIBLE.bindTo(contextKeyService);
195
+ this.setDecorationsScheduler = ( (new RunOnceScheduler(() => this.setDecorations(), 30)));
196
+ this.setDecorationsScheduler.schedule();
197
+ this.registerListeners();
198
+ }
199
+ getContextMenuActionsAtPosition(lineNumber, model) {
200
+ if (!this.debugService.getAdapterManager().hasEnabledDebuggers()) {
201
+ return [];
202
+ }
203
+ if (!this.debugService.canSetBreakpointsIn(model)) {
204
+ return [];
205
+ }
206
+ const breakpoints = this.debugService.getModel().getBreakpoints({ lineNumber, uri: model.uri });
207
+ return this.getContextMenuActions(breakpoints, model.uri, lineNumber);
208
+ }
209
+ registerListeners() {
210
+ this.toDispose.push(this.editor.onMouseDown(async (e) => {
211
+ if (!this.debugService.getAdapterManager().hasEnabledDebuggers()) {
212
+ return;
213
+ }
214
+ const model = this.editor.getModel();
215
+ if (!e.target.position
216
+ || !model
217
+ || e.target.type !== 2
218
+ || e.target.detail.isAfterLines
219
+ || !this.marginFreeFromNonDebugDecorations(e.target.position.lineNumber)
220
+ && !e.target.element?.className.includes('breakpoint')) {
221
+ return;
222
+ }
223
+ const canSetBreakpoints = this.debugService.canSetBreakpointsIn(model);
224
+ const lineNumber = e.target.position.lineNumber;
225
+ const uri = model.uri;
226
+ if (e.event.rightButton || (platform.isMacintosh && e.event.leftButton && e.event.ctrlKey)) {
227
+ return;
228
+ }
229
+ else {
230
+ const breakpoints = this.debugService.getModel().getBreakpoints({ uri, lineNumber });
231
+ if (breakpoints.length) {
232
+ const isShiftPressed = e.event.shiftKey;
233
+ const enabled = ( (breakpoints.some(bp => bp.enabled)));
234
+ if (isShiftPressed) {
235
+ breakpoints.forEach(bp => this.debugService.enableOrDisableBreakpoints(!enabled, bp));
236
+ }
237
+ else if (!platform.isLinux && ( (breakpoints.some(bp => !!bp.condition || !!bp.logMessage || !!bp.hitCondition)))) {
238
+ const logPoint = breakpoints.every(bp => !!bp.logMessage);
239
+ const breakpointType = logPoint ? ( (nls.localize('logPoint', "Logpoint"))) : ( (nls.localize('breakpoint', "Breakpoint")));
240
+ const disabledBreakpointDialogMessage = ( (nls.localize(
241
+ 'breakpointHasConditionDisabled',
242
+ "This {0} has a {1} that will get lost on remove. Consider enabling the {0} instead.",
243
+ breakpointType.toLowerCase(),
244
+ logPoint ? ( (nls.localize('message', "message"))) : ( (nls.localize('condition', "condition")))
245
+ )));
246
+ const enabledBreakpointDialogMessage = ( (nls.localize(
247
+ 'breakpointHasConditionEnabled',
248
+ "This {0} has a {1} that will get lost on remove. Consider disabling the {0} instead.",
249
+ breakpointType.toLowerCase(),
250
+ logPoint ? ( (nls.localize('message', "message"))) : ( (nls.localize('condition', "condition")))
251
+ )));
252
+ await this.dialogService.prompt({
253
+ type: Severity.Info,
254
+ message: enabled ? enabledBreakpointDialogMessage : disabledBreakpointDialogMessage,
255
+ buttons: [
256
+ {
257
+ label: ( (nls.localize(
258
+ { key: 'removeLogPoint', comment: ['&& denotes a mnemonic'] },
259
+ "&&Remove {0}",
260
+ breakpointType
261
+ ))),
262
+ run: () => breakpoints.forEach(bp => this.debugService.removeBreakpoints(bp.getId()))
263
+ },
264
+ {
265
+ label: ( (nls.localize(
266
+ 'disableLogPoint',
267
+ "{0} {1}",
268
+ enabled ? ( (nls.localize({ key: 'disable', comment: ['&& denotes a mnemonic'] }, "&&Disable"))) : ( (nls.localize({ key: 'enable', comment: ['&& denotes a mnemonic'] }, "&&Enable"))),
269
+ breakpointType
270
+ ))),
271
+ run: () => breakpoints.forEach(bp => this.debugService.enableOrDisableBreakpoints(!enabled, bp))
272
+ }
273
+ ],
274
+ cancelButton: true
275
+ });
276
+ }
277
+ else {
278
+ if (!enabled) {
279
+ breakpoints.forEach(bp => this.debugService.enableOrDisableBreakpoints(!enabled, bp));
280
+ }
281
+ else {
282
+ breakpoints.forEach(bp => this.debugService.removeBreakpoints(bp.getId()));
283
+ }
284
+ }
285
+ }
286
+ else if (canSetBreakpoints) {
287
+ this.debugService.addBreakpoints(uri, [{ lineNumber }]);
288
+ }
289
+ }
290
+ }));
291
+ if (!(BrowserFeatures.pointerEvents && isSafari)) {
292
+ this.toDispose.push(this.editor.onMouseMove((e) => {
293
+ if (!this.debugService.getAdapterManager().hasEnabledDebuggers()) {
294
+ return;
295
+ }
296
+ let showBreakpointHintAtLineNumber = -1;
297
+ const model = this.editor.getModel();
298
+ if (model && e.target.position && ((e.target.type === 2 || e.target.type === 3) ) && this.debugService.canSetBreakpointsIn(model) &&
299
+ this.marginFreeFromNonDebugDecorations(e.target.position.lineNumber)) {
300
+ const data = e.target.detail;
301
+ if (!data.isAfterLines) {
302
+ showBreakpointHintAtLineNumber = e.target.position.lineNumber;
303
+ }
304
+ }
305
+ this.ensureBreakpointHintDecoration(showBreakpointHintAtLineNumber);
306
+ }));
307
+ this.toDispose.push(this.editor.onMouseLeave(() => {
308
+ this.ensureBreakpointHintDecoration(-1);
309
+ }));
310
+ }
311
+ this.toDispose.push(this.editor.onDidChangeModel(async () => {
312
+ this.closeBreakpointWidget();
313
+ await this.setDecorations();
314
+ }));
315
+ this.toDispose.push(this.debugService.getModel().onDidChangeBreakpoints(() => {
316
+ if (!this.ignoreBreakpointsChangeEvent && !this.setDecorationsScheduler.isScheduled()) {
317
+ this.setDecorationsScheduler.schedule();
318
+ }
319
+ }));
320
+ this.toDispose.push(this.debugService.onDidChangeState(() => {
321
+ if (!this.setDecorationsScheduler.isScheduled()) {
322
+ this.setDecorationsScheduler.schedule();
323
+ }
324
+ }));
325
+ this.toDispose.push(this.editor.onDidChangeModelDecorations(() => this.onModelDecorationsChanged()));
326
+ this.toDispose.push(this.configurationService.onDidChangeConfiguration(async (e) => {
327
+ if (e.affectsConfiguration('debug.showBreakpointsInOverviewRuler') || e.affectsConfiguration('debug.showInlineBreakpointCandidates')) {
328
+ await this.setDecorations();
329
+ }
330
+ }));
331
+ }
332
+ getContextMenuActions(breakpoints, uri, lineNumber, column) {
333
+ const actions = [];
334
+ if (breakpoints.length === 1) {
335
+ const breakpointType = breakpoints[0].logMessage ? ( (nls.localize('logPoint', "Logpoint"))) : ( (nls.localize('breakpoint', "Breakpoint")));
336
+ actions.push(( (new Action(
337
+ 'debug.removeBreakpoint',
338
+ (nls.localize('removeBreakpoint', "Remove {0}", breakpointType)),
339
+ undefined,
340
+ true,
341
+ async () => {
342
+ await this.debugService.removeBreakpoints(breakpoints[0].getId());
343
+ }
344
+ ))));
345
+ actions.push(( (new Action(
346
+ 'workbench.debug.action.editBreakpointAction',
347
+ (nls.localize('editBreakpoint', "Edit {0}...", breakpointType)),
348
+ undefined,
349
+ true,
350
+ () => Promise.resolve(this.showBreakpointWidget(breakpoints[0].lineNumber, breakpoints[0].column))
351
+ ))));
352
+ actions.push(( (new Action(
353
+ `workbench.debug.viewlet.action.toggleBreakpoint`,
354
+ breakpoints[0].enabled ? ( (nls.localize('disableBreakpoint', "Disable {0}", breakpointType))) : ( (nls.localize('enableBreakpoint', "Enable {0}", breakpointType))),
355
+ undefined,
356
+ true,
357
+ () => this.debugService.enableOrDisableBreakpoints(!breakpoints[0].enabled, breakpoints[0])
358
+ ))));
359
+ }
360
+ else if (breakpoints.length > 1) {
361
+ const sorted = breakpoints.slice().sort((first, second) => (first.column && second.column) ? first.column - second.column : 1);
362
+ actions.push(( (new SubmenuAction(
363
+ 'debug.removeBreakpoints',
364
+ (nls.localize('removeBreakpoints', "Remove Breakpoints")),
365
+ (sorted.map(
366
+ bp => ( (new Action('removeInlineBreakpoint', bp.column ? ( (nls.localize(
367
+ 'removeInlineBreakpointOnColumn',
368
+ "Remove Inline Breakpoint on Column {0}",
369
+ bp.column
370
+ ))) : ( (nls.localize('removeLineBreakpoint', "Remove Line Breakpoint"))), undefined, true, () => this.debugService.removeBreakpoints(bp.getId()))))
371
+ ))
372
+ ))));
373
+ actions.push(( (new SubmenuAction(
374
+ 'debug.editBreakpoints',
375
+ (nls.localize('editBreakpoints', "Edit Breakpoints")),
376
+ (sorted.map(
377
+ bp => ( (new Action('editBreakpoint', bp.column ? ( (nls.localize(
378
+ 'editInlineBreakpointOnColumn',
379
+ "Edit Inline Breakpoint on Column {0}",
380
+ bp.column
381
+ ))) : ( (nls.localize('editLineBreakpoint', "Edit Line Breakpoint"))), undefined, true, () => Promise.resolve(this.showBreakpointWidget(bp.lineNumber, bp.column)))))
382
+ ))
383
+ ))));
384
+ actions.push(( (new SubmenuAction(
385
+ 'debug.enableDisableBreakpoints',
386
+ (nls.localize('enableDisableBreakpoints', "Enable/Disable Breakpoints")),
387
+ (sorted.map(bp => ( (new Action(
388
+ bp.enabled ? 'disableColumnBreakpoint' : 'enableColumnBreakpoint',
389
+ bp.enabled ? (bp.column ? ( (nls.localize(
390
+ 'disableInlineColumnBreakpoint',
391
+ "Disable Inline Breakpoint on Column {0}",
392
+ bp.column
393
+ ))) : ( (nls.localize('disableBreakpointOnLine', "Disable Line Breakpoint"))))
394
+ : (bp.column ? ( (nls.localize('enableBreakpoints', "Enable Inline Breakpoint on Column {0}", bp.column))) : ( (nls.localize('enableBreakpointOnLine', "Enable Line Breakpoint")))),
395
+ undefined,
396
+ true,
397
+ () => this.debugService.enableOrDisableBreakpoints(!bp.enabled, bp)
398
+ )))))
399
+ ))));
400
+ }
401
+ else {
402
+ actions.push(( (new Action(
403
+ 'addBreakpoint',
404
+ (nls.localize('addBreakpoint', "Add Breakpoint")),
405
+ undefined,
406
+ true,
407
+ () => this.debugService.addBreakpoints(uri, [{ lineNumber, column }])
408
+ ))));
409
+ actions.push(( (new Action(
410
+ 'addConditionalBreakpoint',
411
+ (nls.localize('addConditionalBreakpoint', "Add Conditional Breakpoint...")),
412
+ undefined,
413
+ true,
414
+ () => Promise.resolve(this.showBreakpointWidget(lineNumber, column, 0 ))
415
+ ))));
416
+ actions.push(( (new Action(
417
+ 'addLogPoint',
418
+ (nls.localize('addLogPoint', "Add Logpoint...")),
419
+ undefined,
420
+ true,
421
+ () => Promise.resolve(this.showBreakpointWidget(lineNumber, column, 2 ))
422
+ ))));
423
+ }
424
+ if (this.debugService.state === 2 ) {
425
+ actions.push(( (new Separator())));
426
+ actions.push(( (new Action(
427
+ 'runToLine',
428
+ (nls.localize('runToLine', "Run to Line")),
429
+ undefined,
430
+ true,
431
+ () => this.debugService.runTo(uri, lineNumber).catch(onUnexpectedError)
432
+ ))));
433
+ }
434
+ return actions;
435
+ }
436
+ marginFreeFromNonDebugDecorations(line) {
437
+ const decorations = this.editor.getLineDecorations(line);
438
+ if (decorations) {
439
+ for (const { options } of decorations) {
440
+ const clz = options.glyphMarginClassName;
441
+ if (clz && (!clz.includes('codicon-') || clz.includes('codicon-testing-') || clz.includes('codicon-merge-') || clz.includes('codicon-arrow-') || clz.includes('codicon-loading') || clz.includes('codicon-fold'))) {
442
+ return false;
443
+ }
444
+ }
445
+ }
446
+ return true;
447
+ }
448
+ ensureBreakpointHintDecoration(showBreakpointHintAtLineNumber) {
449
+ this.editor.changeDecorations((accessor) => {
450
+ if (this.breakpointHintDecoration) {
451
+ accessor.removeDecoration(this.breakpointHintDecoration);
452
+ this.breakpointHintDecoration = null;
453
+ }
454
+ if (showBreakpointHintAtLineNumber !== -1) {
455
+ this.breakpointHintDecoration = accessor.addDecoration({
456
+ startLineNumber: showBreakpointHintAtLineNumber,
457
+ startColumn: 1,
458
+ endLineNumber: showBreakpointHintAtLineNumber,
459
+ endColumn: 1
460
+ }, breakpointHelperDecoration);
461
+ }
462
+ });
463
+ }
464
+ async setDecorations() {
465
+ if (!this.editor.hasModel()) {
466
+ return;
467
+ }
468
+ const setCandidateDecorations = (changeAccessor, desiredCandidatePositions) => {
469
+ const desiredCandidateDecorations = createCandidateDecorations(model, this.breakpointDecorations, desiredCandidatePositions);
470
+ const candidateDecorationIds = changeAccessor.deltaDecorations(( (this.candidateDecorations.map(c => c.decorationId))), desiredCandidateDecorations);
471
+ this.candidateDecorations.forEach(candidate => {
472
+ candidate.inlineWidget.dispose();
473
+ });
474
+ this.candidateDecorations = ( (candidateDecorationIds.map((decorationId, index) => {
475
+ const candidate = desiredCandidateDecorations[index];
476
+ const icon = candidate.breakpoint ? getBreakpointMessageAndIcon(this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), candidate.breakpoint, this.labelService).icon : breakpoint.disabled;
477
+ const contextMenuActions = () => this.getContextMenuActions(candidate.breakpoint ? [candidate.breakpoint] : [], activeCodeEditor.getModel().uri, candidate.range.startLineNumber, candidate.range.startColumn);
478
+ const inlineWidget = ( (new InlineBreakpointWidget(
479
+ activeCodeEditor,
480
+ decorationId,
481
+ ThemeIcon.asClassName(icon),
482
+ candidate.breakpoint,
483
+ this.debugService,
484
+ this.contextMenuService,
485
+ contextMenuActions
486
+ )));
487
+ return {
488
+ decorationId,
489
+ inlineWidget
490
+ };
491
+ })));
492
+ };
493
+ const activeCodeEditor = this.editor;
494
+ const model = activeCodeEditor.getModel();
495
+ const breakpoints = this.debugService.getModel().getBreakpoints({ uri: model.uri });
496
+ const debugSettings = this.configurationService.getValue('debug');
497
+ const desiredBreakpointDecorations = this.instantiationService.invokeFunction(accessor => createBreakpointDecorations(accessor, model, breakpoints, this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), debugSettings.showBreakpointsInOverviewRuler));
498
+ const session = this.debugService.getViewModel().focusedSession;
499
+ const desiredCandidatePositions = debugSettings.showInlineBreakpointCandidates && session ? requestBreakpointCandidateLocations(this.editor.getModel(), ( (desiredBreakpointDecorations.map(bp => bp.range.startLineNumber))), session) : Promise.resolve([]);
500
+ const desiredCandidatePositionsRaced = await Promise.race([desiredCandidatePositions, timeout(500).then(() => undefined)]);
501
+ if (desiredCandidatePositionsRaced === undefined) {
502
+ desiredCandidatePositions.then(v => activeCodeEditor.changeDecorations(d => setCandidateDecorations(d, v)));
503
+ }
504
+ try {
505
+ this.ignoreDecorationsChangedEvent = true;
506
+ activeCodeEditor.changeDecorations((changeAccessor) => {
507
+ const decorationIds = changeAccessor.deltaDecorations(( (this.breakpointDecorations.map(bpd => bpd.decorationId))), desiredBreakpointDecorations);
508
+ this.breakpointDecorations.forEach(bpd => {
509
+ bpd.inlineWidget?.dispose();
510
+ });
511
+ this.breakpointDecorations = ( (decorationIds.map((decorationId, index) => {
512
+ let inlineWidget = undefined;
513
+ const breakpoint = breakpoints[index];
514
+ if (desiredBreakpointDecorations[index].options.before) {
515
+ const contextMenuActions = () => this.getContextMenuActions([breakpoint], activeCodeEditor.getModel().uri, breakpoint.lineNumber, breakpoint.column);
516
+ inlineWidget = ( (new InlineBreakpointWidget(
517
+ activeCodeEditor,
518
+ decorationId,
519
+ desiredBreakpointDecorations[index].options.glyphMarginClassName,
520
+ breakpoint,
521
+ this.debugService,
522
+ this.contextMenuService,
523
+ contextMenuActions
524
+ )));
525
+ }
526
+ return {
527
+ decorationId,
528
+ breakpoint,
529
+ range: desiredBreakpointDecorations[index].range,
530
+ inlineWidget
531
+ };
532
+ })));
533
+ if (desiredCandidatePositionsRaced) {
534
+ setCandidateDecorations(changeAccessor, desiredCandidatePositionsRaced);
535
+ }
536
+ });
537
+ }
538
+ finally {
539
+ this.ignoreDecorationsChangedEvent = false;
540
+ }
541
+ for (const d of this.breakpointDecorations) {
542
+ if (d.inlineWidget) {
543
+ this.editor.layoutContentWidget(d.inlineWidget);
544
+ }
545
+ }
546
+ }
547
+ async onModelDecorationsChanged() {
548
+ if (this.breakpointDecorations.length === 0 || this.ignoreDecorationsChangedEvent || !this.editor.hasModel()) {
549
+ return;
550
+ }
551
+ let somethingChanged = false;
552
+ const model = this.editor.getModel();
553
+ this.breakpointDecorations.forEach(breakpointDecoration => {
554
+ if (somethingChanged) {
555
+ return;
556
+ }
557
+ const newBreakpointRange = model.getDecorationRange(breakpointDecoration.decorationId);
558
+ if (newBreakpointRange && (!breakpointDecoration.range.equalsRange(newBreakpointRange))) {
559
+ somethingChanged = true;
560
+ breakpointDecoration.range = newBreakpointRange;
561
+ }
562
+ });
563
+ if (!somethingChanged) {
564
+ return;
565
+ }
566
+ const data = ( (new Map()));
567
+ for (let i = 0, len = this.breakpointDecorations.length; i < len; i++) {
568
+ const breakpointDecoration = this.breakpointDecorations[i];
569
+ const decorationRange = model.getDecorationRange(breakpointDecoration.decorationId);
570
+ if (decorationRange) {
571
+ if (breakpointDecoration.breakpoint) {
572
+ data.set(breakpointDecoration.breakpoint.getId(), {
573
+ lineNumber: decorationRange.startLineNumber,
574
+ column: breakpointDecoration.breakpoint.column ? decorationRange.startColumn : undefined,
575
+ });
576
+ }
577
+ }
578
+ }
579
+ try {
580
+ this.ignoreBreakpointsChangeEvent = true;
581
+ await this.debugService.updateBreakpoints(model.uri, data, true);
582
+ }
583
+ finally {
584
+ this.ignoreBreakpointsChangeEvent = false;
585
+ }
586
+ }
587
+ showBreakpointWidget(lineNumber, column, context) {
588
+ this.breakpointWidget?.dispose();
589
+ this.breakpointWidget = this.instantiationService.createInstance(BreakpointWidget, this.editor, lineNumber, column, context);
590
+ this.breakpointWidget.show({ lineNumber, column: 1 });
591
+ this.breakpointWidgetVisible.set(true);
592
+ }
593
+ closeBreakpointWidget() {
594
+ if (this.breakpointWidget) {
595
+ this.breakpointWidget.dispose();
596
+ this.breakpointWidget = undefined;
597
+ this.breakpointWidgetVisible.reset();
598
+ this.editor.focus();
599
+ }
600
+ }
601
+ dispose() {
602
+ this.breakpointWidget?.dispose();
603
+ this.editor.removeDecorations(( (this.breakpointDecorations.map(bpd => bpd.decorationId))));
604
+ dispose(this.toDispose);
605
+ }
606
+ };
607
+ BreakpointEditorContribution = ( (__decorate([
608
+ ( (__param(1, IDebugService))),
609
+ ( (__param(2, IContextMenuService))),
610
+ ( (__param(3, IInstantiationService))),
611
+ ( (__param(4, IContextKeyService))),
612
+ ( (__param(5, IDialogService))),
613
+ ( (__param(6, IConfigurationService))),
614
+ ( (__param(7, ILabelService)))
615
+ ], BreakpointEditorContribution)));
616
+ GutterActionsRegistry.registerGutterActionsGenerator(({ lineNumber, editor, accessor }, result) => {
617
+ const model = editor.getModel();
618
+ const debugService = accessor.get(IDebugService);
619
+ if (!model || !debugService.getAdapterManager().hasEnabledDebuggers() || !debugService.canSetBreakpointsIn(model)) {
620
+ return;
621
+ }
622
+ const breakpointEditorContribution = editor.getContribution(BREAKPOINT_EDITOR_CONTRIBUTION_ID);
623
+ if (!breakpointEditorContribution) {
624
+ return;
625
+ }
626
+ const actions = breakpointEditorContribution.getContextMenuActionsAtPosition(lineNumber, model);
627
+ for (const action of actions) {
628
+ result.push(action, '2_debug');
629
+ }
630
+ });
631
+ class InlineBreakpointWidget {
632
+ constructor(editor, decorationId, cssClass, breakpoint, debugService, contextMenuService, getContextMenuActions) {
633
+ this.editor = editor;
634
+ this.decorationId = decorationId;
635
+ this.breakpoint = breakpoint;
636
+ this.debugService = debugService;
637
+ this.contextMenuService = contextMenuService;
638
+ this.getContextMenuActions = getContextMenuActions;
639
+ this.allowEditorOverflow = false;
640
+ this.suppressMouseDown = true;
641
+ this.toDispose = [];
642
+ this.range = this.editor.getModel().getDecorationRange(decorationId);
643
+ this.toDispose.push(this.editor.onDidChangeModelDecorations(() => {
644
+ const model = this.editor.getModel();
645
+ const range = model.getDecorationRange(this.decorationId);
646
+ if (this.range && !this.range.equalsRange(range)) {
647
+ this.range = range;
648
+ this.editor.layoutContentWidget(this);
649
+ }
650
+ }));
651
+ this.create(cssClass);
652
+ this.editor.addContentWidget(this);
653
+ this.editor.layoutContentWidget(this);
654
+ }
655
+ create(cssClass) {
656
+ this.domNode = $('.inline-breakpoint-widget');
657
+ if (cssClass) {
658
+ this.domNode.classList.add(...cssClass.split(' '));
659
+ }
660
+ this.toDispose.push(dom.addDisposableListener(this.domNode, dom.EventType.CLICK, async (e) => {
661
+ switch (this.breakpoint?.enabled) {
662
+ case undefined:
663
+ await this.debugService.addBreakpoints(this.editor.getModel().uri, [{ lineNumber: this.range.startLineNumber, column: this.range.startColumn }]);
664
+ break;
665
+ case true:
666
+ await this.debugService.removeBreakpoints(this.breakpoint.getId());
667
+ break;
668
+ case false:
669
+ this.debugService.enableOrDisableBreakpoints(true, this.breakpoint);
670
+ break;
671
+ }
672
+ }));
673
+ this.toDispose.push(dom.addDisposableListener(this.domNode, dom.EventType.CONTEXT_MENU, e => {
674
+ const event = ( (new StandardMouseEvent(e)));
675
+ const actions = this.getContextMenuActions();
676
+ this.contextMenuService.showContextMenu({
677
+ getAnchor: () => event,
678
+ getActions: () => actions,
679
+ getActionsContext: () => this.breakpoint,
680
+ onHide: () => disposeIfDisposable(actions)
681
+ });
682
+ }));
683
+ const updateSize = () => {
684
+ const lineHeight = this.editor.getOption(65 );
685
+ this.domNode.style.height = `${lineHeight}px`;
686
+ this.domNode.style.width = `${Math.ceil(0.8 * lineHeight)}px`;
687
+ this.domNode.style.marginLeft = `4px`;
688
+ };
689
+ updateSize();
690
+ this.toDispose.push(this.editor.onDidChangeConfiguration(c => {
691
+ if (c.hasChanged(51 ) || c.hasChanged(65 )) {
692
+ updateSize();
693
+ }
694
+ }));
695
+ }
696
+ getId() {
697
+ return generateUuid();
698
+ }
699
+ getDomNode() {
700
+ return this.domNode;
701
+ }
702
+ getPosition() {
703
+ if (!this.range) {
704
+ return null;
705
+ }
706
+ this.domNode.classList.toggle('line-start', this.range.startColumn === 1);
707
+ return {
708
+ position: { lineNumber: this.range.startLineNumber, column: this.range.startColumn - 1 },
709
+ preference: [0 ]
710
+ };
711
+ }
712
+ dispose() {
713
+ this.editor.removeContentWidget(this);
714
+ dispose(this.toDispose);
715
+ }
716
+ }
717
+ InlineBreakpointWidget.__decorator = ( (__decorate([
718
+ memoize
719
+ ], InlineBreakpointWidget.prototype, "getId", null)));
720
+ registerThemingParticipant((theme, collector) => {
721
+ const debugIconBreakpointColor = theme.getColor(debugIconBreakpointForeground);
722
+ if (debugIconBreakpointColor) {
723
+ collector.addRule(`
724
+ ${( ( allBreakpoints.map(b => `.monaco-workbench ${ThemeIcon.asCSSSelector(b.regular)}`))).join(',\n ')},
725
+ .monaco-workbench ${ThemeIcon.asCSSSelector(debugBreakpointUnsupported)},
726
+ .monaco-workbench ${ThemeIcon.asCSSSelector(debugBreakpointHint)}:not([class*='codicon-debug-breakpoint']):not([class*='codicon-debug-stackframe']),
727
+ .monaco-workbench ${ThemeIcon.asCSSSelector(breakpoint.regular)}${ThemeIcon.asCSSSelector(debugStackframeFocused)}::after,
728
+ .monaco-workbench ${ThemeIcon.asCSSSelector(breakpoint.regular)}${ThemeIcon.asCSSSelector(debugStackframe)}::after {
729
+ color: ${debugIconBreakpointColor} !important;
730
+ }
731
+ `);
732
+ }
733
+ const debugIconBreakpointDisabledColor = theme.getColor(debugIconBreakpointDisabledForeground);
734
+ if (debugIconBreakpointDisabledColor) {
735
+ collector.addRule(`
736
+ ${( ( allBreakpoints.map(b => `.monaco-workbench ${ThemeIcon.asCSSSelector(b.disabled)}`))).join(',\n ')} {
737
+ color: ${debugIconBreakpointDisabledColor};
738
+ }
739
+ `);
740
+ }
741
+ const debugIconBreakpointUnverifiedColor = theme.getColor(debugIconBreakpointUnverifiedForeground);
742
+ if (debugIconBreakpointUnverifiedColor) {
743
+ collector.addRule(`
744
+ ${( ( allBreakpoints.map(b => `.monaco-workbench ${ThemeIcon.asCSSSelector(b.unverified)}`))).join(',\n ')} {
745
+ color: ${debugIconBreakpointUnverifiedColor};
746
+ }
747
+ `);
748
+ }
749
+ const debugIconBreakpointCurrentStackframeForegroundColor = theme.getColor(debugIconBreakpointCurrentStackframeForeground);
750
+ if (debugIconBreakpointCurrentStackframeForegroundColor) {
751
+ collector.addRule(`
752
+ .monaco-workbench ${ThemeIcon.asCSSSelector(debugStackframe)},
753
+ .monaco-editor .debug-top-stack-frame-column {
754
+ color: ${debugIconBreakpointCurrentStackframeForegroundColor} !important;
755
+ }
756
+ `);
757
+ }
758
+ const debugIconBreakpointStackframeFocusedColor = theme.getColor(debugIconBreakpointStackframeForeground);
759
+ if (debugIconBreakpointStackframeFocusedColor) {
760
+ collector.addRule(`
761
+ .monaco-workbench ${ThemeIcon.asCSSSelector(debugStackframeFocused)} {
762
+ color: ${debugIconBreakpointStackframeFocusedColor} !important;
763
+ }
764
+ `);
765
+ }
766
+ });
767
+ const debugIconBreakpointForeground = registerColor('debugIcon.breakpointForeground', { dark: '#E51400', light: '#E51400', hcDark: '#E51400', hcLight: '#E51400' }, ( (nls.localize('debugIcon.breakpointForeground', 'Icon color for breakpoints.'))));
768
+ const debugIconBreakpointDisabledForeground = registerColor('debugIcon.breakpointDisabledForeground', { dark: '#848484', light: '#848484', hcDark: '#848484', hcLight: '#848484' }, ( (nls.localize(
769
+ 'debugIcon.breakpointDisabledForeground',
770
+ 'Icon color for disabled breakpoints.'
771
+ ))));
772
+ const debugIconBreakpointUnverifiedForeground = registerColor('debugIcon.breakpointUnverifiedForeground', { dark: '#848484', light: '#848484', hcDark: '#848484', hcLight: '#848484' }, ( (nls.localize(
773
+ 'debugIcon.breakpointUnverifiedForeground',
774
+ 'Icon color for unverified breakpoints.'
775
+ ))));
776
+ const debugIconBreakpointCurrentStackframeForeground = registerColor('debugIcon.breakpointCurrentStackframeForeground', { dark: '#FFCC00', light: '#BE8700', hcDark: '#FFCC00', hcLight: '#BE8700' }, ( (nls.localize(
777
+ 'debugIcon.breakpointCurrentStackframeForeground',
778
+ 'Icon color for the current breakpoint stack frame.'
779
+ ))));
780
+ const debugIconBreakpointStackframeForeground = registerColor('debugIcon.breakpointStackframeForeground', { dark: '#89D185', light: '#89D185', hcDark: '#89D185', hcLight: '#89D185' }, ( (nls.localize(
781
+ 'debugIcon.breakpointStackframeForeground',
782
+ 'Icon color for all breakpoint stack frames.'
783
+ ))));
784
+
785
+ export { BreakpointEditorContribution, createBreakpointDecorations, debugIconBreakpointForeground };