mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 12:19:12 +00:00
Save last execution result in for REPL (#2843)
This commit is contained in:
parent
54a3b54138
commit
07c3c76d0d
2 changed files with 16 additions and 0 deletions
|
@ -25,6 +25,7 @@ function replError(...args: unknown[]): void {
|
|||
}
|
||||
|
||||
const helpMsg = [
|
||||
"_ Print last execution output",
|
||||
"exit Exit the REPL",
|
||||
"help Print this help message"
|
||||
].join("\n");
|
||||
|
@ -71,10 +72,15 @@ function isRecoverableError(e: Error): boolean {
|
|||
|
||||
// Evaluate code.
|
||||
// Returns true if code is consumed (no error/irrecoverable error).
|
||||
// Also attempts setting window._ to last valid execute output.
|
||||
// Returns false if error is recoverable
|
||||
function evaluate(code: string): boolean {
|
||||
const [result, errInfo] = core.evalContext(code);
|
||||
if (!errInfo) {
|
||||
// Try setting `window._` to the returned result
|
||||
try {
|
||||
window._ = result;
|
||||
} catch {} // Silently fail on error.
|
||||
replLog(result);
|
||||
} else if (errInfo.isCompileError && isRecoverableError(errInfo.thrown)) {
|
||||
// Recoverable compiler error
|
||||
|
@ -107,6 +113,9 @@ export async function replLoop(): Promise<void> {
|
|||
exit(exitCode);
|
||||
};
|
||||
|
||||
// Make _ a valid property on window to avoid confusing error.
|
||||
window._ = undefined;
|
||||
|
||||
while (true) {
|
||||
let code = "";
|
||||
// Top level read
|
||||
|
|
|
@ -58,6 +58,7 @@ class TestRepl(DenoTestCase):
|
|||
def test_help_command(self):
|
||||
out, err, code = self.input("help")
|
||||
expectedOut = '\n'.join([
|
||||
"_ Print last execution output",
|
||||
"exit Exit the REPL",
|
||||
"help Print this help message",
|
||||
"",
|
||||
|
@ -150,6 +151,12 @@ class TestRepl(DenoTestCase):
|
|||
self.assertTrue(err.startswith("Unable to save REPL history:"))
|
||||
self.assertEqual(code, 0)
|
||||
|
||||
def test_save_last_output(self):
|
||||
out, err, code = self.input("1", "_")
|
||||
self.assertEqual(out, '1\n1\n')
|
||||
self.assertEqual(err, '')
|
||||
self.assertEqual(code, 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_tests()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue