Skip to content

Commit be4e56f

Browse files
benibenjosortega
authored andcommitted
Improve debugging for NES observables (#263460)
improve debugging for NES observables
1 parent 16c9fa2 commit be4e56f

File tree

12 files changed

+45
-42
lines changed

12 files changed

+45
-42
lines changed

src/vs/editor/common/core/2d/rect.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,11 @@ export class Rect {
5757
public readonly right: number,
5858
public readonly bottom: number,
5959
) {
60-
if (left > right || top > bottom) {
61-
throw new BugIndicatingError('Invalid arguments');
60+
if (left > right) {
61+
throw new BugIndicatingError('Invalid arguments: Horizontally offset by ' + (left - right));
62+
}
63+
if (top > bottom) {
64+
throw new BugIndicatingError('Invalid arguments: Vertically offset by ' + (top - bottom));
6265
}
6366
}
6467

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export class GutterIndicatorMenuContent {
5252
return {
5353
title: options.title,
5454
icon: options.icon,
55-
keybinding: typeof options.commandId === 'string' ? this._getKeybinding(options.commandArgs ? undefined : options.commandId) : derived(reader => typeof options.commandId === 'string' ? undefined : this._getKeybinding(options.commandArgs ? undefined : options.commandId.read(reader)).read(reader)),
55+
keybinding: typeof options.commandId === 'string' ? this._getKeybinding(options.commandArgs ? undefined : options.commandId) : derived(this, reader => typeof options.commandId === 'string' ? undefined : this._getKeybinding(options.commandArgs ? undefined : options.commandId.read(reader)).read(reader)),
5656
isActive: activeElement.map(v => v === options.id),
5757
onHoverChange: v => activeElement.set(v ? options.id : undefined, undefined),
5858
onAction: () => {
@@ -176,7 +176,7 @@ function option(props: {
176176
onHoverChange?: (isHovered: boolean) => void;
177177
onAction?: () => void;
178178
}) {
179-
return derived((_reader) => n.div({
179+
return derived({ name: 'inlineEdits.option' }, (_reader) => n.div({
180180
class: ['monaco-menu-option', props.isActive?.map(v => v && 'active')],
181181
onmouseenter: () => props.onHoverChange?.(true),
182182
onmouseleave: () => props.onHoverChange?.(false),
@@ -219,7 +219,7 @@ function option(props: {
219219

220220
// TODO: make this observable
221221
function actionBar(actions: IAction[], options: IActionBarOptions) {
222-
return derived((_reader) => n.div({
222+
return derived({ name: 'inlineEdits.actionBar' }, (_reader) => n.div({
223223
class: ['action-widget-action-bar'],
224224
style: {
225225
padding: '0 10px',

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export class InlineEditsGutterIndicator extends Disposable {
8888
});
8989

9090
this._originalRangeObs = mapOutFalsy(this._originalRange);
91-
this._state = derived(reader => {
91+
this._state = derived(this, reader => {
9292
const range = this._originalRangeObs.read(reader);
9393
if (!range) { return undefined; }
9494
return {
@@ -219,7 +219,7 @@ export class InlineEditsGutterIndicator extends Disposable {
219219

220220
// The icon which will be rendered in the pill
221221
const iconNoneDocked = this._tabAction.map(action => action === InlineEditTabAction.Accept ? Codicon.keyboardTab : Codicon.arrowRight);
222-
const iconDocked = derived(reader => {
222+
const iconDocked = derived(this, reader => {
223223
if (this._isHoveredOverIconDebounced.read(reader) || this._isHoveredOverInlineEditDebounced.read(reader)) {
224224
return Codicon.check;
225225
}

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/debugVisualization.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export function debugView(value: unknown, reader: IReader): void {
104104
}
105105

106106
function debugReadDisposable(d: IDisposable, reader: IReader): void {
107-
derived((_reader) => {
107+
derived({ name: 'debugReadDisposable' }, (_reader) => {
108108
_reader.store.add(d);
109109
return undefined;
110110
}).read(reader);

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export class InlineEditsCustomView extends Disposable implements IInlineEditsVie
7171

7272
const view = state.map(s => s ? this.getRendering(s, styles) : undefined);
7373

74-
this.minEditorScrollHeight = derived(reader => {
74+
this.minEditorScrollHeight = derived(this, reader => {
7575
const s = state.read(reader);
7676
if (!s) {
7777
return 0;
@@ -129,7 +129,7 @@ export class InlineEditsCustomView extends Disposable implements IInlineEditsVie
129129

130130
private getState(displayLocation: InlineCompletionDisplayLocation): { rect: IObservable<Rect>; label: string; kind: InlineCompletionDisplayLocationKind } {
131131

132-
const contentState = derived((reader) => {
132+
const contentState = derived(this, (reader) => {
133133
const startLineNumber = displayLocation.range.startLineNumber;
134134
const endLineNumber = displayLocation.range.endLineNumber;
135135
const startColumn = displayLocation.range.startColumn;
@@ -156,7 +156,7 @@ export class InlineEditsCustomView extends Disposable implements IInlineEditsVie
156156
// only check viewport once in the beginning when rendering the view
157157
const fitsInsideViewport = this.fitsInsideViewport(new LineRange(startLineNumber, endLineNumber + 1), displayLocation.label, undefined);
158158

159-
const rect = derived((reader) => {
159+
const rect = derived(this, reader => {
160160
const w = this._editorObs.getOption(EditorOption.fontInfo).read(reader).typicalHalfwidthCharacterWidth;
161161

162162
const { lineWidth, lineWidthBelow, lineWidthAbove, startContentLeftOffset, endContentLeftOffset } = contentState.read(reader);

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export class InlineEditsDeletionView extends Disposable implements IInlineEditsV
7373
domNode: this._nonOverflowView.element,
7474
position: constObservable(null),
7575
allowEditorOverflow: false,
76-
minContentWidthInPx: derived(reader => {
76+
minContentWidthInPx: derived(this, reader => {
7777
const info = this._editorLayoutInfo.read(reader);
7878
if (info === null) { return 0; }
7979
return info.codeRect.width;
@@ -98,7 +98,7 @@ export class InlineEditsDeletionView extends Disposable implements IInlineEditsV
9898
});
9999
}).map((v, r) => v.read(r));
100100

101-
private readonly _maxPrefixTrim = derived(reader => {
101+
private readonly _maxPrefixTrim = derived(this, reader => {
102102
const state = this._uiState.read(reader);
103103
if (!state) {
104104
return { prefixTrim: 0, prefixLeftOffset: 0 };
@@ -142,7 +142,7 @@ export class InlineEditsDeletionView extends Disposable implements IInlineEditsV
142142

143143
private readonly _originalOverlay = n.div({
144144
style: { pointerEvents: 'none', }
145-
}, derived(reader => {
145+
}, derived(this, reader => {
146146
const layoutInfoObs = mapOutFalsy(this._editorLayoutInfo).read(reader);
147147
if (!layoutInfoObs) { return undefined; }
148148

@@ -155,7 +155,7 @@ export class InlineEditsDeletionView extends Disposable implements IInlineEditsV
155155
layoutInfo.codeRect.bottom
156156
));
157157

158-
const overlayRect = derived(reader => {
158+
const overlayRect = derived(this, reader => {
159159
const rect = layoutInfoObs.read(reader).codeRect;
160160
const overlayHider = overlayhider.read(reader);
161161
return rect.intersectHorizontal(new OffsetRange(overlayHider.left, Number.MAX_SAFE_INTEGER));

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export class InlineEditsInsertionView extends Disposable implements IInlineEdits
7878
return { topOffset: linesTop * lineHeight, bottomOffset: linesBottom * lineHeight, linesTop, linesBottom };
7979
});
8080

81-
private readonly _maxPrefixTrim = derived(reader => {
81+
private readonly _maxPrefixTrim = derived(this, reader => {
8282
const state = this._state.read(reader);
8383
if (!state) {
8484
return { prefixLeftOffset: 0, prefixTrim: 0 };
@@ -163,7 +163,7 @@ export class InlineEditsInsertionView extends Disposable implements IInlineEdits
163163
domNode: this._view.element,
164164
position: constObservable(null),
165165
allowEditorOverflow: false,
166-
minContentWidthInPx: derived(reader => {
166+
minContentWidthInPx: derived(this, reader => {
167167
const info = this._overlayLayout.read(reader);
168168
if (info === null) { return 0; }
169169
return info.minContentWidthRequired;
@@ -253,7 +253,7 @@ export class InlineEditsInsertionView extends Disposable implements IInlineEdits
253253

254254
private readonly _modifiedOverlay = n.div({
255255
style: { pointerEvents: 'none', }
256-
}, derived(reader => {
256+
}, derived(this, reader => {
257257
const overlayLayoutObs = mapOutFalsy(this._overlayLayout).read(reader);
258258
if (!overlayLayoutObs) { return undefined; }
259259

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export class InlineEditsLineReplacementView extends Disposable implements IInlin
6565
this._onDidClick = this._register(new Emitter<IMouseEvent>());
6666
this.onDidClick = this._onDidClick.event;
6767
this._maxPrefixTrim = this._edit.map(e => e ? getPrefixTrim(e.replacements.flatMap(r => [r.originalRange, r.modifiedRange]), e.originalRange, e.modifiedLines, this._editor.editor) : undefined);
68-
this._modifiedLineElements = derived(reader => {
68+
this._modifiedLineElements = derived(this, reader => {
6969
const lines = [];
7070
let requiredWidth = 0;
7171

@@ -190,7 +190,7 @@ export class InlineEditsLineReplacementView extends Disposable implements IInlin
190190
const viewZoneLineNumber = edit.originalRange.endLineNumberExclusive;
191191
return { height: viewZoneHeight, lineNumber: viewZoneLineNumber };
192192
});
193-
this.minEditorScrollHeight = derived(reader => {
193+
this.minEditorScrollHeight = derived(this, reader => {
194194
const layout = mapOutFalsy(this._layout).read(reader);
195195
if (!layout || this._viewZoneInfo.read(reader) !== undefined) {
196196
return 0;
@@ -200,7 +200,7 @@ export class InlineEditsLineReplacementView extends Disposable implements IInlin
200200
this._div = n.div({
201201
class: 'line-replacement',
202202
}, [
203-
derived(reader => {
203+
derived(this, reader => {
204204
const layout = mapOutFalsy(this._layout).read(reader);
205205
const modifiedLineElements = this._modifiedLineElements.read(reader);
206206
if (!layout || !modifiedLineElements) {
@@ -318,7 +318,7 @@ export class InlineEditsLineReplacementView extends Disposable implements IInlin
318318

319319
this._register(this._editor.createOverlayWidget({
320320
domNode: this._div.element,
321-
minContentWidthInPx: derived(reader => {
321+
minContentWidthInPx: derived(this, reader => {
322322
return this._layout.read(reader)?.minContentWidthRequired ?? 0;
323323
}),
324324
position: constObservable({ preference: { top: 0, left: 0 } }),

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ export class InlineEditsSideBySideView extends Disposable implements IInlineEdit
139139
));
140140
this._previewEditorObs = observableCodeEditor(this.previewEditor);
141141
this._activeViewZones = [];
142-
this._updatePreviewEditor = derived(reader => {
142+
this._updatePreviewEditor = derived(this, reader => {
143143
this._editorContainer.readEffect(reader);
144144
this._previewEditorObs.model.read(reader); // update when the model is set
145145

@@ -325,7 +325,7 @@ export class InlineEditsSideBySideView extends Disposable implements IInlineEdit
325325
});
326326
this._stickyScrollController = StickyScrollController.get(this._editorObs.editor);
327327
this._stickyScrollHeight = this._stickyScrollController ? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight) : constObservable(0);
328-
this._shouldOverflow = derived(reader => {
328+
this._shouldOverflow = derived(this, reader => {
329329
if (!ENABLE_OVERFLOW) {
330330
return false;
331331
}
@@ -353,7 +353,7 @@ export class InlineEditsSideBySideView extends Disposable implements IInlineEdit
353353
}, [
354354
n.svgElem('path', {
355355
class: 'rightOfModifiedBackgroundCoverUp',
356-
d: derived(reader => {
356+
d: derived(this, reader => {
357357
const layoutInfo = this._previewEditorLayoutInfo.read(reader);
358358
if (!layoutInfo) {
359359
return undefined;
@@ -377,7 +377,7 @@ export class InlineEditsSideBySideView extends Disposable implements IInlineEdit
377377
]).keepUpdated(this._store);
378378
this._originalOverlay = n.div({
379379
style: { pointerEvents: 'none', display: this._previewEditorLayoutInfo.map(layoutInfo => layoutInfo?.isInsertion ? 'none' : 'block') },
380-
}, derived(reader => {
380+
}, derived(this, reader => {
381381
const layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);
382382
if (!layoutInfoObs) { return undefined; }
383383

@@ -468,7 +468,7 @@ export class InlineEditsSideBySideView extends Disposable implements IInlineEdit
468468
})).keepUpdated(this._store);
469469
this._modifiedOverlay = n.div({
470470
style: { pointerEvents: 'none', }
471-
}, derived(reader => {
471+
}, derived(this, reader => {
472472
const layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);
473473
if (!layoutInfoObs) { return undefined; }
474474

@@ -482,7 +482,7 @@ export class InlineEditsSideBySideView extends Disposable implements IInlineEdit
482482
const overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.editRect.withMargin(0, BORDER_WIDTH));
483483
const separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, separatorWidth, separatorWidth, 0));
484484

485-
const insertionRect = derived(reader => {
485+
const insertionRect = derived(this, reader => {
486486
const overlay = overlayRect.read(reader);
487487
const layoutinfo = layoutInfoObs.read(reader);
488488
if (!layoutinfo.isInsertion || layoutinfo.contentLeft >= overlay.left) {
@@ -540,7 +540,7 @@ export class InlineEditsSideBySideView extends Disposable implements IInlineEdit
540540
domNode: this._nonOverflowView.element,
541541
position: constObservable(null),
542542
allowEditorOverflow: false,
543-
minContentWidthInPx: derived(reader => {
543+
minContentWidthInPx: derived(this, reader => {
544544
const x = this._previewEditorLayoutInfo.read(reader)?.maxContentWidth;
545545
if (x === undefined) { return 0; }
546546
return x;

src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordInsertView.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export class InlineEditsWordInsertView extends Disposable implements IInlineEdit
6868
this._div = n.div({
6969
class: 'word-insert',
7070
}, [
71-
derived(reader => {
71+
derived(this, reader => {
7272
const layout = mapOutFalsy(this._layout).read(reader);
7373
if (!layout) {
7474
return [];
@@ -117,8 +117,8 @@ export class InlineEditsWordInsertView extends Disposable implements IInlineEdit
117117
fill: 'none',
118118
style: {
119119
position: 'absolute',
120-
left: derived(reader => layout.read(reader).center.x - 9),
121-
top: derived(reader => layout.read(reader).center.y + 4),
120+
left: derived(this, reader => layout.read(reader).center.x - 9),
121+
top: derived(this, reader => layout.read(reader).center.y + 4),
122122
transform: 'scale(1.4, 1.4)',
123123
}
124124
}, [

0 commit comments

Comments
 (0)