summaryrefslogtreecommitdiff
path: root/lib/Getopt
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2018-07-13 12:09:51 +0100
committerdakkar <dakkar@thenautilus.net>2018-07-13 12:09:51 +0100
commit170b7d4ea73dac6bfbde4813a325f73e11ea5360 (patch)
tree2f9983af3f88c55f807d9fd0ce4361eea50cf568 /lib/Getopt
parentmore skeleton (diff)
downloadGetopt-Dakkar-170b7d4ea73dac6bfbde4813a325f73e11ea5360.tar.gz
Getopt-Dakkar-170b7d4ea73dac6bfbde4813a325f73e11ea5360.tar.bz2
Getopt-Dakkar-170b7d4ea73dac6bfbde4813a325f73e11ea5360.zip
style
Diffstat (limited to 'lib/Getopt')
-rw-r--r--lib/Getopt/Dakkar.pm5
-rw-r--r--lib/Getopt/Dakkar/Style.pm105
2 files changed, 106 insertions, 4 deletions
diff --git a/lib/Getopt/Dakkar.pm b/lib/Getopt/Dakkar.pm
index c3b9444..d8edd0c 100644
--- a/lib/Getopt/Dakkar.pm
+++ b/lib/Getopt/Dakkar.pm
@@ -1,8 +1,5 @@
package Getopt::Dakkar;
-use strict;
-use warnings;
-use 5.026;
-use experimental qw(signatures postderef);
+use Getopt::Dakkar::Style;
# VERSION
# ABSTRACT: the best command line parser ever
diff --git a/lib/Getopt/Dakkar/Style.pm b/lib/Getopt/Dakkar/Style.pm
new file mode 100644
index 0000000..e843262
--- /dev/null
+++ b/lib/Getopt/Dakkar/Style.pm
@@ -0,0 +1,105 @@
+package Getopt::Dakkar::Style;
+use 5.026;
+use strictures 2;
+use true;
+use Import::Into;
+use Try::Tiny ();
+use Carp ();
+use feature ();
+use experimental ();
+use Path::Tiny ();
+
+# VERSION
+# ABSTRACT: simplify writing things in the right style
+
+sub use_types {
+ my ($caller) = @_;
+ require Types::Standard;
+ require Type::Params;
+
+ Types::Standard->import::into(
+ $caller,
+ "Any",
+ "Item",
+ "Bool",
+ "Undef",
+ "Defined",
+ "Value",
+ "Str",
+ "Num",
+ "Int",
+ "ClassName",
+ "RoleName",
+ "Ref",
+ "CodeRef",
+ "RegexpRef",
+ "FileHandle",
+ "ArrayRef",
+ "HashRef",
+ "ScalarRef",
+ "Object",
+ "Maybe",
+ "Map",
+ "Optional",
+ "Tuple",
+ "Dict",
+ "InstanceOf",
+ "ConsumerOf",
+ "HasMethods",
+ );
+
+ Type::Params->import::into($caller);
+}
+
+sub import {
+ my $class = shift;
+ my (@args) = @_;
+ my $caller = caller();
+
+ strict->import();
+ feature->import(':5.26');
+ Try::Tiny->import::into($caller);
+ Carp->import::into($caller);
+ feature->import::into($caller, ':5.26');
+ true->import({ into => $caller });
+
+ my %arg = map { $_ => 1 } @args;
+ if ($arg{class}) {
+ require Moo;
+ Moo->import::into($caller);
+ $arg{types}=1;
+ }
+ if ($arg{role}) {
+ require Moo::Role;
+ Moo::Role->import::into($caller);
+ $arg{types}=1;
+ }
+ if ($arg{types}) {
+ use_types($caller);
+ }
+ if ($arg{test}) {
+ require Test::Most;
+ require Test::Warnings;
+ require lib;
+ Test::Most->import::into($caller);
+ Test::Warnings->import::into($caller);
+ lib->import::into(
+ $caller,
+ Path::Tiny::path(__FILE__)->parent(4)->child('t/lib')->stringify,
+ );
+ }
+
+ # This must come after anything else that might change warning
+ # levels in the caller (e.g. Moo)
+ strictures->import::into($caller,version=>2);
+ # and then we disable warnings for the experimental features we
+ # want
+ experimental->import::into($caller,qw(postderef signatures));
+
+ # Auto-clean up imported symbols
+ namespace::autoclean->import(
+ -cleanee => $caller,
+ );
+
+ return;
+}