aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-12-17 17:17:07 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-12-19 09:52:17 +0900
commitc6c67254fb17b3196a7b0d3fda4650f6b20a467d (patch)
tree8991858d6822ea27d9bc492080d2af00236c5ea5
parent7aa8a786740fd84bd718b0c055f190b25a8f0277 (diff)
downloadruby-c6c67254fb17b3196a7b0d3fda4650f6b20a467d.tar.gz
Added rb_warn_deprecated
-rw-r--r--enumerator.c2
-rw-r--r--error.c16
-rw-r--r--hash.c4
-rw-r--r--internal.h1
-rw-r--r--io.c16
-rw-r--r--proc.c4
6 files changed, 30 insertions, 13 deletions
diff --git a/enumerator.c b/enumerator.c
index e85c911e4a..73bca61df2 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -466,7 +466,7 @@ enumerator_initialize(int argc, VALUE *argv, VALUE obj)
}
else {
rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
- rb_warn("Enumerator.new without a block is deprecated; use Object#to_enum");
+ rb_warn_deprecated("Enumerator.new without a block", "Object#to_enum");
recv = *argv++;
if (--argc) {
meth = *argv++;
diff --git a/error.c b/error.c
index 4cb17df292..e5dc0c3852 100644
--- a/error.c
+++ b/error.c
@@ -325,6 +325,22 @@ rb_enc_warning(rb_encoding *enc, const char *fmt, ...)
}
#endif
+void
+rb_warn_deprecated(const char *fmt, const char *suggest, ...)
+{
+ if (NIL_P(ruby_verbose)) return;
+ if (!rb_warning_category_enabled_p(RB_WARN_CATEGORY_DEPRECATED)) return;
+ va_list args;
+ va_start(args, suggest);
+ VALUE mesg = warning_string(0, fmt, args);
+ va_end(args);
+ rb_str_set_len(mesg, RSTRING_LEN(mesg) - 1);
+ rb_str_cat_cstr(mesg, " is deprecated");
+ if (suggest) rb_str_catf(mesg, "; use %s instead", suggest);
+ rb_str_cat_cstr(mesg, "\n");
+ rb_write_warning_str(mesg);
+}
+
static inline int
end_with_asciichar(VALUE str, int c)
{
diff --git a/hash.c b/hash.c
index 27d1d03848..79f69f63be 100644
--- a/hash.c
+++ b/hash.c
@@ -2245,7 +2245,7 @@ rb_hash_key(VALUE hash, VALUE value)
static VALUE
rb_hash_index(VALUE hash, VALUE value)
{
- rb_warn("Hash#index is deprecated; use Hash#key");
+ rb_warn_deprecated("Hash#index", "Hash#key");
return rb_hash_key(hash, value);
}
@@ -5861,7 +5861,7 @@ env_key(VALUE dmy, VALUE value)
static VALUE
env_index(VALUE dmy, VALUE value)
{
- rb_warn("ENV.index is deprecated; use ENV.key");
+ rb_warn_deprecated("ENV.index", "ENV.key");
return env_key(dmy, value);
}
diff --git a/internal.h b/internal.h
index fc2ff0eaff..2812b631be 100644
--- a/internal.h
+++ b/internal.h
@@ -1547,6 +1547,7 @@ void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
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);
#ifdef RUBY_ENCODING_H
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);
diff --git a/io.c b/io.c
index eaaccbbe07..caef68c769 100644
--- a/io.c
+++ b/io.c
@@ -3810,7 +3810,7 @@ rb_io_each_line(int argc, VALUE *argv, VALUE io)
static VALUE
rb_io_lines(int argc, VALUE *argv, VALUE io)
{
- rb_warn("IO#lines is deprecated; use #each_line instead");
+ rb_warn_deprecated("IO#lines", "#each_line");
if (!rb_block_given_p())
return rb_enumeratorize(io, ID2SYM(rb_intern("each_line")), argc, argv);
return rb_io_each_line(argc, argv, io);
@@ -3861,7 +3861,7 @@ rb_io_each_byte(VALUE io)
static VALUE
rb_io_bytes(VALUE io)
{
- rb_warn("IO#bytes is deprecated; use #each_byte instead");
+ rb_warn_deprecated("IO#bytes", "#each_byte");
if (!rb_block_given_p())
return rb_enumeratorize(io, ID2SYM(rb_intern("each_byte")), 0, 0);
return rb_io_each_byte(io);
@@ -4015,7 +4015,7 @@ rb_io_each_char(VALUE io)
static VALUE
rb_io_chars(VALUE io)
{
- rb_warn("IO#chars is deprecated; use #each_char instead");
+ rb_warn_deprecated("IO#chars", "#each_char");
if (!rb_block_given_p())
return rb_enumeratorize(io, ID2SYM(rb_intern("each_char")), 0, 0);
return rb_io_each_char(io);
@@ -4143,7 +4143,7 @@ rb_io_each_codepoint(VALUE io)
static VALUE
rb_io_codepoints(VALUE io)
{
- rb_warn("IO#codepoints is deprecated; use #each_codepoint instead");
+ rb_warn_deprecated("IO#codepoints", "#each_codepoint");
if (!rb_block_given_p())
return rb_enumeratorize(io, ID2SYM(rb_intern("each_codepoint")), 0, 0);
return rb_io_each_codepoint(io);
@@ -12479,7 +12479,7 @@ argf_each_line(int argc, VALUE *argv, VALUE argf)
static VALUE
argf_lines(int argc, VALUE *argv, VALUE argf)
{
- rb_warn("ARGF#lines is deprecated; use #each_line instead");
+ rb_warn_deprecated("ARGF#lines", "#each_line");
if (!rb_block_given_p())
return rb_enumeratorize(argf, ID2SYM(rb_intern("each_line")), argc, argv);
return argf_each_line(argc, argv, argf);
@@ -12526,7 +12526,7 @@ argf_each_byte(VALUE argf)
static VALUE
argf_bytes(VALUE argf)
{
- rb_warn("ARGF#bytes is deprecated; use #each_byte instead");
+ rb_warn_deprecated("ARGF#bytes", "#each_byte");
if (!rb_block_given_p())
return rb_enumeratorize(argf, ID2SYM(rb_intern("each_byte")), 0, 0);
return argf_each_byte(argf);
@@ -12565,7 +12565,7 @@ argf_each_char(VALUE argf)
static VALUE
argf_chars(VALUE argf)
{
- rb_warn("ARGF#chars is deprecated; use #each_char instead");
+ rb_warn_deprecated("ARGF#chars", "#each_char");
if (!rb_block_given_p())
return rb_enumeratorize(argf, ID2SYM(rb_intern("each_char")), 0, 0);
return argf_each_char(argf);
@@ -12604,7 +12604,7 @@ argf_each_codepoint(VALUE argf)
static VALUE
argf_codepoints(VALUE argf)
{
- rb_warn("ARGF#codepoints is deprecated; use #each_codepoint instead");
+ rb_warn_deprecated("ARGF#codepoints", "#each_codepoint");
if (!rb_block_given_p())
return rb_enumeratorize(argf, ID2SYM(rb_intern("each_codepoint")), 0, 0);
return argf_each_codepoint(argf);
diff --git a/proc.c b/proc.c
index b1b673501e..54b044f421 100644
--- a/proc.c
+++ b/proc.c
@@ -758,8 +758,8 @@ proc_new(VALUE klass, int8_t is_lambda, int8_t kernel)
}
else {
const char *name = kernel ? "Kernel#proc" : "Proc.new";
- rb_warn("Capturing the given block using %s is deprecated; "
- "use `&block` instead", name);
+ rb_warn_deprecated("Capturing the given block using %s",
+ "`&block`", name);
}
}
#else