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