From: Steve Hancock Date: Mon, 21 Aug 2023 04:52:17 +0000 (-0700) Subject: sharpen identification of indirect objects X-Git-Tag: 20230701.03~7 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=53e5281461d61264e96bda09b78373c9572941d5;p=perltidy.git sharpen identification of indirect objects --- diff --git a/lib/Perl/Tidy/Tokenizer.pm b/lib/Perl/Tidy/Tokenizer.pm index 00c7e07b..bbf61d82 100644 --- a/lib/Perl/Tidy/Tokenizer.pm +++ b/lib/Perl/Tidy/Tokenizer.pm @@ -2719,6 +2719,20 @@ EOM return; } ## end sub do_VERTICAL_LINE + # An identifier in possible indirect object location followed by any of + # these tokens: -> , ; } (plus others) is not an indirect object. Fix c257. + my %Z_test_hash; + + BEGIN { + my @q = qw# + -> ; } ) ] + => =~ = == !~ || >= != *= .. && |= .= -= += <= %= + ^= &&= ||= //= <=> + #; + push @q, ','; + @{Z_test_hash}{@q} = (1) x scalar(@q); + } + sub do_DOLLAR_SIGN { my $self = shift; @@ -2747,11 +2761,12 @@ EOM { # An identifier followed by '->' is not indirect object; - # fixes b1175, b1176 - my ( $next_nonblank_type, $i_next ) = - $self->find_next_noncomment_type( $i, $rtokens, + # fixes b1175, b1176. Fix c257: Likewise for other tokens like + # comma, semicolon, closing brace, ... + my ( $next_nonblank_token, $i_next ) = + $self->find_next_noncomment_token( $i, $rtokens, $max_token_index ); - $type = 'Z' if ( $next_nonblank_type ne '->' ); + $type = 'Z' if ( !$Z_test_hash{$next_nonblank_token} ); } return; } ## end sub do_DOLLAR_SIGN @@ -8935,7 +8950,7 @@ sub find_next_nonblank_token { return ( $next_nonblank_token, $i ); } ## end sub find_next_nonblank_token -sub find_next_noncomment_type { +sub find_next_noncomment_token { my ( $self, $i, $rtokens, $max_token_index ) = @_; # Given the current character position, look ahead past any comments @@ -8974,7 +8989,7 @@ sub find_next_noncomment_type { } return ( $next_nonblank_token, $i_next ); -} ## end sub find_next_noncomment_type +} ## end sub find_next_noncomment_token sub is_possible_numerator { diff --git a/t/snippets/expect/essential.essential2 b/t/snippets/expect/essential.essential2 index 71fa6035..1a055453 100644 --- a/t/snippets/expect/essential.essential2 +++ b/t/snippets/expect/essential.essential2 @@ -118,7 +118,9 @@ xvals$a + 0.1 * -yvals$a; +yvals +$a +; # keep paren separate here: use Foo::Bar ( diff --git a/t/snippets/expect/kgb2.def b/t/snippets/expect/kgb2.def index 98e8f1fc..71db040c 100644 --- a/t/snippets/expect/kgb2.def +++ b/t/snippets/expect/kgb2.def @@ -1,7 +1,7 @@ # with -kgb, do no break after last my sub next_sibling { my $self = shift; - my $parent = $_PARENT{ refaddr $self} or return ''; + my $parent = $_PARENT{ refaddr $self } or return ''; my $key = refaddr $self; my $elements = $parent->{children}; my $position = List::MoreUtils::firstidx { diff --git a/t/snippets/expect/kgb2.kgb b/t/snippets/expect/kgb2.kgb index 889c85ac..7e4838bf 100644 --- a/t/snippets/expect/kgb2.kgb +++ b/t/snippets/expect/kgb2.kgb @@ -2,7 +2,7 @@ sub next_sibling { my $self = shift; - my $parent = $_PARENT{ refaddr $self} or return ''; + my $parent = $_PARENT{ refaddr $self } or return ''; my $key = refaddr $self; my $elements = $parent->{children}; my $position = List::MoreUtils::firstidx { diff --git a/t/snippets/expect/tick1.def b/t/snippets/expect/tick1.def index 85e21288..4a14d9b5 100644 --- a/t/snippets/expect/tick1.def +++ b/t/snippets/expect/tick1.def @@ -4,7 +4,7 @@ print $p'u'a; # print "mooo" sub a::that { $p't'u = "wwoo\n"; - return sub { print $p't'u} + return sub { print $p't'u } } $a'that = a'that(); $a'that->(); # print "wwoo" diff --git a/t/snippets/packing_list.txt b/t/snippets/packing_list.txt index 98bc25a8..66fcffff 100644 --- a/t/snippets/packing_list.txt +++ b/t/snippets/packing_list.txt @@ -395,6 +395,8 @@ ../snippets28.t xbt.xbt1 ../snippets28.t xbt.xbt2 ../snippets28.t xbt.xbt3 +../snippets28.t lrt.def +../snippets28.t lrt.lrt ../snippets3.t ce_wn1.ce_wn ../snippets3.t ce_wn1.def ../snippets3.t colin.colin @@ -535,5 +537,3 @@ ../snippets9.t rt98902.def ../snippets9.t rt98902.rt98902 ../snippets9.t rt99961.def -../snippets28.t lrt.def -../snippets28.t lrt.lrt diff --git a/t/snippets11.t b/t/snippets11.t index a9d7dd02..ec0a8e14 100644 --- a/t/snippets11.t +++ b/t/snippets11.t @@ -362,7 +362,7 @@ print $p'u'a; # print "mooo" sub a::that { $p't'u = "wwoo\n"; - return sub { print $p't'u} + return sub { print $p't'u } } $a'that = a'that(); $a'that->(); # print "wwoo" diff --git a/t/snippets14.t b/t/snippets14.t index aca0d365..5a85f4af 100644 --- a/t/snippets14.t +++ b/t/snippets14.t @@ -711,7 +711,7 @@ exit 1; # with -kgb, do no break after last my sub next_sibling { my $self = shift; - my $parent = $_PARENT{ refaddr $self} or return ''; + my $parent = $_PARENT{ refaddr $self } or return ''; my $key = refaddr $self; my $elements = $parent->{children}; my $position = List::MoreUtils::firstidx { @@ -732,7 +732,7 @@ sub next_sibling { sub next_sibling { my $self = shift; - my $parent = $_PARENT{ refaddr $self} or return ''; + my $parent = $_PARENT{ refaddr $self } or return ''; my $key = refaddr $self; my $elements = $parent->{children}; my $position = List::MoreUtils::firstidx { diff --git a/t/snippets3.t b/t/snippets3.t index f1c77f59..067427d2 100644 --- a/t/snippets3.t +++ b/t/snippets3.t @@ -561,7 +561,9 @@ xvals$a + 0.1 * -yvals$a; +yvals +$a +; # keep paren separate here: use Foo::Bar (