From 4c254d62942eb6669ea67e4bfbc38cbc1ab2c4b3 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 28 Feb 2019 11:03:37 +0100 Subject: [PATCH] repl: use object writer for thrown errors This makes us use the defaults that were set for the REPL, i.e. aligns with the printing of expression completion values, and in particular enables color support. PR-URL: https://github.com/nodejs/node/pull/26361 Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Anto Aravinth Reviewed-By: James M Snell --- lib/repl.js | 4 ++-- test/parallel/test-repl-pretty-stack.js | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/repl.js b/lib/repl.js index cbf3889aba3663..70abd8b7eadbc4 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -416,7 +416,7 @@ function REPLServer(prompt, (_, pre, line) => pre + (line - 1)); } } - errStack = util.inspect(e); + errStack = self.writer(e); // Remove one line error braces to keep the old style in place. if (errStack[errStack.length - 1] === ']') { @@ -426,7 +426,7 @@ function REPLServer(prompt, } if (errStack === '') { - errStack = `Thrown: ${util.inspect(e)}\n`; + errStack = `Thrown: ${self.writer(e)}\n`; } else { const ln = errStack.endsWith('\n') ? '' : '\n'; errStack = `Thrown:\n${errStack}${ln}`; diff --git a/test/parallel/test-repl-pretty-stack.js b/test/parallel/test-repl-pretty-stack.js index e4137b84a4c2b5..4bf18fa1c2da92 100644 --- a/test/parallel/test-repl-pretty-stack.js +++ b/test/parallel/test-repl-pretty-stack.js @@ -6,7 +6,7 @@ const assert = require('assert'); const repl = require('repl'); -function run({ command, expected }) { +function run({ command, expected, ...extraREPLOptions }) { let accum = ''; const inputStream = new ArrayStream(); @@ -19,7 +19,8 @@ function run({ command, expected }) { input: inputStream, output: outputStream, terminal: false, - useColors: false + useColors: false, + ...extraREPLOptions }); r.write(`${command}\n`); @@ -44,6 +45,18 @@ const tests = [ command: 'throw new Error(\'Whoops!\')', expected: 'Thrown:\nError: Whoops!\n' }, + { + command: '(() => { const err = Error(\'Whoops!\'); ' + + 'err.foo = \'bar\'; throw err; })()', + expected: 'Thrown:\n{ Error: Whoops!\n at repl:1:22 foo: \'bar\' }\n', + }, + { + command: '(() => { const err = Error(\'Whoops!\'); ' + + 'err.foo = \'bar\'; throw err; })()', + expected: 'Thrown:\n{ Error: Whoops!\n at repl:1:22 foo: ' + + "\u001b[32m'bar'\u001b[39m }\n", + useColors: true + }, { command: 'foo = bar;', expected: 'Thrown:\nReferenceError: bar is not defined\n'