Commit | Line | Data |
---|---|---|
1716b200 | 1 | use strict; |
2 | use warnings; | |
20377446 | 3 | package Devel::REPL::Plugin::CompletionDriver::Turtles; |
9d2a4940 | 4 | # ABSTRACT: Complete Turtles-based commands |
6f4f9516 | 5 | |
c45376f3 | 6 | our $VERSION = '1.003029'; |
54beb05d | 7 | |
20377446 | 8 | use Devel::REPL::Plugin; |
b1c83802 | 9 | use Devel::REPL::Plugin::Completion; # die early if cannot load |
aa8b7647 | 10 | use namespace::autoclean; |
c015ad3b | 11 | |
75a08365 | 12 | sub BEFORE_PLUGIN { |
13 | my $self = shift; | |
14 | $self->load_plugin('Completion'); | |
15 | } | |
16 | ||
20377446 | 17 | around complete => sub { |
18 | my $orig = shift; | |
19 | my ($self, $text, $document) = @_; | |
20 | ||
21 | my $prefix = $self->default_command_prefix; | |
22 | my $line_re = qr/^($prefix)(\w+)/; | |
23 | ||
24 | my @orig = $self->$orig($text, $document); | |
25 | ||
26 | if ( my ( $pre, $method ) = ( $text =~ $line_re ) ) { | |
27 | my $filter = qr/^\Q$method/; | |
28 | return ( | |
29 | @orig, | |
30 | ( | |
31 | map { "$pre$_" } | |
32 | grep { $_ =~ $filter } | |
33 | map { /^expr?_command_(\w+)/ ? $1 : () } | |
32d646c7 | 34 | map { $_->name } |
35 | $self->meta->get_all_methods | |
20377446 | 36 | ), |
37 | ); | |
38 | } else { | |
39 | return @orig; | |
40 | } | |
41 | }; | |
42 | ||
43 | __PACKAGE__ | |
44 | ||
45 | __END__ | |
46 | ||
9d2a4940 | 47 | =pod |
cfd1094b | 48 | |
30b459d4 | 49 | =head1 AUTHOR |
50 | ||
51 | Yuval Kogman E<lt>nothingmuch@woobling.orgE<gt> | |
52 | ||
cfd1094b | 53 | =cut |