Skip to content

Commit

Permalink
Preserve Multiple Events at End of Life
Browse files Browse the repository at this point in the history
Work towards a solution for #56
  • Loading branch information
swissmanu committed May 24, 2021
1 parent 11eba89 commit e1ec7b1
Showing 1 changed file with 35 additions and 12 deletions.
47 changes: 35 additions & 12 deletions src/ui/decoration/liveLogDecorationProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ type Line = number;
type Character = number;

export default class LiveLogDecorationProvider extends DocumentDecorationProvider {
private readonly lastLogForLine: Map<Line, Map<Character, Telemetry.TelemetryEvent>> = new Map();
private readonly lastLogForLine: Map<Line, Map<Character, ReadonlyArray<Telemetry.TelemetryEvent>>> = new Map();

private readonly onDidChangeActiveSessionDisposable: IDisposable;
private readonly onDidTerminateSessionDisposable: IDisposable;
Expand All @@ -35,6 +35,8 @@ export default class LiveLogDecorationProvider extends DocumentDecorationProvide
};

private onDidTerminateSession = (): void => {
this.lastLogForLine.clear();

const hideLiveLog: boolean = workspace.getConfiguration().get(Configuration.HideLiveLogWhenStoppingDebugger, true);
if (hideLiveLog) {
this.setDecorations([]);
Expand All @@ -48,9 +50,18 @@ export default class LiveLogDecorationProvider extends DocumentDecorationProvide

const line = this.lastLogForLine.get(event.source.line);
if (line) {
line.set(event.source.character, event);
if (shouldMemoizePreviousEvent(event)) {
const prevEvents = line.get(event.source.character);
if (prevEvents) {
line.set(event.source.character, [...prevEvents, event]);
} else {
line.set(event.source.character, [event]);
}
} else {
line.set(event.source.character, [event]);
}
} else {
this.lastLogForLine.set(event.source.line, new Map([[event.source.character, event]]));
this.lastLogForLine.set(event.source.line, new Map([[event.source.character, [event]]]));
}

this.updateDecorations();
Expand All @@ -67,16 +78,20 @@ export default class LiveLogDecorationProvider extends DocumentDecorationProvide
const decorationOptions = [...this.lastLogForLine.entries()].map(([line, characters]) => {
const contentText = [...characters.entries()]
.sort(([a], [b]) => a - b)
.map(([, event]) =>
Telemetry.match({
Completed: () => 'Completed',
Error: () => 'Error',
Next: ({ data: { value } }) => `Next: ${value}`,
Subscribe: () => 'Subscribe',
Unsubscribe: () => 'Unsubscribe',
})(event)
.map(([, events]) =>
events
.map((event) =>
Telemetry.match({
Completed: () => 'Completed',
Error: () => 'Error',
Next: ({ data: { value } }) => `Next: ${value}`,
Subscribe: () => 'Subscribe',
Unsubscribe: () => 'Unsubscribe',
})(event)
)
.join(', ')
)
.join(', ');
.join(' - ');

return {
renderOptions: { after: { contentText } },
Expand Down Expand Up @@ -104,3 +119,11 @@ const liveLogDecorationType = window.createTextEditorDecorationType({
},
rangeBehavior: DecorationRangeBehavior.ClosedClosed,
});

const shouldMemoizePreviousEvent = Telemetry.match({
Completed: () => true,
Error: () => true,
Next: () => false,
Subscribe: () => false,
Unsubscribe: () => true,
});

0 comments on commit e1ec7b1

Please sign in to comment.