Skip to content

Commit 0dc515e

Browse files
committed
Fix potential leading newlines when restoring running sessions
Fixes #135
1 parent 41d3eeb commit 0dc515e

File tree

3 files changed

+16
-12
lines changed

3 files changed

+16
-12
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
- Support for opened files without active workspaces
66

7+
### Fixed
8+
9+
- Sometimes leading newlines would be inserted when switching back to a file with running sessions
10+
711
# 4.0.3
812

913
### Changed

src/extension/providers/JudgeViewProvider.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
resolveVariables,
2828
showOpenRunSettingsErrorWindow,
2929
TextHandler,
30+
type WriteMode,
3031
} from "../utils/vscode";
3132
import { getLogger } from "../utils/logging";
3233
import {
@@ -654,19 +655,20 @@ export default class extends BaseViewProvider<typeof ProviderMessageSchema, Webv
654655

655656
const resendTruncatedData = (
656657
property: "stdin" | "stderr" | "stdout" | "acceptedStdout" | "interactorSecret",
658+
mode: WriteMode,
657659
handler: TextHandler
658660
) => {
659661
const data = handler.data;
660662
super._postMessage({ type: "SET", uuid, property, value: "" }); // clear out old data
661663
handler.reset();
662-
handler.write(data, "final");
664+
handler.write(data, mode);
663665
};
664666

665-
resendTruncatedData("stdin", testcase.stdin);
666-
resendTruncatedData("stderr", testcase.stderr);
667-
resendTruncatedData("stdout", testcase.stdout);
668-
resendTruncatedData("acceptedStdout", testcase.acceptedStdout);
669-
resendTruncatedData("interactorSecret", testcase.interactorSecret);
667+
resendTruncatedData("stdin", "force", testcase.stdin);
668+
resendTruncatedData("stderr", "force", testcase.stderr);
669+
resendTruncatedData("stdout", "force", testcase.stdout);
670+
resendTruncatedData("acceptedStdout", "final", testcase.acceptedStdout);
671+
resendTruncatedData("interactorSecret", "force", testcase.interactorSecret);
670672
}
671673

672674
protected override _switchToFile(file: string) {
@@ -1076,17 +1078,15 @@ export default class extends BaseViewProvider<typeof ProviderMessageSchema, Webv
10761078
file
10771079
);
10781080

1079-
newTestcase.stdin.write(testcase?.stdin ?? "", testcase ? "final" : "batch");
1080-
newTestcase.stderr.write(testcase?.stderr ?? "", testcase ? "final" : "batch");
1081-
newTestcase.stdout.write(testcase?.stdout ?? "", testcase ? "final" : "batch");
1081+
newTestcase.stdin.write(testcase?.stdin ?? "", testcase ? "force" : "batch");
1082+
newTestcase.stderr.write(testcase?.stderr ?? "", testcase ? "force" : "batch");
1083+
newTestcase.stdout.write(testcase?.stdout ?? "", testcase ? "force" : "batch");
10821084
newTestcase.acceptedStdout.write(testcase?.acceptedStdout ?? "", "final"); // force endline for empty answer comparison
10831085
// We treat interactor secrets as final because there are problems where
10841086
// the solution queries the interactor without reading any input first. The
10851087
// best assumption is to send the complete secret at the start.
10861088
newTestcase.interactorSecret.write(testcase?.interactorSecret ?? "", "final");
10871089

1088-
this._syncTestcaseState(newTestcase);
1089-
10901090
return newTestcase;
10911091
}
10921092

src/extension/providers/StressViewProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ export default class extends BaseViewProvider<typeof ProviderMessageSchema, Webv
271271
const resendTruncatedData = (handler: TextHandler) => {
272272
const data = handler.data;
273273
handler.reset();
274-
handler.write(data, "final");
274+
handler.write(data, "force");
275275
};
276276

277277
for (const state of ctx.state) {

0 commit comments

Comments
 (0)