[前][次][番号順一覧][スレッド一覧]

ruby-changes:72976

From: schneems <ko1@a...>
Date: Fri, 19 Aug 2022 10:02:39 +0900 (JST)
Subject: [ruby-changes:72976] a50df1ab0e (master): Setup SyntaxSuggest as default gem

https://git.ruby-lang.org/ruby.git/commit/?id=a50df1ab0e

From a50df1ab0eb312e5cdcf010d2c1b362ec41f3c59 Mon Sep 17 00:00:00 2001
From: schneems <richard.schneeman+foo@g...>
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.
---
 gem_prelude.rb            | 7 +++++++
 ruby.c                    | 6 ++++++
 tool/sync_default_gems.rb | 1 +
 3 files changed, 14 insertions(+)

diff --git a/gem_prelude.rb b/gem_prelude.rb
index 94ada316aa..f382021ca3 100644
--- a/gem_prelude.rb
+++ b/gem_prelude.rb
@@ -17,3 +17,10 @@ begin https://github.com/ruby/ruby/blob/trunk/gem_prelude.rb#L17
 rescue LoadError
   warn "`did_you_mean' was not loaded."
 end if defined?(DidYouMean)
+
+begin
+  require 'syntax_suggest/core_ext'
+rescue LoadError
+  warn "`syntax_suggest' was not loaded."
+end if defined?(SyntaxSuggest)
+
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); https://github.com/ruby/ruby/blob/trunk/ruby.c#L94
     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) https://github.com/ruby/ruby/blob/trunk/ruby.c#L309
         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) https://github.com/ruby/ruby/blob/trunk/ruby.c#L1556
         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);
diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb
index 78620e1508..ae3fcbce61 100755
--- a/tool/sync_default_gems.rb
+++ b/tool/sync_default_gems.rb
@@ -73,6 +73,7 @@ REPOSITORIES = { https://github.com/ruby/ruby/blob/trunk/tool/sync_default_gems.rb#L73
   pathname: "ruby/pathname",
   digest: "ruby/digest",
   error_highlight: "ruby/error_highlight",
+  syntax_suggest: "zombocom/syntax_suggest",
   un: "ruby/un",
   win32ole: "ruby/win32ole",
 }
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]