@theia/debug 1.31.0-next.13 → 1.31.0-next.14

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.
@@ -1,10 +1,10 @@
1
+ import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application';
1
2
  import * as monaco from '@theia/monaco-editor-core';
2
3
  import { IDecorationOptions } from '@theia/monaco-editor-core/esm/vs/editor/common/editorCommon';
3
- import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application';
4
4
  import { MonacoEditorService } from '@theia/monaco/lib/browser/monaco-editor-service';
5
5
  import { DebugPreferences } from '../debug-preferences';
6
- import { DebugEditorModel } from './debug-editor-model';
7
6
  import { DebugStackFrame } from '../model/debug-stack-frame';
7
+ import { DebugEditorModel } from './debug-editor-model';
8
8
  export declare const INLINE_VALUE_DECORATION_KEY = "inlinevaluedecoration";
9
9
  export declare class DebugInlineValueDecorator implements FrontendApplicationContribution {
10
10
  protected readonly editorService: MonacoEditorService;
@@ -13,8 +13,9 @@ export declare class DebugInlineValueDecorator implements FrontendApplicationCon
13
13
  protected wordToLineNumbersMap: Map<string, monaco.Position[]> | undefined;
14
14
  onStart(): void;
15
15
  calculateDecorations(debugEditorModel: DebugEditorModel, stackFrame: DebugStackFrame | undefined): Promise<IDecorationOptions[]>;
16
- protected updateInlineValueDecorations(model: monaco.editor.ITextModel | undefined, stackFrame: DebugStackFrame | undefined): Promise<IDecorationOptions[]>;
16
+ protected updateInlineValueDecorations(debugEditorModel: DebugEditorModel, model: monaco.editor.ITextModel | undefined, stackFrame: DebugStackFrame | undefined): Promise<IDecorationOptions[]>;
17
17
  private createInlineValueDecorationsInsideRange;
18
+ protected formatInlineValue(...args: string[]): string;
18
19
  private createInlineValueDecoration;
19
20
  private getWordToPositionsMap;
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"debug-inline-value-decorator.d.ts","sourceRoot":"","sources":["../../../src/browser/editor/debug-inline-value-decorator.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AAIjG,OAAO,EAAE,+BAA+B,EAAE,MAAM,8CAA8C,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,eAAO,MAAM,2BAA2B,0BAA0B,CAAC;AAcnE,qBACa,yBAA0B,YAAW,+BAA+B;IAG7E,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAGtD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IAEjD,SAAS,CAAC,OAAO,UAAS;IAC1B,SAAS,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAa;IAEvF,OAAO,IAAI,IAAI;IAUT,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;cAOtH,4BAA4B,CACxC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,EAC3C,UAAU,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA6B3E,OAAO,CAAC,uCAAuC;IAmD/C,OAAO,CAAC,2BAA2B;IAkCnC,OAAO,CAAC,qBAAqB;CA8ChC"}
1
+ {"version":3,"file":"debug-inline-value-decorator.d.ts","sourceRoot":"","sources":["../../../src/browser/editor/debug-inline-value-decorator.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,+BAA+B,EAAE,MAAM,8CAA8C,CAAC;AAE/F,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AAKjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,eAAO,MAAM,2BAA2B,0BAA0B,CAAC;AAmBnE,qBACa,yBAA0B,YAAW,+BAA+B;IAG7E,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAGtD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IAEjD,SAAS,CAAC,OAAO,UAAS;IAC1B,SAAS,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAa;IAEvF,OAAO,IAAI,IAAI;IAUT,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;cAOtH,4BAA4B,CACxC,gBAAgB,EAAE,gBAAgB,EAClC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,EAC3C,UAAU,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;YA6B7D,uCAAuC;IAiKrD,SAAS,CAAC,iBAAiB,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAetD,OAAO,CAAC,2BAA2B;IAkCnC,OAAO,CAAC,qBAAqB;CA8ChC"}
@@ -25,14 +25,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
25
25
  };
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.DebugInlineValueDecorator = exports.INLINE_VALUE_DECORATION_KEY = void 0;
28
- /*---------------------------------------------------------------------------------------------
29
- * Copyright (c) Microsoft Corporation. All rights reserved.
30
- * Licensed under the MIT License. See License.txt in the project root for license information.
31
- *--------------------------------------------------------------------------------------------*/
32
- // Based on https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts
33
28
  const inversify_1 = require("@theia/core/shared/inversify");
34
29
  const monaco = require("@theia/monaco-editor-core");
30
+ const cancellation_1 = require("@theia/monaco-editor-core/esm/vs/base/common/cancellation");
35
31
  const wordHelper_1 = require("@theia/monaco-editor-core/esm/vs/editor/common/core/wordHelper");
32
+ const languageFeatures_1 = require("@theia/monaco-editor-core/esm/vs/editor/common/services/languageFeatures");
33
+ const standaloneServices_1 = require("@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices");
36
34
  const monaco_editor_service_1 = require("@theia/monaco/lib/browser/monaco-editor-service");
37
35
  const debug_console_items_1 = require("../console/debug-console-items");
38
36
  const debug_preferences_1 = require("../debug-preferences");
@@ -49,6 +47,12 @@ const MAX_TOKENIZATION_LINE_LEN = 500; // If line is too long, then inline value
49
47
  */
50
48
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/base/common/uint.ts#L7-L13
51
49
  const MAX_SAFE_SMALL_INTEGER = 1 << 30;
50
+ class InlineSegment {
51
+ constructor(column, text) {
52
+ this.column = column;
53
+ this.text = text;
54
+ }
55
+ }
52
56
  let DebugInlineValueDecorator = class DebugInlineValueDecorator {
53
57
  constructor() {
54
58
  this.enabled = false;
@@ -66,10 +70,10 @@ let DebugInlineValueDecorator = class DebugInlineValueDecorator {
66
70
  async calculateDecorations(debugEditorModel, stackFrame) {
67
71
  this.wordToLineNumbersMap = undefined;
68
72
  const model = debugEditorModel.editor.getControl().getModel() || undefined;
69
- return this.updateInlineValueDecorations(model, stackFrame);
73
+ return this.updateInlineValueDecorations(debugEditorModel, model, stackFrame);
70
74
  }
71
75
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts#L382-L408
72
- async updateInlineValueDecorations(model, stackFrame) {
76
+ async updateInlineValueDecorations(debugEditorModel, model, stackFrame) {
73
77
  if (!this.enabled || !model || !stackFrame || !stackFrame.source || model.uri.toString() !== stackFrame.source.uri.toString()) {
74
78
  return [];
75
79
  }
@@ -87,51 +91,166 @@ let DebugInlineValueDecorator = class DebugInlineValueDecorator {
87
91
  if (scope.range) {
88
92
  range = range.setStartPosition(scope.range.startLineNumber, scope.range.startColumn);
89
93
  }
90
- return this.createInlineValueDecorationsInsideRange(children, range, model);
94
+ return this.createInlineValueDecorationsInsideRange(children, range, model, debugEditorModel, stackFrame);
91
95
  }));
92
96
  return decorationsPerScope.reduce((previous, current) => previous.concat(current), []);
93
97
  }
94
98
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts#L410-L452
95
- createInlineValueDecorationsInsideRange(expressions, range, model) {
96
- const nameValueMap = new Map();
97
- for (const expr of expressions) {
98
- if (expr instanceof debug_console_items_1.DebugVariable) { // XXX: VS Code uses `IExpression` that has `name` and `value`.
99
- nameValueMap.set(expr.name, expr.value);
100
- }
101
- // Limit the size of map. Too large can have a perf impact
102
- if (nameValueMap.size >= MAX_NUM_INLINE_VALUES) {
103
- break;
104
- }
105
- }
106
- const lineToNamesMap = new Map();
107
- const wordToPositionsMap = this.getWordToPositionsMap(model);
108
- // Compute unique set of names on each line
109
- nameValueMap.forEach((_, name) => {
110
- const positions = wordToPositionsMap.get(name);
111
- if (positions) {
112
- for (const position of positions) {
113
- if (range.containsPosition(position)) {
114
- if (!lineToNamesMap.has(position.lineNumber)) {
115
- lineToNamesMap.set(position.lineNumber, []);
99
+ async createInlineValueDecorationsInsideRange(expressions, range, model, debugEditorModel, stackFrame) {
100
+ const decorations = [];
101
+ const inlineValuesProvider = standaloneServices_1.StandaloneServices.get(languageFeatures_1.ILanguageFeaturesService).inlineValuesProvider;
102
+ const textEditorModel = debugEditorModel.editor.document.textEditorModel;
103
+ if (inlineValuesProvider && inlineValuesProvider.has(textEditorModel)) {
104
+ const findVariable = async (variableName, caseSensitiveLookup) => {
105
+ const scopes = await stackFrame.getMostSpecificScopes(stackFrame.range);
106
+ const key = caseSensitiveLookup ? variableName : variableName.toLowerCase();
107
+ for (const scope of scopes) {
108
+ const expressionContainers = await scope.getElements();
109
+ let container = expressionContainers.next();
110
+ while (!container.done) {
111
+ const debugVariable = container.value;
112
+ if (debugVariable && debugVariable instanceof debug_console_items_1.DebugVariable) {
113
+ if (caseSensitiveLookup) {
114
+ if (debugVariable.name === key) {
115
+ return debugVariable;
116
+ }
117
+ }
118
+ else {
119
+ if (debugVariable.name.toLowerCase() === key) {
120
+ return debugVariable;
121
+ }
122
+ }
116
123
  }
117
- if (lineToNamesMap.get(position.lineNumber).indexOf(name) === -1) {
118
- lineToNamesMap.get(position.lineNumber).push(name);
124
+ container = expressionContainers.next();
125
+ }
126
+ }
127
+ return undefined;
128
+ };
129
+ const context = {
130
+ frameId: stackFrame.raw.id,
131
+ stoppedLocation: range
132
+ };
133
+ const cancellationToken = new cancellation_1.CancellationTokenSource().token;
134
+ const registeredProviders = inlineValuesProvider.ordered(textEditorModel).reverse();
135
+ const visibleRanges = debugEditorModel.editor.getControl().getVisibleRanges();
136
+ const lineDecorations = new Map();
137
+ for (const provider of registeredProviders) {
138
+ for (const visibleRange of visibleRanges) {
139
+ const result = await provider.provideInlineValues(textEditorModel, visibleRange, context, cancellationToken);
140
+ if (result) {
141
+ for (const inlineValue of result) {
142
+ let text = undefined;
143
+ switch (inlineValue.type) {
144
+ case 'text':
145
+ text = inlineValue.text;
146
+ break;
147
+ case 'variable': {
148
+ let varName = inlineValue.variableName;
149
+ if (!varName) {
150
+ const lineContent = model.getLineContent(inlineValue.range.startLineNumber);
151
+ varName = lineContent.substring(inlineValue.range.startColumn - 1, inlineValue.range.endColumn - 1);
152
+ }
153
+ const variable = await findVariable(varName, inlineValue.caseSensitiveLookup);
154
+ if (variable) {
155
+ text = this.formatInlineValue(varName, variable.value);
156
+ }
157
+ break;
158
+ }
159
+ case 'expression': {
160
+ let expr = inlineValue.expression;
161
+ if (!expr) {
162
+ const lineContent = model.getLineContent(inlineValue.range.startLineNumber);
163
+ expr = lineContent.substring(inlineValue.range.startColumn - 1, inlineValue.range.endColumn - 1);
164
+ }
165
+ if (expr) {
166
+ const expression = new debug_console_items_1.ExpressionItem(expr, () => stackFrame.thread.session);
167
+ await expression.evaluate('watch');
168
+ if (expression.available) {
169
+ text = this.formatInlineValue(expr, expression.value);
170
+ }
171
+ }
172
+ break;
173
+ }
174
+ }
175
+ if (text) {
176
+ const line = inlineValue.range.startLineNumber;
177
+ let lineSegments = lineDecorations.get(line);
178
+ if (!lineSegments) {
179
+ lineSegments = [];
180
+ lineDecorations.set(line, lineSegments);
181
+ }
182
+ if (!lineSegments.some(segment => segment.text === text)) {
183
+ lineSegments.push(new InlineSegment(inlineValue.range.startColumn, text));
184
+ }
185
+ }
119
186
  }
120
187
  }
121
188
  }
122
189
  }
123
- });
124
- const decorations = [];
125
- // Compute decorators for each line
126
- lineToNamesMap.forEach((names, line) => {
127
- const contentText = names.sort((first, second) => {
128
- const content = model.getLineContent(line);
129
- return content.indexOf(first) - content.indexOf(second);
130
- }).map(name => `${name} = ${nameValueMap.get(name)}`).join(', ');
131
- decorations.push(this.createInlineValueDecoration(line, contentText));
132
- });
190
+ ;
191
+ // sort line segments and concatenate them into a decoration
192
+ const separator = ', ';
193
+ lineDecorations.forEach((segments, line) => {
194
+ if (segments.length > 0) {
195
+ segments = segments.sort((a, b) => a.column - b.column);
196
+ const text = segments.map(s => s.text).join(separator);
197
+ decorations.push(this.createInlineValueDecoration(line, text));
198
+ }
199
+ });
200
+ }
201
+ else { // use fallback if no provider was registered
202
+ const lineToNamesMap = new Map();
203
+ const nameValueMap = new Map();
204
+ for (const expr of expressions) {
205
+ if (expr instanceof debug_console_items_1.DebugVariable) { // XXX: VS Code uses `IExpression` that has `name` and `value`.
206
+ nameValueMap.set(expr.name, expr.value);
207
+ }
208
+ // Limit the size of map. Too large can have a perf impact
209
+ if (nameValueMap.size >= MAX_NUM_INLINE_VALUES) {
210
+ break;
211
+ }
212
+ }
213
+ const wordToPositionsMap = this.getWordToPositionsMap(model);
214
+ // Compute unique set of names on each line
215
+ nameValueMap.forEach((_, name) => {
216
+ const positions = wordToPositionsMap.get(name);
217
+ if (positions) {
218
+ for (const position of positions) {
219
+ if (range.containsPosition(position)) {
220
+ if (!lineToNamesMap.has(position.lineNumber)) {
221
+ lineToNamesMap.set(position.lineNumber, []);
222
+ }
223
+ if (lineToNamesMap.get(position.lineNumber).indexOf(name) === -1) {
224
+ lineToNamesMap.get(position.lineNumber).push(name);
225
+ }
226
+ }
227
+ }
228
+ }
229
+ });
230
+ // Compute decorators for each line
231
+ lineToNamesMap.forEach((names, line) => {
232
+ const contentText = names.sort((first, second) => {
233
+ const content = model.getLineContent(line);
234
+ return content.indexOf(first) - content.indexOf(second);
235
+ }).map(name => `${name} = ${nameValueMap.get(name)}`).join(', ');
236
+ decorations.push(this.createInlineValueDecoration(line, contentText));
237
+ });
238
+ }
133
239
  return decorations;
134
240
  }
241
+ formatInlineValue(...args) {
242
+ const valuePattern = '{0} = {1}';
243
+ const formatRegExp = /{(\d+)}/g;
244
+ if (args.length === 0) {
245
+ return valuePattern;
246
+ }
247
+ return valuePattern.replace(formatRegExp, (match, group) => {
248
+ const idx = parseInt(group, 10);
249
+ return isNaN(idx) || idx < 0 || idx >= args.length ?
250
+ match :
251
+ args[idx];
252
+ });
253
+ }
135
254
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts#L454-L485
136
255
  createInlineValueDecoration(lineNumber, contentText) {
137
256
  // If decoratorText is too long, trim and add ellipses. This could happen for minified files with everything on a single line
@@ -1 +1 @@
1
- {"version":3,"file":"debug-inline-value-decorator.js","sourceRoot":"","sources":["../../../src/browser/editor/debug-inline-value-decorator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug-inline-value-decorator.js","sourceRoot":"","sources":["../../../src/browser/editor/debug-inline-value-decorator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@theia/debug",
3
- "version": "1.31.0-next.13+c0da67fa8",
3
+ "version": "1.31.0-next.14+807cf6d0a",
4
4
  "description": "Theia - Debug Extension",
5
5
  "dependencies": {
6
- "@theia/console": "1.31.0-next.13+c0da67fa8",
7
- "@theia/core": "1.31.0-next.13+c0da67fa8",
8
- "@theia/editor": "1.31.0-next.13+c0da67fa8",
9
- "@theia/filesystem": "1.31.0-next.13+c0da67fa8",
10
- "@theia/markers": "1.31.0-next.13+c0da67fa8",
11
- "@theia/monaco": "1.31.0-next.13+c0da67fa8",
6
+ "@theia/console": "1.31.0-next.14+807cf6d0a",
7
+ "@theia/core": "1.31.0-next.14+807cf6d0a",
8
+ "@theia/editor": "1.31.0-next.14+807cf6d0a",
9
+ "@theia/filesystem": "1.31.0-next.14+807cf6d0a",
10
+ "@theia/markers": "1.31.0-next.14+807cf6d0a",
11
+ "@theia/monaco": "1.31.0-next.14+807cf6d0a",
12
12
  "@theia/monaco-editor-core": "1.67.2",
13
- "@theia/output": "1.31.0-next.13+c0da67fa8",
14
- "@theia/process": "1.31.0-next.13+c0da67fa8",
15
- "@theia/task": "1.31.0-next.13+c0da67fa8",
16
- "@theia/terminal": "1.31.0-next.13+c0da67fa8",
17
- "@theia/variable-resolver": "1.31.0-next.13+c0da67fa8",
18
- "@theia/workspace": "1.31.0-next.13+c0da67fa8",
13
+ "@theia/output": "1.31.0-next.14+807cf6d0a",
14
+ "@theia/process": "1.31.0-next.14+807cf6d0a",
15
+ "@theia/task": "1.31.0-next.14+807cf6d0a",
16
+ "@theia/terminal": "1.31.0-next.14+807cf6d0a",
17
+ "@theia/variable-resolver": "1.31.0-next.14+807cf6d0a",
18
+ "@theia/workspace": "1.31.0-next.14+807cf6d0a",
19
19
  "@vscode/debugprotocol": "^1.51.0",
20
20
  "jsonc-parser": "^2.2.0",
21
21
  "mkdirp": "^0.5.0",
@@ -68,5 +68,5 @@
68
68
  "nyc": {
69
69
  "extends": "../../configs/nyc.json"
70
70
  },
71
- "gitHead": "c0da67fa862e7a042687378b902667861c6eafb1"
71
+ "gitHead": "807cf6d0ab0217a7742bd49cd794d591b5a8ee84"
72
72
  }
@@ -20,18 +20,21 @@
20
20
  *--------------------------------------------------------------------------------------------*/
21
21
  // Based on https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts
22
22
 
23
+ import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application';
23
24
  import { inject, injectable } from '@theia/core/shared/inversify';
24
25
  import * as monaco from '@theia/monaco-editor-core';
26
+ import { CancellationTokenSource } from '@theia/monaco-editor-core/esm/vs/base/common/cancellation';
27
+ import { DEFAULT_WORD_REGEXP } from '@theia/monaco-editor-core/esm/vs/editor/common/core/wordHelper';
25
28
  import { IDecorationOptions } from '@theia/monaco-editor-core/esm/vs/editor/common/editorCommon';
29
+ import { InlineValueContext, StandardTokenType } from '@theia/monaco-editor-core/esm/vs/editor/common/languages';
26
30
  import { ITextModel } from '@theia/monaco-editor-core/esm/vs/editor/common/model';
27
- import { StandardTokenType } from '@theia/monaco-editor-core/esm/vs/editor/common/languages';
28
- import { DEFAULT_WORD_REGEXP } from '@theia/monaco-editor-core/esm/vs/editor/common/core/wordHelper';
29
- import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application';
31
+ import { ILanguageFeaturesService } from '@theia/monaco-editor-core/esm/vs/editor/common/services/languageFeatures';
32
+ import { StandaloneServices } from '@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices';
30
33
  import { MonacoEditorService } from '@theia/monaco/lib/browser/monaco-editor-service';
31
- import { ExpressionContainer, DebugVariable } from '../console/debug-console-items';
34
+ import { DebugVariable, ExpressionContainer, ExpressionItem } from '../console/debug-console-items';
32
35
  import { DebugPreferences } from '../debug-preferences';
33
- import { DebugEditorModel } from './debug-editor-model';
34
36
  import { DebugStackFrame } from '../model/debug-stack-frame';
37
+ import { DebugEditorModel } from './debug-editor-model';
35
38
 
36
39
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts#L40-L43
37
40
  export const INLINE_VALUE_DECORATION_KEY = 'inlinevaluedecoration';
@@ -48,6 +51,11 @@ const MAX_TOKENIZATION_LINE_LEN = 500; // If line is too long, then inline value
48
51
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/base/common/uint.ts#L7-L13
49
52
  const MAX_SAFE_SMALL_INTEGER = 1 << 30;
50
53
 
54
+ class InlineSegment {
55
+ constructor(public column: number, public text: string) {
56
+ }
57
+ }
58
+
51
59
  @injectable()
52
60
  export class DebugInlineValueDecorator implements FrontendApplicationContribution {
53
61
 
@@ -73,11 +81,12 @@ export class DebugInlineValueDecorator implements FrontendApplicationContributio
73
81
  async calculateDecorations(debugEditorModel: DebugEditorModel, stackFrame: DebugStackFrame | undefined): Promise<IDecorationOptions[]> {
74
82
  this.wordToLineNumbersMap = undefined;
75
83
  const model = debugEditorModel.editor.getControl().getModel() || undefined;
76
- return this.updateInlineValueDecorations(model, stackFrame);
84
+ return this.updateInlineValueDecorations(debugEditorModel, model, stackFrame);
77
85
  }
78
86
 
79
87
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts#L382-L408
80
88
  protected async updateInlineValueDecorations(
89
+ debugEditorModel: DebugEditorModel,
81
90
  model: monaco.editor.ITextModel | undefined,
82
91
  stackFrame: DebugStackFrame | undefined): Promise<IDecorationOptions[]> {
83
92
 
@@ -101,63 +110,188 @@ export class DebugInlineValueDecorator implements FrontendApplicationContributio
101
110
  range = range.setStartPosition(scope.range.startLineNumber, scope.range.startColumn);
102
111
  }
103
112
 
104
- return this.createInlineValueDecorationsInsideRange(children, range, model);
113
+ return this.createInlineValueDecorationsInsideRange(children, range, model, debugEditorModel, stackFrame);
105
114
  }));
106
115
 
107
116
  return decorationsPerScope.reduce((previous, current) => previous.concat(current), []);
108
117
  }
109
118
 
110
119
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts#L410-L452
111
- private createInlineValueDecorationsInsideRange(
120
+ private async createInlineValueDecorationsInsideRange(
112
121
  expressions: ReadonlyArray<ExpressionContainer>,
113
122
  range: monaco.Range,
114
- model: monaco.editor.ITextModel): IDecorationOptions[] {
123
+ model: monaco.editor.ITextModel,
124
+ debugEditorModel: DebugEditorModel,
125
+ stackFrame: DebugStackFrame): Promise<IDecorationOptions[]> {
115
126
 
116
- const nameValueMap = new Map<string, string>();
117
- for (const expr of expressions) {
118
- if (expr instanceof DebugVariable) { // XXX: VS Code uses `IExpression` that has `name` and `value`.
119
- nameValueMap.set(expr.name, expr.value);
120
- }
121
- // Limit the size of map. Too large can have a perf impact
122
- if (nameValueMap.size >= MAX_NUM_INLINE_VALUES) {
123
- break;
124
- }
125
- }
127
+ const decorations: IDecorationOptions[] = [];
126
128
 
127
- const lineToNamesMap: Map<number, string[]> = new Map<number, string[]>();
128
- const wordToPositionsMap = this.getWordToPositionsMap(model);
129
-
130
- // Compute unique set of names on each line
131
- nameValueMap.forEach((_, name) => {
132
- const positions = wordToPositionsMap.get(name);
133
- if (positions) {
134
- for (const position of positions) {
135
- if (range.containsPosition(position)) {
136
- if (!lineToNamesMap.has(position.lineNumber)) {
137
- lineToNamesMap.set(position.lineNumber, []);
129
+ const inlineValuesProvider = StandaloneServices.get(ILanguageFeaturesService).inlineValuesProvider;
130
+ const textEditorModel = debugEditorModel.editor.document.textEditorModel;
131
+
132
+ if (inlineValuesProvider && inlineValuesProvider.has(textEditorModel)) {
133
+
134
+ const findVariable = async (variableName: string, caseSensitiveLookup: boolean): Promise<DebugVariable | undefined> => {
135
+ const scopes = await stackFrame.getMostSpecificScopes(stackFrame.range!);
136
+ const key = caseSensitiveLookup ? variableName : variableName.toLowerCase();
137
+ for (const scope of scopes) {
138
+ const expressionContainers = await scope.getElements();
139
+ let container = expressionContainers.next();
140
+ while (!container.done) {
141
+ const debugVariable = container.value;
142
+ if (debugVariable && debugVariable instanceof DebugVariable) {
143
+ if (caseSensitiveLookup) {
144
+ if (debugVariable.name === key) {
145
+ return debugVariable;
146
+ }
147
+ } else {
148
+ if (debugVariable.name.toLowerCase() === key) {
149
+ return debugVariable;
150
+ }
151
+ }
138
152
  }
153
+ container = expressionContainers.next();
154
+ }
155
+ }
156
+ return undefined;
157
+ };
158
+
159
+ const context: InlineValueContext = {
160
+ frameId: stackFrame.raw.id,
161
+ stoppedLocation: range
162
+ };
163
+
164
+ const cancellationToken = new CancellationTokenSource().token;
165
+ const registeredProviders = inlineValuesProvider.ordered(textEditorModel).reverse();
166
+ const visibleRanges = debugEditorModel.editor.getControl().getVisibleRanges();
167
+
168
+ const lineDecorations = new Map<number, InlineSegment[]>();
169
+
170
+ for (const provider of registeredProviders) {
171
+ for (const visibleRange of visibleRanges) {
172
+ const result = await provider.provideInlineValues(textEditorModel, visibleRange, context, cancellationToken);
173
+ if (result) {
174
+ for (const inlineValue of result) {
175
+ let text: string | undefined = undefined;
176
+ switch (inlineValue.type) {
177
+ case 'text':
178
+ text = inlineValue.text;
179
+ break;
180
+ case 'variable': {
181
+ let varName = inlineValue.variableName;
182
+ if (!varName) {
183
+ const lineContent = model.getLineContent(inlineValue.range.startLineNumber);
184
+ varName = lineContent.substring(inlineValue.range.startColumn - 1, inlineValue.range.endColumn - 1);
185
+ }
186
+ const variable = await findVariable(varName, inlineValue.caseSensitiveLookup);
187
+ if (variable) {
188
+ text = this.formatInlineValue(varName, variable.value);
189
+ }
190
+ break;
191
+ }
192
+ case 'expression': {
193
+ let expr = inlineValue.expression;
194
+ if (!expr) {
195
+ const lineContent = model.getLineContent(inlineValue.range.startLineNumber);
196
+ expr = lineContent.substring(inlineValue.range.startColumn - 1, inlineValue.range.endColumn - 1);
197
+ }
198
+ if (expr) {
199
+ const expression = new ExpressionItem(expr, () => stackFrame.thread.session);
200
+ await expression.evaluate('watch');
201
+ if (expression.available) {
202
+ text = this.formatInlineValue(expr, expression.value);
203
+ }
204
+ }
205
+ break;
206
+ }
207
+ }
139
208
 
140
- if (lineToNamesMap.get(position.lineNumber)!.indexOf(name) === -1) {
141
- lineToNamesMap.get(position.lineNumber)!.push(name);
209
+ if (text) {
210
+ const line = inlineValue.range.startLineNumber;
211
+ let lineSegments = lineDecorations.get(line);
212
+ if (!lineSegments) {
213
+ lineSegments = [];
214
+ lineDecorations.set(line, lineSegments);
215
+ }
216
+ if (!lineSegments.some(segment => segment.text === text)) {
217
+ lineSegments.push(new InlineSegment(inlineValue.range.startColumn, text));
218
+ }
219
+ }
142
220
  }
143
221
  }
144
222
  }
223
+ };
224
+
225
+ // sort line segments and concatenate them into a decoration
226
+ const separator = ', ';
227
+ lineDecorations.forEach((segments, line) => {
228
+ if (segments.length > 0) {
229
+ segments = segments.sort((a, b) => a.column - b.column);
230
+ const text = segments.map(s => s.text).join(separator);
231
+ decorations.push(this.createInlineValueDecoration(line, text));
232
+ }
233
+ });
234
+
235
+ } else { // use fallback if no provider was registered
236
+ const lineToNamesMap: Map<number, string[]> = new Map<number, string[]>();
237
+ const nameValueMap = new Map<string, string>();
238
+ for (const expr of expressions) {
239
+ if (expr instanceof DebugVariable) { // XXX: VS Code uses `IExpression` that has `name` and `value`.
240
+ nameValueMap.set(expr.name, expr.value);
241
+ }
242
+ // Limit the size of map. Too large can have a perf impact
243
+ if (nameValueMap.size >= MAX_NUM_INLINE_VALUES) {
244
+ break;
245
+ }
145
246
  }
146
- });
147
247
 
148
- const decorations: IDecorationOptions[] = [];
149
- // Compute decorators for each line
150
- lineToNamesMap.forEach((names, line) => {
151
- const contentText = names.sort((first, second) => {
152
- const content = model.getLineContent(line);
153
- return content.indexOf(first) - content.indexOf(second);
154
- }).map(name => `${name} = ${nameValueMap.get(name)}`).join(', ');
155
- decorations.push(this.createInlineValueDecoration(line, contentText));
156
- });
248
+ const wordToPositionsMap = this.getWordToPositionsMap(model);
249
+
250
+ // Compute unique set of names on each line
251
+ nameValueMap.forEach((_, name) => {
252
+ const positions = wordToPositionsMap.get(name);
253
+ if (positions) {
254
+ for (const position of positions) {
255
+ if (range.containsPosition(position)) {
256
+ if (!lineToNamesMap.has(position.lineNumber)) {
257
+ lineToNamesMap.set(position.lineNumber, []);
258
+ }
259
+
260
+ if (lineToNamesMap.get(position.lineNumber)!.indexOf(name) === -1) {
261
+ lineToNamesMap.get(position.lineNumber)!.push(name);
262
+ }
263
+ }
264
+ }
265
+ }
266
+ });
267
+
268
+ // Compute decorators for each line
269
+ lineToNamesMap.forEach((names, line) => {
270
+ const contentText = names.sort((first, second) => {
271
+ const content = model.getLineContent(line);
272
+ return content.indexOf(first) - content.indexOf(second);
273
+ }).map(name => `${name} = ${nameValueMap.get(name)}`).join(', ');
274
+ decorations.push(this.createInlineValueDecoration(line, contentText));
275
+ });
276
+ }
157
277
 
158
278
  return decorations;
159
279
  }
160
280
 
281
+ protected formatInlineValue(...args: string[]): string {
282
+ const valuePattern = '{0} = {1}';
283
+ const formatRegExp = /{(\d+)}/g;
284
+ if (args.length === 0) {
285
+ return valuePattern;
286
+ }
287
+ return valuePattern.replace(formatRegExp, (match, group) => {
288
+ const idx = parseInt(group, 10);
289
+ return isNaN(idx) || idx < 0 || idx >= args.length ?
290
+ match :
291
+ args[idx];
292
+ });
293
+ }
294
+
161
295
  // https://github.com/theia-ide/vscode/blob/standalone/0.19.x/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts#L454-L485
162
296
  private createInlineValueDecoration(lineNumber: number, contentText: string): IDecorationOptions {
163
297
  // If decoratorText is too long, trim and add ellipses. This could happen for minified files with everything on a single line