#
# Copyright (C) 2015,2016,2017 Joelle Maslak
# All Rights Reserved - See License
#

package File::FindStrings::Boilerplate;
# ABSTRACT: Default Boilerplate for Perl::Critic::Policy::BadStrings
$File::FindStrings::Boilerplate::VERSION = '0.101';

use v5.22;
use strict;

use feature 'signatures';
no warnings 'experimental::signatures';

use English;
use Import::Into;
use Smart::Comments;

sub import ( $self, $type = 'script' ) {
    ### assert: ($type =~ m/^(?:class|role|script)$/ms)

    my $target = caller;

    strict->import::into($target);
    warnings->import::into($target);
    autodie->import::into($target);

    feature->import::into( $target, ':5.22' );

    utf8->import::into($target);    # Allow UTF-8 Source

    if ( $type eq 'class' ) {
        Moose->import::into($target);
        Moose::Util::TypeConstraints->import::into($target);
        MooseX::StrictConstructor->import::into($target);
        namespace::autoclean->import::into($target);
    } elsif ( $type eq 'role' ) {
        Moose::Role->import::into($target);
        Moose::Util::TypeConstraints->import::into($target);
        MooseX::StrictConstructor->import::into($target);
        namespace::autoclean->import::into($target);
    }

    Carp->import::into($target);
    English->import::into($target);
    Smart::Comments->import::into( $target, '-ENV', '###' );

    feature->import::into( $target, 'postderef' );    # Not needed if feature budle >= 5.23.1

    # We haven't been using this
    # feature->import::into($target, 'refaliasing');
    feature->import::into( $target, 'signatures' );

    feature->import::into( $target, 'unicode_strings' );
    # warnings->unimport::out_of($target, 'experimental::refaliasing');
    warnings->unimport::out_of( $target, 'experimental::signatures' );

    if ( $PERL_VERSION lt v5.24.0 ) {
        warnings->unimport::out_of( $target, 'experimental::postderef' );
    }

    return;
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

File::FindStrings::Boilerplate - Default Boilerplate for Perl::Critic::Policy::BadStrings

=head1 VERSION

version 0.101

=head1 SYNOPSIS

  use File::FindStrings::Boilerplate 'script';

=head1 DESCRIPTION

This module serves two purposes.  First, it sets some default imports,
and turns on the strictures I've come to rely upon.  It is a copy of
the current-at-the-time C<JCM::Boilerplate>, but is included seperately
to ensure that future changes to C<JCM::Boilerplate> don't break this
module.

This module optionally takes one of two parameters, 'script', 'class',
or 'role'. If 'script' is specified, the module assumes that you do not
need Moose or MooseX modules.

=head1 WARNINGS

This module makes significant changes in the calling package!

If you plan on using this module in code not related to
the C<Perl::Critic::Policy::BadStrings> distribution, it is probably best
to fetch C<JCM::Boilerplate> and copy the C<Boilerplate.pm> into some
directory (renaming this package in the Perl module file) under your
distribution.

=head1 AUTHOR

Joelle Maslak <jmaslak@antelope.net>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Joelle Maslak.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut
