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