X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FDevel-REPL.git;a=blobdiff_plain;f=lib%2FDevel%2FREPL%2FPlugin%2FCompletionDriver%2FMethods.pm;h=837d1bf3ba1a9741309db127d664964897113079;hp=14e0fcce765c8cd7b54b979bbc6b3d06b34c8cb5;hb=54beb05dd302b5e166bf46c888318527e13375c7;hpb=23d2a2acf0a2d24e97d6fad3fc96ca0bc0ff32b1 diff --git a/lib/Devel/REPL/Plugin/CompletionDriver/Methods.pm b/lib/Devel/REPL/Plugin/CompletionDriver/Methods.pm index 14e0fcc..837d1bf 100644 --- a/lib/Devel/REPL/Plugin/CompletionDriver/Methods.pm +++ b/lib/Devel/REPL/Plugin/CompletionDriver/Methods.pm @@ -1,6 +1,19 @@ +use strict; +use warnings; package Devel::REPL::Plugin::CompletionDriver::Methods; + +our $VERSION = '1.003027'; + use Devel::REPL::Plugin; -use namespace::clean -except => [ 'meta' ]; +use Devel::REPL::Plugin::Completion; # die early if cannot load +use namespace::autoclean; + +sub BEFORE_PLUGIN { + my $self = shift; + for (qw/Completion FindVariable/) { + $self->load_plugin($_); + } +} around complete => sub { my $orig = shift; @@ -27,9 +40,20 @@ around complete => sub { # ..which is preceded by a word (class name) my $previous = $last->sprevious_sibling or return $orig->(@_); - $previous->isa('PPI::Token::Word') + $previous->isa('PPI::Token::Word') || $previous->isa('PPI::Token::Symbol') or return $orig->(@_); - my $class = $previous->content; + my $class; + + # we have a variable, need to look up its class + if ($previous->isa('PPI::Token::Symbol')) { + my $object_ref = $self->find_variable($previous->content) + or return $orig->(@_); + $class = blessed($$object_ref) + or return $orig->(@_); + } + else { + $class = $previous->content; + } # now we have $class->$incomplete @@ -39,10 +63,21 @@ around complete => sub { return $orig->(@_), grep { $_ =~ $re } - map { $_->{name} } - $metaclass->compute_all_applicable_methods; + map { $_->name } + $metaclass->get_all_methods; }; 1; +__END__ + +=head1 NAME + +Devel::REPL::Plugin::CompletionDriver::Methods - Complete class or object method names + +=head1 AUTHOR + +Shawn M Moore, C<< >> + +=cut