Skip to content

Commit 1c0c472

Browse files
authored
testing: finish up coverage decorations (microsoft#202391)
* testing: finish up coverage decorations - Adds an inline decorator for empty-range branches - Adds hover information for inline coverage hovers - Fixes the editor not handling decorations that get after/before content in `updateDecorationOptions` - Adds an option `label` for branches - A bunch of other misc tweaks to get coverage looking nice - Keep decorations in sync if a user makes changes in editor * update tests
1 parent afbec20 commit 1c0c472

19 files changed

+344
-118
lines changed

build/lib/stylelint/vscode-known-variables.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,7 @@
681681
"--vscode-terminalStickyScroll-background",
682682
"--vscode-terminalStickyScrollHover-background",
683683
"--vscode-testing-coveredBackground",
684+
"--vscode-testing-coverage-lineHeight",
684685
"--vscode-testing-coveredGutterBackground",
685686
"--vscode-testing-iconErrored",
686687
"--vscode-testing-iconFailed",

src/vs/editor/browser/editorBrowser.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,11 @@ export interface ICodeEditor extends editorCommon.IEditor {
599599
* @event
600600
*/
601601
readonly onDidChangeCursorSelection: Event<ICursorSelectionChangedEvent>;
602+
/**
603+
* An event emitted when the model of this editor is about to change (e.g. from `editor.setModel()`).
604+
* @event
605+
*/
606+
readonly onWillChangeModel: Event<editorCommon.IModelChangedEvent>;
602607
/**
603608
* An event emitted when the model of this editor has changed (e.g. `editor.setModel()`).
604609
* @event

src/vs/editor/browser/widget/codeEditorWidget.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
142142
private readonly _onDidChangeConfiguration: Emitter<ConfigurationChangedEvent> = this._register(new Emitter<ConfigurationChangedEvent>({ deliveryQueue: this._deliveryQueue }));
143143
public readonly onDidChangeConfiguration: Event<ConfigurationChangedEvent> = this._onDidChangeConfiguration.event;
144144

145+
protected readonly _onWillChangeModel: Emitter<editorCommon.IModelChangedEvent> = this._register(new Emitter<editorCommon.IModelChangedEvent>({ deliveryQueue: this._deliveryQueue }));
146+
public readonly onWillChangeModel: Event<editorCommon.IModelChangedEvent> = this._onWillChangeModel.event;
147+
145148
protected readonly _onDidChangeModel: Emitter<editorCommon.IModelChangedEvent> = this._register(new Emitter<editorCommon.IModelChangedEvent>({ deliveryQueue: this._deliveryQueue }));
146149
public readonly onDidChangeModel: Event<editorCommon.IModelChangedEvent> = this._onDidChangeModel.event;
147150

@@ -502,18 +505,20 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
502505
// Current model is the new model
503506
return;
504507
}
508+
509+
const e: editorCommon.IModelChangedEvent = {
510+
oldModelUrl: this._modelData?.model.uri || null,
511+
newModelUrl: model?.uri || null
512+
};
513+
this._onWillChangeModel.fire(e);
514+
505515
const hasTextFocus = this.hasTextFocus();
506516
const detachedModel = this._detachModel();
507517
this._attachModel(model);
508518
if (hasTextFocus && this.hasModel()) {
509519
this.focus();
510520
}
511521

512-
const e: editorCommon.IModelChangedEvent = {
513-
oldModelUrl: detachedModel ? detachedModel.uri : null,
514-
newModelUrl: model ? model.uri : null
515-
};
516-
517522
this._removeDecorationTypes();
518523
this._onDidChangeModel.fire(e);
519524
this._postDetachModelCleanup(detachedModel);

src/vs/editor/common/model/textModel.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1832,8 +1832,9 @@ export class TextModel extends Disposable implements model.ITextModel, IDecorati
18321832
this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.startLineNumber);
18331833
}
18341834

1835-
if (nodeWasInOverviewRuler !== nodeIsInOverviewRuler) {
1836-
// Delete + Insert due to an overview ruler status change
1835+
const movedInOverviewRuler = nodeWasInOverviewRuler !== nodeIsInOverviewRuler;
1836+
const changedWhetherInjectedText = isOptionsInjectedText(options) !== isNodeInjectedText(node);
1837+
if (movedInOverviewRuler || changedWhetherInjectedText) {
18371838
this._decorationsTree.delete(node);
18381839
node.setOptions(options);
18391840
this._decorationsTree.insert(node);
@@ -2001,6 +2002,10 @@ function isNodeInOverviewRuler(node: IntervalNode): boolean {
20012002
return (node.options.overviewRuler && node.options.overviewRuler.color ? true : false);
20022003
}
20032004

2005+
function isOptionsInjectedText(options: ModelDecorationOptions): boolean {
2006+
return !!options.after || !!options.before;
2007+
}
2008+
20042009
function isNodeInjectedText(node: IntervalNode): boolean {
20052010
return !!node.options.after || !!node.options.before;
20062011
}

src/vs/monaco.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5644,6 +5644,11 @@ declare namespace monaco.editor {
56445644
* @event
56455645
*/
56465646
readonly onDidChangeCursorSelection: IEvent<ICursorSelectionChangedEvent>;
5647+
/**
5648+
* An event emitted when the model of this editor is about to change (e.g. from `editor.setModel()`).
5649+
* @event
5650+
*/
5651+
readonly onWillChangeModel: IEvent<IModelChangedEvent>;
56475652
/**
56485653
* An event emitted when the model of this editor has changed (e.g. `editor.setModel()`).
56495654
* @event

src/vs/workbench/api/common/extHostTypeConverters.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1995,7 +1995,7 @@ export namespace TestCoverage {
19951995
location: fromLocation(coverage.location),
19961996
type: DetailType.Statement,
19971997
branches: coverage.branches.length
1998-
? coverage.branches.map(b => ({ count: b.executionCount, location: b.location && fromLocation(b.location) }))
1998+
? coverage.branches.map(b => ({ count: b.executionCount, location: b.location && fromLocation(b.location), label: b.label }))
19991999
: undefined,
20002000
};
20012001
} else {

src/vs/workbench/api/common/extHostTypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4017,6 +4017,7 @@ export class BranchCoverage implements vscode.BranchCoverage {
40174017
constructor(
40184018
public executionCount: number,
40194019
public location: Position | Range,
4020+
public label?: string,
40204021
) { }
40214022
}
40224023

0 commit comments

Comments
 (0)