summaryrefslogtreecommitdiff
path: root/lib/Dist
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Dist')
-rw-r--r--lib/Dist/Zilla/Plugin/Boilerplate.pm40
1 files changed, 30 insertions, 10 deletions
diff --git a/lib/Dist/Zilla/Plugin/Boilerplate.pm b/lib/Dist/Zilla/Plugin/Boilerplate.pm
index 4686a22..13b087e 100644
--- a/lib/Dist/Zilla/Plugin/Boilerplate.pm
+++ b/lib/Dist/Zilla/Plugin/Boilerplate.pm
@@ -24,13 +24,15 @@ with(
'Dist::Zilla::Role::PPI',
);
-sub mvp_multivalue_args { 'code' };
-has code => (
+sub mvp_multivalue_args { 'code_line' };
+has code_line => (
is => 'ro',
isa => 'ArrayRef[Str]',
required => 1,
);
+sub code { shift->code_line->join("\n") }
+
has _parsed_code => (
is => 'ro',
isa => 'PPI::Element',
@@ -40,7 +42,7 @@ has _parsed_code => (
sub _build_parsed_code {
my ($self) = @_;
- my $code = $self->code->join("\n");
+ my $code = $self->code;
PPI::Document->new(\$code);
}
@@ -81,11 +83,11 @@ sub _find_dzil_root {
sub eval_in {
my ($self,$package) = @_;
- my $code = $self->code->join("\n");my $name = $self->plugin_name;
+ my $code = $self->code;my $name = $self->plugin_name;
my $str = "{package $package;$code;1}";
local $@;
eval $str
- or $self->log_error("Couldn't eval code for boilerplate $name into $package: $@");
+ or $self->log_fatal("Couldn't eval code for boilerplate into $package: $@");
}
sub munge_files {
@@ -111,7 +113,7 @@ sub munge_file {
if ($tags->first(sub{$_ eq $self->plugin_name})) {
for my $elem ($self->_parsed_code->children) {
$use->insert_before($elem)
- or $self->log_warn("Couldn't insert $elem before $use\n");
+ or $self->log_fatal("Couldn't insert $elem before $use\n");
}
$use->delete;
}
@@ -122,7 +124,26 @@ sub munge_file {
sub _find_tags_from_ppi {
my ($self,$node) = @_;
- return 'foo';
+ if ($node->isa('PPI::Token::Quote')) {
+ return [$node->string];
+ }
+ elsif ($node->isa('PPI::Token::QuoteLike::Words')) {
+ return [$node->literal];
+ }
+ elsif ($node->isa('PPI::Token')) {
+ return [ $node->content ]; # probably wrong
+ }
+ elsif ($node->can('find')) {
+ return [
+ ($node->find('PPI::Token::Quote') || [])
+ ->map(sub{$_->string})->flatten(),
+ ($node->find('PPI::Token::QuoteLike::Words') || [])
+ ->map(sub{$_->literal})->flatten,
+ ];
+ }
+ else {
+ return []
+ }
}
}
package Dist::Zilla::Plugin::Boilerplate::Chrome;{
@@ -135,10 +156,9 @@ has logger => (
log_pid => 0,
to_self => 0,
to_stdout => 0,
- to_stderr => 0,
+ to_stderr => 1,
to_file => 0,
- muted => 1,
- quiet_fatal => [],
+ quiet_fatal => 'stderr',
});
}
);