Bug #14324
closedShould Exception#full_message include escape sequences?
Description
$ ruby -e 'p RuntimeError.new("foo").full_message'
"\e[1mTraceback \e[m(most recent call last):\n-e:1:in `full_message': \e[1mfoo (\e[4;1mRuntimeError\e[m\e[1m)\n\e[m"
That is probably not intended.
$ ruby -e 'p RuntimeError.new("foo").full_message' |& cat
"-e:1:in `full_message': foo (RuntimeError)\n"
So Exception#full_message
depends if stderr is a tty which seems wrong.
I think it should be the second result, i.e., no escape sequences.
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
- Description updated (diff)
Since Exception#full_message
is expected to return the message printed to stderr, escape sequences are intentional.
But I think it's wrong that there is no way to disable them now.
https://github.com/nobu/ruby/tree/bug/14324-full_message-options
Updated by Eregon (Benoit Daloze) almost 7 years ago
nobu (Nobuyoshi Nakada) wrote:
Since
Exception#full_message
is expected to return the message printed to stderr, escape sequences are intentional.
But how to know if Exception#full_message is later used to print to $stderr, a log or something else?
Exception#backtrace for instance is the same on all Ruby implementations, even though the top-level handler might print differently.
I think having Exception#full_message be the canonical (no TTY, as in 2.4) representation of message+backtrace would make sense.
Reusing the new reversed MRI exception format here but only in some cases feels wrong.
I think libraries should do their own formatting if they want reversed exceptions.
It would be more portable and reliable.
How should other Ruby implementations behave here?
Print their own custom format by default? Is that good for usages of #full_backtrace?
Or try to mimic the new MRI reverse+highlight backtrace format?
But I think it's wrong that there is no way to disable them now.
https://github.com/nobu/ruby/tree/bug/14324-full_message-options
Options seems a good idea.
Updated by Eregon (Benoit Daloze) almost 7 years ago
- Related to Feature #14141: Add a method to Exception for retrieving formatted exception for logging purpose (Exception#{formatted,display}) added
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
- Related to Feature #9918: Exception#cause should be shown in output and #inspect added
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r62894.
error.c: full_message options
- error.c (exc_full_message): add highlight: and reverse: keyword
options. [Bug #14324]
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
- Backport changed from 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN to 2.3: DONTNEED, 2.4: DONTNEED, 2.5: REQUIRED
Updated by naruse (Yui NARUSE) over 6 years ago
- Backport changed from 2.3: DONTNEED, 2.4: DONTNEED, 2.5: REQUIRED to 2.3: DONTNEED, 2.4: DONTNEED, 2.5: DONE
ruby_2_5 r62905 merged revision(s) 62548,62894.