Issue #17122 has been updated by mame (Yusuke Endoh).
Status changed from Assigned to Closed
https://github.com/ruby/ruby/pull/3505 has been merged. Thank you Eileen!
----------------------------------------
Feature #17122: Add category to Warning#warn
https://bugs.ruby-lang.org/issues/17122#change-87390
* Author: eileencodes (Eileen Uchitelle)
* Status: Closed
* Priority: Normal
* Assignee: eileencodes (Eileen Uchitelle)
----------------------------------------
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:
```ruby
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`.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>