-
Notifications
You must be signed in to change notification settings - Fork 29.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
util: add inspect.defaultOptions #8013
Conversation
@@ -207,6 +207,23 @@ Values may supply their own custom `inspect(depth, opts)` functions, when | |||
called these receive the current `depth` in the recursive inspection, as well as | |||
the options object passed to `util.inspect()`. | |||
|
|||
### util.inspect.config([options]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps a defaultOptions
setter/getter would be better here? Something like...
util.inspect.defaultOptions = options;
// or even...
util.inspect.defaultOptions.maxArrayLength = 1000;
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, seems cleaner.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, I think it might be possible to make them plain properties. Would save some time having to compute the getter/setter names at least.
I'm generally +1 on having this, but prefer making it a getter/setter rather than a method. |
return formatValue(ctx, obj, ctx.depth); | ||
} | ||
exports.inspect = inspect; | ||
|
||
inspect.config = function (options = {}) { | ||
if (typeof options !== 'object') { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't this check for null
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, null
is an issue. How about a strict object check instead?
if (Object.prototype.toString.call(options) === '[object Object]') {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In other places in core, I believe we've just been doing options === null || typeof options !== 'object'
Thanks for review. What's the general consensus on |
Last I heard, we were still preferring |
Windows fail looks unrelated (Jenkins -- connection aborted) |
Also, not sure what's up with the linter on CI:
|
Nevermind, there's some lint errors. Fixing them. |
Updated to use the
|
Using a getter/setter would help protect against things like I'm not convinced that sealing the object is necessary but it's likely harmless. |
@jasnell Sealing for example prevents Supporting both |
@jasnell I've switched to accessors now. The solution turned out shorter than I thought and should satisfy all cases. I'd like to keep the properties sealed to prevent some misuse like deleting, and so I can |
ab34c96
to
2dcd462
Compare
set to an object containing one or more valid [`util.inspect()`][] options. | ||
Setting properties directly is also supported. | ||
|
||
Returns the current options as an object. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/options/default options
LGTM with a nit if CI is green. |
const arr = Array(101); | ||
const oldOptions = Object.assign({}, util.inspect.defaultOptions); | ||
|
||
// set single properties |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tiny nit, but could you capitalize "set" here and in the comment below.
LGTM pending CI. |
769d558
to
01ef515
Compare
CI is green except a hanging Windows box. Giving this PR a bit of time for others to weight in. |
@@ -215,7 +215,7 @@ by `util.inspect`. This is useful for functions like `console.log` or | |||
set to an object containing one or more valid [`util.inspect()`][] options. | |||
Setting properties directly is also supported. | |||
|
|||
Returns the current options as an object. | |||
Returns the current default options as an object. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this is a property and not a function, it doesn't really "return" anything, right? It just is a value. I'd be inclined to delete the line entirely. I don't think it actually adds any information. (I also think it's misleading. If you don't set it, it's undefined
and not an object.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(Whoops, the parenthetical is wrong, ignore it. Also, uh, yeah, looks like I'm commenting on an out-of-date diff. SMH. Sorry.)
LGTM with Trott's nit fixed |
Nit addressed. One more CI: https://ci.nodejs.org/job/node-test-pull-request/3589/ |
still LGTM :-) |
Noticed a bug where the REPL module called to util.inspect(obj, undefined, undefined, true) The One last CI:
|
cc911f7
to
9942438
Compare
oh, good catch @silverwind |
9942438
to
c0dcd92
Compare
Adds util.inspect.defaultOptions which allows customization of the default util.inspect options, which is useful for functions like console.log or util.format which implicitly call into util.inspect. PR-URL: nodejs#8013 Fixes: nodejs#7566 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Evan Lucas <[email protected]>
c0dcd92
to
cfbb09b
Compare
Adds util.inspect.defaultOptions which allows customization of the default util.inspect options, which is useful for functions like console.log or util.format which implicitly call into util.inspect. PR-URL: #8013 Fixes: #7566 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Evan Lucas <[email protected]>
Adds util.inspect.defaultOptions which allows customization of the default util.inspect options, which is useful for functions like console.log or util.format which implicitly call into util.inspect. PR-URL: #8013 Fixes: #7566 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Evan Lucas <[email protected]>
There was a silly typo in the error message. I |
Adds util.inspect.defaultOptions which allows customization of the default util.inspect options, which is useful for functions like console.log or util.format which implicitly call into util.inspect. PR-URL: #8013 Fixes: #7566 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Evan Lucas <[email protected]>
Notable changes: * build: zlib symbols and additional OpenSSL symbols are now exposed on Windows platforms. (Alex Hultman) #7983 and #7576 * child_process, cluster: Forked child processes and cluster workers now support stdio configuration. (Colin Ihrig) #7811 and #7838 * fs: fs.ReadStream now exposes the number of bytes it has read so far. (Linus Unnebäck) #7942 * repl: The REPL now supports editor mode. (Prince J Wesley) #7275 * util: inspect() can now be configured globally using util.inspect.defaultOptions. (Roman Reiss) #8013 Refs: #8020 PR-URL: #8070
Notable changes: * build: zlib symbols and additional OpenSSL symbols are now exposed on Windows platforms. (Alex Hultman) #7983 and #7576 * child_process, cluster: Forked child processes and cluster workers now support stdio configuration. (Colin Ihrig) #7811 and #7838 * child_process: argv[0] can now be set to arbitrary values in spawned processes. (Pat Pannuto) #7696 * fs: fs.ReadStream now exposes the number of bytes it has read so far. (Linus Unnebäck) #7942 * repl: The REPL now supports editor mode. (Prince J Wesley) #7275 * util: inspect() can now be configured globally using util.inspect.defaultOptions. (Roman Reiss) #8013 Refs: #8020 PR-URL: #8070
Notable changes: * build: zlib symbols and additional OpenSSL symbols are now exposed on Windows platforms. (Alex Hultman) #7983 and #7576 * child_process, cluster: Forked child processes and cluster workers now support stdio configuration. (Colin Ihrig) #7811 and #7838 * child_process: argv[0] can now be set to arbitrary values in spawned processes. (Pat Pannuto) #7696 * fs: fs.ReadStream now exposes the number of bytes it has read so far. (Linus Unnebäck) #7942 * repl: The REPL now supports editor mode. (Prince J Wesley) #7275 * util: inspect() can now be configured globally using util.inspect.defaultOptions. (Roman Reiss) #8013 Refs: #8020 PR-URL: #8070
Notable changes: * build: zlib symbols and additional OpenSSL symbols are now exposed on Windows platforms. (Alex Hultman) nodejs#7983 and nodejs#7576 * child_process, cluster: Forked child processes and cluster workers now support stdio configuration. (Colin Ihrig) nodejs#7811 and nodejs#7838 * child_process: argv[0] can now be set to arbitrary values in spawned processes. (Pat Pannuto) nodejs#7696 * fs: fs.ReadStream now exposes the number of bytes it has read so far. (Linus Unnebäck) nodejs#7942 * repl: The REPL now supports editor mode. (Prince J Wesley) nodejs#7275 * util: inspect() can now be configured globally using util.inspect.defaultOptions. (Roman Reiss) nodejs#8013 Refs: nodejs#8020 PR-URL: nodejs#8070
Checklist
make -j4 test
(UNIX), orvcbuild test nosign
(Windows) passesAffected core subsystem(s)
util
Description of change
Adds the
util.inspect.config()
method to allow customization of inspect options in cases whereutil.inspect()
is implicitly called by core like inconsole
orutil.format
.Fixes: #7566