Skip to content

Commit b0d714d

Browse files
authored
Merge pull request microsoft#81392 from dgozman/on-did-change-repl-elements
Fire onDidChangeReplElements directly from ReplModel
2 parents 6d93382 + 6c1cebb commit b0d714d

3 files changed

Lines changed: 14 additions & 7 deletions

File tree

src/vs/workbench/contrib/debug/browser/debugSession.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ export class DebugSession implements IDebugSession {
8686
} else {
8787
this.repl = (this.parentSession as DebugSession).repl;
8888
}
89+
this.repl.onDidChangeElements(() => this._onDidChangeREPLElements.fire());
8990
}
9091

9192
getId(): string {
@@ -967,25 +968,19 @@ export class DebugSession implements IDebugSession {
967968

968969
removeReplExpressions(): void {
969970
this.repl.removeReplExpressions();
970-
this._onDidChangeREPLElements.fire();
971971
}
972972

973973
async addReplExpression(stackFrame: IStackFrame | undefined, name: string): Promise<void> {
974-
const expressionEvaluated = this.repl.addReplExpression(this, stackFrame, name);
975-
this._onDidChangeREPLElements.fire();
976-
await expressionEvaluated;
977-
this._onDidChangeREPLElements.fire();
974+
await this.repl.addReplExpression(this, stackFrame, name);
978975
// Evaluate all watch expressions and fetch variables again since repl evaluation might have changed some.
979976
variableSetEmitter.fire();
980977
}
981978

982979
appendToRepl(data: string | IExpression, severity: severity, source?: IReplElementSource): void {
983980
this.repl.appendToRepl(this, data, severity, source);
984-
this._onDidChangeREPLElements.fire();
985981
}
986982

987983
logToRepl(sev: severity, args: any[], frame?: { uri: URI, line: number, column: number }) {
988984
this.repl.logToRepl(this, sev, args, frame);
989-
this._onDidChangeREPLElements.fire();
990985
}
991986
}

src/vs/workbench/contrib/debug/common/replModel.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { basenameOrAuthority } from 'vs/base/common/resources';
1212
import { URI } from 'vs/base/common/uri';
1313
import { endsWith } from 'vs/base/common/strings';
1414
import { generateUuid } from 'vs/base/common/uuid';
15+
import { Emitter } from 'vs/base/common/event';
1516

1617
const MAX_REPL_LENGTH = 10000;
1718
let topReplElementCounter = 0;
@@ -108,6 +109,8 @@ export class ReplEvaluationResult extends ExpressionContainer implements IReplEl
108109

109110
export class ReplModel {
110111
private replElements: IReplElement[] = [];
112+
private readonly _onDidChangeElements = new Emitter<void>();
113+
readonly onDidChangeElements = this._onDidChangeElements.event;
111114

112115
getReplElements(): IReplElement[] {
113116
return this.replElements;
@@ -150,6 +153,7 @@ export class ReplModel {
150153
if (this.replElements.length > MAX_REPL_LENGTH) {
151154
this.replElements.splice(0, this.replElements.length - MAX_REPL_LENGTH);
152155
}
156+
this._onDidChangeElements.fire();
153157
}
154158

155159
logToRepl(session: IDebugSession, sev: severity, args: any[], frame?: { uri: URI, line: number, column: number }) {
@@ -228,6 +232,7 @@ export class ReplModel {
228232
removeReplExpressions(): void {
229233
if (this.replElements.length > 0) {
230234
this.replElements = [];
235+
this._onDidChangeElements.fire();
231236
}
232237
}
233238
}

src/vs/workbench/contrib/debug/test/browser/debugModel.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,28 +513,35 @@ suite('Debug - Model', () => {
513513
const grandChild = createMockSession(model, 'grandChild', { parentSession: child2, repl: 'mergeWithParent' });
514514
const child3 = createMockSession(model, 'child3', { parentSession: parent });
515515

516+
let parentChanges = 0;
517+
parent.onDidChangeReplElements(() => ++parentChanges);
518+
516519
parent.appendToRepl('1\n', severity.Info);
520+
assert.equal(parentChanges, 1);
517521
assert.equal(parent.getReplElements().length, 1);
518522
assert.equal(child1.getReplElements().length, 0);
519523
assert.equal(child2.getReplElements().length, 1);
520524
assert.equal(grandChild.getReplElements().length, 1);
521525
assert.equal(child3.getReplElements().length, 0);
522526

523527
grandChild.appendToRepl('1\n', severity.Info);
528+
assert.equal(parentChanges, 2);
524529
assert.equal(parent.getReplElements().length, 2);
525530
assert.equal(child1.getReplElements().length, 0);
526531
assert.equal(child2.getReplElements().length, 2);
527532
assert.equal(grandChild.getReplElements().length, 2);
528533
assert.equal(child3.getReplElements().length, 0);
529534

530535
child3.appendToRepl('1\n', severity.Info);
536+
assert.equal(parentChanges, 2);
531537
assert.equal(parent.getReplElements().length, 2);
532538
assert.equal(child1.getReplElements().length, 0);
533539
assert.equal(child2.getReplElements().length, 2);
534540
assert.equal(grandChild.getReplElements().length, 2);
535541
assert.equal(child3.getReplElements().length, 1);
536542

537543
child1.appendToRepl('1\n', severity.Info);
544+
assert.equal(parentChanges, 2);
538545
assert.equal(parent.getReplElements().length, 2);
539546
assert.equal(child1.getReplElements().length, 1);
540547
assert.equal(child2.getReplElements().length, 2);

0 commit comments

Comments
 (0)