diff options
author | Nobuyoshi Nakada <[email protected]> | 2022-12-21 14:07:54 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2022-12-21 14:09:12 +0900 |
commit | 502ca37dde288d20fed6e6ea34f4ab3299de7777 (patch) | |
tree | cad3f61822ef1b31e72e6d83b6885c8f32671dfc | |
parent | afd46429fcdb83aa9fa7c193ede40bff3f3ff151 (diff) |
[ruby/optparse] The encoding argument of `Regexp.new` has been ignored since 1.9
https://github.com/ruby/optparse/commit/766f567405
-rw-r--r-- | lib/optparse.rb | 19 | ||||
-rw-r--r-- | test/optparse/test_optparse.rb | 3 |
2 files changed, 19 insertions, 3 deletions
diff --git a/lib/optparse.rb b/lib/optparse.rb index dc2b8a060f..b9126465e0 100644 --- a/lib/optparse.rb +++ b/lib/optparse.rb @@ -2084,10 +2084,23 @@ XXX f |= Regexp::IGNORECASE if /i/ =~ o f |= Regexp::MULTILINE if /m/ =~ o f |= Regexp::EXTENDED if /x/ =~ o - k = o.delete("imx") - k = nil if k.empty? + case o = o.delete("imx") + when "" + when "u" + s = s.encode(Encoding::UTF_8) + when "e" + s = s.encode(Encoding::EUC_JP) + when "s" + s = s.encode(Encoding::SJIS) + when "n" + f |= Regexp::NOENCODING + else + raise OptionParser::InvalidArgument, "unknown regexp option - #{o}" + end + else + s ||= all end - Regexp.new(s || all, f, k) + Regexp.new(s, f) end # diff --git a/test/optparse/test_optparse.rb b/test/optparse/test_optparse.rb index 5a0593d9bb..bfa705ad03 100644 --- a/test/optparse/test_optparse.rb +++ b/test/optparse/test_optparse.rb @@ -63,6 +63,9 @@ class TestOptionParser < Test::Unit::TestCase assert_equal(/foo/i, @reopt) assert_equal(%w"", no_error {@opt.parse!(%w"--regexp=/foo/n")}) assert_equal(/foo/n, @reopt) + assert_equal(%w"", no_error {@opt.parse!(%W"--regexp=/\u{3042}/s")}) + assert_equal(Encoding::Windows_31J, @reopt.encoding) + assert_equal("\x82\xa0".force_encoding(Encoding::Windows_31J), @reopt.source) end def test_into |