NAME

MooseX::Role::WarnOnConflict - Warn if classes override role methods without excluding them

VERSION

version 0.01

SYNOPSIS

This code will warn at composition time:

{
    package My::Role;
    use MooseX::Role::WarnOnConflict;
    sub conflict {}
}
{
    package My::Class;
    use Moose;
    with 'My::Role';
    sub conflict {}
}

With an error message similar to the following:

The class My::Class has implicitly overridden the method (conflict) from
role My::Role ...

To resolve this, explicitly exclude the 'conflict' method:

{
    package My::Class;
    use Moose;
    with 'My::Role' => { -excludes => [ 'conflict' ] };
    sub conflict {}
}

Aliasing a role method to an existing method will also warn:

{
    package My::Class;
    use Moose;
    with 'My::Role' => {
        -excludes => ['conflict'],
        -alias    => { conflict => 'another_method' },
    };
    sub conflict       { }
    sub another_method { }
}

DESCRIPTION

When using Moose::Role, a class which provides a method a role provides will silently override that method. This can cause strange, hard-to-debug errors when the role's methods are not called. Simply use MooseX::Role::WarnOnConflict instead of Moose::Role and overriding a role's method becomes a composition-time warning. See the synopsis for a resolution.

AUTHOR

Curtis "Ovid" Poe <curtis.poe@gmail.com>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2022 by Curtis "Ovid" Poe.

This is free software, licensed under:

The Artistic License 2.0 (GPL Compatible)