diff options
author | Jeremy Evans <[email protected]> | 2020-09-02 15:49:40 -0700 |
---|---|---|
committer | Jeremy Evans <[email protected]> | 2020-09-28 08:38:06 -0700 |
commit | 92c3ad9c276d048bf6fba1145ffccf8678fe8af1 (patch) | |
tree | 8d5eb4c4bcfc9871e95d6596758fdb590649e00b | |
parent | 5d7953f86b7ae164017e2292dfb3c108e0e02527 (diff) |
Make Warning.warn accept only category keyword
In general accepting arbitrary keywords is a bad idea unless you are
delegating keywords or acting on arbitrary keywords. In this case,
the category keyword is ignored, and it's less error prone to not
ignore all keywords.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3508
-rw-r--r-- | error.c | 9 | ||||
-rw-r--r-- | test/ruby/test_exception.rb | 4 |
2 files changed, 9 insertions, 4 deletions
@@ -72,6 +72,7 @@ static VALUE rb_mWarning; static VALUE rb_cWarningBuffer; static ID id_warn; +static ID id_category; extern const char ruby_description[]; @@ -231,11 +232,11 @@ rb_warning_s_aset(VALUE mod, VALUE category, VALUE flag) /* * call-seq: - * warn(msg, **kw) -> nil + * warn(msg, category: nil) -> nil * * Writes warning message +msg+ to $stderr. This method is called by * Ruby for all emitted warnings. A +category+ may be included with - * the warning. + * the warning, but is ignored by default. */ static VALUE @@ -243,8 +244,11 @@ rb_warning_s_warn(int argc, VALUE *argv, VALUE mod) { VALUE str; VALUE opt; + VALUE category; rb_scan_args(argc, argv, "1:", &str, &opt); + if (!NIL_P(opt)) rb_get_kwargs(opt, &id_category, 0, 1, &category); + Check_Type(str, T_STRING); rb_must_asciicompat(str); rb_write_error_str(str); @@ -2749,6 +2753,7 @@ Init_Exception(void) id_errno = rb_intern_const("errno"); id_i_path = rb_intern_const("@path"); id_warn = rb_intern_const("warn"); + id_category = rb_intern_const("category"); id_top = rb_intern_const("top"); id_bottom = rb_intern_const("bottom"); id_iseq = rb_make_internal_id(); diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb index 120b041830..0333fd52ea 100644 --- a/test/ruby/test_exception.rb +++ b/test/ruby/test_exception.rb @@ -925,8 +925,8 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status| remove_method :warn if category - define_method(:warn) do |str, **kw| - warning << [str, kw[:category]] + define_method(:warn) do |str, category: nil| + warning << [str, category] end else define_method(:warn) do |str| |