Make uplevel suitable as the option to Kernel#warn

Make Gem::BUNDLED_GEMS.uplevel returns `nil` if `require` frame is not
found, for the simplicity.
This commit is contained in:
Nobuyoshi Nakada 2025-06-28 22:27:30 +09:00
parent baa0500140
commit dc74f9cb36
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465

View File

@ -49,12 +49,7 @@ module Gem::BUNDLED_GEMS # :nodoc:
kernel_class.send(:alias_method, :no_warning_require, :require)
kernel_class.send(:define_method, :require) do |name|
if message = ::Gem::BUNDLED_GEMS.warning?(name, specs: spec_names)
uplevel = ::Gem::BUNDLED_GEMS.uplevel
if uplevel > 0
Kernel.warn message, uplevel: uplevel
else
Kernel.warn message
end
Kernel.warn message, uplevel: ::Gem::BUNDLED_GEMS.uplevel
end
kernel_class.send(:no_warning_require, name)
end
@ -86,11 +81,10 @@ module Gem::BUNDLED_GEMS # :nodoc:
uplevel += 1
# Don't show script name when bundle exec and call ruby script directly.
if cl.path.end_with?("bundle")
frame_count = 0
break
return
end
end
require_found ? 1 : frame_count - 1
require_found ? 1 : (frame_count - 1).nonzero?
end
def self.warning?(name, specs: nil)