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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/debug.js +4 -4
  2. package/external/rollup-plugin-styles/dist/runtime/inject-css.js +3 -0
  3. package/external/tslib/tslib.es6.js +11 -0
  4. package/override/vs/platform/dialogs/common/dialogs.js +10 -0
  5. package/package.json +2 -2
  6. package/vscode/src/vs/platform/debug/common/extensionHostDebugIpc.js +73 -0
  7. package/vscode/src/vs/workbench/contrib/debug/browser/callStackView.js +1026 -0
  8. package/vscode/src/vs/workbench/contrib/debug/browser/debug.contribution.js +1004 -0
  9. package/vscode/src/vs/workbench/contrib/debug/browser/debugANSIHandling.js +347 -0
  10. package/vscode/src/vs/workbench/contrib/debug/browser/debugActionViewItems.js +337 -0
  11. package/vscode/src/vs/workbench/contrib/debug/browser/debugAdapterManager.js +432 -0
  12. package/vscode/src/vs/workbench/contrib/debug/browser/debugCommands.js +1039 -0
  13. package/vscode/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.js +649 -0
  14. package/vscode/src/vs/workbench/contrib/debug/browser/debugConsoleQuickAccess.js +64 -0
  15. package/vscode/src/vs/workbench/contrib/debug/browser/debugEditorActions.js +636 -0
  16. package/vscode/src/vs/workbench/contrib/debug/browser/debugEditorContribution.js +740 -0
  17. package/vscode/src/vs/workbench/contrib/debug/browser/debugHover.js +408 -0
  18. package/vscode/src/vs/workbench/contrib/debug/browser/debugMemory.js +206 -0
  19. package/vscode/src/vs/workbench/contrib/debug/browser/debugProgress.js +80 -0
  20. package/vscode/src/vs/workbench/contrib/debug/browser/debugQuickAccess.js +169 -0
  21. package/vscode/src/vs/workbench/contrib/debug/browser/debugService.js +1271 -0
  22. package/vscode/src/vs/workbench/contrib/debug/browser/debugSession.js +1330 -0
  23. package/vscode/src/vs/workbench/contrib/debug/browser/debugSessionPicker.js +115 -0
  24. package/vscode/src/vs/workbench/contrib/debug/browser/debugStatus.js +77 -0
  25. package/vscode/src/vs/workbench/contrib/debug/browser/debugTaskRunner.js +307 -0
  26. package/vscode/src/vs/workbench/contrib/debug/browser/debugTitle.js +31 -0
  27. package/vscode/src/vs/workbench/contrib/debug/browser/debugToolBar.js +387 -0
  28. package/vscode/src/vs/workbench/contrib/debug/browser/debugViewlet.js +267 -0
  29. package/vscode/src/vs/workbench/contrib/debug/browser/disassemblyView.js +817 -0
  30. package/vscode/src/vs/workbench/contrib/debug/browser/exceptionWidget.js +131 -0
  31. package/vscode/src/vs/workbench/contrib/debug/browser/extensionHostDebugService.js +142 -0
  32. package/vscode/src/vs/workbench/contrib/debug/browser/linkDetector.js +262 -0
  33. package/vscode/src/vs/workbench/contrib/debug/browser/loadedScriptsView.js +669 -0
  34. package/vscode/src/vs/workbench/contrib/debug/browser/media/debug.contribution.css.js +6 -0
  35. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugHover.css.js +6 -0
  36. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css.js +6 -0
  37. package/vscode/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css.js +6 -0
  38. package/vscode/src/vs/workbench/contrib/debug/browser/media/exceptionWidget.css.js +6 -0
  39. package/vscode/src/vs/workbench/contrib/debug/browser/media/repl.css.js +6 -0
  40. package/vscode/src/vs/workbench/contrib/debug/browser/rawDebugSession.js +709 -0
  41. package/vscode/src/vs/workbench/contrib/debug/browser/repl.js +1002 -0
  42. package/vscode/src/vs/workbench/contrib/debug/browser/replFilter.js +48 -0
  43. package/vscode/src/vs/workbench/contrib/debug/browser/replViewer.js +352 -0
  44. package/vscode/src/vs/workbench/contrib/debug/browser/statusbarColorProvider.js +129 -0
  45. package/vscode/src/vs/workbench/contrib/debug/browser/variablesView.js +734 -0
  46. package/vscode/src/vs/workbench/contrib/debug/browser/watchExpressionsView.js +501 -0
  47. package/vscode/src/vs/workbench/contrib/debug/browser/welcomeView.js +162 -0
  48. package/vscode/src/vs/workbench/contrib/debug/common/breakpoints.js +21 -0
  49. package/vscode/src/vs/workbench/contrib/debug/common/debugCompoundRoot.js +17 -0
  50. package/vscode/src/vs/workbench/contrib/debug/common/debugContentProvider.js +110 -0
  51. package/vscode/src/vs/workbench/contrib/debug/common/debugLifecycle.js +62 -0
  52. package/vscode/src/vs/workbench/contrib/debug/common/debugSchemas.js +460 -0
  53. package/vscode/src/vs/workbench/contrib/debug/common/debugStorage.js +166 -0
  54. package/vscode/src/vs/workbench/contrib/debug/common/debugTelemetry.js +36 -0
  55. package/vscode/src/vs/workbench/contrib/debug/common/debugViewModel.js +150 -0
  56. package/vscode/src/vs/workbench/contrib/debug/common/debugger.js +289 -0
  57. package/vscode/src/vs/workbench/contrib/debug/common/loadedScriptsPicker.js +87 -0
  58. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariableCommands.js +64 -0
  59. package/vscode/src/vs/workbench/services/configurationResolver/browser/baseConfigurationResolverService.js +311 -0
  60. package/vscode/src/vs/workbench/services/configurationResolver/browser/configurationResolverService.js +29 -0
