File Coverage

blib/lib/PPIx/Regexp/Token/Whitespace.pm
Criterion Covered Total %
statement 23 24 95.8
branch 9 10 90.0
condition 2 3 66.6
subroutine 7 7 100.0
pod 2 2 100.0
total 43 46 93.4


line stmt bran cond sub pod time code
1             =head1 NAME
2              
3             PPIx::Regexp::Token::Whitespace - Represent whitespace
4              
5             =head1 SYNOPSIS
6              
7             use PPIx::Regexp::Dumper;
8             PPIx::Regexp::Dumper->new( 'qr{ foo }smx' )
9             ->print();
10              
11             =head1 INHERITANCE
12              
13             C is a
14             L.
15              
16             C has no descendants.
17              
18             =head1 DESCRIPTION
19              
20             This class represents whitespace. It will appear inside the regular
21             expression only if the C modifier is present, but it may also appear
22             between the type and the opening delimiter (e.g. C) or after
23             the regular expression in a bracketed substitution (e.g. C
24             {bar}>).
25              
26             If the C modifier is present, it can also appear inside bracketed
27             character classes. This was introduced in Perl 5.25.9.
28              
29             =head1 METHODS
30              
31             This class provides no public methods beyond those provided by its
32             superclass.
33              
34             =cut
35              
36             package PPIx::Regexp::Token::Whitespace;
37              
38 9     9   65 use strict;
  9         27  
  9         299  
39 9     9   58 use warnings;
  9         21  
  9         277  
40              
41 9     9   45 use base qw{ PPIx::Regexp::Token::NoOp };
  9         22  
  9         4114  
42              
43 9         2821 use PPIx::Regexp::Constant qw{
44             COOKIE_REGEX_SET
45             MINIMUM_PERL
46             @CARP_NOT
47 9     9   66 };
  9         22  
48              
49             our $VERSION = '0.087';
50              
51             sub __new {
52 149     149   588 my ( $class, $content, %arg ) = @_;
53              
54             defined $arg{perl_version_introduced}
55             or $arg{perl_version_introduced} =
56 149 100       1220 ( grep { 127 < ord } split qr{}, $content )
  155 100       819  
57             ? '5.021001'
58             : MINIMUM_PERL;
59              
60 149         907 return $class->SUPER::__new( $content, %arg );
61             }
62              
63             sub explain {
64 3     3 1 9 my ( $self ) = @_;
65 3         10 my $parent;
66 3 100 66     18 if (
    100          
    50          
67             $parent = $self->parent()
68             and $parent->isa( 'PPIx::Regexp' )
69             ) {
70 1         12 return $self->SUPER::explain();
71             } elsif ( $self->in_regex_set() ) {
72 1         5 return q;
73             } elsif ( my $count = $self->modifier_asserted( 'x*' ) ) {
74 1         12 return q . ( 'x' x $count );
75             } else {
76 0         0 return $self->SUPER::explain();
77             }
78             }
79              
80             sub whitespace {
81 1     1 1 3 return 1;
82             }
83              
84             # Objects of this class are generated either by the tokenizer itself
85             # (when scanning for delimiters) or by PPIx::Regexp::Token::Literal (if
86             # it hits a match for \s and finds the regular expression has the /x
87             # modifier asserted.
88             #
89             # sub __PPIX_TOKENIZER__regexp {
90             # my ( $class, $tokenizer, $character ) = @_;
91             #
92             # return scalar $tokenizer->find_regexp( qr{ \A \s+ }smx );
93             #
94             # }
95              
96             1;
97              
98             __END__