diff options
author | Jeremy Evans <code@jeremyevans.net> | 2022-12-20 12:44:11 -0800 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2022-12-22 11:50:26 -0800 |
commit | 7e8fa06022a9e412e3f8e6c8b6f0ba1909f648d5 (patch) | |
tree | d677df86e4df121b3b005fa7d91c1a084e7734fc /re.c | |
parent | 9dcee2d80ee995e11b0fd437d4a94930ccb6db67 (diff) |
Always issue deprecation warning when calling Regexp.new with 3rd positional argument
Previously, only certain values of the 3rd argument triggered a
deprecation warning.
First step for fix for bug #18797. Support for the 3rd argument
will be removed after the release of Ruby 3.2.
Fix minor fallout discovered by the tests.
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6976
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 24 |
1 files changed, 10 insertions, 14 deletions
@@ -3759,10 +3759,11 @@ struct reg_init_args { static VALUE reg_extract_args(int argc, VALUE *argv, struct reg_init_args *args); static VALUE reg_init_args(VALUE self, VALUE str, rb_encoding *enc, int flags); +void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...); /* * call-seq: - * Regexp.new(string, options = 0, n_flag = nil, timeout: nil) -> regexp + * Regexp.new(string, options = 0, timeout: nil) -> regexp * Regexp.new(regexp, timeout: nil) -> regexp * * With argument +string+ given, returns a new regexp with the given string @@ -3780,24 +3781,18 @@ static VALUE reg_init_args(VALUE self, VALUE str, rb_encoding *enc, int flags); * Regexp.new('foo', 'im') # => /foo/im * * - The logical OR of one or more of the constants - * Regexp::EXTENDED, Regexp::IGNORECASE, and Regexp::MULTILINE: + * Regexp::EXTENDED, Regexp::IGNORECASE, Regexp::MULTILINE, and + * Regexp::NOENCODING: * * Regexp.new('foo', Regexp::IGNORECASE) # => /foo/i * Regexp.new('foo', Regexp::EXTENDED) # => /foo/x * Regexp.new('foo', Regexp::MULTILINE) # => /foo/m + * Regexp.new('foo', Regexp::NOENCODING) # => /foo/n * flags = Regexp::IGNORECASE | Regexp::EXTENDED | Regexp::MULTILINE * Regexp.new('foo', flags) # => /foo/mix * * - +nil+ or +false+, which is ignored. * - * If optional argument +n_flag+ if it is a string starts with - * <code>'n'</code> or <code>'N'</code>, the encoding of +string+ is - * ignored and the new regexp encoding is fixed to +ASCII-8BIT+ or - * +US-ASCII+, by its content. - * - * Regexp.new('foo', nil, 'n') # => /foo/n - * Regexp.new("\u3042", nil, 'n') # => /\xE3\x81\x82/n - * * If optional keyword argument +timeout+ is given, * its float value overrides the timeout interval for the class, * Regexp.timeout. @@ -3841,7 +3836,7 @@ reg_extract_args(int argc, VALUE *argv, struct reg_init_args *args) VALUE str, src, opts = Qundef, n_flag = Qundef, kwargs; VALUE re = Qnil; - rb_scan_args(argc, argv, "12:", &src, &opts, &n_flag, &kwargs); + argc = rb_scan_args(argc, argv, "12:", &src, &opts, &n_flag, &kwargs); args->timeout = Qnil; if (!NIL_P(kwargs)) { @@ -3852,6 +3847,10 @@ reg_extract_args(int argc, VALUE *argv, struct reg_init_args *args) rb_get_kwargs(kwargs, keywords, 0, 1, &args->timeout); } + if (argc == 3) { + rb_warn_deprecated_to_remove("3.3", "3rd argument to Regexp.new", "2nd argument"); + } + if (RB_TYPE_P(src, T_REGEXP)) { re = src; @@ -3876,9 +3875,6 @@ reg_extract_args(int argc, VALUE *argv, struct reg_init_args *args) enc = rb_ascii8bit_encoding(); flags |= ARG_ENCODING_NONE; } - else { - rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, "encoding option is ignored - %s", kcode); - } } str = StringValue(src); } |