summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-05-15 15:17:18 -0400
committerKevin Newton <kddnewton@gmail.com>2024-05-24 12:36:54 -0400
commit47f0965269dae95c678b4276861cc389d277ce33 (patch)
tree8b597942052053ee837ac95aaeccc10a59ebc4c0
parent7021e15652194316df25830c5370611a16b8829b (diff)
Update duplicated when clause warning message
-rw-r--r--parse.y4
-rw-r--r--spec/ruby/language/case_spec.rb39
-rw-r--r--test/.excludes-prism/TestSyntax.rb1
-rw-r--r--test/ripper/test_parser_events.rb4
-rw-r--r--test/ruby/test_syntax.rb12
5 files changed, 38 insertions, 22 deletions
diff --git a/parse.y b/parse.y
index a14f49a62e..759e7415ac 100644
--- a/parse.y
+++ b/parse.y
@@ -13334,8 +13334,8 @@ check_literal_when(struct parser_params *p, NODE *arg, const YYLTYPE *loc)
else {
st_data_t line;
if (st_lookup(p->case_labels, (st_data_t)arg, &line)) {
- rb_warning1("duplicated 'when' clause with line %d is ignored",
- WARN_I((int)line));
+ rb_warning2("'when' clause on line %d duplicates 'when' clause on line %d and is ignored",
+ WARN_I((int)nd_line(arg)), WARN_I((int)line));
return;
}
}
diff --git a/spec/ruby/language/case_spec.rb b/spec/ruby/language/case_spec.rb
index 3262f09dd5..d289eca037 100644
--- a/spec/ruby/language/case_spec.rb
+++ b/spec/ruby/language/case_spec.rb
@@ -416,17 +416,34 @@ describe "The 'case'-construct" do
self.test(true).should == true
end
- it "warns if there are identical when clauses" do
- -> {
- eval <<~RUBY
- case 1
- when 2
- :foo
- when 2
- :bar
- end
- RUBY
- }.should complain(/warning: duplicated .when' clause with line \d+ is ignored/, verbose: true)
+ ruby_version_is ""..."3.4" do
+ it "warns if there are identical when clauses" do
+ -> {
+ eval <<~RUBY
+ case 1
+ when 2
+ :foo
+ when 2
+ :bar
+ end
+ RUBY
+ }.should complain(/warning: duplicated .when' clause with line \d+ is ignored/, verbose: true)
+ end
+ end
+
+ ruby_version_is "3.4" do
+ it "warns if there are identical when clauses" do
+ -> {
+ eval <<~RUBY
+ case 1
+ when 2
+ :foo
+ when 2
+ :bar
+ end
+ RUBY
+ }.should complain(/warning: 'when' clause on line \d+ duplicates 'when' clause on line \d+ and is ignored/, verbose: true)
+ end
end
end
diff --git a/test/.excludes-prism/TestSyntax.rb b/test/.excludes-prism/TestSyntax.rb
index ab672d19a6..ed4ae44318 100644
--- a/test/.excludes-prism/TestSyntax.rb
+++ b/test/.excludes-prism/TestSyntax.rb
@@ -1,4 +1,3 @@
exclude(:test_dedented_heredoc_continued_line, "https://bugs.ruby-lang.org/issues/20503")
-exclude(:test_duplicated_when, "https://bugs.ruby-lang.org/issues/20401")
exclude(:test_optional_self_reference, "https://bugs.ruby-lang.org/issues/20478")
exclude(:test_keyword_self_reference, "https://bugs.ruby-lang.org/issues/20478")
diff --git a/test/ripper/test_parser_events.rb b/test/ripper/test_parser_events.rb
index dc94da01ee..a5c7401968 100644
--- a/test/ripper/test_parser_events.rb
+++ b/test/ripper/test_parser_events.rb
@@ -1694,8 +1694,8 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
else
end
STR
- assert_match(/duplicated 'when' clause/, fmt)
- assert_equal([3], args)
+ assert_match(/duplicates 'when' clause/, fmt)
+ assert_equal([4, 3], args)
end
def test_warn_duplicated_hash_keys
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index f4c9f06459..8f94ec71fc 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -713,8 +713,8 @@ class TestSyntax < Test::Unit::TestCase
end
def test_duplicated_when
- w = 'warning: duplicated \'when\' clause with line 3 is ignored'
- assert_warning(/3: #{w}.+4: #{w}.+4: #{w}.+5: #{w}.+5: #{w}/m) {
+ w = ->(line) { "warning: 'when' clause on line #{line} duplicates 'when' clause on line 3 and is ignored" }
+ assert_warning(/#{w[3]}.+#{w[4]}.+#{w[4]}.+#{w[5]}.+#{w[5]}/m) {
eval %q{
case 1
when 1, 1
@@ -723,7 +723,7 @@ class TestSyntax < Test::Unit::TestCase
end
}
}
- assert_warning(/#{w}/) {#/3: #{w}.+4: #{w}.+5: #{w}.+5: #{w}/m){
+ assert_warning(/#{w[3]}.+#{w[4]}.+#{w[5]}.+#{w[5]}/m) {
a = a = 1
eval %q{
case 1
@@ -733,7 +733,7 @@ class TestSyntax < Test::Unit::TestCase
end
}
}
- assert_warning(/3: #{w}/m) {
+ assert_warning(/#{w[3]}/) {
eval %q{
case 1
when __LINE__, __LINE__
@@ -742,7 +742,7 @@ class TestSyntax < Test::Unit::TestCase
end
}
}
- assert_warning(/3: #{w}/m) {
+ assert_warning(/#{w[3]}/) {
eval %q{
case 1
when __FILE__, __FILE__
@@ -754,7 +754,7 @@ class TestSyntax < Test::Unit::TestCase
end
def test_duplicated_when_check_option
- w = /duplicated \'when\' clause with line 3 is ignored/
+ w = /'when' clause on line 4 duplicates 'when' clause on line 3 and is ignored/
assert_in_out_err(%[-wc], "#{<<~"begin;"}\n#{<<~'end;'}", ["Syntax OK"], w)
begin;
case 1