From a50df1ab0eb312e5cdcf010d2c1b362ec41f3c59 Mon Sep 17 00:00:00 2001 From: schneems Date: Tue, 26 Jul 2022 15:16:21 -0500 Subject: Setup SyntaxSuggest as default gem Adds the `syntax_suggest` syntax error display tool to Ruby through the same mechanism as `error_highlight` and `did_you_mean`. Reference ticket: https://bugs.ruby-lang.org/issues/18159 close #4845 ## What is syntax_suggest? When a syntax error is raised by requiring a file, dead_end will use a combination of indentation and lexing to identify the problem. > Note: Previously this tool was named `dead_end`. ## Known issues - SyntaxSearch's approach of showing syntax errors only works through integration with `require`, `load`, `autoload`, and `require_relative` (since it monkeypatches them to detect syntax errors). It does not work with direct Ruby file invocations https://github.com/zombocom/dead_end/issues/31. - This causes failure in the test suite (test_expected_backtrace_location_when_inheriting_from_basic_object_and_including_kernel) and confusion when inspecting backtraces if there's a different error when trying to require a file such as measuring memory (https://github.com/zombocom/syntax_suggest/issues/124#issuecomment-1006705016). - Discussed fix. We previously talked about opening up `SyntaxError` to be monkeypatched in the same way that other gems hook into `NoMethodError`. This is currently not possible and requires development work. When we last talked about it at RubyKaigi Nobu expressed an ability to make such a change. --- ruby.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'ruby.c') diff --git a/ruby.c b/ruby.c index 66feeb797e..26d263a1b1 100644 --- a/ruby.c +++ b/ruby.c @@ -94,6 +94,8 @@ void rb_warning_category_update(unsigned int mask, unsigned int bits); SEP \ X(did_you_mean) \ SEP \ + X(syntax_suggest) \ + SEP \ X(rubyopt) \ SEP \ X(frozen_string_literal) \ @@ -307,6 +309,7 @@ usage(const char *name, int help, int highlight, int columns) M("gems", "", "rubygems (only for debugging, default: "DEFAULT_RUBYGEMS_ENABLED")"), M("error_highlight", "", "error_highlight (default: "DEFAULT_RUBYGEMS_ENABLED")"), M("did_you_mean", "", "did_you_mean (default: "DEFAULT_RUBYGEMS_ENABLED")"), + M("syntax_suggest", "", "syntax_suggest (default: "DEFAULT_RUBYGEMS_ENABLED")"), M("rubyopt", "", "RUBYOPT environment variable (default: enabled)"), M("frozen-string-literal", "", "freeze all string literals (default: disabled)"), #if USE_MJIT @@ -1553,6 +1556,9 @@ ruby_opt_init(ruby_cmdline_options_t *opt) if (opt->features.set & FEATURE_BIT(did_you_mean)) { rb_define_module("DidYouMean"); } + if (opt->features.set & FEATURE_BIT(syntax_suggest)) { + rb_define_module("SyntaxSuggest"); + } } rb_warning_category_update(opt->warn.mask, opt->warn.set); -- cgit v1.2.3