Implemented the requested changes.

Registed new setting in debug.contribution.ts
Changed the two settings for a single setting (debug.showVariableTypes)
Made the renderer functions listen to changes so it re-renders elements
Added a different styling for the type in variable panel
Changed function names to use camelCase

Co-authored-by: Diogo Pinto <diogotfpinto@tecnico.ulisboa.pt>
This commit is contained in:
Rafael Sargento 2024-06-07 01:12:24 +01:00
parent cdeeb50a38
commit 7453779c77
10 changed files with 91 additions and 31 deletions

View file

@ -49,6 +49,7 @@ export interface IRenderValueOptions {
export interface IVariableTemplateData {
expression: HTMLElement;
name: HTMLElement;
type: HTMLElement;
value: HTMLElement;
label: HighlightedLabel;
lazyButton: HTMLElement;
@ -132,10 +133,20 @@ export function renderExpressionValue(expressionOrValue: IExpressionValue | stri
export function renderVariable(store: DisposableStore, commandService: ICommandService, hoverService: IHoverService, variable: Variable, data: IVariableTemplateData, showChanged: boolean, highlights: IHighlight[], linkDetector?: LinkDetector, displayType?: boolean): void {
if (variable.available) {
data.type.textContent = '';
let text = variable.name;
if (variable.value && typeof variable.name === 'string') {
if (variable.type && displayType) {
text += ': ' + variable.type + ' =';
text += ': ';
//render type
const type = variable.type + ' =';
if (linkDetector) {
data.type.textContent = '';
const session = (variable instanceof ExpressionContainer) ? variable.getSession() : undefined;
data.type.appendChild(linkDetector.linkify(type, false, session ? session.root : undefined, true));
} else {
data.type.textContent = type;
}
} else {
text += ' =';
}
@ -176,6 +187,7 @@ export interface IInputBoxOptions {
export interface IExpressionTemplateData {
expression: HTMLElement;
name: HTMLSpanElement;
type: HTMLSpanElement;
value: HTMLSpanElement;
inputBoxContainer: HTMLElement;
actionBar?: ActionBar;
@ -234,6 +246,7 @@ export abstract class AbstractExpressionsRenderer<T = IExpression> implements IT
const lazyButton = dom.append(expression, $('span.lazy-button'));
lazyButton.classList.add(...ThemeIcon.asClassNameArray(Codicon.eye));
templateDisposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), lazyButton, localize('debug.lazyButton.tooltip', "Click to expand")));
const type = dom.append(expression, $('span.type'));
const value = dom.append(expression, $('span.value'));
const label = templateDisposable.add(new HighlightedLabel(name));
@ -246,7 +259,7 @@ export abstract class AbstractExpressionsRenderer<T = IExpression> implements IT
actionBar = templateDisposable.add(new ActionBar(expression));
}
const template: IExpressionTemplateData = { expression, name, value, label, inputBoxContainer, actionBar, elementDisposable: new DisposableStore(), templateDisposable, lazyButton, currentElement: undefined };
const template: IExpressionTemplateData = { expression, name, type, value, label, inputBoxContainer, actionBar, elementDisposable: new DisposableStore(), templateDisposable, lazyButton, currentElement: undefined };
templateDisposable.add(dom.addDisposableListener(lazyButton, dom.EventType.CLICK, () => {
if (template.currentElement) {
@ -260,8 +273,6 @@ export abstract class AbstractExpressionsRenderer<T = IExpression> implements IT
public abstract renderElement(node: ITreeNode<T, FuzzyScore>, index: number, data: IExpressionTemplateData): void;
protected renderExpressionElement(element: IExpression, node: ITreeNode<T, FuzzyScore>, data: IExpressionTemplateData): void {
data.elementDisposable.clear();
data.currentElement = element;
this.renderExpression(node.element, data, createMatches(node.filterData));
if (data.actionBar) {
this.renderActionBar!(data.actionBar, element, data);

View file

@ -440,6 +440,11 @@ configurationRegistry.registerConfiguration({
title: nls.localize('debugConfigurationTitle', "Debug"),
type: 'object',
properties: {
'debug.showVariableTypes': {
type: 'boolean',
description: nls.localize({ comment: ['This is the description for a setting'], key: 'showVariableTypes' }, "Show variable type in variable pane during debug session"),
default: false
},
'debug.allowBreakpointsEverywhere': {
type: 'boolean',
description: nls.localize({ comment: ['This is the description for a setting'], key: 'allowBreakpointsEverywhere' }, "Allow setting breakpoints in any file."),

View file

@ -35,6 +35,7 @@ export const debugIconStartForeground = registerColor('debugIcon.startForeground
export function registerColors() {
const debugTokenExpressionName = registerColor('debugTokenExpression.name', { dark: '#c586c0', light: '#9b46b0', hcDark: foreground, hcLight: foreground }, 'Foreground color for the token names shown in the debug views (ie. the Variables or Watch view).');
const debugTokenExpressionType = registerColor('debugTokenExpression.type', { dark: '#4A90E2', light: '#4A90E2', hcDark: foreground, hcLight: foreground }, 'Foreground color for the token types shown in the debug views (ie. the Variables or Watch view).');
const debugTokenExpressionValue = registerColor('debugTokenExpression.value', { dark: '#cccccc99', light: '#6c6c6ccc', hcDark: foreground, hcLight: foreground }, 'Foreground color for the token values shown in the debug views (ie. the Variables or Watch view).');
const debugTokenExpressionString = registerColor('debugTokenExpression.string', { dark: '#ce9178', light: '#a31515', hcDark: '#f48771', hcLight: '#a31515' }, 'Foreground color for strings in the debug views (ie. the Variables or Watch view).');
const debugTokenExpressionBoolean = registerColor('debugTokenExpression.boolean', { dark: '#4e94ce', light: '#0000ff', hcDark: '#75bdfe', hcLight: '#0000ff' }, 'Foreground color for booleans in the debug views (ie. the Variables or Watch view).');
@ -210,6 +211,7 @@ export function registerColors() {
}
const tokenNameColor = theme.getColor(debugTokenExpressionName)!;
const tokenTypeColor = theme.getColor(debugTokenExpressionType)!;
const tokenValueColor = theme.getColor(debugTokenExpressionValue)!;
const tokenStringColor = theme.getColor(debugTokenExpressionString)!;
const tokenBooleanColor = theme.getColor(debugTokenExpressionBoolean)!;
@ -221,6 +223,10 @@ export function registerColors() {
color: ${tokenNameColor};
}
.monaco-workbench .monaco-list-row .expression .type {
color: ${tokenTypeColor};
}
.monaco-workbench .monaco-list-row .expression .value,
.monaco-workbench .debug-hover-widget .value {
color: ${tokenValueColor};

View file

@ -247,6 +247,7 @@ export class ReplVariablesRenderer extends AbstractExpressionsRenderer<IExpressi
public renderElement(node: ITreeNode<IExpression | ReplVariableElement, FuzzyScore>, _index: number, data: IExpressionTemplateData): void {
const element = node.element;
data.elementDisposable.clear();
super.renderExpressionElement(element instanceof ReplVariableElement ? element.expression : element, node, data);
}

View file

@ -41,7 +41,7 @@ import { IViewDescriptorService } from 'vs/workbench/common/views';
import { AbstractExpressionDataSource, AbstractExpressionsRenderer, IExpressionTemplateData, IInputBoxOptions, renderExpressionValue, renderVariable, renderViewTree } from 'vs/workbench/contrib/debug/browser/baseDebugView';
import { ADD_TO_WATCH_ID, ADD_TO_WATCH_LABEL, COPY_EVALUATE_PATH_ID, COPY_EVALUATE_PATH_LABEL, COPY_VALUE_ID, COPY_VALUE_LABEL } from 'vs/workbench/contrib/debug/browser/debugCommands';
import { LinkDetector } from 'vs/workbench/contrib/debug/browser/linkDetector';
import { CONTEXT_BREAK_WHEN_VALUE_CHANGES_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_ACCESSED_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_READ_SUPPORTED, CONTEXT_VARIABLES_FOCUSED, DataBreakpointSetType, DebugVisualizationType, IDataBreakpointInfoResponse, IDebugService, IExpression, IScope, IStackFrame, IViewModel, VARIABLES_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug';
import { CONTEXT_BREAK_WHEN_VALUE_CHANGES_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_ACCESSED_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_READ_SUPPORTED, CONTEXT_VARIABLES_FOCUSED, DataBreakpointSetType, DebugVisualizationType, IDataBreakpointInfoResponse, IDebugConfiguration, IDebugService, IExpression, IScope, IStackFrame, IViewModel, VARIABLES_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug';
import { getContextForVariable } from 'vs/workbench/contrib/debug/common/debugContext';
import { ErrorScope, Expression, Scope, StackFrame, Variable, VisualizedExpression, getUriForDebugMemory } from 'vs/workbench/contrib/debug/common/debugModel';
import { DebugVisualizer, IDebugVisualizerService } from 'vs/workbench/contrib/debug/common/debugVisualizers';
@ -123,7 +123,7 @@ export class VariablesView extends ViewPane {
container.classList.add('debug-variables');
const treeContainer = renderViewTree(container);
const linkDetector = this.instantiationService.createInstance(LinkDetector);
const displayType: boolean = this.configurationService.getValue('variableDisplayType.variableView');
const displayType: boolean = this.configurationService.getValue<IDebugConfiguration>('debug').showVariableTypes;
this.tree = <WorkbenchAsyncDataTree<IStackFrame | null, IExpression | IScope, FuzzyScore>>this.instantiationService.createInstance(WorkbenchAsyncDataTree, 'VariablesView', treeContainer, new VariablesDelegate(),
[
this.instantiationService.createInstance(VariablesRenderer, linkDetector, displayType),
@ -456,6 +456,8 @@ export class VisualizedVariableRenderer extends AbstractExpressionsRenderer {
}
public override renderElement(node: ITreeNode<IExpression, FuzzyScore>, index: number, data: IExpressionTemplateData): void {
data.elementDisposable.clear();
data.currentElement = node.element;
super.renderExpressionElement(node.element, node, data);
}
@ -524,7 +526,7 @@ export class VariablesRenderer extends AbstractExpressionsRenderer {
constructor(
private readonly linkDetector: LinkDetector,
private readonly displayType: boolean,
private displayType: boolean,
@IMenuService private readonly menuService: IMenuService,
@IContextKeyService private readonly contextKeyService: IContextKeyService,
@IDebugVisualizerService private readonly visualization: IDebugVisualizerService,
@ -533,6 +535,7 @@ export class VariablesRenderer extends AbstractExpressionsRenderer {
@IDebugService debugService: IDebugService,
@IContextViewService contextViewService: IContextViewService,
@IHoverService hoverService: IHoverService,
@IConfigurationService private configurationService: IConfigurationService,
) {
super(debugService, contextViewService, hoverService);
}
@ -546,6 +549,14 @@ export class VariablesRenderer extends AbstractExpressionsRenderer {
}
public override renderElement(node: ITreeNode<IExpression, FuzzyScore>, index: number, data: IExpressionTemplateData): void {
data.elementDisposable.clear();
data.currentElement = node.element;
data.elementDisposable.add(this.configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('debug.showVariableTypes')) {
this.displayType = this.configurationService.getValue<IDebugConfiguration>('debug').showVariableTypes;
super.renderExpressionElement(node.element, node, data);
}
}));
super.renderExpressionElement(node.element, node, data);
}

View file

@ -34,7 +34,7 @@ import { AbstractExpressionDataSource, AbstractExpressionsRenderer, IExpressionT
import { watchExpressionsAdd, watchExpressionsRemoveAll } from 'vs/workbench/contrib/debug/browser/debugIcons';
import { LinkDetector } from 'vs/workbench/contrib/debug/browser/linkDetector';
import { VariablesRenderer, VisualizedVariableRenderer } from 'vs/workbench/contrib/debug/browser/variablesView';
import { CONTEXT_CAN_VIEW_MEMORY, CONTEXT_VARIABLE_IS_READONLY, CONTEXT_WATCH_EXPRESSIONS_EXIST, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_WATCH_ITEM_TYPE, IDebugService, IExpression, WATCH_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug';
import { CONTEXT_CAN_VIEW_MEMORY, CONTEXT_VARIABLE_IS_READONLY, CONTEXT_WATCH_EXPRESSIONS_EXIST, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_WATCH_ITEM_TYPE, IDebugConfiguration, IDebugService, IExpression, WATCH_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug';
import { Expression, Variable, VisualizedExpression } from 'vs/workbench/contrib/debug/common/debugModel';
const MAX_VALUE_RENDER_LENGTH_IN_VIEWLET = 1024;
@ -86,7 +86,7 @@ export class WatchExpressionsView extends ViewPane {
this.element.classList.add('debug-pane');
container.classList.add('debug-watch');
const treeContainer = renderViewTree(container);
const watchDisplayType: boolean = this.configurationService.getValue('variableDisplayType.watchView');
const watchDisplayType: boolean = this.configurationService.getValue<IDebugConfiguration>('debug').showVariableTypes;
const expressionsRenderer = this.instantiationService.createInstance(WatchExpressionsRenderer, watchDisplayType);
const linkDetector = this.instantiationService.createInstance(LinkDetector);
@ -280,12 +280,13 @@ export class WatchExpressionsRenderer extends AbstractExpressionsRenderer {
static readonly ID = 'watchexpression';
constructor(
private readonly watchDisplayType: boolean,
private watchDisplayType: boolean,
@IMenuService private readonly menuService: IMenuService,
@IContextKeyService private readonly contextKeyService: IContextKeyService,
@IDebugService debugService: IDebugService,
@IContextViewService contextViewService: IContextViewService,
@IHoverService hoverService: IHoverService,
@IConfigurationService private configurationService: IConfigurationService,
) {
super(debugService, contextViewService, hoverService);
}
@ -295,13 +296,24 @@ export class WatchExpressionsRenderer extends AbstractExpressionsRenderer {
}
public override renderElement(node: ITreeNode<IExpression, FuzzyScore>, index: number, data: IExpressionTemplateData): void {
data.elementDisposable.clear();
data.currentElement = node.element;
data.elementDisposable.add(this.configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('debug.showVariableTypes')) {
this.watchDisplayType = this.configurationService.getValue<IDebugConfiguration>('debug').showVariableTypes;
super.renderExpressionElement(node.element, node, data);
}
}));
super.renderExpressionElement(node.element, node, data);
}
protected renderExpression(expression: IExpression, data: IExpressionTemplateData, highlights: IHighlight[]): void {
let text: string;
data.type.textContent = '';
if (this.watchDisplayType && expression.type) {
text = typeof expression.value === 'string' ? `${expression.name}: ${expression.type} =` : expression.name;
text = typeof expression.value === 'string' ? `${expression.name}: ` : expression.name;
//render type
data.type.textContent = expression.type + ' =';
} else {
text = typeof expression.value === 'string' ? `${expression.name} =` : expression.name;
}

View file

@ -774,6 +774,7 @@ export interface IDebugConfiguration {
};
autoExpandLazyVariables: boolean;
enableStatusBarColor: boolean;
showVariableTypes: boolean;
}
export interface IGlobalConfig {

View file

@ -24,15 +24,16 @@ import { MockSession } from 'vs/workbench/contrib/debug/test/common/mockDebug';
import { workbenchInstantiationService } from 'vs/workbench/test/browser/workbenchTestServices';
const $ = dom.$;
function assert_variable(session: MockSession, scope: Scope, disposables: Pick<DisposableStore, "add">, linkDetector: LinkDetector, displayType: boolean) {
function assertVariable(session: MockSession, scope: Scope, disposables: Pick<DisposableStore, "add">, linkDetector: LinkDetector, displayType: boolean) {
let variable = new Variable(session, 1, scope, 2, 'foo', 'bar.foo', undefined, 0, 0, undefined, {}, 'string');
let expression = $('.');
let name = $('.');
let type = $('.');
let value = $('.');
const label = new HighlightedLabel(name);
const lazyButton = $('.');
const store = disposables.add(new DisposableStore());
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], undefined, displayType);
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], undefined, displayType);
assert.strictEqual(label.element.textContent, 'foo');
assert.strictEqual(value.textContent, '');
@ -40,39 +41,45 @@ function assert_variable(session: MockSession, scope: Scope, disposables: Pick<D
variable.value = 'hey';
expression = $('.');
name = $('.');
type = $('.');
value = $('.');
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
assert.strictEqual(value.textContent, 'hey');
assert.strictEqual(label.element.textContent, displayType ? 'foo: string =' : 'foo =');
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
assert.strictEqual(type.textContent, displayType ? 'string =' : '');
variable.value = isWindows ? 'C:\\foo.js:5' : '/foo.js:5';
expression = $('.');
name = $('.');
type = $('.');
value = $('.');
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
assert.ok(value.querySelector('a'));
assert.strictEqual(value.querySelector('a')!.textContent, variable.value);
variable = new Variable(session, 1, scope, 2, 'console', 'console', '5', 0, 0, undefined, { kind: 'virtual' });
expression = $('.');
name = $('.');
type = $('.');
value = $('.');
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
assert.strictEqual(name.className, 'virtual');
assert.strictEqual(label.element.textContent, 'console =');
assert.strictEqual(value.className, 'value number');
variable = new Variable(session, 1, scope, 2, 'xpto', 'xpto.xpto', undefined, 0, 0, undefined, {}, 'custom-type');
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
assert.strictEqual(label.element.textContent, 'xpto');
assert.strictEqual(value.textContent, '');
variable.value = '2';
expression = $('.');
name = $('.');
type = $('.');
value = $('.');
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
assert.strictEqual(value.textContent, '2');
assert.strictEqual(label.element.textContent, displayType ? 'xpto: custom-type =' : 'xpto =');
assert.strictEqual(label.element.textContent, displayType ? 'xpto: ' : 'xpto =');
assert.strictEqual(type.textContent, displayType ? 'custom-type =' : '');
label.dispose();
}
@ -149,7 +156,7 @@ suite('Debug - Base Debug View', () => {
const stackFrame = new StackFrame(thread, 1, null!, 'app.js', 'normal', range, 0, true);
const scope = new Scope(stackFrame, 1, 'local', 1, false, 10, 10);
assert_variable(session, scope, disposables, linkDetector, false);
assertVariable(session, scope, disposables, linkDetector, false);
});
@ -165,7 +172,7 @@ suite('Debug - Base Debug View', () => {
const stackFrame = new StackFrame(thread, 1, null!, 'app.js', 'normal', range, 0, true);
const scope = new Scope(stackFrame, 1, 'local', 1, false, 10, 10);
assert_variable(session, scope, disposables, linkDetector, true);
assertVariable(session, scope, disposables, linkDetector, true);
});
test('statusbar in debug mode', () => {

View file

@ -20,7 +20,7 @@ import { LinkDetector } from 'vs/workbench/contrib/debug/browser/linkDetector';
const $ = dom.$;
function assert_variable(disposables: Pick<DisposableStore, "add">, variablesRenderer: VariablesRenderer, displayType: boolean) {
function assertVariable(disposables: Pick<DisposableStore, "add">, variablesRenderer: VariablesRenderer, displayType: boolean) {
const session = new MockSession();
const thread = new Thread(session, 'mockthread', 1);
const range = {
@ -44,6 +44,7 @@ function assert_variable(disposables: Pick<DisposableStore, "add">, variablesRen
};
const expression = $('.');
const name = $('.');
const type = $('.');
const value = $('.');
const label = disposables.add(new HighlightedLabel(name));
const lazyButton = $('.');
@ -54,6 +55,7 @@ function assert_variable(disposables: Pick<DisposableStore, "add">, variablesRen
const data = {
expression,
name,
type,
value,
label,
lazyButton,
@ -69,7 +71,8 @@ function assert_variable(disposables: Pick<DisposableStore, "add">, variablesRen
node.element.value = 'xpto';
variablesRenderer.renderElement(node, 0, data);
assert.strictEqual(value.textContent, 'xpto');
assert.strictEqual(label.element.textContent, displayType ? 'foo: string =' : 'foo =');
assert.strictEqual(type.textContent, displayType ? 'string =' : '');
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
}
suite('Debug - Variable Debug View', () => {
@ -90,11 +93,11 @@ suite('Debug - Variable Debug View', () => {
test('variable expressions with display type', () => {
variablesRenderer = instantiationService.createInstance(VariablesRenderer, linkDetector, true);
assert_variable(disposables, variablesRenderer, true);
assertVariable(disposables, variablesRenderer, true);
});
test('variable expressions', () => {
variablesRenderer = instantiationService.createInstance(VariablesRenderer, linkDetector, false);
assert_variable(disposables, variablesRenderer, false);
assertVariable(disposables, variablesRenderer, false);
});
});

View file

@ -18,7 +18,7 @@ import { NullHoverService } from 'vs/platform/hover/test/browser/nullHoverServic
import { IDebugService, IViewModel } from 'vs/workbench/contrib/debug/common/debug';
const $ = dom.$;
function assert_watch_variable(disposables: Pick<DisposableStore, "add">, watchExpressionsRenderer: WatchExpressionsRenderer, displayType: boolean) {
function assertWatchVariable(disposables: Pick<DisposableStore, "add">, watchExpressionsRenderer: WatchExpressionsRenderer, displayType: boolean) {
const session = new MockSession();
const thread = new Thread(session, 'mockthread', 1);
const range = {
@ -42,6 +42,7 @@ function assert_watch_variable(disposables: Pick<DisposableStore, "add">, watchE
};
const expression = $('.');
const name = $('.');
const type = $('.');
const value = $('.');
const label = disposables.add(new HighlightedLabel(name));
const lazyButton = $('.');
@ -52,6 +53,7 @@ function assert_watch_variable(disposables: Pick<DisposableStore, "add">, watchE
const data = {
expression,
name,
type,
value,
label,
lazyButton,
@ -62,12 +64,13 @@ function assert_watch_variable(disposables: Pick<DisposableStore, "add">, watchE
};
watchExpressionsRenderer.renderElement(node, 0, data);
assert.strictEqual(value.textContent, '');
assert.strictEqual(label.element.textContent, displayType ? 'foo: string =' : 'foo =');
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
node.element.value = 'xpto';
watchExpressionsRenderer.renderElement(node, 0, data);
assert.strictEqual(value.textContent, 'xpto');
assert.strictEqual(label.element.textContent, displayType ? 'foo: string =' : 'foo =');
assert.strictEqual(type.textContent, displayType ? 'string =' : '');
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
}
suite('Debug - Watch Debug View', () => {
@ -87,11 +90,11 @@ suite('Debug - Watch Debug View', () => {
test('watch expressions with display type', () => {
watchExpressionsRenderer = instantiationService.createInstance(WatchExpressionsRenderer, true);
assert_watch_variable(disposables, watchExpressionsRenderer, true);
assertWatchVariable(disposables, watchExpressionsRenderer, true);
});
test('watch expressions', () => {
watchExpressionsRenderer = instantiationService.createInstance(WatchExpressionsRenderer, false);
assert_watch_variable(disposables, watchExpressionsRenderer, false);
assertWatchVariable(disposables, watchExpressionsRenderer, false);
});
});