2011-05-29 11 views
8

Moose es muy bonito, pero a veces los errores simples pueden causar largas tiradas emocionantes y excitantes con, desde mi punto de vista, cero contenido útil.Errores útiles para Moose y MooseX :: Declare

Entonces, ¿hay alguna herramienta para interpretar esta explosión en algo útil?

En particular para las clases que usan Moose simple, Moose + MooseX :: Method :: Signatures, y MooseX :: Declare.

Las herramientas solo necesitan ser útiles mientras se desarrollan para detectar esos errores o problemas que hacen que las cosas no funcionen.

=========================

Siguiendo la sugerencia de abajo, estoy usando esta no-absolutamente-a-módulo- sin embargo, que es la reducción de mis dolores de cabeza un poco, dan la bienvenida más ideas, sin embargo:

package MooseX::QuietCarping; 
# Not actually a Moose thing, but helpful for Moose. 
# calm Moose-internal stacktraces down a little 
use Carp; 

my %retain =(); 
sub import { 
    my $class = shift; 
    $retain{$_}++ for @_; 
} 

CHECK { 
    for (sort keys %INC) { 
    s{\.pm$}{}; 
    s{[/\\]}{::}g; # CROSS PLATFORM MY ARSE 
    next if $retain{$_}; 
    $Carp::Internal{$_}++ if /^(?:Class::MOP|Moose|MooseX)\b/ 
    } 
    %retain =(); # don't need this no more 
} 

1; 
+1

+1 Siento tu dolor. – friedo

+1

Tenga en cuenta que el equipo de Moose también depende de los comentarios de la comunidad sobre los errores que podrían ser atrapados. A stacktrace suele ser mucha más información de la requerida, pero se asegura de que generalmente no sea demasiado pequeña. Un mensaje de error mejor suele ser una solicitud de función bienvenida. – phaylon

+1

@phaylon Probablemente estés en lo cierto, pero preferiría que mi software estuviera diseñado para los usuarios que para los autores. – Schwern

Respuesta

4

una forma experimenté con hace algún tiempo está poniendo clases relacionadas alces en %Carp::Internal hachís, algo como esto:

$Carp::Internal{$_}++ for qw{ 
    Class::MOP 
    Class::MOP::Attribute 
    Class::MOP::Class 
    ... 
}; 

Tales clases serán salteadas en el seguimiento de pila, lo que lo hace más compacto y enfatiza su propio código.

Puede encontrarlos por la que atraviesa %INC variables:

package Dummy; 
use Moose; 
use MooseX::Declare; 
# use ....; 

for (sort keys %INC) { 
    s{\.pm$}{}; 
    s{/}{::}g; 
    print "$_\n" if /^(Class::MOP|Moose|MooseX)\b/; 
} 
+1

Eso es astuto. Lo usaré, pero no siempre localizará los errores en mi fuente. – Alex

+1

Esto sería un módulo fantástico. *pista Pista* – Schwern

2

Me parece recordar haber visto un mensaje por PerlMonks stvn una o dos semanas atrás diciendo que están trabajando en la mejora de los mensajes de error de los alces. Sin embargo, no creo que haya nada actualmente disponible para limpiarlo.

2

Method::Signatures::Modifiers es un paquete que espera solucionar algunos de los problemas de MooseX::Method::Signatures. Simplemente use sobrecargarlo.

use MooseX::Declare; 
use Method::Signatures::Modifiers; 

class Foo 
{ 
    method bar (Int $thing) { 
     # this method is declared with Method::Signatures instead of MooseX::Method::Signatures 
    } 
} 
Cuestiones relacionadas