1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Warn non-nil $\ [Feature #14240]

This commit is contained in:
Nobuyoshi Nakada 2020-01-20 17:53:46 +09:00
parent 588a86e32c
commit 6298ec2875
No known key found for this signature in database
GPG key ID: 4BC7D6DF58D8DF60
Notes: git 2020-02-23 16:49:04 +09:00
8 changed files with 37 additions and 26 deletions

8
io.c
View file

@ -7570,11 +7570,11 @@ rb_f_printf(int argc, VALUE *argv, VALUE _)
}
static void
rb_output_fs_setter(VALUE val, ID id, VALUE *var)
deprecated_str_setter(VALUE val, ID id, VALUE *var)
{
rb_str_setter(val, id, &val);
if (!NIL_P(val)) {
rb_warn_deprecated("`$,'", NULL);
rb_warn_deprecated("`%s'", NULL, rb_id2name(id));
}
*var = val;
}
@ -13282,7 +13282,7 @@ Init_IO(void)
rb_define_method(rb_cIO, "initialize", rb_io_initialize, -1);
rb_output_fs = Qnil;
rb_define_hooked_variable("$,", &rb_output_fs, 0, rb_output_fs_setter);
rb_define_hooked_variable("$,", &rb_output_fs, 0, deprecated_str_setter);
rb_default_rs = rb_fstring_lit("\n"); /* avoid modifying RS_default */
rb_gc_register_mark_object(rb_default_rs);
@ -13290,7 +13290,7 @@ Init_IO(void)
rb_output_rs = Qnil;
rb_define_hooked_variable("$/", &rb_rs, 0, rb_str_setter);
rb_define_hooked_variable("$-0", &rb_rs, 0, rb_str_setter);
rb_define_hooked_variable("$\\", &rb_output_rs, 0, rb_str_setter);
rb_define_hooked_variable("$\\", &rb_output_rs, 0, deprecated_str_setter);
rb_define_virtual_variable("$_", get_LAST_READ_LINE, set_LAST_READ_LINE);

View file

@ -4,12 +4,12 @@ require_relative 'fixtures/classes'
describe IO, "#print" do
before :each do
@old_separator = $\
$\ = '->'
suppress_warning {$\ = '->'}
@name = tmp("io_print")
end
after :each do
$\ = @old_separator
suppress_warning {$\ = @old_separator}
rm_r @name
end

View file

@ -57,10 +57,14 @@ describe "Kernel#p" do
}
-> { p(o) }.should output_to_fd("Next time, Gadget, NEXT TIME!\n")
$\ = " *helicopter sound*\n"
suppress_warning {
$\ = " *helicopter sound*\n"
}
-> { p(o) }.should output_to_fd("Next time, Gadget, NEXT TIME!\n")
$/ = " *helicopter sound*\n"
suppress_warning {
$/ = " *helicopter sound*\n"
}
-> { p(o) }.should output_to_fd("Next time, Gadget, NEXT TIME!\n")
end

View file

@ -67,18 +67,18 @@ describe "English" do
it "aliases $ORS to $\\" do
original = $\
$\ = "\t"
suppress_warning {$\ = "\t"}
$ORS.should_not be_nil
$ORS.should == $\
$\ = original
suppress_warning {$\ = original}
end
it "aliases $OUTPUT_RECORD_SEPARATOR to $\\" do
original = $\
$\ = "\t"
suppress_warning {$\ = "\t"}
$OUTPUT_RECORD_SEPARATOR.should_not be_nil
$OUTPUT_RECORD_SEPARATOR.should == $\
$\ = original
suppress_warning {$\ = original}
end
it "aliases $INPUT_LINE_NUMBER to $." do

View file

@ -39,13 +39,14 @@ describe "StringIO#print" do
end
it "honors the output record separator global" do
old_rs, $\ = $\, 'x'
old_rs = $\
suppress_warning {$\ = 'x'}
begin
@io.print(5, 6, 7, 8)
@io.string.should == '5678xle'
ensure
$\ = old_rs
suppress_warning {$\ = old_rs}
end
end
@ -58,13 +59,14 @@ describe "StringIO#print" do
end
it "correctly updates the current position when honoring the output record separator global" do
old_rs, $\ = $\, 'x'
old_rs = $\
suppress_warning {$\ = 'x'}
begin
@io.print(5, 6, 7, 8)
@io.pos.should eql(5)
ensure
$\ = old_rs
suppress_warning {$\ = old_rs}
end
end
end

View file

@ -30,11 +30,12 @@ describe "StringIO#puts when passed an Array" do
it "does not honor the global output record separator $\\" do
begin
old_rs, $\ = $\, "test"
old_rs = $\
suppress_warning {$\ = "test"}
@io.puts([1, 2, 3, 4])
@io.string.should == "1\n2\n3\n4\n"
ensure
$\ = old_rs
suppress_warning {$\ = old_rs}
end
end
@ -68,11 +69,12 @@ describe "StringIO#puts when passed 1 or more objects" do
it "does not honor the global output record separator $\\" do
begin
old_rs, $\ = $\, "test"
old_rs = $\
suppress_warning {$\ = "test"}
@io.puts(1, 2, 3, 4)
@io.string.should == "1\n2\n3\n4\n"
ensure
$\ = old_rs
suppress_warning {$\ = old_rs}
end
end
@ -117,11 +119,12 @@ describe "StringIO#puts when passed no arguments" do
it "does not honor the global output record separator $\\" do
begin
old_rs, $\ = $\, "test"
old_rs = $\
suppress_warning {$\ = "test"}
@io.puts
@io.string.should == "\n"
ensure
$\ = old_rs
suppress_warning {$\ = old_rs}
end
end
end

View file

@ -140,7 +140,7 @@ describe "CApiGlobalSpecs" do
end
after :each do
$\ = @dollar_backslash
suppress_warning {$\ = @dollar_backslash}
end
it "returns nil by default" do
@ -148,7 +148,7 @@ describe "CApiGlobalSpecs" do
end
it "returns the value of $\\" do
$\ = "foo"
suppress_warning {$\ = "foo"}
@f.rb_output_rs.should == "foo"
end
end

View file

@ -2568,8 +2568,10 @@ class TestIO < Test::Unit::TestCase
end
def test_print_separators
EnvUtil.suppress_warning {$, = ':'}
$\ = "\n"
EnvUtil.suppress_warning {
$, = ':'
$\ = "\n"
}
pipe(proc do |w|
w.print('a')
EnvUtil.suppress_warning {w.print('a','b','c')}