@@ -756,7 +756,7 @@ protected function pArray(
756
756
757
757
$ itemStartPos = $ origArrItem ->getStartTokenPos ();
758
758
$ itemEndPos = $ origArrItem ->getEndTokenPos ();
759
- \assert ($ itemStartPos >= 0 && $ itemEndPos >= 0 );
759
+ \assert ($ itemStartPos >= 0 && $ itemEndPos >= 0 && $ itemStartPos >= $ pos );
760
760
761
761
$ origIndentLevel = $ this ->indentLevel ;
762
762
$ lastElemIndentLevel = $ this ->origTokens ->getIndentationBefore ($ itemStartPos ) + $ indentAdjustment ;
@@ -767,16 +767,25 @@ protected function pArray(
767
767
$ commentStartPos = $ origComments ? $ origComments [0 ]->getStartTokenPos () : $ itemStartPos ;
768
768
\assert ($ commentStartPos >= 0 );
769
769
770
- $ commentsChanged = $ comments !== $ origComments ;
771
- if ( $ commentsChanged ) {
772
- // Remove old comments
773
- $ itemStartPos = $ commentStartPos ;
770
+ if ( $ commentStartPos < $ pos ) {
771
+ // Comments may be assigned to multiple nodes if they start at the same position.
772
+ // Make sure we don't try to print them multiple times.
773
+ $ commentStartPos = $ itemStartPos ;
774
774
}
775
775
776
- if (!empty ($ delayedAdd )) {
776
+ if ($ skipRemovedNode ) {
777
+ if ($ isStmtList && $ this ->origTokens ->haveBracesInRange ($ pos , $ itemStartPos )) {
778
+ // We'd remove the brace of a code block.
779
+ // TODO: Preserve formatting.
780
+ $ this ->setIndentLevel ($ origIndentLevel );
781
+ return null ;
782
+ }
783
+ } else {
777
784
$ result .= $ this ->origTokens ->getTokenCode (
778
785
$ pos , $ commentStartPos , $ indentAdjustment );
786
+ }
779
787
788
+ if (!empty ($ delayedAdd )) {
780
789
/** @var Node $delayedAddNode */
781
790
foreach ($ delayedAdd as $ delayedAddNode ) {
782
791
if ($ insertNewline ) {
@@ -795,25 +804,16 @@ protected function pArray(
795
804
}
796
805
}
797
806
798
- $ result .= $ this ->origTokens ->getTokenCode (
799
- $ commentStartPos , $ itemStartPos , $ indentAdjustment );
800
-
801
807
$ delayedAdd = [];
802
- } else if (!$ skipRemovedNode ) {
803
- $ result .= $ this ->origTokens ->getTokenCode (
804
- $ pos , $ itemStartPos , $ indentAdjustment );
805
- } else {
806
- if ($ isStmtList && $ this ->origTokens ->haveBracesInRange ($ pos , $ itemStartPos )) {
807
- // We'd remove the brace of a code block.
808
- // TODO: Preserve formatting.
809
- $ this ->setIndentLevel ($ origIndentLevel );
810
- return null ;
811
- }
812
808
}
813
809
814
- if ($ commentsChanged && $ comments ) {
815
- // Add new comments
816
- $ result .= $ this ->pComments ($ comments ) . $ this ->nl ;
810
+ if ($ comments !== $ origComments ) {
811
+ if ($ comments ) {
812
+ $ result .= $ this ->pComments ($ comments ) . $ this ->nl ;
813
+ }
814
+ } else {
815
+ $ result .= $ this ->origTokens ->getTokenCode (
816
+ $ commentStartPos , $ itemStartPos , $ indentAdjustment );
817
817
}
818
818
819
819
// If we had to remove anything, we have done so now.
0 commit comments