return \@package_list;
} ## end sub find_packages
-sub dump_block_summary {
+sub find_selected_blocks {
my ($self) = @_;
- # Dump information about selected code blocks to STDOUT
- # This sub is called when
- # --dump-block-summary (-dbs) is set.
+ # Find blocks needed for --dump-block-summary
+ # Returns:
+ # $rslected_blocks = ref to a list of information on the selected blocks
+
# The following controls are available:
# --dump-block-types=s (-dbt=s), where s is a list of block types
# (if else elsif for foreach while do ... sub) ; default is 'sub'
my $ris_asub_block = $self->[_ris_asub_block_];
my $ris_sub_block = $self->[_ris_sub_block_];
- my $input_stream_name = get_input_stream_name();
-
my $rOpts_dump_block_minimum_lines = $rOpts->{'dump-block-minimum-lines'};
if ( !defined($rOpts_dump_block_minimum_lines) ) {
$rOpts_dump_block_minimum_lines = 20;
# Get level variation info for code blocks
my $rlevel_info = $self->find_level_info();
- my $rselected_blocks = {};
-
- #-------------------------------------
- # Loop to get info for selected blocks
- #-------------------------------------
+ my @selected_blocks;
- BLOCK_SUMMARY_LOOP:
+ #-------------------------------------------
+ # BEGIN loop to get info for selected blocks
+ #-------------------------------------------
foreach my $seqno ( keys %{$rblock_type_of_seqno} ) {
my $type;
my $lx_close = $rLL->[$K_closing]->[_LINE_INDEX_];
my $line_count = $lx_close - $lx_open;
if ( $line_count < $rOpts_dump_block_minimum_lines ) {
- next BLOCK_SUMMARY_LOOP;
+ next;
}
my $line_of_tokens = $rlines->[$lx_open];
DEVEL_MODE && Fault(<<EOM);
unexpected line_type=$line_type at line $lx_open, code type=$CODE_type
EOM
- next BLOCK_SUMMARY_LOOP;
+ next;
}
# Skip closures unless type 'closure' is explicitely requested
}
}
else {
- next BLOCK_SUMMARY_LOOP;
+ next;
}
my ( $max_change, $total_change ) = ( 0, 0 );
$total_change = $tv;
$max_change = $maximum_depth - $starting_depth + 1;
}
- $rselected_blocks->{$seqno} = {
+ push @selected_blocks,
+ {
line_start => $lx_open + 1,
line_count => $line_count,
name => $name,
level => $level,
max_change => $max_change,
total_change => $total_change,
- };
- }
+ };
+ } ## END loop to get info for selected blocks
+ return \@selected_blocks;
+} ## end sub find_selected_blocks
+
+sub dump_block_summary {
+ my ($self) = @_;
+
+ # Dump information about selected code blocks to STDOUT
+ # This sub is called when
+ # --dump-block-summary (-dbs) is set.
+
+ # get block info
+ my $rselected_blocks = $self->find_selected_blocks();
# get package info
my $rpackage_list = $self->find_packages();
- #---------------------------
- # Dump the results to STDOUT
- #---------------------------
+ return if ( !@{$rselected_blocks} && !@{$rpackage_list} );
- return if ( !%{$rselected_blocks} && !@{$rpackage_list} );
+ my $input_stream_name = get_input_stream_name();
+ # Merge and print to STDOUT
my $routput_lines = [];
- foreach my $seqno ( sort { $a <=> $b } keys %{$rselected_blocks} ) {
- my $line_start = $rselected_blocks->{$seqno}->{line_start};
- my $line_count = $rselected_blocks->{$seqno}->{line_count};
- my $type = $rselected_blocks->{$seqno}->{type};
- my $name = $rselected_blocks->{$seqno}->{name};
- my $level = $rselected_blocks->{$seqno}->{level};
- my $max_change = $rselected_blocks->{$seqno}->{max_change};
- my $total_change = $rselected_blocks->{$seqno}->{total_change};
-
- my $rline_vars = [
- $input_stream_name, $line_start, $line_count,
- $type, $name, $level,
- $max_change, $total_change
- ];
- push @{$routput_lines}, $rline_vars;
- }
-
- # merge any package lines
- my $rpackage_lines = [];
- foreach my $item ( @{$rpackage_list} ) {
+ foreach my $item ( @{$rselected_blocks}, @{$rpackage_list} ) {
my $line_start = $item->{line_start};
my $line_count = $item->{line_count};
my $type = $item->{type};
my $level = $item->{level};
my $max_change = $item->{max_change};
my $total_change = $item->{total_change};
- my $rline_vars = [
+
+ my $rline_vars = [
$input_stream_name, $line_start, $line_count,
$type, $name, $level,
$max_change, $total_change
push @{$routput_lines}, $rline_vars;
}
- my @merged_lines =
- sort { $a->[1] <=> $b->[1] } ( @{$routput_lines}, @{$rpackage_lines} );
+ my @merged_lines = sort { $a->[1] <=> $b->[1] } @{$routput_lines};
print STDOUT
"file,line,line_count,type,name,level,max_change,total_change\n";