ruby-changes:71924
From: Yusuke <ko1@a...>
Date: Mon, 23 May 2022 20:51:31 +0900 (JST)
Subject: [ruby-changes:71924] 663915ddf4 (master): [rubygems/rubygems] Support the change of did_you_mean about Exception#detailed_message
https://git.ruby-lang.org/ruby.git/commit/?id=663915ddf4 From 663915ddf414e5a4dcb9f981449c1f9f79f1eada Mon Sep 17 00:00:00 2001 From: Yusuke Endoh <mame@r...> Date: Mon, 23 May 2022 18:45:39 +0900 Subject: [rubygems/rubygems] Support the change of did_you_mean about Exception#detailed_message I am asking did_you_mean to use Exception#detailed_message to add "Did you mean?" suggestion instead of overriding #message method. https://github.com/ruby/did_you_mean/pull/177 Unfortunately, the change will affect Gem::UnknownCommandError, which excepts did_you_mean to override #message method. This PR absorbs the change of did_you_mean. Gem::CommandManager now calls #detailed_message method to get a message string with "Did you mean?" suggestion from an exception. https://github.com/rubygems/rubygems/commit/8f104228d3 --- lib/rubygems/command_manager.rb | 7 ++++++- test/rubygems/test_gem_command_manager.rb | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/rubygems/command_manager.rb b/lib/rubygems/command_manager.rb index 03cdd6a4bb..e421f89884 100644 --- a/lib/rubygems/command_manager.rb +++ b/lib/rubygems/command_manager.rb @@ -148,7 +148,12 @@ class Gem::CommandManager https://github.com/ruby/ruby/blob/trunk/lib/rubygems/command_manager.rb#L148 def run(args, build_args=nil) process_args(args, build_args) rescue StandardError, Timeout::Error => ex - alert_error clean_text("While executing gem ... (#{ex.class})\n #{ex}") + if ex.respond_to?(:detailed_message) + msg = ex.detailed_message(highlight: false).sub(/\A(.*?)(?: \(.+?\))/) { $1 } + else + msg = ex.message + end + alert_error clean_text("While executing gem ... (#{ex.class})\n #{msg}") ui.backtrace ex terminate_interaction(1) diff --git a/test/rubygems/test_gem_command_manager.rb b/test/rubygems/test_gem_command_manager.rb index bee635d67e..00197d10f7 100644 --- a/test/rubygems/test_gem_command_manager.rb +++ b/test/rubygems/test_gem_command_manager.rb @@ -80,7 +80,13 @@ class TestGemCommandManager < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_command_manager.rb#L80 message << "\nDid you mean? \"push\"" end - assert_equal message, e.message + if e.respond_to?(:detailed_message) + actual_message = e.detailed_message(highlight: false).sub(/\A(.*?)(?: \(.+?\))/) { $1 } + else + actual_message = e.message + end + + assert_equal message, actual_message end def test_run_interrupt -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/