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