]> git.donarmstrong.com Git - perltidy.git/commitdiff
fixed rare problem with stored index values for -lp option
authorSteve Hancock <perltidy@users.sourceforge.net>
Tue, 8 Sep 2020 22:08:02 +0000 (15:08 -0700)
committerSteve Hancock <perltidy@users.sourceforge.net>
Tue, 8 Sep 2020 22:08:02 +0000 (15:08 -0700)
lib/Perl/Tidy/Formatter.pm
lib/Perl/Tidy/IndentationItem.pm

index 20f3fa5b9c62f65fe8c33eac1f0daf52ad082ebb..954347097627045045beb7a120a34c1981fa38fb 100644 (file)
@@ -5141,6 +5141,14 @@ sub get_available_spaces_to_go {
         my $index = 0;
         if ( $level >= 0 ) { $index = ++$max_gnu_item_index; }
 
+        my $starting_index_K = 0;
+        if (   defined($line_start_index_to_go)
+            && $line_start_index_to_go >= 0
+            && $line_start_index_to_go <= $max_index_to_go )
+        {
+            $starting_index_K = $K_to_go[$line_start_index_to_go];
+        }
+
         my $item = Perl::Tidy::IndentationItem->new(
             spaces              => $spaces,
             level               => $level,
@@ -5150,7 +5158,7 @@ sub get_available_spaces_to_go {
             gnu_sequence_number => $gnu_sequence_number,
             align_paren         => $align_paren,
             stack_depth         => $max_gnu_stack_index,
-            starting_index      => $line_start_index_to_go,
+            starting_index_K    => $starting_index_K,
         );
 
         if ( $level >= 0 ) {
@@ -14891,18 +14899,17 @@ sub pad_array_to_go {
                             $item = $leading_spaces_to_go[ $i_opening + 2 ];
                         }
                         if ( defined($item) ) {
-                            my $i_start_2 = $item->get_starting_index();
+                            my $i_start_2;
+                            my $K_start_2 = $item->get_starting_index_K();
+                            if ( defined($K_start_2) ) {
+                                $i_start_2 = $K_start_2 - $K_to_go[0];
+                            }
                             if (
                                 defined($i_start_2)
 
                                 # we are breaking after an opening brace, paren,
                                 # so don't break before it too
                                 && $i_start_2 ne $i_opening
-
-             # Defensive coding check: be sure the index is valid.
-             # FIXME: We should probably be using K indexes for 'starting_index'
-             # so that the object can remain valid between batches.
-             # See test problem: random_issues/random_487.pro
                                 && $i_start_2 >= 0
                                 && $i_start_2 <= $max_index_to_go
                               )
index d65591bd8b9527ecccd1f620ff1ac4da00e44cb8..d395f4417c0bf30761432e75ae4ced2c7d772b97 100644 (file)
@@ -28,7 +28,7 @@ BEGIN {
         _align_paren_        => $i++,
         _marked_             => $i++,
         _stack_depth_        => $i++,
-        _starting_index_     => $i++,
+        _starting_index_K_   => $i++,
         _arrow_count_        => $i++,
     };
 }
@@ -47,7 +47,7 @@ sub new {
     my $gnu_sequence_number = $input_hash{gnu_sequence_number};
     my $align_paren         = $input_hash{align_paren};
     my $stack_depth         = $input_hash{stack_depth};
-    my $starting_index      = $input_hash{starting_index};
+    my $starting_index_K    = $input_hash{starting_index_K};
 
     my $closed            = -1;
     my $arrow_count       = 0;
@@ -74,7 +74,7 @@ sub new {
     #                        # with an opening structure?
     # marked             =>  # if visited by corrector logic
     # stack_depth        =>  # indentation nesting depth
-    # starting_index     =>  # first token index of this level
+    # starting_index_K   =>  # first token index K of this level
     # arrow_count        =>  # how many =>'s
 
     my $self = [];
@@ -91,7 +91,7 @@ sub new {
     $self->[_align_paren_]        = $align_paren;
     $self->[_marked_]             = $marked;
     $self->[_stack_depth_]        = $stack_depth;
-    $self->[_starting_index_]     = $starting_index;
+    $self->[_starting_index_K_]   = $starting_index_K;
     $self->[_arrow_count_]        = $arrow_count;
 
     bless $self, $class;
@@ -225,9 +225,9 @@ sub get_index {
     return $self->[_index_];
 }
 
-sub get_starting_index {
+sub get_starting_index_K {
     my $self = shift;
-    return $self->[_starting_index_];
+    return $self->[_starting_index_K_];
 }
 
 sub set_have_child {