Sha256: b674ab4ab2e5b9c2f981f06d4cf16ce521d1aa190c2b266b401bfdb4a517eb08

Contents?: true

Size: 1.08 KB

Versions: 10

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

# `uplevel` keyword argument of Kernel#warn is available since ruby 2.5.
if RUBY_VERSION >= "2.5"

  module Kernel
    path = "#{__dir__}/" # Frames to be skipped start with this path.

    # Suppress "method redefined" warning
    original_warn = instance_method(:warn)
    Module.new {define_method(:warn, original_warn)}

    original_warn = method(:warn)

    module_function define_method(:warn) {|*messages, uplevel: nil|
      unless uplevel
        return original_warn.call(*messages)
      end

      # Ensure `uplevel` fits a `long`
      uplevel, = [uplevel].pack("l!").unpack("l!")

      if uplevel >= 0
        start = 0
        while uplevel >= 0
          loc, = caller_locations(start, 1)
          unless loc
            # No more backtrace
            start += uplevel
            break
          end

          start += 1

          unless loc.path.start_with?(path)
            # Non-rubygems frames
            uplevel -= 1
          end
        end
        uplevel = start
      end
      original_warn.call(*messages, uplevel: uplevel)
    }
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
rubygems-update-3.0.9 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.8 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.7 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.6 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.5 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.4 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.3 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.2 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.1 lib/rubygems/core_ext/kernel_warn.rb
rubygems-update-3.0.0 lib/rubygems/core_ext/kernel_warn.rb