Skip to content

Commit

Permalink
tcompare: print symbols properly in js formatting
Browse files Browse the repository at this point in the history
Fix: #936
  • Loading branch information
isaacs committed Sep 30, 2023
1 parent 390b9f9 commit d089e7e
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 7 deletions.
7 changes: 4 additions & 3 deletions src/tcompare/src/format.ts
Expand Up @@ -430,11 +430,12 @@ export class Format {
#printSymbol(sym: symbol): string {
const keyFor = Symbol.keyFor(sym)
const s = String(sym)
const key = s.substring('Symbol('.length, s.length - 1)
if (s.startsWith('Symbol(Symbol.')) {
// check to see if it's a key on the Symbol global.
// return Symbol.iterator, not Symbol(Symbol.iterator)
const symKey = s.substring(
'Symbol(Symbol.'.length,
const symKey = key.substring(
'Symbol.'.length,
s.length - 1
)
if (
Expand All @@ -444,7 +445,7 @@ export class Format {
return `Symbol.${symKey}`
}
}
return keyFor ? 'Symbol.for' + s.substring('Symbol'.length) : s
return this.style.symbol(keyFor ? 'Symbol.for' : 'Symbol', key)
}
printSymbol(): void {
this.memo += this.#printSymbol(this.object)
Expand Down
8 changes: 8 additions & 0 deletions src/tcompare/src/styles.ts
Expand Up @@ -118,6 +118,9 @@ export interface Style {
/** end of a long string */
stringTail: (indent: string) => string

/** printing symbols */
symbol: (method: string, key: string) => string

/** indicator as to whether this style is suitable for use in diffs */
diffable: boolean
/** beginning of a thing being printed */
Expand Down Expand Up @@ -230,6 +233,9 @@ const pretty: Style = {
.slice(1, -1)
.replace(/\\"/g, '"'),
stringTail: indent => `\n${indent})`,

symbol: (method, key) => `${method}(${key})`,

diffable: true,
start: (indent, key, sep) => `${indent}${key}${sep}`,
}
Expand Down Expand Up @@ -297,6 +303,7 @@ const js: Style = {
stringOneLine: str => JSON.stringify(str),
stringHead: () => 'String(\n',
stringTail: indent => `\n${indent})`,
symbol: (method, key) => `${method}(${JSON.stringify(key)})`,
diffable: true,
start: (indent, key, sep) => `${indent}${key}${sep}`,
}
Expand Down Expand Up @@ -351,6 +358,7 @@ const tight: Style = {
stringOneLine: str => JSON.stringify(str),
stringHead: () => '',
stringTail: _ => '',
symbol: (method, key) => `${method}(${JSON.stringify(key)})`,
bufferHead: js.bufferHead,
bufferKey: js.bufferKey,
bufferLine: js.bufferLine,
Expand Down
4 changes: 2 additions & 2 deletions src/tcompare/tap-snapshots/test/format.tsx.test.cjs
Expand Up @@ -3562,7 +3562,7 @@ exports[`test/format.tsx > TAP > gnarly object, many points of view > js 1`] = `
"identity": (x) => x,
"nameless": () => { },
},
"sym": Symbol(prince),
"sym": Symbol("prince"),
"date": 2019-02-14T07:13:44.100Z,
"n": null,
"undef": undefined,
Expand Down Expand Up @@ -4068,7 +4068,7 @@ Object {
`

exports[`test/format.tsx > TAP > gnarly object, many points of view > tight 1`] = `
&1 {"a":1,"b":2,"extra":true,"c":3,"d":4,"more":false,"e":{"f":{"g":1,},"a":[2,3,4,],"h":"asdf","multilineString":"this is a line\\n"+"this is a line\\n"+"this is a line\\n"+"this is a line\\n"+"\\n","emptyString":"",},"nullObject":{"x":{},"y":{},"z":{"zed":true,},},"p":new Set([{"x":"y","z":true,},{"a":1,},{"b":2,},]),"s":new Set([{"b":2,},{"c":3,},*1,]),"m":new Map([[&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},1],[{"b":2,},2],[{"c":"d",},{"re":/ef/g,}],[1,&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":*4,},"f":*1,}],[*1,&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},}],]),"ak":[&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},[&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},],],"ao":[{"o":true,},{"o":true,},[{"o":true,},{"o":true,},],],"om":new Map([[{"o":true,},&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},}],[&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},{"o":true,}],]),"args":[1,2,3,{"o":true,},],"buf":Buffer.from("aG93ZHk=","base64"),"longBuf":Buffer.from("aGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEK","base64"),"emp":{"b":Buffer.alloc(0),"a":[],"o":{},"m":new Map(),"s":new Set(),},"fns":{"name":function foo() { },"anon":function () { },"arr":() => { },"identity":(x) => x,"nameless":() => { },},"sym":Symbol(prince),"date":2019-02-14T07:13:44.100Z,"n":null,"undef":undefined,"classy":{},"err":new Error("just an error"),"emptyErr":new Error(""),"fancyErr":Object.assign(new Error("fancy pantsy"), {"fancy":"pantsy",}),"assert":Object.assign(new AssertionError(<contents elided for testing>), {"generatedMessage":true,"code":"ERR_ASSERTION","actual":&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},"expected":{"o":true,},"operator":"==",}),}
&1 {"a":1,"b":2,"extra":true,"c":3,"d":4,"more":false,"e":{"f":{"g":1,},"a":[2,3,4,],"h":"asdf","multilineString":"this is a line\\n"+"this is a line\\n"+"this is a line\\n"+"this is a line\\n"+"\\n","emptyString":"",},"nullObject":{"x":{},"y":{},"z":{"zed":true,},},"p":new Set([{"x":"y","z":true,},{"a":1,},{"b":2,},]),"s":new Set([{"b":2,},{"c":3,},*1,]),"m":new Map([[&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},1],[{"b":2,},2],[{"c":"d",},{"re":/ef/g,}],[1,&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":*4,},"f":*1,}],[*1,&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},}],]),"ak":[&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},[&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},],],"ao":[{"o":true,},{"o":true,},[{"o":true,},{"o":true,},],],"om":new Map([[{"o":true,},&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},}],[&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},{"o":true,}],]),"args":[1,2,3,{"o":true,},],"buf":Buffer.from("aG93ZHk=","base64"),"longBuf":Buffer.from("aGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEKaGVsbG8sIHdvcmxkIQpoZWxsbywgd29ybGQhCmhlbGxvLCB3b3JsZCEK","base64"),"emp":{"b":Buffer.alloc(0),"a":[],"o":{},"m":new Map(),"s":new Set(),},"fns":{"name":function foo() { },"anon":function () { },"arr":() => { },"identity":(x) => x,"nameless":() => { },},"sym":Symbol("prince"),"date":2019-02-14T07:13:44.100Z,"n":null,"undef":undefined,"classy":{},"err":new Error("just an error"),"emptyErr":new Error(""),"fancyErr":Object.assign(new Error("fancy pantsy"), {"fancy":"pantsy",}),"assert":Object.assign(new AssertionError(<contents elided for testing>), {"generatedMessage":true,"code":"ERR_ASSERTION","actual":&2 {"a":1,"k":&3 {"k":*2,"i":{"i":1,"k":*3,},},"f":*1,"c":&4 {"c":{"c":*4,"b":{"b":1,"d":*4,},},"a":&5 [1,*4,*5,],"k":*2,"f":*1,},},"expected":{"o":true,},"operator":"==",}),}
`

exports[`test/format.tsx > TAP > hidden props and getters > all enumerable properties shown 1`] = `
Expand Down
3 changes: 3 additions & 0 deletions src/tcompare/tap-snapshots/test/index.ts.test.cjs
Expand Up @@ -252,6 +252,7 @@ Object {
"stringLineSep": Function stringLineSep(),
"stringOneLine": Function stringOneLine(str),
"stringTail": Function stringTail(indent),
"symbol": Function symbol(method, key),
},
"pretty": Object {
"arrayEmpty": Function arrayEmpty(cls),
Expand Down Expand Up @@ -299,6 +300,7 @@ Object {
"stringLineSep": Function stringLineSep(),
"stringOneLine": Function stringOneLine(str),
"stringTail": Function stringTail(indent),
"symbol": Function symbol(method, key),
},
"tight": Object {
"arrayEmpty": Function arrayEmpty(_),
Expand Down Expand Up @@ -345,6 +347,7 @@ Object {
"stringLineSep": Function stringLineSep(),
"stringOneLine": Function stringOneLine(str),
"stringTail": Function stringTail(_),
"symbol": Function symbol(method, key),
},
}
`
4 changes: 2 additions & 2 deletions src/tcompare/tap-snapshots/test/same.tsx.test.cjs
Expand Up @@ -713,7 +713,7 @@ exports[`test/same.tsx > TAP > react > array nesting relevant when not using rea
- [
- [
- {
- "$$typeof": Symbol.for(react.element),
- "$$typeof": Symbol.for("react.element"),
- "type": "img",
- "key": null,
- "ref": null,
Expand All @@ -726,7 +726,7 @@ exports[`test/same.tsx > TAP > react > array nesting relevant when not using rea
- ],
- ],
- ],
+ "$$typeof": Symbol.for(react.element),
+ "$$typeof": Symbol.for("react.element"),
+ "type": "img",
+ "props": {
+ "src": "foo",
Expand Down

0 comments on commit d089e7e

Please sign in to comment.