Open tomayac opened 1 year ago
~This makes sense to me, but curious if there's comments from Firefox or Safari.~
I have been using the web console to "print an object" and copy-paste it from a web console into a file since 2010 (for debugging, comparing two versions of data), and it is suddenly broken.
console.log(JSON.stringify( {a:"%%Hi",b:"%Hey"} ));
=> {"a":"%Hi","b":"%Hey"}
If I'm reading the spec:
If args’s size is 1, return args.
So the screenshot in https://github.com/whatwg/console/pull/218#issue-1477863265 for Chrome seems to be wrong for me. Did Chrome behavior changed recently ?
That being said, if you test with multiple parameters, as expected when using specifiers console.log("%%s", "hello")
, Chrome, Firefox and Safari do print %s hello
.
So, the change here makes sense to me, but I guess a bug should be filed on Chrome for console.log("%%")
@nchevobbe It shouldn't even get there, it fails the earlier check in Logger
. With no rest parameters, it should call straight into Printer
, without calling into Formatter
. That makes the screenshot incorrect, and following that would also fix @photopea's example.
That said, once properly in Formatter
, I think escaping %
still makes sense.
I found a similar issue:
console.error( 'message: %s', '%hello%%world%');
Chrome:
message: %hello%world%
Firefox:
message: %hello%%world%
Was reminded of this Issue and wondering what to make of it. Do we agree it's somewhat of an interop issue?
I think so, yes. I guess this PR just needs the appropriate changes to Formatter()
(beyond the informative table entry)? Also @terinjokes's comment is interesting about Formatter()
not even being invoked for the case in the OP at all, which seems important.
I think so, yes.
Great.
I guess this PR just needs the appropriate changes to
Formatter()
(beyond the informative table entry)? Also @terinjokes's comment is interesting aboutFormatter()
not even being invoked for the case in the OP at all, which seems important.
This is out of my comfort zone. Edits by maintainers are allowed, so please feel free to pile onto this PR with more changes.
I'd appreciate a first stab at it if possible, as I probably won't have time myself to drive the changes for a little while. But the algorithms you'd need to touch aren't too complicated I promise!
console.log() with a single parameter should print exactly the string which it received.
When I have an object in JS, I want to save it into a JSON file. I do
console.log(JSON.stringify(obj));
And when I copy-paste it from a console to a text file, I get a different object.
So looking back at the original post https://github.com/whatwg/console/pull/218#issue-1477863265, which of the two behaviors is considered correct?
As noted in https://github.com/whatwg/console/pull/218#issuecomment-1339479193, the current specification is to not intepret %
if there are no rest parameters. IIRC, this case was put into Logger
to support logging arbitrary strings in a backwards compatible manner.
It looks like a bit of an interop issue:
Chrome:
Safari:
Firefox:
Preview | Diff