From ccdaf1272f61add807588570425b7dd94986a559 Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 31 Jan 2019 16:17:44 +0100 Subject: [PATCH] debug: dighlights in trees --- .../parts/debug/browser/baseDebugView.ts | 28 +++++++----- .../parts/debug/browser/debugActions.ts | 2 +- .../parts/debug/browser/loadedScriptsView.ts | 16 ++++--- .../debug/electron-browser/callStackView.ts | 43 +++++++++++-------- .../debug/electron-browser/debugHover.ts | 2 +- .../parts/debug/electron-browser/repl.ts | 29 ++++++++----- .../debug/electron-browser/variablesView.ts | 16 ++++--- .../electron-browser/watchExpressionsView.ts | 14 +++--- .../debug/test/browser/baseDebugView.test.ts | 18 ++++---- 9 files changed, 98 insertions(+), 70 deletions(-) diff --git a/src/vs/workbench/parts/debug/browser/baseDebugView.ts b/src/vs/workbench/parts/debug/browser/baseDebugView.ts index 3edeaf4a5cc..c073bb18876 100644 --- a/src/vs/workbench/parts/debug/browser/baseDebugView.ts +++ b/src/vs/workbench/parts/debug/browser/baseDebugView.ts @@ -14,6 +14,8 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { attachInputBoxStyler } from 'vs/platform/theme/common/styler'; import { KeyCode } from 'vs/base/common/keyCodes'; import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; +import { HighlightedLabel, IHighlight } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; +import { FuzzyScore, createMatches } from 'vs/base/common/filters'; export const MAX_VALUE_RENDER_LENGTH_IN_VIEWLET = 1024; export const twistiePixels = 20; @@ -33,6 +35,7 @@ export interface IVariableTemplateData { expression: HTMLElement; name: HTMLElement; value: HTMLElement; + label: HighlightedLabel; } export function renderViewTree(container: HTMLElement): HTMLElement { @@ -88,11 +91,16 @@ export function renderExpressionValue(expressionOrValue: IExpression | string, c } } -export function renderVariable(variable: Variable, data: IVariableTemplateData, showChanged: boolean): void { +export function renderVariable(variable: Variable, data: IVariableTemplateData, showChanged: boolean, highlights: IHighlight[]): void { if (variable.available) { - data.name.textContent = replaceWhitespace(variable.name); - data.name.title = variable.type ? variable.type : variable.name; + let text = replaceWhitespace(variable.name); + if (variable.value && typeof variable.name === 'string') { + text += ':'; + } + data.label.set(text, highlights, variable.type ? variable.type : variable.name); dom.toggleClass(data.name, 'virtual', !!variable.presentationHint && variable.presentationHint.kind === 'virtual'); + } else if (variable.value && typeof variable.name === 'string') { + data.label.set(':'); } renderExpressionValue(variable, data.value, { @@ -102,9 +110,6 @@ export function renderVariable(variable: Variable, data: IVariableTemplateData, showHover: true, colorize: true }); - if (variable.value && typeof variable.name === 'string') { - data.name.textContent += ':'; - } } export interface IInputBoxOptions { @@ -122,9 +127,10 @@ export interface IExpressionTemplateData { inputBoxContainer: HTMLElement; enableInputBox(expression: IExpression, options: IInputBoxOptions); toDispose: IDisposable[]; + label: HighlightedLabel; } -export abstract class AbstractExpressionsRenderer implements ITreeRenderer { +export abstract class AbstractExpressionsRenderer implements ITreeRenderer { constructor( @IDebugService protected debugService: IDebugService, @@ -139,6 +145,8 @@ export abstract class AbstractExpressionsRenderer implements ITreeRenderer { @@ -196,16 +204,16 @@ export abstract class AbstractExpressionsRenderer implements ITreeRenderer, index: number, data: IExpressionTemplateData): void { + renderElement(node: ITreeNode, index: number, data: IExpressionTemplateData): void { const { element } = node; if (element === this.debugService.getViewModel().getSelectedExpression()) { data.enableInputBox(element, this.getInputBoxOptions(element)); } else { - this.renderExpression(element, data); + this.renderExpression(element, data, createMatches(node.filterData)); } } - protected abstract renderExpression(expression: IExpression, data: IExpressionTemplateData): void; + protected abstract renderExpression(expression: IExpression, data: IExpressionTemplateData, highlights: IHighlight[]): void; protected abstract getInputBoxOptions(expression: IExpression): IInputBoxOptions; disposeTemplate(templateData: IExpressionTemplateData): void { diff --git a/src/vs/workbench/parts/debug/browser/debugActions.ts b/src/vs/workbench/parts/debug/browser/debugActions.ts index 2eb0c164f12..c00d6590dc7 100644 --- a/src/vs/workbench/parts/debug/browser/debugActions.ts +++ b/src/vs/workbench/parts/debug/browser/debugActions.ts @@ -803,7 +803,7 @@ export class ReverseContinueAction extends AbstractDebugAction { } export class ReplCollapseAllAction extends CollapseAction2 { - constructor(tree: AsyncDataTree, private toFocus: { focus(): void; }) { + constructor(tree: AsyncDataTree, private toFocus: { focus(): void; }) { super(tree, true, undefined); } diff --git a/src/vs/workbench/parts/debug/browser/loadedScriptsView.ts b/src/vs/workbench/parts/debug/browser/loadedScriptsView.ts index c59a90734ca..9379dbf7926 100644 --- a/src/vs/workbench/parts/debug/browser/loadedScriptsView.ts +++ b/src/vs/workbench/parts/debug/browser/loadedScriptsView.ts @@ -33,6 +33,7 @@ import { WorkbenchAsyncDataTree, IListService, TreeResourceNavigator2 } from 'vs import { IThemeService } from 'vs/platform/theme/common/themeService'; import { DebugContentProvider } from 'vs/workbench/parts/debug/browser/debugContentProvider'; import { dispose } from 'vs/base/common/lifecycle'; +import { createMatches, FuzzyScore } from 'vs/base/common/filters'; const SMART = true; @@ -363,7 +364,7 @@ export class LoadedScriptsView extends ViewletPanel { private treeContainer: HTMLElement; private loadedScriptsItemType: IContextKey; - private tree: WorkbenchAsyncDataTree; + private tree: WorkbenchAsyncDataTree; private treeLabels: ResourceLabels; private changeScheduler: RunOnceScheduler; private treeNeedsRefreshOnVisible: boolean; @@ -540,7 +541,7 @@ interface ILoadedScriptsItemTemplateData { label: IResourceLabel; } -class LoadedScriptsRenderer implements ITreeRenderer { +class LoadedScriptsRenderer implements ITreeRenderer { static readonly ID = 'lsrenderer'; @@ -555,11 +556,11 @@ class LoadedScriptsRenderer implements ITreeRenderer, index: number, data: ILoadedScriptsItemTemplateData): void { + renderElement(node: ITreeNode, index: number, data: ILoadedScriptsItemTemplateData): void { const element = node.element; @@ -589,6 +590,7 @@ class LoadedScriptsRenderer implements ITreeRenderer { +class LoadedScriptsFilter implements ITreeFilter { private filterText: string; @@ -630,7 +632,7 @@ class LoadedScriptsFilter implements ITreeFilter { this.filterText = filterText; } - filter(element: BaseTreeItem, parentVisibility: TreeVisibility): TreeFilterResult { + filter(element: BaseTreeItem, parentVisibility: TreeVisibility): TreeFilterResult { if (!this.filterText) { return TreeVisibility.Visible; @@ -645,4 +647,4 @@ class LoadedScriptsFilter implements ITreeFilter { } return TreeVisibility.Recurse; } -} \ No newline at end of file +} diff --git a/src/vs/workbench/parts/debug/electron-browser/callStackView.ts b/src/vs/workbench/parts/debug/electron-browser/callStackView.ts index a4dfb9bea3c..91e17036d60 100644 --- a/src/vs/workbench/parts/debug/electron-browser/callStackView.ts +++ b/src/vs/workbench/parts/debug/electron-browser/callStackView.ts @@ -31,6 +31,8 @@ import { ITreeRenderer, ITreeNode, ITreeContextMenuEvent, IAsyncDataSource } fro import { TreeResourceNavigator2, WorkbenchAsyncDataTree, IListService } from 'vs/platform/list/browser/listService'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { onUnexpectedError } from 'vs/base/common/errors'; +import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; +import { createMatches, FuzzyScore } from 'vs/base/common/filters'; const $ = dom.$; @@ -46,7 +48,7 @@ export class CallStackView extends ViewletPanel { private ignoreFocusStackFrameEvent: boolean; private callStackItemType: IContextKey; private dataSource: CallStackDataSource; - private tree: WorkbenchAsyncDataTree; + private tree: WorkbenchAsyncDataTree; private contributedContextMenu: IMenu; constructor( @@ -328,6 +330,7 @@ interface IThreadTemplateData { name: HTMLElement; state: HTMLElement; stateLabel: HTMLSpanElement; + label: HighlightedLabel; } interface ISessionTemplateData { @@ -335,6 +338,7 @@ interface ISessionTemplateData { name: HTMLElement; state: HTMLElement; stateLabel: HTMLSpanElement; + label: HighlightedLabel; } interface IErrorTemplateData { @@ -347,13 +351,13 @@ interface ILabelTemplateData { interface IStackFrameTemplateData { stackFrame: HTMLElement; - label: HTMLElement; file: HTMLElement; fileName: HTMLElement; lineNumber: HTMLElement; + label: HighlightedLabel; } -class SessionsRenderer implements ITreeRenderer { +class SessionsRenderer implements ITreeRenderer { static readonly ID = 'session'; get templateId(): string { @@ -366,14 +370,15 @@ class SessionsRenderer implements ITreeRenderer, index: number, data: ISessionTemplateData): void { + renderElement(element: ITreeNode, index: number, data: ISessionTemplateData): void { const session = element.element; data.session.title = nls.localize({ key: 'session', comment: ['Session is a noun'] }, "Session"); - data.name.textContent = session.getLabel(); + data.label.set(session.getLabel(), createMatches(element.filterData)); const stoppedThread = session.getAllThreads().filter(t => t.stopped).pop(); data.stateLabel.textContent = stoppedThread ? nls.localize('paused', "Paused") @@ -385,7 +390,7 @@ class SessionsRenderer implements ITreeRenderer { +class ThreadsRenderer implements ITreeRenderer { static readonly ID = 'thread'; get templateId(): string { @@ -402,10 +407,10 @@ class ThreadsRenderer implements ITreeRenderer, index: number, data: IThreadTemplateData): void { + renderElement(element: ITreeNode, index: number, data: IThreadTemplateData): void { const thread = element.element; data.thread.title = nls.localize('thread', "Thread"); - data.name.textContent = thread.name; + data.label.set(thread.name, createMatches(element.filterData)); if (thread.stopped) { data.stateLabel.textContent = thread.stoppedDetails.description || @@ -420,7 +425,7 @@ class ThreadsRenderer implements ITreeRenderer { +class StackFramesRenderer implements ITreeRenderer { static readonly ID = 'stackFrame'; constructor(@ILabelService private readonly labelService: ILabelService) { } @@ -432,16 +437,17 @@ class StackFramesRenderer implements ITreeRenderer, index: number, data: IStackFrameTemplateData): void { + renderElement(element: ITreeNode, index: number, data: IStackFrameTemplateData): void { const stackFrame = element.element; dom.toggleClass(data.stackFrame, 'disabled', !stackFrame.source || !stackFrame.source.available || stackFrame.source.presentationHint === 'deemphasize'); dom.toggleClass(data.stackFrame, 'label', stackFrame.presentationHint === 'label'); @@ -451,8 +457,7 @@ class StackFramesRenderer implements ITreeRenderer { +class ErrorsRenderer implements ITreeRenderer { static readonly ID = 'error'; get templateId(): string { @@ -484,7 +489,7 @@ class ErrorsRenderer implements ITreeRenderer return data; } - renderElement(element: ITreeNode, index: number, data: IErrorTemplateData): void { + renderElement(element: ITreeNode, index: number, data: IErrorTemplateData): void { const error = element.element; data.label.textContent = error; data.label.title = error; @@ -495,7 +500,7 @@ class ErrorsRenderer implements ITreeRenderer } } -class LoadMoreRenderer implements ITreeRenderer { +class LoadMoreRenderer implements ITreeRenderer { static readonly ID = 'loadMore'; static readonly LABEL = nls.localize('loadMoreStackFrames', "Load More Stack Frames"); @@ -510,7 +515,7 @@ class LoadMoreRenderer implements ITreeRenderer, index: number, data: ILabelTemplateData): void { + renderElement(element: ITreeNode, index: number, data: ILabelTemplateData): void { data.label.textContent = LoadMoreRenderer.LABEL; } @@ -519,7 +524,7 @@ class LoadMoreRenderer implements ITreeRenderer { +class ShowMoreRenderer implements ITreeRenderer { static readonly ID = 'showMore'; get templateId(): string { @@ -533,7 +538,7 @@ class ShowMoreRenderer implements ITreeRenderer, index: number, data: ILabelTemplateData): void { + renderElement(element: ITreeNode, index: number, data: ILabelTemplateData): void { const stackFrames = element.element; if (stackFrames.every(sf => sf.source && sf.source.origin && sf.source.origin === stackFrames[0].source.origin)) { data.label.textContent = nls.localize('showMoreAndOrigin', "Show {0} More: {1}", stackFrames.length, stackFrames[0].source.origin); diff --git a/src/vs/workbench/parts/debug/electron-browser/debugHover.ts b/src/vs/workbench/parts/debug/electron-browser/debugHover.ts index 061d9a72a1b..788457f386f 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugHover.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugHover.ts @@ -45,7 +45,7 @@ export class DebugHoverWidget implements IContentWidget { private _isVisible: boolean; private domNode: HTMLElement; - private tree: AsyncDataTree; + private tree: AsyncDataTree; private showAtPosition: Position; private highlightDecorations: string[]; private complexValueContainer: HTMLElement; diff --git a/src/vs/workbench/parts/debug/electron-browser/repl.ts b/src/vs/workbench/parts/debug/electron-browser/repl.ts index 45f77ae9975..21b493db790 100644 --- a/src/vs/workbench/parts/debug/electron-browser/repl.ts +++ b/src/vs/workbench/parts/debug/electron-browser/repl.ts @@ -66,6 +66,8 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur import { ITextResourcePropertiesService } from 'vs/editor/common/services/resourceConfiguration'; import { RunOnceScheduler } from 'vs/base/common/async'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { FuzzyScore, createMatches } from 'vs/base/common/filters'; +import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; const $ = dom.$; @@ -81,7 +83,7 @@ interface IPrivateReplService { clearRepl(): void; } -function revealLastElement(tree: WorkbenchAsyncDataTree) { +function revealLastElement(tree: WorkbenchAsyncDataTree) { tree.scrollTop = tree.scrollHeight - tree.renderHeight; } @@ -95,7 +97,7 @@ export class Repl extends Panel implements IPrivateReplService, IHistoryNavigati private static readonly REPL_INPUT_MAX_HEIGHT = 170; private history: HistoryNavigator; - private tree: WorkbenchAsyncDataTree; + private tree: WorkbenchAsyncDataTree; private replDelegate: ReplDelegate; private container: HTMLElement; private treeContainer: HTMLElement; @@ -250,7 +252,7 @@ export class Repl extends Panel implements IPrivateReplService, IHistoryNavigati getVisibleContent(): string { let text = ''; const lineDelimiter = this.textResourcePropertiesService.getEOL(this.model.uri); - const traverseAndAppend = (node: ITreeNode) => { + const traverseAndAppend = (node: ITreeNode) => { node.children.forEach(child => { text += child.element.toString() + lineDelimiter; if (!child.collapsed && child.children.length) { @@ -507,6 +509,7 @@ interface IExpressionTemplateData { output: HTMLElement; value: HTMLElement; annotation: HTMLElement; + label: HighlightedLabel; } interface ISimpleReplElementTemplateData { @@ -515,6 +518,7 @@ interface ISimpleReplElementTemplateData { source: HTMLElement; getReplElementSource(): IReplElementSource; toDispose: IDisposable[]; + label: HighlightedLabel; } interface IRawObjectReplTemplateData { @@ -523,9 +527,10 @@ interface IRawObjectReplTemplateData { name: HTMLElement; value: HTMLElement; annotation: HTMLElement; + label: HighlightedLabel; } -class ReplExpressionsRenderer implements ITreeRenderer { +class ReplExpressionsRenderer implements ITreeRenderer { static readonly ID = 'expressionRepl'; get templateId(): string { @@ -536,6 +541,7 @@ class ReplExpressionsRenderer implements ITreeRenderer, index: number, templateData: IExpressionTemplateData): void { + renderElement(element: ITreeNode, index: number, templateData: IExpressionTemplateData): void { const expression = element.element; - templateData.input.textContent = expression.name; + templateData.label.set(expression.name, createMatches(element.filterData)); renderExpressionValue(expression, templateData.value, { preserveWhitespace: !expression.hasChildren, showHover: false, @@ -562,7 +568,7 @@ class ReplExpressionsRenderer implements ITreeRenderer { +class ReplSimpleElementsRenderer implements ITreeRenderer { static readonly ID = 'simpleReplElement'; constructor( @@ -606,7 +612,7 @@ class ReplSimpleElementsRenderer implements ITreeRenderer, index: number, templateData: ISimpleReplElementTemplateData): void { + renderElement({ element }: ITreeNode, index: number, templateData: ISimpleReplElementTemplateData): void { // value dom.clearNode(templateData.value); // Reset classes to clear ansi decorations since templates are reused @@ -625,7 +631,7 @@ class ReplSimpleElementsRenderer implements ITreeRenderer { +class ReplRawObjectsRenderer implements ITreeRenderer { static readonly ID = 'rawObject'; get templateId(): string { @@ -639,14 +645,17 @@ class ReplRawObjectsRenderer implements ITreeRenderer, index: number, templateData: IRawObjectReplTemplateData): void { + renderElement(node: ITreeNode, index: number, templateData: IRawObjectReplTemplateData): void { // key + const element = node.element; + templateData.label.set(element.name ? `${element.name}:` : '', createMatches(node.filterData)); if (element.name) { templateData.name.textContent = `${element.name}:`; } else { diff --git a/src/vs/workbench/parts/debug/electron-browser/variablesView.ts b/src/vs/workbench/parts/debug/electron-browser/variablesView.ts index 9540ae417cd..b6b470d6697 100644 --- a/src/vs/workbench/parts/debug/electron-browser/variablesView.ts +++ b/src/vs/workbench/parts/debug/electron-browser/variablesView.ts @@ -28,6 +28,8 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { WorkbenchAsyncDataTree, IListService } from 'vs/platform/list/browser/listService'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { onUnexpectedError } from 'vs/base/common/errors'; +import { FuzzyScore, createMatches } from 'vs/base/common/filters'; +import { HighlightedLabel, IHighlight } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; const $ = dom.$; @@ -37,7 +39,7 @@ export class VariablesView extends ViewletPanel { private onFocusStackFrameScheduler: RunOnceScheduler; private needsRefresh: boolean; - private tree: WorkbenchAsyncDataTree; + private tree: WorkbenchAsyncDataTree; constructor( options: IViewletViewOptions, @@ -178,6 +180,7 @@ export class VariablesDataSource implements IAsyncDataSource { @@ -198,7 +201,7 @@ class VariablesDelegate implements IListVirtualDelegate { } } -class ScopesRenderer implements ITreeRenderer { +class ScopesRenderer implements ITreeRenderer { static readonly ID = 'scope'; @@ -209,12 +212,13 @@ class ScopesRenderer implements ITreeRenderer renderTemplate(container: HTMLElement): IScopeTemplateData { let data: IScopeTemplateData = Object.create(null); data.name = dom.append(container, $('.scope')); + data.label = new HighlightedLabel(data.name, false); return data; } - renderElement(element: ITreeNode, index: number, templateData: IScopeTemplateData): void { - templateData.name.textContent = element.element.name; + renderElement(element: ITreeNode, index: number, templateData: IScopeTemplateData): void { + templateData.label.set(element.element.name, createMatches(element.filterData)); } disposeTemplate(templateData: IScopeTemplateData): void { @@ -230,8 +234,8 @@ export class VariablesRenderer extends AbstractExpressionsRenderer { return VariablesRenderer.ID; } - protected renderExpression(expression: IExpression, data: IExpressionTemplateData): void { - renderVariable(expression as Variable, data, true); + protected renderExpression(expression: IExpression, data: IExpressionTemplateData, highlights: IHighlight[]): void { + renderVariable(expression as Variable, data, true, highlights); } protected getInputBoxOptions(expression: IExpression): IInputBoxOptions { diff --git a/src/vs/workbench/parts/debug/electron-browser/watchExpressionsView.ts b/src/vs/workbench/parts/debug/electron-browser/watchExpressionsView.ts index 7e461ac86a3..24c330faa89 100644 --- a/src/vs/workbench/parts/debug/electron-browser/watchExpressionsView.ts +++ b/src/vs/workbench/parts/debug/electron-browser/watchExpressionsView.ts @@ -30,6 +30,8 @@ import { IAsyncDataSource, ITreeMouseEvent, ITreeContextMenuEvent, ITreeDragAndD import { IDragAndDropData } from 'vs/base/browser/dnd'; import { onUnexpectedError } from 'vs/base/common/errors'; import { ElementsDragAndDropData } from 'vs/base/browser/ui/list/listView'; +import { FuzzyScore } from 'vs/base/common/filters'; +import { IHighlight } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; const MAX_VALUE_RENDER_LENGTH_IN_VIEWLET = 1024; @@ -37,7 +39,7 @@ export class WatchExpressionsView extends ViewletPanel { private onWatchExpressionsUpdatedScheduler: RunOnceScheduler; private needsRefresh: boolean; - private tree: WorkbenchAsyncDataTree; + private tree: WorkbenchAsyncDataTree; constructor( options: IViewletViewOptions, @@ -223,8 +225,9 @@ export class WatchExpressionsRenderer extends AbstractExpressionsRenderer { return WatchExpressionsRenderer.ID; } - protected renderExpression(expression: IExpression, data: IExpressionTemplateData): void { - data.name.textContent = expression.name; + protected renderExpression(expression: IExpression, data: IExpressionTemplateData, highlights: IHighlight[]): void { + const text = typeof expression.value === 'string' ? `${expression.name}:` : expression.name; + data.label.set(text, highlights, expression.type ? expression.type : expression.value); renderExpressionValue(expression, data.value, { showChanged: true, maxValueLength: MAX_VALUE_RENDER_LENGTH_IN_VIEWLET, @@ -232,11 +235,6 @@ export class WatchExpressionsRenderer extends AbstractExpressionsRenderer { showHover: true, colorize: true }); - data.name.title = expression.type ? expression.type : expression.value; - - if (typeof expression.value === 'string') { - data.name.textContent += ':'; - } } protected getInputBoxOptions(expression: IExpression): IInputBoxOptions { diff --git a/src/vs/workbench/parts/debug/test/browser/baseDebugView.test.ts b/src/vs/workbench/parts/debug/test/browser/baseDebugView.test.ts index 837cb46a9b6..e90ea964925 100644 --- a/src/vs/workbench/parts/debug/test/browser/baseDebugView.test.ts +++ b/src/vs/workbench/parts/debug/test/browser/baseDebugView.test.ts @@ -8,6 +8,7 @@ import { replaceWhitespace, renderExpressionValue, renderVariable } from 'vs/wor import * as dom from 'vs/base/browser/dom'; import { Expression, Variable, Scope, StackFrame, Thread } from 'vs/workbench/parts/debug/common/debugModel'; import { MockSession } from 'vs/workbench/parts/debug/test/common/mockDebug'; +import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; const $ = dom.$; suite('Debug - Base Debug View', () => { @@ -61,9 +62,10 @@ suite('Debug - Base Debug View', () => { let expression = $('.'); let name = $('.'); let value = $('.'); - renderVariable(variable, { expression, name, value }, false); + let label = new HighlightedLabel(name, false); + renderVariable(variable, { expression, name, value, label }, false, []); - assert.equal(name.textContent, 'foo'); + assert.equal(label.element.textContent, 'foo'); assert.equal(value.textContent, ''); assert.equal(value.title, ''); @@ -71,19 +73,19 @@ suite('Debug - Base Debug View', () => { expression = $('.'); name = $('.'); value = $('.'); - renderVariable(variable, { expression, name, value }, false); + renderVariable(variable, { expression, name, value, label }, false, []); assert.equal(value.textContent, 'hey'); - assert.equal(name.textContent, 'foo:'); - assert.equal(name.title, 'string'); + assert.equal(label.element.textContent, 'foo:'); + assert.equal(label.element.title, 'string'); variable = new Variable(session, scope, 2, 'console', 'console', '5', 0, 0, { kind: 'virtual' }); expression = $('.'); name = $('.'); value = $('.'); - renderVariable(variable, { expression, name, value }, false); + renderVariable(variable, { expression, name, value, label }, false, []); assert.equal(name.className, 'virtual'); - assert.equal(name.textContent, 'console:'); - assert.equal(name.title, 'console'); + assert.equal(label.element.textContent, 'console:'); + assert.equal(label.element.title, 'console'); assert.equal(value.className, 'value number'); }); }); -- GitLab