ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:110039] [Ruby master Bug#19019] Nicely formatted exception messages in HTML
@ 2022-09-23  7:52 ioquatix (Samuel Williams)
  2022-09-23  8:15 ` [ruby-core:110041] " mame (Yusuke Endoh)
  2022-09-23  8:39 ` [ruby-core:110042] " ioquatix (Samuel Williams)
  0 siblings, 2 replies; 3+ messages in thread
From: ioquatix (Samuel Williams) @ 2022-09-23  7:52 UTC (permalink / raw)
  To: ruby-core

Issue #19019 has been reported by ioquatix (Samuel Williams).

----------------------------------------
Bug #19019: Nicely formatted exception messages in HTML
https://bugs.ruby-lang.org/issues/19019

* Author: ioquatix (Samuel Williams)
* Status: Open
* Priority: Normal
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
We have made a lot of improvements to exception formatting. See https://bugs.ruby-lang.org/issues/18296 for details.

I'd like us to consider adding support for HTML formatting of messages, e.g.

```
exception.full_message(highlight: :html)
```

or something to that effect.

Another option is to convert terminal style errors to html by converting control characters. However, I'm less optimistic about parsing sequences like `^^^^^` to apply a style to the above line.

Maybe it's sufficient when `highlight: true` is specified to avoid `^^^^^` characters.

When I've personally implemented this in the past, I've used a formatting object, e.g.

```ruby
exception.full_message(highlight: HTMLFormatter.new)
```

The formatter has a rich interface for printing, and uses a set of abstractions to map to the underlying output.

e.g.

```
formatter.puts(:exception, "NoMethodError", :reset, ": ", :message, "undefined method 'bar' for ", :object, "#<Foo...>")
formatter.puts(:code, "x = foo", :error, ".bar, :reset)
```

This can be easily mapped to HTML, XTerm, plain text, json, etc.



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ruby-core:110041] [Ruby master Bug#19019] Nicely formatted exception messages in HTML
  2022-09-23  7:52 [ruby-core:110039] [Ruby master Bug#19019] Nicely formatted exception messages in HTML ioquatix (Samuel Williams)
@ 2022-09-23  8:15 ` mame (Yusuke Endoh)
  2022-09-23  8:39 ` [ruby-core:110042] " ioquatix (Samuel Williams)
  1 sibling, 0 replies; 3+ messages in thread
From: mame (Yusuke Endoh) @ 2022-09-23  8:15 UTC (permalink / raw)
  To: ruby-core

Issue #19019 has been updated by mame (Yusuke Endoh).


Now error_highlight provides an API `ErrorHighlight.spot(...)` to take the column information programmatically, and Rails master uses it to show error_highlight in their code snippet. See https://github.com/rails/rails/pull/45818.

I believe that what kind of HTML fragment is needed is not up to error_highlight or the authors of exception classes, but up to each framework. For example, Rails already had a dedicated error page that displays the code snippet around where an error occurred. Even if error_highlight supports kinda `full_message(highlight: :html)` or something, it would not be so useful. So I do not plan to support this kind of thing in error_highlight.

----------------------------------------
Bug #19019: Nicely formatted exception messages in HTML
https://bugs.ruby-lang.org/issues/19019#change-99291

* Author: ioquatix (Samuel Williams)
* Status: Open
* Priority: Normal
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
We have made a lot of improvements to exception formatting. See https://bugs.ruby-lang.org/issues/18296 for details.

I'd like us to consider adding support for HTML formatting of messages, e.g.

```
exception.full_message(highlight: :html)
```

or something to that effect.

Another option is to convert terminal style errors to html by converting control characters. However, I'm less optimistic about parsing sequences like `^^^^^` to apply a style to the above line.

Maybe it's sufficient when `highlight: true` is specified to avoid `^^^^^` characters.

When I've personally implemented this in the past, I've used a formatting object, e.g.

```ruby
exception.full_message(highlight: HTMLFormatter.new)
```

The formatter has a rich interface for printing, and uses a set of abstractions to map to the underlying output.

e.g.

```
formatter.puts(:exception, "NoMethodError", :reset, ": ", :message, "undefined method 'bar' for ", :object, "#<Foo...>")
formatter.puts(:code, "x = foo", :error, ".bar, :reset)
```

This can be easily mapped to HTML, XTerm, plain text, json, etc.



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ruby-core:110042] [Ruby master Bug#19019] Nicely formatted exception messages in HTML
  2022-09-23  7:52 [ruby-core:110039] [Ruby master Bug#19019] Nicely formatted exception messages in HTML ioquatix (Samuel Williams)
  2022-09-23  8:15 ` [ruby-core:110041] " mame (Yusuke Endoh)
@ 2022-09-23  8:39 ` ioquatix (Samuel Williams)
  1 sibling, 0 replies; 3+ messages in thread
From: ioquatix (Samuel Williams) @ 2022-09-23  8:39 UTC (permalink / raw)
  To: ruby-core

Issue #19019 has been updated by ioquatix (Samuel Williams).


> I believe that what kind of HTML fragment is needed is not up to error_highlight or the authors of exception classes, but up to each framework.

That's a fair approach. But I'd prefer a simple interface for formatting HTML exceptions without having to sniff the version of Ruby or the features available. I'd like Ruby to be able to improve formatting and support new kinds of exceptions without the code that prints exceptions having to change. I'd be quite happy with `exception.full_message(highlight: :html)` for Rack for example. As your PR to Rails shows, the current implementation is non-trivial and requires a lot of work in the framework code.

----------------------------------------
Bug #19019: Nicely formatted exception messages in HTML
https://bugs.ruby-lang.org/issues/19019#change-99292

* Author: ioquatix (Samuel Williams)
* Status: Open
* Priority: Normal
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
We have made a lot of improvements to exception formatting. See https://bugs.ruby-lang.org/issues/18296 for details.

I'd like us to consider adding support for HTML formatting of messages, e.g.

```
exception.full_message(highlight: :html)
```

or something to that effect.

Another option is to convert terminal style errors to html by converting control characters. However, I'm less optimistic about parsing sequences like `^^^^^` to apply a style to the above line.

Maybe it's sufficient when `highlight: true` is specified to avoid `^^^^^` characters.

When I've personally implemented this in the past, I've used a formatting object, e.g.

```ruby
exception.full_message(highlight: HTMLFormatter.new)
```

The formatter has a rich interface for printing, and uses a set of abstractions to map to the underlying output.

e.g.

```
formatter.puts(:exception, "NoMethodError", :reset, ": ", :message, "undefined method 'bar' for ", :object, "#<Foo...>")
formatter.puts(:code, "x = foo", :error, ".bar, :reset)
```

This can be easily mapped to HTML, XTerm, plain text, json, etc.



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-09-23  8:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-23  7:52 [ruby-core:110039] [Ruby master Bug#19019] Nicely formatted exception messages in HTML ioquatix (Samuel Williams)
2022-09-23  8:15 ` [ruby-core:110041] " mame (Yusuke Endoh)
2022-09-23  8:39 ` [ruby-core:110042] " ioquatix (Samuel Williams)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).