From aefb13eb631cc5cd784fe2fc10f1f333a2c5e68c Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 23 Jan 2020 21:42:05 +0900 Subject: [PATCH] Added rb_warn_deprecated_to_remove Warn the deprecation and future removal, with obeying the warning flag. --- error.c | 18 ++++++++++++++++-- ext/pathname/pathname.c | 4 ++-- hash.c | 2 +- internal/error.h | 1 + object.c | 14 +++++++------- string.c | 4 ++-- 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/error.c b/error.c index 1702a709b4..b9ec8427e6 100644 --- a/error.c +++ b/error.c @@ -389,6 +389,20 @@ rb_warn_deprecated(const char *fmt, const char *suggest, ...) rb_write_warning_str(mesg); } +void +rb_warn_deprecated_to_remove(const char *fmt, const char *removal, ...) +{ + if (NIL_P(ruby_verbose)) return; + if (!rb_warning_category_enabled_p(RB_WARN_CATEGORY_DEPRECATED)) return; + va_list args; + va_start(args, removal); + VALUE mesg = warning_string(0, fmt, args); + va_end(args); + rb_str_set_len(mesg, RSTRING_LEN(mesg) - 1); + rb_str_catf(mesg, " is deprecated and will be removed in Ruby %s\n", removal); + rb_write_warning_str(mesg); +} + static inline int end_with_asciichar(VALUE str, int c) { @@ -3035,14 +3049,14 @@ rb_check_frozen(VALUE obj) void rb_error_untrusted(VALUE obj) { - rb_warn("rb_error_untrusted is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("rb_error_untrusted", "3.2"); } #undef rb_check_trusted void rb_check_trusted(VALUE obj) { - rb_warn("rb_check_trusted is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("rb_check_trusted", "3.2"); } void diff --git a/ext/pathname/pathname.c b/ext/pathname/pathname.c index e511560500..86b22cae62 100644 --- a/ext/pathname/pathname.c +++ b/ext/pathname/pathname.c @@ -138,7 +138,7 @@ path_freeze(VALUE self) static VALUE path_taint(VALUE self) { - rb_warn("Pathname#taint is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("Pathname#taint", "3.2"); return self; } @@ -151,7 +151,7 @@ path_taint(VALUE self) static VALUE path_untaint(VALUE self) { - rb_warn("Pathname#untaint is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("Pathname#untaint", "3.2"); return self; } diff --git a/hash.c b/hash.c index 6823bae828..32df430b6d 100644 --- a/hash.c +++ b/hash.c @@ -4968,7 +4968,7 @@ env_fetch(int argc, VALUE *argv, VALUE _) int rb_env_path_tainted(void) { - rb_warn("rb_env_path_tainted is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("rb_env_path_tainted", "3.2"); return 0; } diff --git a/internal/error.h b/internal/error.h index cb2f23d262..ebedc9bc1e 100644 --- a/internal/error.h +++ b/internal/error.h @@ -52,6 +52,7 @@ NORETURN(void rb_async_bug_errno(const char *,int)); const char *rb_builtin_type_name(int t); const char *rb_builtin_class_name(VALUE x); PRINTF_ARGS(void rb_warn_deprecated(const char *fmt, const char *suggest, ...), 1, 3); +PRINTF_ARGS(void rb_warn_deprecated_to_remove(const char *fmt, const char *removal, ...), 1, 3); VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list); PRINTF_ARGS(void rb_enc_warn(rb_encoding *enc, const char *fmt, ...), 2, 3); PRINTF_ARGS(void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...), 2, 3); diff --git a/object.c b/object.c index bfce958a72..166fdae7e1 100644 --- a/object.c +++ b/object.c @@ -1216,7 +1216,7 @@ rb_obj_dummy1(VALUE _x, VALUE _y) VALUE rb_obj_tainted(VALUE obj) { - rb_warn("Object#tainted? is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("Object#tainted?", "3.2"); return Qfalse; } @@ -1230,7 +1230,7 @@ rb_obj_tainted(VALUE obj) VALUE rb_obj_taint(VALUE obj) { - rb_warn("Object#taint is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("Object#taint", "3.2"); return obj; } @@ -1245,7 +1245,7 @@ rb_obj_taint(VALUE obj) VALUE rb_obj_untaint(VALUE obj) { - rb_warn("Object#untaint is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("Object#untaint", "3.2"); return obj; } @@ -1259,7 +1259,7 @@ rb_obj_untaint(VALUE obj) VALUE rb_obj_untrusted(VALUE obj) { - rb_warn("Object#untrusted? is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("Object#untrusted?", "3.2"); return Qfalse; } @@ -1273,7 +1273,7 @@ rb_obj_untrusted(VALUE obj) VALUE rb_obj_untrust(VALUE obj) { - rb_warn("Object#untrust is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("Object#untrust", "3.2"); return obj; } @@ -1288,7 +1288,7 @@ rb_obj_untrust(VALUE obj) VALUE rb_obj_trust(VALUE obj) { - rb_warn("Object#trust is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("Object#trust", "3.2"); return obj; } @@ -1299,7 +1299,7 @@ rb_obj_trust(VALUE obj) void rb_obj_infect(VALUE victim, VALUE carrier) { - rb_warn("rb_obj_infect is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("rb_obj_infect", "3.2"); } /** diff --git a/string.c b/string.c index b4b365ad4b..cdd987da19 100644 --- a/string.c +++ b/string.c @@ -910,14 +910,14 @@ rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc) VALUE rb_tainted_str_new(const char *ptr, long len) { - rb_warn("rb_tainted_str_new is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("rb_tainted_str_new", "3.2"); return rb_str_new(ptr, len); } VALUE rb_tainted_str_new_cstr(const char *ptr) { - rb_warn("rb_tainted_str_new_cstr is deprecated and will be removed in Ruby 3.2."); + rb_warn_deprecated_to_remove("rb_tainted_str_new_cstr", "3.2"); return rb_str_new_cstr(ptr); }