summaryrefslogtreecommitdiffstats
path: root/lib/Reply/Plugin/Autocomplete/Lexicals.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Reply/Plugin/Autocomplete/Lexicals.pm')
-rw-r--r--lib/Reply/Plugin/Autocomplete/Lexicals.pm55
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;