[ruby/erb] Warn safe_level and later args even without -w

because, when Ruby 3.1 is released, Ruby 2.5, the last version with the
old method signature, will have been EOL. Therefore we can safely warn
the old interface from Ruby 3.1.

https://github.com/ruby/erb/commit/c3a753f49f
This commit is contained in:
Takashi Kokubun 2021-01-20 20:45:55 -08:00 committed by git
parent 47b43807a8
commit 922989fa0f
2 changed files with 6 additions and 14 deletions

View File

@ -809,14 +809,14 @@ class ERB
def initialize(str, safe_level=NOT_GIVEN, legacy_trim_mode=NOT_GIVEN, legacy_eoutvar=NOT_GIVEN, trim_mode: nil, eoutvar: '_erbout') def initialize(str, safe_level=NOT_GIVEN, legacy_trim_mode=NOT_GIVEN, legacy_eoutvar=NOT_GIVEN, trim_mode: nil, eoutvar: '_erbout')
# Complex initializer for $SAFE deprecation at [Feature #14256]. Use keyword arguments to pass trim_mode or eoutvar. # Complex initializer for $SAFE deprecation at [Feature #14256]. Use keyword arguments to pass trim_mode or eoutvar.
if safe_level != NOT_GIVEN if safe_level != NOT_GIVEN
warn 'Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments.', uplevel: 1 if $VERBOSE || !ZERO_SAFE_LEVELS.include?(safe_level) warn 'Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments.', uplevel: 1
end end
if legacy_trim_mode != NOT_GIVEN if legacy_trim_mode != NOT_GIVEN
warn 'Passing trim_mode with the 3rd argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, trim_mode: ...) instead.', uplevel: 1 if $VERBOSE warn 'Passing trim_mode with the 3rd argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, trim_mode: ...) instead.', uplevel: 1
trim_mode = legacy_trim_mode trim_mode = legacy_trim_mode
end end
if legacy_eoutvar != NOT_GIVEN if legacy_eoutvar != NOT_GIVEN
warn 'Passing eoutvar with the 4th argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, eoutvar: ...) instead.', uplevel: 1 if $VERBOSE warn 'Passing eoutvar with the 4th argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, eoutvar: ...) instead.', uplevel: 1
eoutvar = legacy_eoutvar eoutvar = legacy_eoutvar
end end
@ -829,8 +829,6 @@ class ERB
end end
NOT_GIVEN = Object.new NOT_GIVEN = Object.new
private_constant :NOT_GIVEN private_constant :NOT_GIVEN
ZERO_SAFE_LEVELS = [0, nil]
private_constant :ZERO_SAFE_LEVELS
## ##
# Creates a new compiler for ERB. See ERB::Compiler.new for details # Creates a new compiler for ERB. See ERB::Compiler.new for details

View File

@ -663,26 +663,20 @@ EOS
# [deprecated] These interfaces will be removed later # [deprecated] These interfaces will be removed later
def test_deprecated_interface_warnings def test_deprecated_interface_warnings
[nil, 0].each do |safe| [nil, 0, 1, 2].each do |safe|
assert_warning(/2nd argument of ERB.new is deprecated/) do
ERB.new('', safe)
end
end
[1, 2].each do |safe|
assert_warn(/2nd argument of ERB.new is deprecated/) do assert_warn(/2nd argument of ERB.new is deprecated/) do
ERB.new('', safe) ERB.new('', safe)
end end
end end
[nil, '', '%', '%<>'].each do |trim| [nil, '', '%', '%<>'].each do |trim|
assert_warning(/3rd argument of ERB.new is deprecated/) do assert_warn(/3rd argument of ERB.new is deprecated/) do
ERB.new('', nil, trim) ERB.new('', nil, trim)
end end
end end
[nil, '_erbout', '_hamlout'].each do |eoutvar| [nil, '_erbout', '_hamlout'].each do |eoutvar|
assert_warning(/4th argument of ERB.new is deprecated/) do assert_warn(/4th argument of ERB.new is deprecated/) do
ERB.new('', nil, nil, eoutvar) ERB.new('', nil, nil, eoutvar)
end end
end end