From be18d16c78830d9fe69ed2d26f73f94cca03c956 Mon Sep 17 00:00:00 2001 From: Toby Inkster Date: Fri, 28 Jun 2013 10:13:04 +0100 Subject: autocomplete for function names --- lib/Reply/Plugin/Autocomplete/Functions.pm | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/Reply/Plugin/Autocomplete/Functions.pm diff --git a/lib/Reply/Plugin/Autocomplete/Functions.pm b/lib/Reply/Plugin/Autocomplete/Functions.pm new file mode 100644 index 0000000..b5690d4 --- /dev/null +++ b/lib/Reply/Plugin/Autocomplete/Functions.pm @@ -0,0 +1,48 @@ +package Reply::Plugin::Autocomplete::Functions; +use strict; +use warnings; +# ABSTRACT: tab completion for function names + +use base 'Reply::Plugin'; + +use Module::Runtime '$module_name_rx'; +use Package::Stash; + +=head1 SYNOPSIS + + ; .replyrc + [ReadLine] + [Autocomplete::Functions] + +=head1 DESCRIPTION + +This plugin registers a tab key handler to autocomplete function names in Perl +code, including imported functions. + +=cut + +sub tab_handler { + my $self = shift; + my ($line) = @_; + + my ($before, $fragment) = $line =~ /(.*?)(${module_name_rx}(::)?)$/; + return unless $fragment; + + my ($package, $func) = ($fragment =~ /^(.+:)(\w+)$/); + $func = '' unless defined $func; + $package = $self->{'package'} unless $package; + $package =~ s/::$//; + + return + map { $package eq $self->{'package'} ? $_ : "$package\::$_" } + grep { /^\Q$func/ } + 'Package::Stash'->new($package)->list_all_symbols('CODE'); +} + +sub package { + my $self = shift; + my ($pkg) = @_; + $self->{'package'} = $pkg; +} + +1; -- cgit v1.2.3-54-g00ecf