diff options
Diffstat (limited to 'lib/Reply/Plugin/Autocomplete/Packages.pm')
-rw-r--r-- | lib/Reply/Plugin/Autocomplete/Packages.pm | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/Reply/Plugin/Autocomplete/Packages.pm b/lib/Reply/Plugin/Autocomplete/Packages.pm new file mode 100644 index 0000000..4f7f2a4 --- /dev/null +++ b/lib/Reply/Plugin/Autocomplete/Packages.pm @@ -0,0 +1,53 @@ +package Reply::Plugin::Autocomplete::Packages; +use strict; +use warnings; +# ABSTRACT: tab completion for package names + +use base 'Reply::Plugin'; + +use Module::Runtime '$module_name_rx'; + +=head1 SYNOPSIS + + ; .replyrc + [ReadLine] + [Autocomplete::Packages] + +=head1 DESCRIPTION + +This plugin registers a tab key handler to autocomplete package names in Perl +code. + +=cut + +sub tab_handler { + my $self = shift; + my ($line) = @_; + + # $module_name_rx does not permit trailing :: + my ($package_fragment) = $line =~ /($module_name_rx(?:::)?)$/; + return unless $package_fragment; + + my $file_fragment = $package_fragment; + $file_fragment =~ s{::}{/}g; + + my $re = qr/^\Q$file_fragment/; + + my @results; + for my $inc (keys %INC) { + if ($inc =~ $re) { + $inc =~ s{/}{::}g; + $inc =~ s{\.pm$}{}; + push @results, $inc; + } + } + + return @results; +} + +=for Pod::Coverage + tab_handler + +=cut + +1; |