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 <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Anna Henningsen 2019-02-28 11:03:37 +01:00 committed by Ruben Bridgewater
parent 6c38fcff1d
commit a0778a97e1
No known key found for this signature in database
GPG Key ID: F07496B3EB3C1762
2 changed files with 17 additions and 4 deletions

View File

@ -422,7 +422,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] === ']') {
@ -432,7 +432,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}`;

View File

@ -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'