Skip to content

Commit 69b7444

Browse files
Copilotoalders
andcommitted
Add support for function references in _is_used_fully_qualified
Co-authored-by: oalders <[email protected]>
1 parent 09e7d03 commit 69b7444

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

lib/App/perlimports/Document.pm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -766,15 +766,15 @@ sub _is_used_fully_qualified {
766766
)
767767
)
768768
|| ( $_[1]->isa('PPI::Token::Symbol')
769-
&& $_[1] =~ m{\A[*\$\@\%]+${module_name}::[a-zA-Z0-9_]} );
769+
&& $_[1] =~ m{\A[&*\$\@\%]+${module_name}::[a-zA-Z0-9_]} );
770770
}
771771
);
772772

773773
# We could combine the regexes, but this is easy to read.
774774
for my $key ( keys %{ $self->interpolated_symbols } ) {
775775

776776
# package level variable
777-
return 1 if $key =~ m{\A[*\$\@\%]+${module_name}::[a-zA-Z0-9_]+\z};
777+
return 1 if $key =~ m{\A[&*\$\@\%]+${module_name}::[a-zA-Z0-9_]+\z};
778778

779779
# function
780780
return 1 if $key =~ m/\A${module_name}::[a-zA-Z0-9_]+\z/;

t/function-reference.t

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
use strict;
2+
use warnings;
3+
4+
use lib 't/lib', 'test-data/lib';
5+
6+
use Test::Differences qw( eq_or_diff );
7+
use TestHelper qw( doc );
8+
use Test::More import => [qw( diag done_testing ok )];
9+
use Test::Needs qw( Cpanel::JSON::XS );
10+
11+
my ( $doc, $log ) = doc(
12+
filename => 'test-data/function-reference.pl',
13+
preserve_unused => 0,
14+
);
15+
16+
ok(
17+
$doc->_is_used_fully_qualified('Cpanel::JSON::XS'),
18+
'find Cpanel::JSON::XS via function reference'
19+
);
20+
21+
my $expected = <<'EOF';
22+
use strict;
23+
use warnings;
24+
25+
use Cpanel::JSON::XS ();
26+
27+
my $true_ref = \&Cpanel::JSON::XS::true;
28+
my $false_ref = \&Cpanel::JSON::XS::false;
29+
EOF
30+
31+
eq_or_diff( $doc->tidied_document, $expected, 'function reference keeps module' )
32+
|| do { require Data::Dumper; diag Data::Dumper::Dumper($log); };
33+
34+
done_testing;

test-data/function-reference.pl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
use strict;
2+
use warnings;
3+
4+
use Cpanel::JSON::XS;
5+
6+
my $true_ref = \&Cpanel::JSON::XS::true;
7+
my $false_ref = \&Cpanel::JSON::XS::false;

0 commit comments

Comments
 (0)