Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 38bc5fb

Browse filesBrowse files
BridgeARMylesBorins
authored andcommitted
util: remove erroneous whitespace
When inspecting nested objects some times a whitespace was added at the end of a line. This fixes this erroneous space. Besides that the `breakLength` was not followed if a single property was longer than the breakLength. It will now break a single property into the key and value in such cases. PR-URL: #20802 Refs: #20253 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
1 parent 5ce85a7 commit 38bc5fb
Copy full SHA for 38bc5fb

File tree

Expand file treeCollapse file tree

4 files changed

+56
-52
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

4 files changed

+56
-52
lines changed
Open diff view settings
Collapse file

‎lib/util.js‎

Copy file name to clipboardExpand all lines: lib/util.js
+42-40Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ function getPrefix(constructor, tag) {
416416
return '';
417417
}
418418

419-
function formatValue(ctx, value, recurseTimes, ln) {
419+
function formatValue(ctx, value, recurseTimes) {
420420
// Primitive types cannot have properties
421421
if (typeof value !== 'object' && typeof value !== 'function') {
422422
return formatPrimitive(ctx.stylize, value, ctx);
@@ -592,7 +592,7 @@ function formatValue(ctx, value, recurseTimes, ln) {
592592
return ctx.stylize(dateToISOString.call(value), 'date');
593593
}
594594
// Make dates with properties first say the date
595-
base = `${dateToISOString.call(value)}`;
595+
base = dateToISOString.call(value);
596596
} else if (isError(value)) {
597597
// Make error with message first say the error
598598
base = formatError(value);
@@ -693,7 +693,7 @@ function formatValue(ctx, value, recurseTimes, ln) {
693693
}
694694
ctx.seen.pop();
695695

696-
return reduceToSingleString(ctx, output, base, braces, ln);
696+
return reduceToSingleString(ctx, output, base, braces);
697697
}
698698

699699
function formatNumber(fn, value) {
@@ -768,7 +768,23 @@ function formatNamespaceObject(ctx, value, recurseTimes, keys) {
768768
const len = keys.length;
769769
const output = new Array(len);
770770
for (var i = 0; i < len; i++) {
771-
output[i] = formatNamespaceProperty(ctx, value, recurseTimes, keys[i]);
771+
try {
772+
output[i] = formatProperty(ctx, value, recurseTimes, keys[i], 0);
773+
} catch (err) {
774+
if (!(err instanceof ReferenceError)) {
775+
throw err;
776+
}
777+
// Use the existing functionality. This makes sure the indentation and
778+
// line breaks are always correct. Otherwise it is very difficult to keep
779+
// this aligned, even though this is a hacky way of dealing with this.
780+
const tmp = { [keys[i]]: '' };
781+
output[i] = formatProperty(ctx, tmp, recurseTimes, keys[i], 0);
782+
const pos = output[i].lastIndexOf(' ');
783+
// We have to find the last whitespace and have to replace that value as
784+
// it will be visualized as a regular string.
785+
output[i] = output[i].slice(0, pos + 1) +
786+
ctx.stylize('<uninitialized>', 'special');
787+
}
772788
}
773789
return output;
774790
}
@@ -996,42 +1012,21 @@ function formatPromise(ctx, value, recurseTimes, keys) {
9961012
return output;
9971013
}
9981014

999-
function formatKey(ctx, key, enumerable) {
1000-
if (typeof key === 'symbol') {
1001-
return `[${ctx.stylize(key.toString(), 'symbol')}]`;
1002-
}
1003-
if (enumerable === false) {
1004-
return `[${key}]`;
1005-
}
1006-
if (keyStrRegExp.test(key)) {
1007-
return ctx.stylize(key, 'name');
1008-
}
1009-
return ctx.stylize(strEscape(key), 'string');
1010-
}
1011-
1012-
function formatNamespaceProperty(ctx, ns, recurseTimes, key) {
1013-
let value;
1014-
try {
1015-
value = formatValue(ctx, ns[key], recurseTimes, true);
1016-
} catch (err) {
1017-
if (err instanceof ReferenceError) {
1018-
value = ctx.stylize('<uninitialized>', 'special');
1019-
} else {
1020-
throw err;
1021-
}
1022-
}
1023-
1024-
return `${formatKey(ctx, key)}: ${value}`;
1025-
}
1026-
10271015
function formatProperty(ctx, value, recurseTimes, key, array) {
1028-
let str;
1016+
let name, str;
1017+
let extra = ' ';
10291018
const desc = Object.getOwnPropertyDescriptor(value, key) ||
10301019
{ value: value[key], enumerable: true };
10311020
if (desc.value !== undefined) {
10321021
const diff = array !== 0 || ctx.compact === false ? 2 : 3;
10331022
ctx.indentationLvl += diff;
1034-
str = formatValue(ctx, desc.value, recurseTimes, array === 0);
1023+
str = formatValue(ctx, desc.value, recurseTimes);
1024+
if (diff === 3) {
1025+
const len = ctx.colors ? removeColors(str).length : str.length;
1026+
if (ctx.breakLength < len) {
1027+
extra = `\n${' '.repeat(ctx.indentationLvl)}`;
1028+
}
1029+
}
10351030
ctx.indentationLvl -= diff;
10361031
} else if (desc.get !== undefined) {
10371032
if (desc.set !== undefined) {
@@ -1047,11 +1042,19 @@ function formatProperty(ctx, value, recurseTimes, key, array) {
10471042
if (array === 1) {
10481043
return str;
10491044
}
1050-
1051-
return `${formatKey(ctx, key, desc.enumerable)}: ${str}`;
1045+
if (typeof key === 'symbol') {
1046+
name = `[${ctx.stylize(key.toString(), 'symbol')}]`;
1047+
} else if (desc.enumerable === false) {
1048+
name = `[${key}]`;
1049+
} else if (keyStrRegExp.test(key)) {
1050+
name = ctx.stylize(key, 'name');
1051+
} else {
1052+
name = ctx.stylize(strEscape(key), 'string');
1053+
}
1054+
return `${name}:${extra}${str}`;
10521055
}
10531056

1054-
function reduceToSingleString(ctx, output, base, braces, addLn) {
1057+
function reduceToSingleString(ctx, output, base, braces) {
10551058
const breakLength = ctx.breakLength;
10561059
let i = 0;
10571060
if (ctx.compact === false) {
@@ -1080,11 +1083,10 @@ function reduceToSingleString(ctx, output, base, braces, addLn) {
10801083
// we need to force the first item to be on the next line or the
10811084
// items will not line up correctly.
10821085
const indentation = ' '.repeat(ctx.indentationLvl);
1083-
const extraLn = addLn === true ? `\n${indentation}` : '';
10841086
const ln = base === '' && braces[0].length === 1 ?
1085-
' ' : `${base ? ` ${base}` : base}\n${indentation} `;
1087+
' ' : `${base ? ` ${base}` : ''}\n${indentation} `;
10861088
const str = join(output, `,\n${indentation} `);
1087-
return `${extraLn}${braces[0]}${ln}${str} ${braces[1]}`;
1089+
return `${braces[0]}${ln}${str} ${braces[1]}`;
10881090
}
10891091

10901092
function isBoolean(arg) {
Collapse file

‎test/parallel/test-util-format.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-util-format.js
+8-8Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ assert.strictEqual(
126126
util.format('%o', obj),
127127
'{ foo: \'bar\',\n' +
128128
' foobar: 1,\n' +
129-
' func: \n' +
129+
' func:\n' +
130130
' { [Function: func]\n' +
131131
' [length]: 0,\n' +
132132
' [name]: \'func\',\n' +
@@ -135,8 +135,8 @@ assert.strictEqual(
135135
util.format('%o', nestedObj2),
136136
'{ foo: \'bar\',\n' +
137137
' foobar: 1,\n' +
138-
' func: \n' +
139-
' [ { a: \n' +
138+
' func:\n' +
139+
' [ { a:\n' +
140140
' { [Function: a]\n' +
141141
' [length]: 0,\n' +
142142
' [name]: \'a\',\n' +
@@ -145,9 +145,9 @@ assert.strictEqual(
145145
assert.strictEqual(
146146
util.format('%o', nestedObj),
147147
'{ foo: \'bar\',\n' +
148-
' foobar: \n' +
148+
' foobar:\n' +
149149
' { foo: \'bar\',\n' +
150-
' func: \n' +
150+
' func:\n' +
151151
' { [Function: func]\n' +
152152
' [length]: 0,\n' +
153153
' [name]: \'func\',\n' +
@@ -156,14 +156,14 @@ assert.strictEqual(
156156
util.format('%o %o', obj, obj),
157157
'{ foo: \'bar\',\n' +
158158
' foobar: 1,\n' +
159-
' func: \n' +
159+
' func:\n' +
160160
' { [Function: func]\n' +
161161
' [length]: 0,\n' +
162162
' [name]: \'func\',\n' +
163163
' [prototype]: func { [constructor]: [Circular] } } }' +
164164
' { foo: \'bar\',\n' +
165165
' foobar: 1,\n' +
166-
' func: \n' +
166+
' func:\n' +
167167
' { [Function: func]\n' +
168168
' [length]: 0,\n' +
169169
' [name]: \'func\',\n' +
@@ -172,7 +172,7 @@ assert.strictEqual(
172172
util.format('%o %o', obj),
173173
'{ foo: \'bar\',\n' +
174174
' foobar: 1,\n' +
175-
' func: \n' +
175+
' func:\n' +
176176
' { [Function: func]\n' +
177177
' [length]: 0,\n' +
178178
' [name]: \'func\',\n' +
Collapse file

‎test/parallel/test-util-inspect.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-util-inspect.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1237,7 +1237,7 @@ util.inspect(process);
12371237

12381238
let out = util.inspect(o, { compact: true, depth: 5, breakLength: 80 });
12391239
let expect = [
1240-
'{ a: ',
1240+
'{ a:',
12411241
' [ 1,',
12421242
' 2,',
12431243
" [ [ 'Lorem ipsum dolor\\nsit amet,\\tconsectetur adipiscing elit, " +
Collapse file

‎test/parallel/test-whatwg-url-inspect.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-whatwg-url-inspect.js
+5-3Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ const url = new URL('https://username:password@host.name:8080/path/name/?que=ry#
1616
assert.strictEqual(
1717
util.inspect(url),
1818
`URL {
19-
href: 'https://username:password@host.name:8080/path/name/?que=ry#hash',
19+
href:
20+
'https://username:password@host.name:8080/path/name/?que=ry#hash',
2021
origin: 'https://host.name:8080',
2122
protocol: 'https:',
2223
username: 'username',
@@ -32,7 +33,8 @@ assert.strictEqual(
3233
assert.strictEqual(
3334
util.inspect(url, { showHidden: true }),
3435
`URL {
35-
href: 'https://username:password@host.name:8080/path/name/?que=ry#hash',
36+
href:
37+
'https://username:password@host.name:8080/path/name/?que=ry#hash',
3638
origin: 'https://host.name:8080',
3739
protocol: 'https:',
3840
username: 'username',
@@ -46,7 +48,7 @@ assert.strictEqual(
4648
hash: '#hash',
4749
cannotBeBase: false,
4850
special: true,
49-
[Symbol(context)]:\x20
51+
[Symbol(context)]:
5052
URLContext {
5153
flags: 2032,
5254
scheme: 'https:',

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.