From add92dd3917dc89f1ad219d497e0014d1a245a33 Mon Sep 17 00:00:00 2001 From: Steve Hancock Date: Thu, 16 May 2024 13:31:59 -0700 Subject: [PATCH] fix b1471 --- dev-bin/run_convergence_tests.pl.data | 16 ++++++++++++++++ dev-bin/run_convergence_tests.pl.expect | 11 +++++++++++ lib/Perl/Tidy/Formatter.pm | 22 ++++++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/dev-bin/run_convergence_tests.pl.data b/dev-bin/run_convergence_tests.pl.data index f795902f..93ded12d 100644 --- a/dev-bin/run_convergence_tests.pl.data +++ b/dev-bin/run_convergence_tests.pl.data @@ -12101,6 +12101,22 @@ my @outer = ( --break-before-paren=2 --opening-square-bracket-right +==> b1471.in <== +my @global_ops = ( + { "|" => sub { $_[0] unless $_[1]; } }, + { "&" => sub { ( $_[0] && $_[1] ) ? $_[0] : 0; }, }, +); + +my @global_ops = ( + { "|" => sub { $_[0] unless $_[1]; }, }, + { "&" => sub { ( $_[0] && $_[1] ) ? $_[0] : 0; } }, +); + +==> b1471.par <== +--add-trailing-commas +--want-trailing-commas='*' +--delete-weld-interfering-commas + ==> b148.in <== # state 1 @yydgoto=( diff --git a/dev-bin/run_convergence_tests.pl.expect b/dev-bin/run_convergence_tests.pl.expect index 2b3ab805..0b4be494 100644 --- a/dev-bin/run_convergence_tests.pl.expect +++ b/dev-bin/run_convergence_tests.pl.expect @@ -8211,6 +8211,17 @@ my @outer = ], ); +==> b1471 <== +my @global_ops = ( + { "|" => sub { $_[0] unless $_[1]; } }, + { "&" => sub { ( $_[0] && $_[1] ) ? $_[0] : 0; } }, +); + +my @global_ops = ( + { "|" => sub { $_[0] unless $_[1]; } }, + { "&" => sub { ( $_[0] && $_[1] ) ? $_[0] : 0; } }, +); + ==> b148 <== # state 1 @yydgoto=( diff --git a/lib/Perl/Tidy/Formatter.pm b/lib/Perl/Tidy/Formatter.pm index e14380cc..2d95f03c 100644 --- a/lib/Perl/Tidy/Formatter.pm +++ b/lib/Perl/Tidy/Formatter.pm @@ -12419,6 +12419,28 @@ sub match_trailing_comma_rule { my $K_opening = $self->[_K_opening_container_]->{$type_sequence}; return if ( !defined($K_opening) ); + # Do not add a comma which will be deleted by + # --delete-weld-interfering commas (b1471) + if ( $if_add + && $rOpts_delete_weld_interfering_commas + && !$comma_count + && $is_closing_type{$last_nonblank_code_type} ) + { + # Back up to the previous token + my $Kpp = $self->K_previous_nonblank( undef, $rLL_new ); + if ( defined($Kpp) ) { + my $seqno_pp = $rLL_new->[$Kpp]->[_TYPE_SEQUENCE_]; + my $type_pp = $rLL_new->[$Kpp]->[_TYPE_]; + + # The containers would have to be nesting, so + # sequence numbers must differ by 1 + return + if ( $seqno_pp + && $is_closing_type{$type_pp} + && ( $seqno_pp == $type_sequence + 1 ) ); + } + } + # multiline definition 1: opening and closing tokens on different lines my $iline_o = $rLL_new->[$K_opening]->[_LINE_INDEX_]; my $iline_c = $rLL->[$KK]->[_LINE_INDEX_]; -- 2.39.5