@@ -0,0 +1,1002 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import { clearNode, Dimension, isActiveElement, append, getWindow, createStyleSheet, addStandardDisposableListener, EventType, getActiveWindow, $ as $$1 } from 'vscode/vscode/vs/base/browser/dom';
3
+ import { status } from 'vscode/vscode/vs/base/browser/ui/aria/aria';
4
+ import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from 'vscode/vscode/vs/base/browser/ui/mouseCursor/mouseCursor';
5
+ import { RunOnceScheduler } from 'vscode/vscode/vs/base/common/async';
6
+ import { memoize } from 'vscode/vscode/vs/base/common/decorators';
7
+ import { Emitter } from 'vscode/vscode/vs/base/common/event';
8
+ import { HistoryNavigator } from 'vscode/vscode/vs/base/common/history';
9
+ import { Disposable } from 'vscode/vscode/vs/base/common/lifecycle';
10
+ import { removeAnsiEscapeCodes } from 'vscode/vscode/vs/base/common/strings';
11
+ import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
12
+ import { URI } from 'vscode/vscode/vs/base/common/uri';
13
+ import './media/repl.css.js';
14
+ import { isCodeEditor } from 'vscode/vscode/vs/editor/browser/editorBrowser';
15
+ import { registerEditorAction, EditorAction } from 'vscode/vscode/vs/editor/browser/editorExtensions';
16
+ import { ICodeEditorService } from 'vscode/vscode/vs/editor/browser/services/codeEditorService';
17
+ import { CodeEditorWidget } from 'vscode/vscode/vs/editor/browser/widget/codeEditor/codeEditorWidget';
18
+ import { EDITOR_FONT_DEFAULTS } from 'vscode/vscode/vs/editor/common/config/editorOptions';
19
+ import { Range } from 'vscode/vscode/vs/editor/common/core/range';
20
+ import { EditorContextKeys } from 'vscode/vscode/vs/editor/common/editorContextKeys';
21
+ import { CompletionItemKinds } from 'vscode/vscode/vs/editor/common/languages';
22
+ import { ILanguageFeaturesService } from 'vscode/vscode/vs/editor/common/services/languageFeatures';
23
+ import { IModelService } from 'vscode/vscode/vs/editor/common/services/model';
24
+ import { ITextResourcePropertiesService } from 'vscode/vscode/vs/editor/common/services/textResourceConfiguration';
25
+ import { SuggestController } from 'vscode/vscode/vs/editor/contrib/suggest/browser/suggestController';
26
+ import { localizeWithPath, localize2WithPath } from 'vscode/vscode/vs/nls';
27
+ import { createAndFillInContextMenuActions } from 'vscode/vscode/vs/platform/actions/browser/menuEntryActionViewItem';
28
+ import { MenuId, registerAction2, Action2, IMenuService } from 'vscode/vscode/vs/platform/actions/common/actions';
29
+ import { IClipboardService } from 'vscode/vscode/vs/platform/clipboard/common/clipboardService';
30
+ import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration';
31
+ import { IContextKeyService, ContextKeyExpr } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
32
+ import { IContextMenuService } from 'vscode/vscode/vs/platform/contextview/browser/contextView';
33
+ import { registerAndCreateHistoryNavigationContext } from 'vscode/vscode/vs/platform/history/browser/contextScopedHistoryWidget';
34
+ import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
35
+ import { ServiceCollection } from 'vscode/vscode/vs/platform/instantiation/common/serviceCollection';
36
+ import { IKeybindingService } from 'vscode/vscode/vs/platform/keybinding/common/keybinding';
37
+ import { WorkbenchAsyncDataTree } from 'vscode/vscode/vs/platform/list/browser/listService';
38
+ import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
39
+ import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener';
40
+ import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage';
41
+ import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry';
42
+ import { resolveColorValue } from 'vscode/vscode/vs/platform/theme/common/colorUtils';
43
+ import 'vscode/vscode/vs/platform/theme/common/colors/baseColors';
44
+ import 'vscode/vscode/vs/platform/theme/common/colors/chartsColors';
45
+ import { editorForeground } from 'vscode/vscode/vs/platform/theme/common/colors/editorColors';
46
+ import 'vscode/vscode/vs/platform/theme/common/colors/inputColors';
47
+ import 'vscode/vscode/vs/platform/theme/common/colors/listColors';
48
+ import 'vscode/vscode/vs/platform/theme/common/colors/menuColors';
49
+ import 'vscode/vscode/vs/platform/theme/common/colors/minimapColors';
50
+ import 'vscode/vscode/vs/platform/theme/common/colors/miscColors';
51
+ import 'vscode/vscode/vs/platform/theme/common/colors/quickpickColors';
52
+ import 'vscode/vscode/vs/platform/theme/common/colors/searchColors';
53
+ import { IThemeService } from 'vscode/vscode/vs/platform/theme/common/themeService';
54
+ import { FilterViewPane, ViewAction } from 'vscode/vscode/vs/workbench/browser/parts/views/viewPane';
55
+ import { IViewDescriptorService } from 'vscode/vscode/vs/workbench/common/views';
56
+ import { IViewsService } from 'vscode/vscode/vs/workbench/services/views/common/viewsService';
57
+ import { getSimpleEditorOptions, getSimpleCodeEditorWidgetOptions } from 'vscode/vscode/vs/workbench/contrib/codeEditor/browser/simpleEditorOptions';
58
+ import { FocusSessionActionViewItem } from './debugActionViewItems.js';
59
+ import { debugConsoleEvaluationPrompt, debugConsoleClearAll } from 'vscode/vscode/vs/workbench/contrib/debug/browser/debugIcons';
60
+ import { LinkDetector } from './linkDetector.js';
61
+ import { ReplFilter } from './replFilter.js';
62
+ import { ReplDelegate, ReplVariablesRenderer, ReplOutputElementRenderer, ReplEvaluationInputsRenderer, ReplGroupRenderer, ReplEvaluationResultsRenderer, ReplRawObjectsRenderer, ReplDataSource, ReplAccessibilityProvider } from './replViewer.js';
63
+ import { DEBUG_SCHEME, CONTEXT_MULTI_SESSION_REPL, CONTEXT_IN_DEBUG_REPL, REPL_VIEW_ID, IDebugService, CONTEXT_DEBUG_STATE, getStateLabel } from 'vscode/vscode/vs/workbench/contrib/debug/common/debug';
64
+ import { Variable } from 'vscode/vscode/vs/workbench/contrib/debug/common/debugModel';
65
+ import { ReplEvaluationResult, ReplGroup } from 'vscode/vscode/vs/workbench/contrib/debug/common/replModel';
66
+ import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
67
+ import { registerNavigableContainer } from 'vscode/vscode/vs/workbench/browser/actions/widgetNavigationCommands';
68
+ import { IAccessibilitySignalService, AccessibilitySignal } from 'vscode/vscode/vs/platform/accessibilitySignal/browser/accessibilitySignalService';
69
+
70
+ var Repl_1, ReplOptions_1;
71
+ const $ = $$1;
72
+ const HISTORY_STORAGE_KEY = 'debug.repl.history';
73
+ const FILTER_HISTORY_STORAGE_KEY = 'debug.repl.filterHistory';
74
+ const FILTER_VALUE_STORAGE_KEY = 'debug.repl.filterValue';
75
+ const DECORATION_KEY = 'replinputdecoration';
76
+ function revealLastElement(tree) {
77
+ tree.scrollTop = tree.scrollHeight - tree.renderHeight;
78
+ }
79
+ const sessionsToIgnore = ( (new Set()));
80
+ const identityProvider = { getId: (element) => element.getId() };
81
+ let Repl = class Repl extends FilterViewPane {
82
+ static { Repl_1 = this; }
83
+ static { this.REFRESH_DELAY = 50; }
84
+ static { this.URI = ( URI.parse(`${DEBUG_SCHEME}:replinput`)); }
85
+ constructor(options, debugService, instantiationService, storageService, themeService, modelService, contextKeyService, codeEditorService, viewDescriptorService, contextMenuService, configurationService, textResourcePropertiesService, editorService, keybindingService, openerService, telemetryService, menuService, languageFeaturesService, logService) {
86
+ const filterText = storageService.get(FILTER_VALUE_STORAGE_KEY, 1 , '');
87
+ super({
88
+ ...options,
89
+ filterOptions: {
90
+ placeholder: ( (localizeWithPath(
91
+ 'vs/workbench/contrib/debug/browser/repl',
92
+ { key: 'workbench.debug.filter.placeholder', comment: ['Text in the brackets after e.g. is not localizable'] },
93
+ "Filter (e.g. text, !exclude)"
94
+ ))),
95
+ text: filterText,
96
+ history: JSON.parse(storageService.get(FILTER_HISTORY_STORAGE_KEY, 1 , '[]')),
97
+ }
98
+ }, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService);
99
+ this.debugService = debugService;
100
+ this.storageService = storageService;
101
+ this.modelService = modelService;
102
+ this.textResourcePropertiesService = textResourcePropertiesService;
103
+ this.editorService = editorService;
104
+ this.languageFeaturesService = languageFeaturesService;
105
+ this.logService = logService;
106
+ this.previousTreeScrollHeight = 0;
107
+ this.replInputLineCount = 1;
108
+ this.styleChangedWhenInvisible = false;
109
+ this.modelChangeListener = Disposable.None;
110
+ this.menu = menuService.createMenu(MenuId.DebugConsoleContext, contextKeyService);
111
+ this._register(this.menu);
112
+ this.history = ( (new HistoryNavigator(
113
+ JSON.parse(this.storageService.get(HISTORY_STORAGE_KEY, 1 , '[]')),
114
+ 50
115
+ )));
116
+ this.filter = ( (new ReplFilter()));
117
+ this.filter.filterQuery = filterText;
118
+ this.multiSessionRepl = CONTEXT_MULTI_SESSION_REPL.bindTo(contextKeyService);
119
+ this.replOptions = this._register(this.instantiationService.createInstance(ReplOptions, this.id, () => this.getBackgroundColor()));
120
+ this._register(this.replOptions.onDidChange(() => this.onDidStyleChange()));
121
+ codeEditorService.registerDecorationType('repl-decoration', DECORATION_KEY, {});
122
+ this.multiSessionRepl.set(this.isMultiSessionView);
123
+ this.registerListeners();
124
+ }
125
+ registerListeners() {
126
+ if (this.debugService.getViewModel().focusedSession) {
127
+ this.onDidFocusSession(this.debugService.getViewModel().focusedSession);
128
+ }
129
+ this._register(this.debugService.getViewModel().onDidFocusSession(async (session) => this.onDidFocusSession(session)));
130
+ this._register(this.debugService.getViewModel().onDidEvaluateLazyExpression(async (e) => {
131
+ if (e instanceof Variable && this.tree?.hasNode(e)) {
132
+ await this.tree.updateChildren(e, false, true);
133
+ await this.tree.expand(e);
134
+ }
135
+ }));
136
+ this._register(this.debugService.onWillNewSession(async (newSession) => {
137
+ const input = this.tree?.getInput();
138
+ if (!input || input.state === 0 ) {
139
+ await this.selectSession(newSession);
140
+ }
141
+ this.multiSessionRepl.set(this.isMultiSessionView);
142
+ }));
143
+ this._register(this.debugService.onDidEndSession(async () => {
144
+ await Promise.resolve();
145
+ this.multiSessionRepl.set(this.isMultiSessionView);
146
+ }));
147
+ this._register(this.themeService.onDidColorThemeChange(() => {
148
+ this.refreshReplElements(false);
149
+ if (this.isVisible()) {
150
+ this.updateInputDecoration();
151
+ }
152
+ }));
153
+ this._register(this.onDidChangeBodyVisibility(visible => {
154
+ if (visible) {
155
+ if (!this.model) {
156
+ this.model = this.modelService.getModel(Repl_1.URI) || this.modelService.createModel('', null, Repl_1.URI, true);
157
+ }
158
+ this.setMode();
159
+ this.replInput.setModel(this.model);
160
+ this.updateInputDecoration();
161
+ this.refreshReplElements(true);
162
+ if (this.styleChangedWhenInvisible) {
163
+ this.styleChangedWhenInvisible = false;
164
+ this.onDidStyleChange();
165
+ }
166
+ }
167
+ }));
168
+ this._register(this.configurationService.onDidChangeConfiguration(e => {
169
+ if (e.affectsConfiguration('debug.console.wordWrap') && this.tree) {
170
+ this.tree.dispose();
171
+ this.treeContainer.innerText = '';
172
+ clearNode(this.treeContainer);
173
+ this.createReplTree();
174
+ }
175
+ if (e.affectsConfiguration('debug.console.acceptSuggestionOnEnter')) {
176
+ const config = this.configurationService.getValue('debug');
177
+ this.replInput.updateOptions({
178
+ acceptSuggestionOnEnter: config.console.acceptSuggestionOnEnter === 'on' ? 'on' : 'off'
179
+ });
180
+ }
181
+ }));
182
+ this._register(this.editorService.onDidActiveEditorChange(() => {
183
+ this.setMode();
184
+ }));
185
+ this._register(this.filterWidget.onDidChangeFilterText(() => {
186
+ this.filter.filterQuery = this.filterWidget.getFilterText();
187
+ if (this.tree) {
188
+ this.tree.refilter();
189
+ revealLastElement(this.tree);
190
+ }
191
+ }));
192
+ }
193
+ async onDidFocusSession(session) {
194
+ if (session) {
195
+ sessionsToIgnore.delete(session);
196
+ this.completionItemProvider?.dispose();
197
+ if (session.capabilities.supportsCompletionsRequest) {
198
+ this.completionItemProvider = this.languageFeaturesService.completionProvider.register({ scheme: DEBUG_SCHEME, pattern: '**/replinput', hasAccessToAllModels: true }, {
199
+ _debugDisplayName: 'debugConsole',
200
+ triggerCharacters: session.capabilities.completionTriggerCharacters || ['.'],
201
+ provideCompletionItems: async (_, position, _context, token) => {
202
+ this.setHistoryNavigationEnablement(false);
203
+ const model = this.replInput.getModel();
204
+ if (model) {
205
+ const word = model.getWordAtPosition(position);
206
+ const overwriteBefore = word ? word.word.length : 0;
207
+ const text = model.getValue();
208
+ const focusedStackFrame = this.debugService.getViewModel().focusedStackFrame;
209
+ const frameId = focusedStackFrame ? focusedStackFrame.frameId : undefined;
210
+ const response = await session.completions(frameId, focusedStackFrame?.thread.threadId || 0, text, position, overwriteBefore, token);
211
+ const suggestions = [];
212
+ const computeRange = (length) => Range.fromPositions(position.delta(0, -length), position);
213
+ if (response && response.body && response.body.targets) {
214
+ response.body.targets.forEach(item => {
215
+ if (item && item.label) {
216
+ let insertTextRules = undefined;
217
+ let insertText = item.text || item.label;
218
+ if (typeof item.selectionStart === 'number') {
219
+ insertTextRules = 4 ;
220
+ const selectionLength = typeof item.selectionLength === 'number' ? item.selectionLength : 0;
221
+ const placeholder = selectionLength > 0 ? '${1:' + insertText.substring(item.selectionStart, item.selectionStart + selectionLength) + '}$0' : '$0';
222
+ insertText = insertText.substring(0, item.selectionStart) + placeholder + insertText.substring(item.selectionStart + selectionLength);
223
+ }
224
+ suggestions.push({
225
+ label: item.label,
226
+ insertText,
227
+ detail: item.detail,
228
+ kind: CompletionItemKinds.fromString(item.type || 'property'),
229
+ filterText: (item.start && item.length) ? text.substring(item.start, item.start + item.length).concat(item.label) : undefined,
230
+ range: computeRange(item.length || overwriteBefore),
231
+ sortText: item.sortText,
232
+ insertTextRules
233
+ });
234
+ }
235
+ });
236
+ }
237
+ if (this.configurationService.getValue('debug').console.historySuggestions) {
238
+ const history = this.history.getHistory();
239
+ const idxLength = String(history.length).length;
240
+ history.forEach((h, i) => suggestions.push({
241
+ label: h,
242
+ insertText: h,
243
+ kind: 18 ,
244
+ range: computeRange(h.length),
245
+ sortText: 'ZZZ' + String(history.length - i).padStart(idxLength, '0')
246
+ }));
247
+ }
248
+ return { suggestions };
249
+ }
250
+ return Promise.resolve({ suggestions: [] });
251
+ }
252
+ });
253
+ }
254
+ }
255
+ await this.selectSession();
256
+ }
257
+ getFilterStats() {
258
+ return {
259
+ total: this.tree?.getNode().children.length ?? 0,
260
+ filtered: this.tree?.getNode().children.filter(c => c.visible).length ?? 0
261
+ };
262
+ }
263
+ get isReadonly() {
264
+ const session = this.tree?.getInput();
265
+ if (session && session.state !== 0 ) {
266
+ return false;
267
+ }
268
+ return true;
269
+ }
270
+ showPreviousValue() {
271
+ if (!this.isReadonly) {
272
+ this.navigateHistory(true);
273
+ }
274
+ }
275
+ showNextValue() {
276
+ if (!this.isReadonly) {
277
+ this.navigateHistory(false);
278
+ }
279
+ }
280
+ focusFilter() {
281
+ this.filterWidget.focus();
282
+ }
283
+ setMode() {
284
+ if (!this.isVisible()) {
285
+ return;
286
+ }
287
+ const activeEditorControl = this.editorService.activeTextEditorControl;
288
+ if (isCodeEditor(activeEditorControl)) {
289
+ this.modelChangeListener.dispose();
290
+ this.modelChangeListener = activeEditorControl.onDidChangeModelLanguage(() => this.setMode());
291
+ if (this.model && activeEditorControl.hasModel()) {
292
+ this.model.setLanguage(activeEditorControl.getModel().getLanguageId());
293
+ }
294
+ }
295
+ }
296
+ onDidStyleChange() {
297
+ if (!this.isVisible()) {
298
+ this.styleChangedWhenInvisible = true;
299
+ return;
300
+ }
301
+ if (this.styleElement) {
302
+ this.replInput.updateOptions({
303
+ fontSize: this.replOptions.replConfiguration.fontSize,
304
+ lineHeight: this.replOptions.replConfiguration.lineHeight,
305
+ fontFamily: this.replOptions.replConfiguration.fontFamily === 'default' ? EDITOR_FONT_DEFAULTS.fontFamily : this.replOptions.replConfiguration.fontFamily
306
+ });
307
+ const replInputLineHeight = this.replInput.getOption(67 );
308
+ this.styleElement.textContent = `
309
+ .repl .repl-input-wrapper .repl-input-chevron {
310
+ line-height: ${replInputLineHeight}px
311
+ }
312
+
313
+ .repl .repl-input-wrapper .monaco-editor .lines-content {
314
+ background-color: ${this.replOptions.replConfiguration.backgroundColor};
315
+ }
316
+ `;
317
+ const cssFontFamily = this.replOptions.replConfiguration.fontFamily === 'default' ? 'var(--monaco-monospace-font)' : this.replOptions.replConfiguration.fontFamily;
318
+ this.container.style.setProperty(`--vscode-repl-font-family`, cssFontFamily);
319
+ this.container.style.setProperty(`--vscode-repl-font-size`, `${this.replOptions.replConfiguration.fontSize}px`);
320
+ this.container.style.setProperty(`--vscode-repl-font-size-for-twistie`, `${this.replOptions.replConfiguration.fontSizeForTwistie}px`);
321
+ this.container.style.setProperty(`--vscode-repl-line-height`, this.replOptions.replConfiguration.cssLineHeight);
322
+ this.tree?.rerender();
323
+ if (this.bodyContentDimension) {
324
+ this.layoutBodyContent(this.bodyContentDimension.height, this.bodyContentDimension.width);
325
+ }
326
+ }
327
+ }
328
+ navigateHistory(previous) {
329
+ const historyInput = (previous ?
330
+ (this.history.previous() ?? this.history.first()) : this.history.next())
331
+ ?? '';
332
+ this.replInput.setValue(historyInput);
333
+ status(historyInput);
334
+ this.replInput.setPosition({ lineNumber: 1, column: historyInput.length + 1 });
335
+ this.setHistoryNavigationEnablement(true);
336
+ }
337
+ async selectSession(session) {
338
+ const treeInput = this.tree?.getInput();
339
+ if (!session) {
340
+ const focusedSession = this.debugService.getViewModel().focusedSession;
341
+ if (focusedSession) {
342
+ session = focusedSession;
343
+ }
344
+ else if (!treeInput || ( (sessionsToIgnore.has(treeInput)))) {
345
+ session = this.debugService.getModel().getSessions(true).find(s => !( (sessionsToIgnore.has(s))));
346
+ }
347
+ }
348
+ if (session) {
349
+ this.replElementsChangeListener?.dispose();
350
+ this.replElementsChangeListener = session.onDidChangeReplElements(() => {
351
+ this.refreshReplElements(session.getReplElements().length === 0);
352
+ });
353
+ if (this.tree && treeInput !== session) {
354
+ try {
355
+ await this.tree.setInput(session);
356
+ }
357
+ catch (err) {
358
+ this.logService.error(err);
359
+ }
360
+ revealLastElement(this.tree);
361
+ }
362
+ }
363
+ this.replInput?.updateOptions({ readOnly: this.isReadonly });
364
+ this.updateInputDecoration();
365
+ }
366
+ async clearRepl() {
367
+ const session = this.tree?.getInput();
368
+ if (session) {
369
+ session.removeReplExpressions();
370
+ if (session.state === 0 ) {
371
+ sessionsToIgnore.add(session);
372
+ await this.selectSession();
373
+ this.multiSessionRepl.set(this.isMultiSessionView);
374
+ }
375
+ }
376
+ this.replInput.focus();
377
+ }
378
+ acceptReplInput() {
379
+ const session = this.tree?.getInput();
380
+ if (session && !this.isReadonly) {
381
+ session.addReplExpression(this.debugService.getViewModel().focusedStackFrame, this.replInput.getValue());
382
+ revealLastElement(this.tree);
383
+ this.history.add(this.replInput.getValue());
384
+ this.replInput.setValue('');
385
+ const shouldRelayout = this.replInputLineCount > 1;
386
+ this.replInputLineCount = 1;
387
+ if (shouldRelayout && this.bodyContentDimension) {
388
+ this.layoutBodyContent(this.bodyContentDimension.height, this.bodyContentDimension.width);
389
+ }
390
+ }
391
+ }
392
+ getVisibleContent() {
393
+ let text = '';
394
+ if (this.model && this.tree) {
395
+ const lineDelimiter = this.textResourcePropertiesService.getEOL(this.model.uri);
396
+ const traverseAndAppend = (node) => {
397
+ node.children.forEach(child => {
398
+ if (child.visible) {
399
+ text += ( (child.element.toString())).trimRight() + lineDelimiter;
400
+ if (!child.collapsed && child.children.length) {
401
+ traverseAndAppend(child);
402
+ }
403
+ }
404
+ });
405
+ };
406
+ traverseAndAppend(this.tree.getNode());
407
+ }
408
+ return removeAnsiEscapeCodes(text);
409
+ }
410
+ layoutBodyContent(height, width) {
411
+ this.bodyContentDimension = new Dimension(width, height);
412
+ const replInputHeight = Math.min(this.replInput.getContentHeight(), height);
413
+ if (this.tree) {
414
+ const lastElementVisible = this.tree.scrollTop + this.tree.renderHeight >= this.tree.scrollHeight;
415
+ const treeHeight = height - replInputHeight;
416
+ this.tree.getHTMLElement().style.height = `${treeHeight}px`;
417
+ this.tree.layout(treeHeight, width);
418
+ if (lastElementVisible) {
419
+ revealLastElement(this.tree);
420
+ }
421
+ }
422
+ this.replInputContainer.style.height = `${replInputHeight}px`;
423
+ this.replInput.layout({ width: width - 30, height: replInputHeight });
424
+ }
425
+ collapseAll() {
426
+ this.tree?.collapseAll();
427
+ }
428
+ getReplInput() {
429
+ return this.replInput;
430
+ }
431
+ focus() {
432
+ super.focus();
433
+ setTimeout(() => this.replInput.focus(), 0);
434
+ }
435
+ getActionViewItem(action) {
436
+ if (action.id === selectReplCommandId) {
437
+ const session = (this.tree ? this.tree.getInput() : undefined) ?? this.debugService.getViewModel().focusedSession;
438
+ return this.instantiationService.createInstance(SelectReplActionViewItem, action, session);
439
+ }
440
+ return super.getActionViewItem(action);
441
+ }
442
+ get isMultiSessionView() {
443
+ return this.debugService.getModel().getSessions(true).filter(s => s.hasSeparateRepl() && !( (sessionsToIgnore.has(s)))).length > 1;
444
+ }
445
+ get refreshScheduler() {
446
+ const autoExpanded = ( (new Set()));
447
+ return (
448
+ (new RunOnceScheduler(async () => {
449
+ if (!this.tree) {
450
+ return;
451
+ }
452
+ if (!this.tree.getInput()) {
453
+ return;
454
+ }
455
+ await this.tree.updateChildren(undefined, true, false, { diffIdentityProvider: identityProvider });
456
+ const session = this.tree.getInput();
457
+ if (session) {
458
+ const autoExpandElements = async (elements) => {
459
+ for (const element of elements) {
460
+ if (element instanceof ReplGroup) {
461
+ if (element.autoExpand && !( (autoExpanded.has(element.getId())))) {
462
+ autoExpanded.add(element.getId());
463
+ await this.tree.expand(element);
464
+ }
465
+ if (!this.tree.isCollapsed(element)) {
466
+ await autoExpandElements(element.getChildren());
467
+ }
468
+ }
469
+ }
470
+ };
471
+ await autoExpandElements(session.getReplElements());
472
+ }
473
+ const { total, filtered } = this.getFilterStats();
474
+ this.filterWidget.updateBadge(total === filtered || total === 0 ? undefined : ( (localizeWithPath(
475
+ 'vs/workbench/contrib/debug/browser/repl',
476
+ 'showing filtered repl lines',
477
+ "Showing {0} of {1}",
478
+ filtered,
479
+ total
480
+ ))));
481
+ }, Repl_1.REFRESH_DELAY))
482
+ );
483
+ }
484
+ render() {
485
+ super.render();
486
+ this._register(registerNavigableContainer({
487
+ focusNotifiers: [this, this.filterWidget],
488
+ focusNextWidget: () => {
489
+ const element = this.tree?.getHTMLElement();
490
+ if (this.filterWidget.hasFocus()) {
491
+ this.tree?.domFocus();
492
+ }
493
+ else if (element && isActiveElement(element)) {
494
+ this.focus();
495
+ }
496
+ },
497
+ focusPreviousWidget: () => {
498
+ const element = this.tree?.getHTMLElement();
499
+ if (this.replInput.hasTextFocus()) {
500
+ this.tree?.domFocus();
501
+ }
502
+ else if (element && isActiveElement(element)) {
503
+ this.focusFilter();
504
+ }
505
+ }
506
+ }));
507
+ }
508
+ renderBody(parent) {
509
+ super.renderBody(parent);
510
+ this.container = append(parent, $('.repl'));
511
+ this.treeContainer = append(this.container, $(`.repl-tree.${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`));
512
+ this.createReplInput(this.container);
513
+ this.createReplTree();
514
+ }
515
+ createReplTree() {
516
+ this.replDelegate = ( (new ReplDelegate(this.configurationService, this.replOptions)));
517
+ const wordWrap = this.configurationService.getValue('debug').console.wordWrap;
518
+ this.treeContainer.classList.toggle('word-wrap', wordWrap);
519
+ const linkDetector = this.instantiationService.createInstance(LinkDetector);
520
+ const tree = this.tree = this.instantiationService.createInstance(WorkbenchAsyncDataTree, 'DebugRepl', this.treeContainer, this.replDelegate, [
521
+ this.instantiationService.createInstance(ReplVariablesRenderer, linkDetector),
522
+ this.instantiationService.createInstance(ReplOutputElementRenderer, linkDetector),
523
+ ( (new ReplEvaluationInputsRenderer())),
524
+ this.instantiationService.createInstance(ReplGroupRenderer, linkDetector),
525
+ ( (new ReplEvaluationResultsRenderer(linkDetector))),
526
+ ( (new ReplRawObjectsRenderer(linkDetector))),
527
+ ],
528
+ (
529
+ (new ReplDataSource())), {
530
+ filter: this.filter,
531
+ accessibilityProvider: ( (new ReplAccessibilityProvider())),
532
+ identityProvider,
533
+ mouseSupport: false,
534
+ findWidgetEnabled: false,
535
+ keyboardNavigationLabelProvider: { getKeyboardNavigationLabel: (e) => ( (e.toString(true))) },
536
+ horizontalScrolling: !wordWrap,
537
+ setRowLineHeight: false,
538
+ supportDynamicHeights: wordWrap,
539
+ overrideStyles: {
540
+ listBackground: this.getBackgroundColor()
541
+ }
542
+ });
543
+ this._register(tree.onDidChangeContentHeight(() => {
544
+ if (tree.scrollHeight !== this.previousTreeScrollHeight) {
545
+ const lastElementWasVisible = tree.scrollTop + tree.renderHeight >= this.previousTreeScrollHeight - 2;
546
+ if (lastElementWasVisible) {
547
+ setTimeout(() => {
548
+ revealLastElement(tree);
549
+ }, 0);
550
+ }
551
+ }
552
+ this.previousTreeScrollHeight = tree.scrollHeight;
553
+ }));
554
+ this._register(tree.onContextMenu(e => this.onContextMenu(e)));
555
+ let lastSelectedString;
556
+ this._register(tree.onMouseClick(() => {
557
+ const selection = getWindow(this.treeContainer).getSelection();
558
+ if (!selection || selection.type !== 'Range' || lastSelectedString === ( (selection.toString()))) {
559
+ this.replInput.focus();
560
+ }
561
+ lastSelectedString = selection ? ( (selection.toString())) : '';
562
+ }));
563
+ this.selectSession();
564
+ this.styleElement = createStyleSheet(this.container);
565
+ this.onDidStyleChange();
566
+ }
567
+ createReplInput(container) {
568
+ this.replInputContainer = append(container, $('.repl-input-wrapper'));
569
+ append(this.replInputContainer, $('.repl-input-chevron' + ThemeIcon.asCSSSelector(debugConsoleEvaluationPrompt)));
570
+ const { historyNavigationBackwardsEnablement, historyNavigationForwardsEnablement } = this._register(registerAndCreateHistoryNavigationContext(this.scopedContextKeyService, this));
571
+ this.setHistoryNavigationEnablement = enabled => {
572
+ historyNavigationBackwardsEnablement.set(enabled);
573
+ historyNavigationForwardsEnablement.set(enabled);
574
+ };
575
+ CONTEXT_IN_DEBUG_REPL.bindTo(this.scopedContextKeyService).set(true);
576
+ this.scopedInstantiationService = this.instantiationService.createChild(( (new ServiceCollection([IContextKeyService, this.scopedContextKeyService]))));
577
+ const options = getSimpleEditorOptions(this.configurationService);
578
+ options.readOnly = true;
579
+ options.suggest = { showStatusBar: true };
580
+ const config = this.configurationService.getValue('debug');
581
+ options.acceptSuggestionOnEnter = config.console.acceptSuggestionOnEnter === 'on' ? 'on' : 'off';
582
+ options.ariaLabel = ( (localizeWithPath('vs/workbench/contrib/debug/browser/repl', 'debugConsole', "Debug Console")));
583
+ this.replInput = this.scopedInstantiationService.createInstance(CodeEditorWidget, this.replInputContainer, options, getSimpleCodeEditorWidgetOptions());
584
+ this._register(this.replInput.onDidChangeModelContent(() => {
585
+ const model = this.replInput.getModel();
586
+ this.setHistoryNavigationEnablement(!!model && model.getValue() === '');
587
+ const lineCount = model ? Math.min(10, model.getLineCount()) : 1;
588
+ if (lineCount !== this.replInputLineCount) {
589
+ this.replInputLineCount = lineCount;
590
+ if (this.bodyContentDimension) {
591
+ this.layoutBodyContent(this.bodyContentDimension.height, this.bodyContentDimension.width);
592
+ }
593
+ }
594
+ }));
595
+ this._register(this.replInput.onDidFocusEditorText(() => this.updateInputDecoration()));
596
+ this._register(this.replInput.onDidBlurEditorText(() => this.updateInputDecoration()));
597
+ this._register(addStandardDisposableListener(this.replInputContainer, EventType.FOCUS, () => this.replInputContainer.classList.add('synthetic-focus')));
598
+ this._register(addStandardDisposableListener(this.replInputContainer, EventType.BLUR, () => this.replInputContainer.classList.remove('synthetic-focus')));
599
+ }
600
+ onContextMenu(e) {
601
+ const actions = [];
602
+ createAndFillInContextMenuActions(this.menu, { arg: e.element, shouldForwardArgs: false }, actions);
603
+ this.contextMenuService.showContextMenu({
604
+ getAnchor: () => e.anchor,
605
+ getActions: () => actions,
606
+ getActionsContext: () => e.element
607
+ });
608
+ }
609
+ refreshReplElements(noDelay) {
610
+ if (this.tree && this.isVisible()) {
611
+ if (this.refreshScheduler.isScheduled()) {
612
+ return;
613
+ }
614
+ this.refreshScheduler.schedule(noDelay ? 0 : undefined);
615
+ }
616
+ }
617
+ updateInputDecoration() {
618
+ if (!this.replInput) {
619
+ return;
620
+ }
621
+ const decorations = [];
622
+ if (this.isReadonly && this.replInput.hasTextFocus() && !this.replInput.getValue()) {
623
+ const transparentForeground = resolveColorValue(editorForeground, this.themeService.getColorTheme())?.transparent(0.4);
624
+ decorations.push({
625
+ range: {
626
+ startLineNumber: 0,
627
+ endLineNumber: 0,
628
+ startColumn: 0,
629
+ endColumn: 1
630
+ },
631
+ renderOptions: {
632
+ after: {
633
+ contentText: ( (localizeWithPath(
634
+ 'vs/workbench/contrib/debug/browser/repl',
635
+ 'startDebugFirst',
636
+ "Please start a debug session to evaluate expressions"
637
+ ))),
638
+ color: transparentForeground ? ( (transparentForeground.toString())) : undefined
639
+ }
640
+ }
641
+ });
642
+ }
643
+ this.replInput.setDecorationsByType('repl-decoration', DECORATION_KEY, decorations);
644
+ }
645
+ saveState() {
646
+ const replHistory = this.history.getHistory();
647
+ if (replHistory.length) {
648
+ this.storageService.store(HISTORY_STORAGE_KEY, JSON.stringify(replHistory), 1 , 1 );
649
+ }
650
+ else {
651
+ this.storageService.remove(HISTORY_STORAGE_KEY, 1 );
652
+ }
653
+ const filterHistory = this.filterWidget.getHistory();
654
+ if (filterHistory.length) {
655
+ this.storageService.store(FILTER_HISTORY_STORAGE_KEY, JSON.stringify(filterHistory), 1 , 1 );
656
+ }
657
+ else {
658
+ this.storageService.remove(FILTER_HISTORY_STORAGE_KEY, 1 );
659
+ }
660
+ const filterValue = this.filterWidget.getFilterText();
661
+ if (filterValue) {
662
+ this.storageService.store(FILTER_VALUE_STORAGE_KEY, filterValue, 1 , 1 );
663
+ }
664
+ else {
665
+ this.storageService.remove(FILTER_VALUE_STORAGE_KEY, 1 );
666
+ }
667
+ super.saveState();
668
+ }
669
+ dispose() {
670
+ this.replInput?.dispose();
671
+ this.replElementsChangeListener?.dispose();
672
+ this.refreshScheduler.dispose();
673
+ this.modelChangeListener.dispose();
674
+ super.dispose();
675
+ }
676
+ };
677
+ Repl.__decorator = ( (__decorate([
678
+ memoize
679
+ ], Repl.prototype, "refreshScheduler", null)));
680
+ Repl = Repl_1 = ( (__decorate([
681
+ ( (__param(1, IDebugService))),
682
+ ( (__param(2, IInstantiationService))),
683
+ ( (__param(3, IStorageService))),
684
+ ( (__param(4, IThemeService))),
685
+ ( (__param(5, IModelService))),
686
+ ( (__param(6, IContextKeyService))),
687
+ ( (__param(7, ICodeEditorService))),
688
+ ( (__param(8, IViewDescriptorService))),
689
+ ( (__param(9, IContextMenuService))),
690
+ ( (__param(10, IConfigurationService))),
691
+ ( (__param(11, ITextResourcePropertiesService))),
692
+ ( (__param(12, IEditorService))),
693
+ ( (__param(13, IKeybindingService))),
694
+ ( (__param(14, IOpenerService))),
695
+ ( (__param(15, ITelemetryService))),
696
+ ( (__param(16, IMenuService))),
697
+ ( (__param(17, ILanguageFeaturesService))),
698
+ ( (__param(18, ILogService)))
699
+ ], Repl)));
700
+ let ReplOptions = class ReplOptions extends Disposable {
701
+ static { ReplOptions_1 = this; }
702
+ static { this.lineHeightEm = 1.4; }
703
+ get replConfiguration() {
704
+ return this._replConfig;
705
+ }
706
+ constructor(viewId, backgroundColorDelegate, configurationService, themeService, viewDescriptorService) {
707
+ super();
708
+ this.backgroundColorDelegate = backgroundColorDelegate;
709
+ this.configurationService = configurationService;
710
+ this.themeService = themeService;
711
+ this.viewDescriptorService = viewDescriptorService;
712
+ this._onDidChange = this._register(( (new Emitter())));
713
+ this.onDidChange = this._onDidChange.event;
714
+ this._register(this.themeService.onDidColorThemeChange(e => this.update()));
715
+ this._register(this.viewDescriptorService.onDidChangeLocation(e => {
716
+ if (( (e.views.some(v => v.id === viewId)))) {
717
+ this.update();
718
+ }
719
+ }));
720
+ this._register(this.configurationService.onDidChangeConfiguration(e => {
721
+ if (e.affectsConfiguration('debug.console.lineHeight') || e.affectsConfiguration('debug.console.fontSize') || e.affectsConfiguration('debug.console.fontFamily')) {
722
+ this.update();
723
+ }
724
+ }));
725
+ this.update();
726
+ }
727
+ update() {
728
+ const debugConsole = this.configurationService.getValue('debug').console;
729
+ this._replConfig = {
730
+ fontSize: debugConsole.fontSize,
731
+ fontFamily: debugConsole.fontFamily,
732
+ lineHeight: debugConsole.lineHeight ? debugConsole.lineHeight : ReplOptions_1.lineHeightEm * debugConsole.fontSize,
733
+ cssLineHeight: debugConsole.lineHeight ? `${debugConsole.lineHeight}px` : `${ReplOptions_1.lineHeightEm}em`,
734
+ backgroundColor: this.themeService.getColorTheme().getColor(this.backgroundColorDelegate()),
735
+ fontSizeForTwistie: debugConsole.fontSize * ReplOptions_1.lineHeightEm / 2 - 8
736
+ };
737
+ this._onDidChange.fire();
738
+ }
739
+ };
740
+ ReplOptions = ReplOptions_1 = ( (__decorate([
741
+ ( (__param(2, IConfigurationService))),
742
+ ( (__param(3, IThemeService))),
743
+ ( (__param(4, IViewDescriptorService)))
744
+ ], ReplOptions)));
745
+ class AcceptReplInputAction extends EditorAction {
746
+ constructor() {
747
+ super({
748
+ id: 'repl.action.acceptInput',
749
+ label: ( (localizeWithPath(
750
+ 'vs/workbench/contrib/debug/browser/repl',
751
+ { key: 'actions.repl.acceptInput', comment: ['Apply input from the debug console input box'] },
752
+ "REPL Accept Input"
753
+ ))),
754
+ alias: 'REPL Accept Input',
755
+ precondition: CONTEXT_IN_DEBUG_REPL,
756
+ kbOpts: {
757
+ kbExpr: EditorContextKeys.textInputFocus,
758
+ primary: 3 ,
759
+ weight: 100
760
+ }
761
+ });
762
+ }
763
+ run(accessor, editor) {
764
+ SuggestController.get(editor)?.cancelSuggestWidget();
765
+ const repl = getReplView(accessor.get(IViewsService));
766
+ repl?.acceptReplInput();
767
+ }
768
+ }
769
+ class FilterReplAction extends EditorAction {
770
+ constructor() {
771
+ super({
772
+ id: 'repl.action.filter',
773
+ label: ( (localizeWithPath(
774
+ 'vs/workbench/contrib/debug/browser/repl',
775
+ 'repl.action.filter',
776
+ "REPL Focus Content to Filter"
777
+ ))),
778
+ alias: 'REPL Filter',
779
+ precondition: CONTEXT_IN_DEBUG_REPL,
780
+ kbOpts: {
781
+ kbExpr: EditorContextKeys.textInputFocus,
782
+ primary: 2048 | 36 ,
783
+ weight: 100
784
+ }
785
+ });
786
+ }
787
+ run(accessor, editor) {
788
+ const repl = getReplView(accessor.get(IViewsService));
789
+ repl?.focusFilter();
790
+ }
791
+ }
792
+ class ReplCopyAllAction extends EditorAction {
793
+ constructor() {
794
+ super({
795
+ id: 'repl.action.copyAll',
796
+ label: ( (localizeWithPath(
797
+ 'vs/workbench/contrib/debug/browser/repl',
798
+ 'actions.repl.copyAll',
799
+ "Debug: Console Copy All"
800
+ ))),
801
+ alias: 'Debug Console Copy All',
802
+ precondition: CONTEXT_IN_DEBUG_REPL,
803
+ });
804
+ }
805
+ run(accessor, editor) {
806
+ const clipboardService = accessor.get(IClipboardService);
807
+ const repl = getReplView(accessor.get(IViewsService));
808
+ if (repl) {
809
+ return clipboardService.writeText(repl.getVisibleContent());
810
+ }
811
+ }
812
+ }
813
+ registerEditorAction(AcceptReplInputAction);
814
+ registerEditorAction(ReplCopyAllAction);
815
+ registerEditorAction(FilterReplAction);
816
+ class SelectReplActionViewItem extends FocusSessionActionViewItem {
817
+ getSessions() {
818
+ return this.debugService.getModel().getSessions(true).filter(s => s.hasSeparateRepl() && !( (sessionsToIgnore.has(s))));
819
+ }
820
+ mapFocusedSessionToSelected(focusedSession) {
821
+ while (focusedSession.parentSession && !focusedSession.hasSeparateRepl()) {
822
+ focusedSession = focusedSession.parentSession;
823
+ }
824
+ return focusedSession;
825
+ }
826
+ }
827
+ function getReplView(viewsService) {
828
+ return viewsService.getActiveViewWithId(REPL_VIEW_ID) ?? undefined;
829
+ }
830
+ const selectReplCommandId = 'workbench.action.debug.selectRepl';
831
+ registerAction2(class extends ViewAction {
832
+ constructor() {
833
+ super({
834
+ id: selectReplCommandId,
835
+ viewId: REPL_VIEW_ID,
836
+ title: ( (localizeWithPath(
837
+ 'vs/workbench/contrib/debug/browser/repl',
838
+ 'selectRepl',
839
+ "Select Debug Console"
840
+ ))),
841
+ f1: false,
842
+ menu: {
843
+ id: MenuId.ViewTitle,
844
+ group: 'navigation',
845
+ when: ( (ContextKeyExpr.and(
846
+ (ContextKeyExpr.equals('view', REPL_VIEW_ID)),
847
+ CONTEXT_MULTI_SESSION_REPL
848
+ ))),
849
+ order: 20
850
+ }
851
+ });
852
+ }
853
+ async runInView(accessor, view, session) {
854
+ const debugService = accessor.get(IDebugService);
855
+ if (session && session.state !== 0 && session !== debugService.getViewModel().focusedSession) {
856
+ if (session.state !== 2 ) {
857
+ const stopppedChildSession = debugService.getModel().getSessions().find(s => s.parentSession === session && s.state === 2 );
858
+ if (stopppedChildSession) {
859
+ session = stopppedChildSession;
860
+ }
861
+ }
862
+ await debugService.focusStackFrame(undefined, undefined, session, { explicit: true });
863
+ }
864
+ await view.selectSession(session);
865
+ }
866
+ });
867
+ registerAction2(class extends ViewAction {
868
+ constructor() {
869
+ super({
870
+ id: 'workbench.debug.panel.action.clearReplAction',
871
+ viewId: REPL_VIEW_ID,
872
+ title: ( (localize2WithPath('vs/workbench/contrib/debug/browser/repl', 'clearRepl', 'Clear Console'))),
873
+ f1: true,
874
+ icon: debugConsoleClearAll,
875
+ menu: [{
876
+ id: MenuId.ViewTitle,
877
+ group: 'navigation',
878
+ when: ( (ContextKeyExpr.equals('view', REPL_VIEW_ID))),
879
+ order: 30
880
+ }, {
881
+ id: MenuId.DebugConsoleContext,
882
+ group: 'z_commands',
883
+ order: 20
884
+ }]
885
+ });
886
+ }
887
+ runInView(_accessor, view) {
888
+ const accessibilitySignalService = _accessor.get(IAccessibilitySignalService);
889
+ view.clearRepl();
890
+ accessibilitySignalService.playSignal(AccessibilitySignal.clear);
891
+ }
892
+ });
893
+ registerAction2(class extends ViewAction {
894
+ constructor() {
895
+ super({
896
+ id: 'debug.collapseRepl',
897
+ title: ( (localizeWithPath('vs/workbench/contrib/debug/browser/repl', 'collapse', "Collapse All"))),
898
+ viewId: REPL_VIEW_ID,
899
+ menu: {
900
+ id: MenuId.DebugConsoleContext,
901
+ group: 'z_commands',
902
+ order: 10
903
+ }
904
+ });
905
+ }
906
+ runInView(_accessor, view) {
907
+ view.collapseAll();
908
+ view.focus();
909
+ }
910
+ });
911
+ registerAction2(class extends ViewAction {
912
+ constructor() {
913
+ super({
914
+ id: 'debug.replPaste',
915
+ title: ( (localizeWithPath('vs/workbench/contrib/debug/browser/repl', 'paste', "Paste"))),
916
+ viewId: REPL_VIEW_ID,
917
+ precondition: ( (CONTEXT_DEBUG_STATE.notEqualsTo(getStateLabel(0 )))),
918
+ menu: {
919
+ id: MenuId.DebugConsoleContext,
920
+ group: '2_cutcopypaste',
921
+ order: 30
922
+ }
923
+ });
924
+ }
925
+ async runInView(accessor, view) {
926
+ const clipboardService = accessor.get(IClipboardService);
927
+ const clipboardText = await clipboardService.readText();
928
+ if (clipboardText) {
929
+ const replInput = view.getReplInput();
930
+ replInput.setValue(replInput.getValue().concat(clipboardText));
931
+ view.focus();
932
+ const model = replInput.getModel();
933
+ const lineNumber = model ? model.getLineCount() : 0;
934
+ const column = model?.getLineMaxColumn(lineNumber);
935
+ if (typeof lineNumber === 'number' && typeof column === 'number') {
936
+ replInput.setPosition({ lineNumber, column });
937
+ }
938
+ }
939
+ }
940
+ });
941
+ registerAction2(class extends ViewAction {
942
+ constructor() {
943
+ super({
944
+ id: 'workbench.debug.action.copyAll',
945
+ title: ( (localizeWithPath('vs/workbench/contrib/debug/browser/repl', 'copyAll', "Copy All"))),
946
+ viewId: REPL_VIEW_ID,
947
+ menu: {
948
+ id: MenuId.DebugConsoleContext,
949
+ group: '2_cutcopypaste',
950
+ order: 20
951
+ }
952
+ });
953
+ }
954
+ async runInView(accessor, view) {
955
+ const clipboardService = accessor.get(IClipboardService);
956
+ await clipboardService.writeText(view.getVisibleContent());
957
+ }
958
+ });
959
+ registerAction2(class extends Action2 {
960
+ constructor() {
961
+ super({
962
+ id: 'debug.replCopy',
963
+ title: ( (localizeWithPath('vs/workbench/contrib/debug/browser/repl', 'copy', "Copy"))),
964
+ menu: {
965
+ id: MenuId.DebugConsoleContext,
966
+ group: '2_cutcopypaste',
967
+ order: 10
968
+ }
969
+ });
970
+ }
971
+ async run(accessor, element) {
972
+ const clipboardService = accessor.get(IClipboardService);
973
+ const debugService = accessor.get(IDebugService);
974
+ const nativeSelection = getActiveWindow().getSelection();
975
+ const selectedText = nativeSelection?.toString();
976
+ if (selectedText && selectedText.length > 0) {
977
+ return clipboardService.writeText(selectedText);
978
+ }
979
+ else if (element) {
980
+ return clipboardService.writeText((await this.tryEvaluateAndCopy(debugService, element)) || ( (element.toString())));
981
+ }
982
+ }
983
+ async tryEvaluateAndCopy(debugService, element) {
984
+ if (!(element instanceof ReplEvaluationResult)) {
985
+ return;
986
+ }
987
+ const stackFrame = debugService.getViewModel().focusedStackFrame;
988
+ const session = debugService.getViewModel().focusedSession;
989
+ if (!stackFrame || !session || !session.capabilities.supportsClipboardContext) {
990
+ return;
991
+ }
992
+ try {
993
+ const evaluation = await session.evaluate(element.originalExpression, stackFrame.frameId, 'clipboard');
994
+ return evaluation?.body.result;
995
+ }
996
+ catch (e) {
997
+ return;
998
+ }
999
+ }
1000
+ });
1001
+
1002
+ export { Repl };