]> git.donarmstrong.com Git - perltidy.git/commitdiff
fix tokenization issue c147
authorSteve Hancock <perltidy@users.sourceforge.net>
Fri, 20 May 2022 12:51:27 +0000 (05:51 -0700)
committerSteve Hancock <perltidy@users.sourceforge.net>
Fri, 20 May 2022 12:51:27 +0000 (05:51 -0700)
dev-bin/run_tokenizer_tests.pl.data
lib/Perl/Tidy/Formatter.pm
lib/Perl/Tidy/Tokenizer.pm

index 476f050301b4a51a41601a18c5ee9d43199ae076..408ea2c48441e9de9fc22a888262f3238656b3fa 100644 (file)
@@ -154,6 +154,11 @@ my$seed=$$^$^T;
 s s(..)(.)sss
 ;
 
+==> c147.in <==
+my $str = $$# the process ID
+ . " xxx\n";
+print "str='$str'\n";
+
 ==> git82.in <==
 say
 $
@@ -165,4 +170,3 @@ say { $fh } <<EOM;
 
 b^^
    EOM
-
index b2cfba4f6f320f68b1c7af9cd54d9aab17646104..474af974167dc68fe267725f3700c0f6400d7b8f 100644 (file)
@@ -1383,6 +1383,11 @@ EOM
         }
     }
 
+    # Require -msp > 0 to avoid future parsing problems (issue c147)
+    for ( $rOpts->{'minimum-space-to-comment'} ) {
+        if ( !$_ || $_ <= 0 ) { $_ = 1 }
+    }
+
     # implement outdenting preferences for keywords
     %outdent_keyword = ();
     my @okw = split_words( $rOpts->{'outdent-keyword-list'} );
index fb9e42f463e3a23410fa9175539b66cc2e60a83a..d08820e1bc42e54749dccc82ddf83c7ea4015df0 100644 (file)
@@ -7507,6 +7507,8 @@ sub scan_identifier_do {
             }
             elsif ( $tok eq '#' ) {
 
+                my $is_punct_var = $identifier eq '$$';
+
                 # side comment or identifier?
                 if (
 
@@ -7524,6 +7526,9 @@ sub scan_identifier_do {
                     # May also be '$#array' or POSTDEFREF ->$#
                     && ( $identifier =~ /^[\%\@\$\*]$/ || $identifier =~ /\$$/ )
 
+                    # but a '#' after '$$' is a side comment; see c147
+                    && !$is_punct_var
+
                   )
                 {
                     $identifier .= $tok;    # keep same state, a $ could follow
@@ -7532,6 +7537,7 @@ sub scan_identifier_do {
 
                     # otherwise it is a side comment
                     if    ( $identifier eq '->' )   { }
+                    elsif ($is_punct_var)           { $type = 'i' }
                     elsif ( $id_scan_state eq '$' ) { $type = 't' }
                     else                            { $type = 'i' }
                     $i             = $i_save;