util: improve inspect for (Async|Generator)Function
Use the constructor name in the output, if present. PR-URL: https://github.com/nodejs/node/pull/11210 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Evan Lucas <evanlucas@me.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Timothy Gu <timothygu99@gmail.com>
This commit is contained in:
parent
615789b723
commit
f65aa08b52
13
lib/util.js
13
lib/util.js
@ -400,11 +400,14 @@ function formatValue(ctx, value, recurseTimes) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var constructor = getConstructorOf(value);
|
||||||
|
|
||||||
// Some type of object without properties can be shortcutted.
|
// Some type of object without properties can be shortcutted.
|
||||||
if (keys.length === 0) {
|
if (keys.length === 0) {
|
||||||
if (typeof value === 'function') {
|
if (typeof value === 'function') {
|
||||||
return ctx.stylize(`[Function${value.name ? `: ${value.name}` : ''}]`,
|
const ctorName = constructor ? constructor.name : 'Function';
|
||||||
'special');
|
return ctx.stylize(
|
||||||
|
`[${ctorName}${value.name ? `: ${value.name}` : ''}]`, 'special');
|
||||||
}
|
}
|
||||||
if (isRegExp(value)) {
|
if (isRegExp(value)) {
|
||||||
return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
|
return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
|
||||||
@ -440,12 +443,11 @@ function formatValue(ctx, value, recurseTimes) {
|
|||||||
// Can't do the same for DataView because it has a non-primitive
|
// Can't do the same for DataView because it has a non-primitive
|
||||||
// .buffer property that we need to recurse for.
|
// .buffer property that we need to recurse for.
|
||||||
if (binding.isArrayBuffer(value) || binding.isSharedArrayBuffer(value)) {
|
if (binding.isArrayBuffer(value) || binding.isSharedArrayBuffer(value)) {
|
||||||
return `${getConstructorOf(value).name}` +
|
return `${constructor.name}` +
|
||||||
` { byteLength: ${formatNumber(ctx, value.byteLength)} }`;
|
` { byteLength: ${formatNumber(ctx, value.byteLength)} }`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var constructor = getConstructorOf(value);
|
|
||||||
var base = '', empty = false, braces;
|
var base = '', empty = false, braces;
|
||||||
var formatter = formatObject;
|
var formatter = formatObject;
|
||||||
|
|
||||||
@ -536,7 +538,8 @@ function formatValue(ctx, value, recurseTimes) {
|
|||||||
|
|
||||||
// Make functions say that they are functions
|
// Make functions say that they are functions
|
||||||
if (typeof value === 'function') {
|
if (typeof value === 'function') {
|
||||||
base = ` [Function${value.name ? `: ${value.name}` : ''}]`;
|
const ctorName = constructor ? constructor.name : 'Function';
|
||||||
|
base = ` [${ctorName}${value.name ? `: ${value.name}` : ''}]`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make RegExps say that they are RegExps
|
// Make RegExps say that they are RegExps
|
||||||
|
@ -9,6 +9,8 @@ assert.strictEqual(util.inspect(false), 'false');
|
|||||||
assert.strictEqual(util.inspect(''), "''");
|
assert.strictEqual(util.inspect(''), "''");
|
||||||
assert.strictEqual(util.inspect('hello'), "'hello'");
|
assert.strictEqual(util.inspect('hello'), "'hello'");
|
||||||
assert.strictEqual(util.inspect(function() {}), '[Function]');
|
assert.strictEqual(util.inspect(function() {}), '[Function]');
|
||||||
|
assert.strictEqual(util.inspect(async function() {}), '[AsyncFunction]');
|
||||||
|
assert.strictEqual(util.inspect(function*() {}), '[GeneratorFunction]');
|
||||||
assert.strictEqual(util.inspect(undefined), 'undefined');
|
assert.strictEqual(util.inspect(undefined), 'undefined');
|
||||||
assert.strictEqual(util.inspect(null), 'null');
|
assert.strictEqual(util.inspect(null), 'null');
|
||||||
assert.strictEqual(util.inspect(/foo(bar\n)?/gi), '/foo(bar\\n)?/gi');
|
assert.strictEqual(util.inspect(/foo(bar\n)?/gi), '/foo(bar\\n)?/gi');
|
||||||
@ -28,6 +30,10 @@ assert.strictEqual(util.inspect([1, [2, 3]]), '[ 1, [ 2, 3 ] ]');
|
|||||||
assert.strictEqual(util.inspect({}), '{}');
|
assert.strictEqual(util.inspect({}), '{}');
|
||||||
assert.strictEqual(util.inspect({a: 1}), '{ a: 1 }');
|
assert.strictEqual(util.inspect({a: 1}), '{ a: 1 }');
|
||||||
assert.strictEqual(util.inspect({a: function() {}}), '{ a: [Function: a] }');
|
assert.strictEqual(util.inspect({a: function() {}}), '{ a: [Function: a] }');
|
||||||
|
assert.strictEqual(util.inspect({a: async function() {}}),
|
||||||
|
'{ a: [AsyncFunction: a] }');
|
||||||
|
assert.strictEqual(util.inspect({a: function*() {}}),
|
||||||
|
'{ a: [GeneratorFunction: a] }');
|
||||||
assert.strictEqual(util.inspect({a: 1, b: 2}), '{ a: 1, b: 2 }');
|
assert.strictEqual(util.inspect({a: 1, b: 2}), '{ a: 1, b: 2 }');
|
||||||
assert.strictEqual(util.inspect({'a': {}}), '{ a: {} }');
|
assert.strictEqual(util.inspect({'a': {}}), '{ a: {} }');
|
||||||
assert.strictEqual(util.inspect({'a': {'b': 2}}), '{ a: { b: 2 } }');
|
assert.strictEqual(util.inspect({'a': {'b': 2}}), '{ a: { b: 2 } }');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user