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=4566b51946e9bc297de325cfa858b742b46cd21d;hp=14e0fcce765c8cd7b54b979bbc6b3d06b34c8cb5;hb=6631e15ccd2313ff350fd9bfa44c1ccdbac77100;hpb=23d2a2acf0a2d24e97d6fad3fc96ca0bc0ff32b1 diff --git a/lib/Devel/REPL/Plugin/CompletionDriver/Methods.pm b/lib/Devel/REPL/Plugin/CompletionDriver/Methods.pm index 14e0fcc..4566b51 100644 --- a/lib/Devel/REPL/Plugin/CompletionDriver/Methods.pm +++ b/lib/Devel/REPL/Plugin/CompletionDriver/Methods.pm @@ -2,6 +2,11 @@ package Devel::REPL::Plugin::CompletionDriver::Methods; use Devel::REPL::Plugin; use namespace::clean -except => [ 'meta' ]; +with qw( + Devel::REPL::Plugin::Completion + Devel::REPL::Plugin::FindVariable +); + around complete => sub { my $orig = shift; my ($self, $text, $document) = @_; @@ -27,9 +32,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 @@ -45,4 +61,15 @@ around complete => sub { 1; +__END__ + +=head1 NAME + +Devel::REPL::Plugin::CompletionDriver::Methods - Complete class or object method names + +=head1 AUTHOR + +Shawn M Moore, C<< >> + +=cut