util: improve error property inspection
This makes sure that errors that contain extra properties show those properties on a separate line. PR-URL: https://github.com/nodejs/node/pull/26984 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
14b2db0145
commit
f7c96856f9
@ -1342,7 +1342,7 @@ function formatProperty(ctx, value, recurseTimes, key, type) {
|
|||||||
return `${name}:${extra}${str}`;
|
return `${name}:${extra}${str}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function isBelowBreakLength(ctx, output, start) {
|
function isBelowBreakLength(ctx, output, start, base) {
|
||||||
// Each entry is separated by at least a comma. Thus, we start with a total
|
// Each entry is separated by at least a comma. Thus, we start with a total
|
||||||
// length of at least `output.length`. In addition, some cases have a
|
// length of at least `output.length`. In addition, some cases have a
|
||||||
// whitespace in-between each other that is added to the total as well.
|
// whitespace in-between each other that is added to the total as well.
|
||||||
@ -1359,7 +1359,8 @@ function isBelowBreakLength(ctx, output, start) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
// Do not line up properties on the same line if `base` contains line breaks.
|
||||||
|
return base === '' || !base.includes('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
function reduceToSingleString(ctx, output, base, braces, combine = false) {
|
function reduceToSingleString(ctx, output, base, braces, combine = false) {
|
||||||
@ -1370,7 +1371,7 @@ function reduceToSingleString(ctx, output, base, braces, combine = false) {
|
|||||||
// that may reduce `breakLength`.
|
// that may reduce `breakLength`.
|
||||||
const start = output.length + ctx.indentationLvl +
|
const start = output.length + ctx.indentationLvl +
|
||||||
braces[0].length + base.length + 10;
|
braces[0].length + base.length + 10;
|
||||||
if (isBelowBreakLength(ctx, output, start)) {
|
if (isBelowBreakLength(ctx, output, start, base)) {
|
||||||
return `${base ? `${base} ` : ''}${braces[0]} ${join(output, ', ')} ` +
|
return `${base ? `${base} ` : ''}${braces[0]} ${join(output, ', ')} ` +
|
||||||
braces[1];
|
braces[1];
|
||||||
}
|
}
|
||||||
@ -1382,7 +1383,7 @@ function reduceToSingleString(ctx, output, base, braces, combine = false) {
|
|||||||
}
|
}
|
||||||
// Line up all entries on a single line in case the entries do not exceed
|
// Line up all entries on a single line in case the entries do not exceed
|
||||||
// `breakLength`.
|
// `breakLength`.
|
||||||
if (isBelowBreakLength(ctx, output, 0)) {
|
if (isBelowBreakLength(ctx, output, 0, base)) {
|
||||||
return `${braces[0]}${base ? ` ${base}` : ''} ${join(output, ', ')} ` +
|
return `${braces[0]}${base ? ` ${base}` : ''} ${join(output, ', ')} ` +
|
||||||
braces[1];
|
braces[1];
|
||||||
}
|
}
|
||||||
|
@ -48,12 +48,12 @@ const tests = [
|
|||||||
{
|
{
|
||||||
command: '(() => { const err = Error(\'Whoops!\'); ' +
|
command: '(() => { const err = Error(\'Whoops!\'); ' +
|
||||||
'err.foo = \'bar\'; throw err; })()',
|
'err.foo = \'bar\'; throw err; })()',
|
||||||
expected: 'Thrown:\n{ Error: Whoops!\n at repl:1:22 foo: \'bar\' }\n',
|
expected: 'Thrown:\n{ Error: Whoops!\n at repl:1:22\n foo: \'bar\' }\n',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: '(() => { const err = Error(\'Whoops!\'); ' +
|
command: '(() => { const err = Error(\'Whoops!\'); ' +
|
||||||
'err.foo = \'bar\'; throw err; })()',
|
'err.foo = \'bar\'; throw err; })()',
|
||||||
expected: 'Thrown:\n{ Error: Whoops!\n at repl:1:22 foo: ' +
|
expected: 'Thrown:\n{ Error: Whoops!\n at repl:1:22\n foo: ' +
|
||||||
"\u001b[32m'bar'\u001b[39m }\n",
|
"\u001b[32m'bar'\u001b[39m }\n",
|
||||||
useColors: true
|
useColors: true
|
||||||
},
|
},
|
||||||
|
@ -540,7 +540,9 @@ const errorTests = [
|
|||||||
/^ at .*/,
|
/^ at .*/,
|
||||||
/^ at .*/,
|
/^ at .*/,
|
||||||
/^ at .*/,
|
/^ at .*/,
|
||||||
/^ at .*/
|
/^ at .*/,
|
||||||
|
" code: 'MODULE_NOT_FOUND',",
|
||||||
|
" requireStack: [ '<repl>' ] }"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
// REPL should handle quotes within regexp literal in multiline mode
|
// REPL should handle quotes within regexp literal in multiline mode
|
||||||
|
@ -578,7 +578,7 @@ assert.strictEqual(util.inspect(-5e-324), '-5e-324');
|
|||||||
);
|
);
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
util.inspect(err2, { compact: true }),
|
util.inspect(err2, { compact: true }),
|
||||||
'{ [Error: foo\nbar] bar: true }'
|
'{ [Error: foo\nbar]\n bar: true }'
|
||||||
);
|
);
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
util.inspect(err, { compact: true, breakLength: 5 }),
|
util.inspect(err, { compact: true, breakLength: 5 }),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user