aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-12-20 14:29:42 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-12-20 14:34:32 +0900
commita8bddb3a189545a2bef8ee7cffdb328d8de7974c (patch)
tree8a37d7c86b1f39ec95b46bc96c4d12794796c285
parent435a4ca2a38f3be1f5d2db0f71487a52c8285e9c (diff)
downloadruby-a8bddb3a189545a2bef8ee7cffdb328d8de7974c.tar.gz
Refined the warning message for numbered-parameter like variables
[Bug #16438]
-rw-r--r--parse.y2
-rw-r--r--test/ruby/test_syntax.rb13
2 files changed, 8 insertions, 7 deletions
diff --git a/parse.y b/parse.y
index 7247afafa3..05e2c1d552 100644
--- a/parse.y
+++ b/parse.y
@@ -11836,7 +11836,7 @@ static void
numparam_name(struct parser_params *p, ID id)
{
if (!NUMPARAM_ID_P(id)) return;
- rb_warn1("`_%d' is used as numbered parameter",
+ rb_warn1("`_%d' is reserved as numbered parameter",
WARN_I(NUMPARAM_ID_TO_IDX(id)));
}
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index 5eb69c5144..540ab7b84a 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -1437,12 +1437,13 @@ eom
assert_syntax_error('-> {_1; -> {_2}}', /numbered parameter is already used/)
assert_syntax_error('-> {-> {_1}; _2}', /numbered parameter is already used/)
assert_syntax_error('proc {_1; _1 = nil}', /Can't assign to numbered parameter _1/)
- assert_warn(/`_1' is used as numbered parameter/) {eval('proc {_1 = nil}')}
- assert_warn(/`_2' is used as numbered parameter/) {eval('_2=1')}
- assert_warn(/`_3' is used as numbered parameter/) {eval('proc {|_3|}')}
- assert_warn(/`_4' is used as numbered parameter/) {instance_eval('def x(_4) end')}
- assert_warn(/`_5' is used as numbered parameter/) {instance_eval('def _5; end')}
- assert_warn(/`_6' is used as numbered parameter/) {instance_eval('def self._6; end')}
+ mesg = proc {|n| /`_#{n}' is reserved as numbered parameter/}
+ assert_warn(mesg[1]) {eval('proc {_1 = nil}')}
+ assert_warn(mesg[2]) {eval('_2=1')}
+ assert_warn(mesg[3]) {eval('proc {|_3|}')}
+ assert_warn(mesg[4]) {instance_eval('def x(_4) end')}
+ assert_warn(mesg[5]) {instance_eval('def _5; end')}
+ assert_warn(mesg[6]) {instance_eval('def self._6; end')}
assert_raise_with_message(NameError, /undefined local variable or method `_1'/) {
eval('_1')
}