diff options
Diffstat (limited to 'lib/Reply/Plugin/Autocomplete/Lexicals.pm')
-rw-r--r-- | lib/Reply/Plugin/Autocomplete/Lexicals.pm | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/lib/Reply/Plugin/Autocomplete/Lexicals.pm b/lib/Reply/Plugin/Autocomplete/Lexicals.pm index c733fed..c3468de 100644 --- a/lib/Reply/Plugin/Autocomplete/Lexicals.pm +++ b/lib/Reply/Plugin/Autocomplete/Lexicals.pm @@ -1,9 +1,9 @@ -package Reply::Plugin::Autocomplete::Lexicals; +package main; use strict; use warnings; # ABSTRACT: tab completion for lexical variables -use base 'Reply::Plugin'; +use mop; use Reply::Util qw($varname_rx); @@ -20,40 +20,39 @@ Perl code. =cut -sub tab_handler { - my $self = shift; - my ($line) = @_; +class Reply::Plugin::Autocomplete::Lexicals extends Reply::Plugin { + method tab_handler ($line) { + my ($var) = $line =~ /($varname_rx)$/; + return unless $var; - my ($var) = $line =~ /($varname_rx)$/; - return unless $var; + my ($sigil, $name_prefix) = $var =~ /(.)(.*)/; - my ($sigil, $name_prefix) = $var =~ /(.)(.*)/; + # these can't be lexicals + return if $sigil eq '&' || $sigil eq '*'; - # these can't be lexicals - return if $sigil eq '&' || $sigil eq '*'; + my $env = { map { %$_ } $self->publish('lexical_environment') }; + my @env = keys %$env; - my $env = { map { %$_ } $self->publish('lexical_environment') }; - my @env = keys %$env; + my @results; + for my $env_var (@env) { + my ($env_sigil, $env_name) = $env_var =~ /(.)(.*)/; - my @results; - for my $env_var (@env) { - my ($env_sigil, $env_name) = $env_var =~ /(.)(.*)/; + next unless index($env_name, $name_prefix) == 0; - next unless index($env_name, $name_prefix) == 0; - - # this is weird, not sure why % gets stripped but not $ or @ - if ($sigil eq $env_sigil) { - push @results, $sigil eq '%' ? $env_var : $env_name; - } - elsif ($env_sigil eq '@' && $sigil eq '$') { - push @results, "$env_name\["; - } - elsif ($env_sigil eq '%') { - push @results, "$env_name\{"; + # this is weird, not sure why % gets stripped but not $ or @ + if ($sigil eq $env_sigil) { + push @results, $sigil eq '%' ? $env_var : $env_name; + } + elsif ($env_sigil eq '@' && $sigil eq '$') { + push @results, "$env_name\["; + } + elsif ($env_sigil eq '%') { + push @results, "$env_name\{"; + } } - } - return @results; + return @results; + } } 1; |