@@ -63,7 +63,6 @@ public function process(File $phpcsFile, $classPointer): void
63
63
$ tokens = $ phpcsFile ->getTokens ();
64
64
65
65
$ memberPointer = null ;
66
- $ previousMemberPointer = null ;
67
66
68
67
do {
69
68
$ previousMemberPointer = $ memberPointer ;
@@ -105,7 +104,7 @@ public function process(File $phpcsFile, $classPointer): void
105
104
}
106
105
}
107
106
108
- $ memberStartPointer = $ this ->getMemberStartPointer ($ phpcsFile , $ memberPointer );
107
+ $ memberStartPointer = $ this ->getMemberStartPointer ($ phpcsFile , $ memberPointer, $ previousMemberEndPointer );
109
108
110
109
$ actualLinesCount = $ tokens [$ memberStartPointer ]['line ' ] - $ tokens [$ previousMemberEndPointer ]['line ' ] - 1 ;
111
110
@@ -117,11 +116,24 @@ public function process(File $phpcsFile, $classPointer): void
117
116
? 'Expected 1 blank line between class members, found %2$d. '
118
117
: 'Expected %1$d blank lines between class members, found %2$d. ' ;
119
118
120
- $ fix = $ phpcsFile ->addFixableError (
119
+ $ firstPointerOnMemberLine = TokenHelper::findFirstTokenOnLine ($ phpcsFile , $ memberStartPointer );
120
+ $ nonWhitespaceBetweenMembersPointer = TokenHelper::findNextNonWhitespace (
121
+ $ phpcsFile ,
122
+ $ previousMemberEndPointer + 1 ,
123
+ $ firstPointerOnMemberLine ,
124
+ );
125
+ $ errorParameters = [
121
126
sprintf ($ errorMessage , $ this ->linesCountBetweenMembers , $ actualLinesCount ),
122
127
$ memberPointer ,
123
128
self ::CODE_INCORRECT_COUNT_OF_BLANK_LINES_BETWEEN_MEMBERS ,
124
- );
129
+ ];
130
+
131
+ if ($ nonWhitespaceBetweenMembersPointer !== null ) {
132
+ $ phpcsFile ->addError (...$ errorParameters );
133
+ continue ;
134
+ }
135
+
136
+ $ fix = $ phpcsFile ->addFixableError (...$ errorParameters );
125
137
if (!$ fix ) {
126
138
continue ;
127
139
}
@@ -131,8 +143,6 @@ public function process(File $phpcsFile, $classPointer): void
131
143
$ this ->linesCountBetweenMembers + ($ hasCommentWithNewLineAfterPreviousMember ? 0 : 1 ),
132
144
);
133
145
134
- $ firstPointerOnMemberLine = TokenHelper::findFirstTokenOnLine ($ phpcsFile , $ memberStartPointer );
135
-
136
146
$ phpcsFile ->fixer ->beginChangeset ();
137
147
138
148
$ phpcsFile ->fixer ->addContent ($ previousMemberEndPointer , $ newLines );
@@ -192,24 +202,25 @@ private function findNextMember(File $phpcsFile, int $classPointer, int $previou
192
202
return $ memberPointer ;
193
203
}
194
204
195
- private function getMemberStartPointer (File $ phpcsFile , int $ memberPointer ): int
205
+ private function getMemberStartPointer (File $ phpcsFile , int $ memberPointer, int $ previousMemberEndPointer ): int
196
206
{
197
207
$ tokens = $ phpcsFile ->getTokens ();
198
208
199
209
$ memberFirstCodePointer = $ this ->getMemberFirstCodePointer ($ phpcsFile , $ memberPointer );
200
210
201
211
do {
212
+ if ($ memberFirstCodePointer <= $ previousMemberEndPointer ) {
213
+ return TokenHelper::findNextNonWhitespace ($ phpcsFile , $ memberFirstCodePointer + 1 );
214
+ }
215
+
202
216
$ pointerBefore = TokenHelper::findPreviousNonWhitespace ($ phpcsFile , $ memberFirstCodePointer - 1 );
203
217
204
218
if ($ tokens [$ pointerBefore ]['code ' ] === T_ATTRIBUTE_END ) {
205
219
$ memberFirstCodePointer = $ tokens [$ pointerBefore ]['attribute_opener ' ];
206
220
continue ;
207
221
}
208
222
209
- if (
210
- in_array ($ tokens [$ pointerBefore ]['code ' ], Tokens::$ commentTokens , true )
211
- && $ tokens [$ pointerBefore ]['line ' ] + 1 === $ tokens [$ memberFirstCodePointer ]['line ' ]
212
- ) {
223
+ if (in_array ($ tokens [$ pointerBefore ]['code ' ], Tokens::$ commentTokens , true )) {
213
224
$ pointerBeforeComment = TokenHelper::findPreviousEffective ($ phpcsFile , $ pointerBefore - 1 );
214
225
if ($ tokens [$ pointerBeforeComment ]['line ' ] !== $ tokens [$ pointerBefore ]['line ' ]) {
215
226
$ memberFirstCodePointer = array_key_exists ('comment_opener ' , $ tokens [$ pointerBefore ])
0 commit comments