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