fix(cli/console): quote object symbol keys that are invalid identifiers (#7553)

This commit is contained in:
Casper Beyer 2020-09-22 23:10:02 +08:00 committed by GitHub
parent c30c782c2c
commit a33315aaa7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 1 deletions

View file

@ -481,6 +481,19 @@
return quoteString(string);
}
// Surround a symbol's description in quotes when it is required (e.g the description has non printable characters).
function maybeQuoteSymbol(symbol) {
if (symbol.description === undefined) {
return symbol.toString();
}
if (/^[a-zA-Z_][a-zA-Z_.0-9]*$/.test(symbol.description)) {
return symbol.toString();
}
return `Symbol(${quoteString(symbol.description)})`;
}
// Print strings when they are inside of arrays or objects with quotes
function inspectValueWithQuotes(
value,
@ -734,7 +747,7 @@
}
for (const key of symbolKeys) {
entries.push(
`${replaceEscapeSequences(key.toString())}: ${
`${maybeQuoteSymbol(key)}: ${
inspectValueWithQuotes(
value[key],
ctx,

View file

@ -110,6 +110,24 @@ unitTest(
),
`{ "foo\\b": "bar\\n", "bar\\r": "baz\\t", "qux\\x00": "qux\\x00" }`,
);
assertEquals(
stringify(
{
[Symbol("foo\b")]: `Symbol("foo\n")`,
[Symbol("bar\n")]: `Symbol("bar\n")`,
[Symbol("bar\r")]: `Symbol("bar\r")`,
[Symbol("baz\t")]: `Symbol("baz\t")`,
[Symbol("qux\0")]: `Symbol("qux\0")`,
},
),
`{
Symbol("foo\\b"): 'Symbol("foo\\n\")',
Symbol("bar\\n"): 'Symbol("bar\\n\")',
Symbol("bar\\r"): 'Symbol("bar\\r\")',
Symbol("baz\\t"): 'Symbol("baz\\t\")',
Symbol("qux\\x00"): 'Symbol(\"qux\\x00")'
}`,
);
assertEquals(
stringify(new Set(["foo\n", "foo\r", "foo\0"])),
`Set { "foo\\n", "foo\\r", "foo\\x00" }`,