File Coverage

blib/lib/PLS/Parser/Element/Subroutine.pm
Criterion Covered Total %
statement 12 33 36.3
branch 0 14 0.0
condition n/a
subroutine 4 9 44.4
pod 3 4 75.0
total 19 60 31.6


line stmt bran cond sub pod time code
1             package PLS::Parser::Element::Subroutine;
2              
3 13     13   103 use strict;
  13         35  
  13         551  
4 13     13   89 use warnings;
  13         34  
  13         955  
5              
6 13     13   103 use parent 'PLS::Parser::Element';
  13         27  
  13         90  
7              
8 13     13   1333 use List::Util qw(any);
  13         27  
  13         7220  
9              
10             =head1 NAME
11              
12             PLS::Parser::Element::Subroutine
13              
14             =head1 DESCRIPTION
15              
16             Subclass of L<PLS::Parser::Element> representing a subroutine declaration.
17              
18             =cut
19              
20             sub location_info
21             {
22 0     0 1   my ($self) = @_;
23              
24 0           my $info = $self->SUPER::location_info;
25              
26 0           my $signature = $self->signature;
27 0 0         $info->{signature} = $signature if (ref $signature eq 'HASH');
28              
29 0           return $info;
30             } ## end sub location_info
31              
32             sub signature
33             {
34 0     0 0   my ($self) = @_;
35              
36 0           my $block = $self->element->block;
37 0 0         return unless (ref $block eq 'PPI::Structure::Block');
38              
39             # only looking at first variable statement, for performance sake.
40 0           foreach my $child ($block->children)
41             {
42 0 0         next unless $child->isa('PPI::Statement::Variable');
43 0 0         return unless $child->type eq 'my';
44             return
45 0 0   0     unless any { $_->isa('PPI::Token::Magic') and $_->content eq '@_' } $child->children; ## no critic (RequireInterpolationOfMetachars)
  0 0          
46 0 0         return unless (scalar $child->variables);
47 0           return {label => $child->content, parameters => [map { {label => $_} } $child->variables]};
  0            
48             } ## end foreach my $child ($block->...)
49              
50 0           return;
51             } ## end sub signature
52              
53             sub name
54             {
55 0     0 1   my ($self) = @_;
56              
57 0           return $self->element->name;
58             }
59              
60             sub length
61             {
62 0     0 1   my ($self) = @_;
63              
64 0           return $self->SUPER::length() + (length 'sub ');
65             }
66              
67             1;