Login
Fixed ProhibitHardTabs so that it would allow leading tabs
authorJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Sun, 24 Aug 2008 11:01:13 +0000 (11:01 +0000)
committerJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Sun, 24 Aug 2008 11:01:13 +0000 (11:01 +0000)
in qw(), regexen, and virtually any other token.  I'm not
sure this is what we really want.  For reference,
https://rt.cpan.org/Ticket/Display.html?id=32440.  I
couldn't tell from Elliot's comments what the "correct"
solution is.  But I'm sure he'll enlighten me soon
enough.

lib/Perl/Critic/Policy/CodeLayout/ProhibitHardTabs.pm
t/20_policy_prohibithardtabs.t

index 3c3d484..34ee7e7 100644 (file)
@@ -26,6 +26,15 @@ my $DEFAULT_ALLOW_LEADING_TABS = $TRUE;
 
 #-----------------------------------------------------------------------------
 
+# The following regex should be "qr{^ [^\t]+ \t}xms"
+# but it doesn't match when I expect it to.  I 
+# haven't figured out why.  So I used [^\s]
+# as a substitue to mean "not a tab".
+
+my $NON_LEADING_TAB_REGEX = qr{^ [^\s]+ \t}xms;
+
+#-----------------------------------------------------------------------------
+
 sub supported_parameters {
     return (
         {
@@ -51,7 +60,7 @@ sub violates {
     return if $elem->parent->isa('PPI::Statement::Data');
 
     # Permit leading tabs, if allowed
-    return if $self->_allow_leading_tabs() && $elem->location->[1] == 1;
+    return if $self->_allow_leading_tabs() && $elem !~ $NON_LEADING_TAB_REGEX;
 
     # Must be a violation...
     return $self->violation( $DESC, $EXPL, $elem );
index 929ff99..ccae538 100644 (file)
@@ -14,7 +14,7 @@ use warnings;
 # common P::C testing tools
 use Perl::Critic::TestUtils qw(pcritique fcritique);
 
-use Test::More tests => 6;
+use Test::More tests => 7;
 
 #-----------------------------------------------------------------------------
 
@@ -73,6 +73,20 @@ END_PERL
 is( pcritique($policy, \$code, \%config), 0, 'Tabs in qw()' );
 
 #-----------------------------------------------------------------------------
+# RT #32440
+
+$code = <<"END_PERL";
+#This will be interpolated!
+\$x =~ m/
+\tsome
+\t(really | long)
+\tpattern
+/mx;
+END_PERL
+
+is( pcritique($policy, \$code, \%config), 0, 'Tabs in regex' );
+
+#-----------------------------------------------------------------------------
 
 $code = <<"END_PERL";
 ##This will be interpolated!