b8885032a4482a1815e6d921e9266d3eea09ccdb
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / CompletionDriver / Turtles.pm
1 use strict;
2 use warnings;
3 package Devel::REPL::Plugin::CompletionDriver::Turtles;
4 use Devel::REPL::Plugin;
5 use Devel::REPL::Plugin::Completion;    # die early if cannot load
6 use namespace::autoclean;
7
8 sub BEFORE_PLUGIN {
9     my $self = shift;
10     $self->load_plugin('Completion');
11 }
12
13 around complete => sub {
14   my $orig = shift;
15   my ($self, $text, $document) = @_;
16
17   my $prefix = $self->default_command_prefix;
18   my $line_re = qr/^($prefix)(\w+)/;
19
20   my @orig = $self->$orig($text, $document);
21
22   if ( my ( $pre, $method ) = ( $text =~ $line_re ) ) {
23     my $filter = qr/^\Q$method/;
24     return (
25       @orig,
26       (
27         map { "$pre$_" }
28         grep { $_ =~ $filter }
29         map { /^expr?_command_(\w+)/ ? $1 : () }
30         map { $_->name }
31         $self->meta->get_all_methods
32       ),
33     );
34   } else {
35     return @orig;
36   }
37 };
38
39 __PACKAGE__
40
41 __END__
42
43 =head1 NAME
44
45 Devel::REPL::Plugin::CompletionDriver::Turtles - Complete Turtles-based commands
46
47 =head1 AUTHOR
48
49 Yuval Kogman E<lt>nothingmuch@woobling.orgE<gt>
50
51 =cut
52