From 300de51cc0c82e0e50116e6997046679784b598d Mon Sep 17 00:00:00 2001 From: Shawn M Moore Date: Mon, 8 Jul 2013 10:22:44 -0400 Subject: New CollapseStack plugin --- lib/Reply/Plugin/CollapseStack.pm | 64 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 lib/Reply/Plugin/CollapseStack.pm diff --git a/lib/Reply/Plugin/CollapseStack.pm b/lib/Reply/Plugin/CollapseStack.pm new file mode 100644 index 0000000..539effe --- /dev/null +++ b/lib/Reply/Plugin/CollapseStack.pm @@ -0,0 +1,64 @@ +package Reply::Plugin::CollapseStack; +use strict; +use warnings; +# ABSTRACT: display error stack traces only on demand + +use base 'Reply::Plugin'; + +=head1 SYNOPSIS + + ; .replyrc + [CollapseStack] + num_lines = 1 + +=head1 DESCRIPTION + +This plugin hides stack traces until you specifically request them +with the C<#stack> command. + +The number of lines of stack to always show is configurable; specify +the C option. + +=cut + +sub new { + my $class = shift; + my %opts = @_; + + my $self = $class->SUPER::new(@_); + $self->{num_lines} = $opts{num_lines} || 1; + + return $self; +} + +sub mangle_error { + my $self = shift; + my $error = shift; + + $self->{full_error} = $error; + + my @lines = split /\n/, $error; + if (@lines > $self->{num_lines}) { + splice @lines, $self->{num_lines}; + $error = join "\n", @lines, " (Run #stack to see the full trace)"; + } + + return $error; +} + +sub command_stack { + my $self = shift; + + # XXX should use print_error here + print($self->{full_error} || "No stack to display.\n"); + + return ''; +} + +=for Pod::Coverage + command_stack + +=cut + +1; + -- cgit v1.2.3-54-g00ecf