From: "mame (Yusuke Endoh)" Date: 2021-09-16T15:14:18+00:00 Subject: [ruby-core:105309] [Ruby master Feature#18159] Integrate functionality of dead_end gem into Ruby Issue #18159 has been updated by mame (Yusuke Endoh). In today's dev meeting, we discussed this. Basically, no one was opposed to the concept. But some concerns were discussed. @ko1 and @knu were concerned about whether the heuristic algorithm was mature enough. If dead_end prints a misguided summary, it may rather confuse users. They wanted to take an experimental period after dead_end is integrated to the ruby core. There are only three months until Ruby 3.1 release, so they suggested to try the integration towards Ruby 3.2. @nobu and I briefly read the source code, and had some concerns about the implementation details: * Currently, there are no good way to allow dead_end to hook a syntax error and extend its message. The redefinition of `Kernel#require` is never a preferable way. (discussed later) * The implementation uses timeout, five seconds by default. The heuristic algorithm may take so long time? * The gem includes "exe/dead_end" command. Should it be shipped with the ruby tarball, too? * dead_end seems to extend NoMethodError to show a code snippet where the error occurs (if it is not running in production?). Does this conflict with error_highlight? If dead_end is integrated to the core, we want to avoid the redefinition of `Kernel#require` and `require_relative`. It does not work well against an syntax error of an entrypoint file (a file passed the ruby interpreter). But unfortunately, there is no good API for the feature. `did_you_mean` and `error_highlight` extend the error message of NameError by defining `NameError#message`. It would be good if dead_end can do the same (define `SyntaxError#message`), but unfortunately it does not work because the current parser outputs an error message directly to tty, not via `SyntaxError#message`. @nobu is now trying to sort it out to allow the following API design. @schneems What do you think? ``` class SyntaxError attr_reader :file_path # the file path that caused this syntax error def message dead_end_error_message = DeadEnd.call(source: File.read(file_path), ...) "#{ super }\n\nDeadEnd: Unmatched `end` detected ..." + dead_end_error_message end end ``` ---------------------------------------- Feature #18159: Integrate functionality of dead_end gem into Ruby https://bugs.ruby-lang.org/issues/18159#change-93719 * Author: duerst (Martin D�rst) * Status: Open * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: 3.1 ---------------------------------------- Missing 'end' errors are difficult to fix. We should integrate the functionality of the dead_end gem (https://github.com/zombocom/dead_end) into Ruby similar to how we integrated did_you_mean. It would greatly help programming Ruby, in particular for beginners. See also Ruby Kaigi Takeout 2021 talk by Richard Schneeman https://rubykaigi.org/2021-takeout/presentations/schneems.html. -- https://bugs.ruby-lang.org/ Unsubscribe: