diff options
author | Kevin Newton <kddnewton@gmail.com> | 2024-05-15 15:17:18 -0400 |
---|---|---|
committer | Kevin Newton <kddnewton@gmail.com> | 2024-05-24 12:36:54 -0400 |
commit | 47f0965269dae95c678b4276861cc389d277ce33 (patch) | |
tree | 8b597942052053ee837ac95aaeccc10a59ebc4c0 | |
parent | 7021e15652194316df25830c5370611a16b8829b (diff) |
Update duplicated when clause warning message
-rw-r--r-- | parse.y | 4 | ||||
-rw-r--r-- | spec/ruby/language/case_spec.rb | 39 | ||||
-rw-r--r-- | test/.excludes-prism/TestSyntax.rb | 1 | ||||
-rw-r--r-- | test/ripper/test_parser_events.rb | 4 | ||||
-rw-r--r-- | test/ruby/test_syntax.rb | 12 |
5 files changed, 38 insertions, 22 deletions
@@ -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 |