Perl-Tidy
view release on metacpan or search on metacpan
lib/Perl/Tidy/Formatter.pm view on Meta::CPAN
# i.e., ($str=~/(\d+)(\w+)/) may be a list of n items
return if ( $type eq '=~' );
$KK_last_last_nb = $KK_last_nb;
$KK_last_nb = $KK_this_nb;
$KK_this_nb = $KK;
my $token = $rLL->[$KK]->[_TOKEN_];
# Handle a sequenced item
if ( my $seqno = $rLL->[$KK]->[_TYPE_SEQUENCE_] ) {
if ( $is_opening_type{$type} ) {
if ( $token eq '(' ) {
# Skip past args to args to subs not returning
# lists, like 'pop(' 'length('
if ($KK_last_nb) {
my $token_last = $rLL->[$KK_last_nb]->[_TOKEN_];
my $type_last = $rLL->[$KK_last_nb]->[_TYPE_];
if ( $type_last eq 'k'
&& $is_non_interfering_keyword{$token_last} )
{
$KK = $self->[_K_closing_container_]->{$seqno};
next;
}
}
# If not a list..
if ( !$self->[_ris_list_by_seqno_]->{$seqno} ) {
# always enter a container following 'return', as in:
# return (find_sub($subname) =~ /^(.*):(\d+)-(\d+)$/);
if ( $is_return_list && $KK_last_nb == $K_list_start ) {
push @seqno_stack, $seqno;
next;
}
my $Kc = $self->[_K_closing_container_]->{$seqno};
if ( !$Kc ) { $backup_on_last->(); last }
# Enter nested parens with inner list
# ( ( $v1, $v2) )
# | | | |
# $KK $Kn $Kc_p $Kc
if ( $self->[_rhas_list_]->{$seqno} ) {
my $Kc_p = $self->K_previous_code($Kc);
if ( $Kc_p && $rLL->[$Kc_p]->[_TOKEN_] eq ')' ) {
my $seqno_c_p =
$rLL->[$Kc_p]->[_TYPE_SEQUENCE_];
if ( $seqno_c_p && $seqno_c_p == $seqno + 1 ) {
my $Kn = $self->K_next_code($KK);
if ( $Kn && $rLL->[$Kn]->[_TOKEN_] eq '(' )
{
push @seqno_stack, $seqno;
next;
}
}
}
}
# enter a list slice, such as '(caller)[1,2]'
my $Kn = $self->K_next_code($Kc);
if ( $Kn && $rLL->[$Kn]->[_TOKEN_] eq '[' ) {
my $seqno_next = $rLL->[$Kn]->[_TYPE_SEQUENCE_];
if ( $seqno_next
&& $self->[_ris_list_by_seqno_]->{$seqno_next} )
{
$KK = $Kn;
push @seqno_stack, $seqno_next;
next;
}
}
my $KK_n = $self->K_next_code($KK);
if ($KK_n) {
# look for something like return (@list), which
# will not be marked as a list due to lack of a
# comma
my $type_KK_n = $rLL->[$KK_n]->[_TYPE_];
my $token_KK_n = $rLL->[$KK_n]->[_TOKEN_];
if ( $type_KK_n eq 't' || $type_KK_n eq 'i' ) {
my $sigil = substr( $token_KK_n, 0, 1 );
if ( $sigil eq '@' || $sigil eq '%' ) { return }
}
elsif ( $type_KK_n eq 'k' ) {
# look for something like
# return (map { ...
if ( !$is_non_interfering_keyword{$token_KK_n} )
{
return;
}
}
else { }
}
}
# a list..
else {
# Descend into a paren list in some special cases:
if ($KK_last_nb) {
my $token_last = $rLL->[$KK_last_nb]->[_TOKEN_];
my $type_last = $rLL->[$KK_last_nb]->[_TYPE_];
# 'return (' or 'my ('
my $ok = $type_last eq 'k'
&& ( $token_last eq 'return'
|| $token_last eq 'my' );
# ',('
$ok ||= $type_last eq ',';
# '(('
$ok ||= $token_last eq '(';
# 'wantarray ? ('
$ok ||=
$KK_last_last_nb
( run in 1.283 second using v1.01-cache-2.11-cpan-8dfa8b56332 )