From: "mame (Yusuke Endoh)" Date: 2022-09-23T08:15:28+00:00 Subject: [ruby-core:110041] [Ruby master Bug#19019] Nicely formatted exception messages in HTML 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, "#") 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/ Unsubscribe: