File Coverage

blib/lib/Perl/ToPerl6/Transformer/Packages/RewriteDeclarations.pm
Criterion Covered Total %
statement 22 34 64.7
branch 0 2 0.0
condition 0 3 0.0
subroutine 9 12 75.0
pod 3 5 60.0
total 34 56 60.7


line stmt bran cond sub pod time code
1             package Perl::ToPerl6::Transformer::Packages::RewriteDeclarations;
2              
3 1     1   781 use 5.006001;
  1         3  
4 1     1   4 use strict;
  1         2  
  1         21  
5 1     1   4 use warnings;
  1         3  
  1         21  
6 1     1   5 use Readonly;
  1         2  
  1         53  
7              
8 1     1   6 use Perl::ToPerl6::Utils qw{ :severities };
  1         2  
  1         48  
9 1         54 use Perl::ToPerl6::Utils::PPI qw{
10             is_ppi_token_word
11             is_package_boundary
12             make_ppi_structure_block
13 1     1   119 };
  1         2  
14              
15 1     1   7 use base 'Perl::ToPerl6::Transformer';
  1         2  
  1         276  
16              
17             #-----------------------------------------------------------------------------
18              
19             Readonly::Scalar my $DESC => q{Transform 'package' declaration into 'class'};
20             Readonly::Scalar my $EXPL => q{The Perl6 equivalent of packages are classes.};
21              
22             #-----------------------------------------------------------------------------
23              
24 1     1 0 4 sub supported_parameters { return () }
25 1     1 1 4 sub default_necessity { return $NECESSITY_HIGHEST }
26 0     0 1   sub default_themes { return qw( core ) }
27 0     0 1   sub applies_to { return 'PPI::Document' }
28              
29             #-----------------------------------------------------------------------------
30              
31             # Just make this a document-level processor for the time being.
32             #
33             sub transform {
34 0     0 0   my ($self, $elem, $doc) = @_;
35              
36 0           my $ref = $doc->find('PPI::Statement::Package');
37 0 0 0       if ( $ref and @{ $ref } ) {
  0            
38 0           my @package = @{ $ref };
  0            
39 0           for my $package ( @package ) {
40 0           $package->schild(0)->set_content('unit class');
41              
42             # if ( $package->schild(2) and
43             # $package->schild(2)->isa('PPI::Token::Structure') and
44             # $package->schild(2)->content eq ';' ) {
45             #
46             # my $new_block = make_ppi_structure_block;
47             # my $new_statement = PPI::Statement->new;
48             # $new_block->add_element($new_statement);
49             #
50             # my $token = $package->next_sibling;
51             # while ( $token and $token->next_sibling ) {
52             # last if is_package_boundary($token);
53             # $new_statement->add_element($token->clone);
54             # $token = $token->next_sibling;
55             # }
56             #
57             # my $point = $package->next_sibling;
58             # while ( $point and
59             # not is_package_boundary($point) ) {
60             # my $temp = $point->next_sibling;
61             # $point->remove;
62             # $point = $temp;
63             # }
64             # $package->last_element->insert_before($new_block);
65             # }
66             }
67 0           return $self->transformation( $DESC, $EXPL, $elem );
68             }
69              
70 0           return;
71             }
72              
73             1;
74              
75             #-----------------------------------------------------------------------------
76              
77             __END__
78              
79             =pod
80              
81             =head1 NAME
82              
83             Perl::ToPerl6::Transformer::Packages::RewriteDeclarations - Format 'package Foo;' declarations
84              
85              
86             =head1 AFFILIATION
87              
88             This Transformer is part of the core L<Perl::ToPerl6|Perl::ToPerl6>
89             distribution.
90              
91              
92             =head1 DESCRIPTION
93              
94             The Perl6 equivalent of a Perl5 package is 'class'. Older Perl5 source uses C<package Foo;> while some more modern source uses C<package Foo { .. }> to delineate package boundaries:
95              
96             package Foo; --> class Foo { ... }
97             package # ?
98             Foo; --> class\n# ?\nFoo { ... }
99             package Foo { ... } --> class Foo { ... }
100              
101             Other transformers will be responsible for ensuring that perl5 classes inherit correctly.
102              
103             =head1 CONFIGURATION
104              
105             This Transformer is not configurable except for the standard options.
106              
107             =head1 AUTHOR
108              
109             Jeffrey Goff <drforr@pobox.com>
110              
111             =head1 COPYRIGHT
112              
113             Copyright (c) 2015 Jeffrey Goff
114              
115             This program is free software; you can redistribute it and/or modify
116             it under the same terms as Perl itself.
117              
118             =cut
119              
120             ##############################################################################
121             # Local Variables:
122             # mode: cperl
123             # cperl-indent-level: 4
124             # fill-column: 78
125             # indent-tabs-mode: nil
126             # c-indentation-style: bsd
127             # End:
128             # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :