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