Project

General

Profile

Actions

Feature #17122

closed

Add category to Warning#warn

Added by eileencodes (Eileen Uchitelle) over 4 years ago. Updated about 4 years ago.

Status:
Closed
Target version:
-
[ruby-core:99582]

Description

Deprecation warnings and other warnings in Ruby have a category (:deprecated, etc) but those categories aren't exposed or accessible. In the most recent Ruby 2.7 upgrade at GitHub we monkey patched Warning#warn to be able to turn warnings into exceptions. However, there was no way to tell which warnings were deprecations and which were other types of warnings.

I want to expose the category on the Warning module so that I'm able to monkey patch Warning#warn and treat deprecation warnings differently from other warnings without using a regex the strings.

Here's an example program demonstrating what I'd like to get from Ruby by implementing this feature:

module Warning
  def self.warn(msg, category: nil)
    if category == :deprecated
      raise msg 
    else
      super
    end 
  end 
end

def ivar
  Object.new.instance_variable_get(:@ivar)
end

# Doesn't raise, but warns with verbose set
ivar

# Raises an error
Object.new.tainted?

The PR I worked on with @tenderlove is here: https://github.com/ruby/ruby/pull/3418

It moves the Warning module to be written in Ruby, updates rb_warning_s_warn to pass kwargs, and adds a category to Warning#warn.


Related issues 5 (1 open4 closed)

Related to Ruby master - Feature #11588: Implement structured warningsOpenActions
Related to Ruby master - Feature #12026: Support warning processorClosedActions
Related to Ruby master - Feature #12299: Add Warning module for customized warning handlingClosedActions
Related to Ruby master - Bug #17387: About Warning.warn compatibility in Ruby 3.0.0ClosedActions
Related to Ruby master - Bug #20573: Warning.warn shouldn't be called for disabled warningsClosedActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0