15
15
use SlevomatCodingStandard \Helpers \TokenHelper ;
16
16
use SlevomatCodingStandard \Helpers \UseStatementHelper ;
17
17
use function array_key_exists ;
18
+ use function array_merge ;
18
19
use function in_array ;
19
20
use function sprintf ;
20
21
use function str_repeat ;
21
- use const T_ABSTRACT ;
22
22
use const T_AS ;
23
23
use const T_ATTRIBUTE_END ;
24
24
use const T_CLOSE_CURLY_BRACKET ;
25
25
use const T_CONST ;
26
26
use const T_ENUM_CASE ;
27
- use const T_FINAL ;
28
27
use const T_FUNCTION ;
29
28
use const T_OPEN_CURLY_BRACKET ;
30
29
use const T_PRIVATE ;
@@ -63,7 +62,6 @@ public function process(File $phpcsFile, $classPointer): void
63
62
$ tokens = $ phpcsFile ->getTokens ();
64
63
65
64
$ memberPointer = null ;
66
- $ previousMemberPointer = null ;
67
65
68
66
do {
69
67
$ previousMemberPointer = $ memberPointer ;
@@ -105,7 +103,7 @@ public function process(File $phpcsFile, $classPointer): void
105
103
}
106
104
}
107
105
108
- $ memberStartPointer = $ this ->getMemberStartPointer ($ phpcsFile , $ memberPointer );
106
+ $ memberStartPointer = $ this ->getMemberStartPointer ($ phpcsFile , $ memberPointer, $ previousMemberEndPointer );
109
107
110
108
$ actualLinesCount = $ tokens [$ memberStartPointer ]['line ' ] - $ tokens [$ previousMemberEndPointer ]['line ' ] - 1 ;
111
109
@@ -117,10 +115,20 @@ public function process(File $phpcsFile, $classPointer): void
117
115
? 'Expected 1 blank line between class members, found %2$d. '
118
116
: 'Expected %1$d blank lines between class members, found %2$d. ' ;
119
117
120
- $ fix = $ phpcsFile ->addFixableError (
118
+ $ firstPointerOnMemberLine = TokenHelper::findFirstTokenOnLine ($ phpcsFile , $ memberStartPointer );
119
+ $ nonWhitespaceBetweenMembersPointer = TokenHelper::findNextNonWhitespace (
120
+ $ phpcsFile ,
121
+ $ previousMemberEndPointer + 1 ,
122
+ $ firstPointerOnMemberLine ,
123
+ );
124
+
125
+ $ fix = $ phpcsFile ->addError (
121
126
sprintf ($ errorMessage , $ this ->linesCountBetweenMembers , $ actualLinesCount ),
122
127
$ memberPointer ,
123
128
self ::CODE_INCORRECT_COUNT_OF_BLANK_LINES_BETWEEN_MEMBERS ,
129
+ [],
130
+ 0 ,
131
+ $ nonWhitespaceBetweenMembersPointer === null ,
124
132
);
125
133
if (!$ fix ) {
126
134
continue ;
@@ -131,8 +139,6 @@ public function process(File $phpcsFile, $classPointer): void
131
139
$ this ->linesCountBetweenMembers + ($ hasCommentWithNewLineAfterPreviousMember ? 0 : 1 ),
132
140
);
133
141
134
- $ firstPointerOnMemberLine = TokenHelper::findFirstTokenOnLine ($ phpcsFile , $ memberStartPointer );
135
-
136
142
$ phpcsFile ->fixer ->beginChangeset ();
137
143
138
144
$ phpcsFile ->fixer ->addContent ($ previousMemberEndPointer , $ newLines );
@@ -192,24 +198,25 @@ private function findNextMember(File $phpcsFile, int $classPointer, int $previou
192
198
return $ memberPointer ;
193
199
}
194
200
195
- private function getMemberStartPointer (File $ phpcsFile , int $ memberPointer ): int
201
+ private function getMemberStartPointer (File $ phpcsFile , int $ memberPointer, int $ previousMemberEndPointer ): int
196
202
{
197
203
$ tokens = $ phpcsFile ->getTokens ();
198
204
199
205
$ memberFirstCodePointer = $ this ->getMemberFirstCodePointer ($ phpcsFile , $ memberPointer );
200
206
201
207
do {
208
+ if ($ memberFirstCodePointer <= $ previousMemberEndPointer ) {
209
+ return TokenHelper::findNextNonWhitespace ($ phpcsFile , $ memberFirstCodePointer + 1 );
210
+ }
211
+
202
212
$ pointerBefore = TokenHelper::findPreviousNonWhitespace ($ phpcsFile , $ memberFirstCodePointer - 1 );
203
213
204
214
if ($ tokens [$ pointerBefore ]['code ' ] === T_ATTRIBUTE_END ) {
205
215
$ memberFirstCodePointer = $ tokens [$ pointerBefore ]['attribute_opener ' ];
206
216
continue ;
207
217
}
208
218
209
- if (
210
- in_array ($ tokens [$ pointerBefore ]['code ' ], Tokens::$ commentTokens , true )
211
- && $ tokens [$ pointerBefore ]['line ' ] + 1 === $ tokens [$ memberFirstCodePointer ]['line ' ]
212
- ) {
219
+ if (in_array ($ tokens [$ pointerBefore ]['code ' ], Tokens::$ commentTokens , true )) {
213
220
$ pointerBeforeComment = TokenHelper::findPreviousEffective ($ phpcsFile , $ pointerBefore - 1 );
214
221
if ($ tokens [$ pointerBeforeComment ]['line ' ] !== $ tokens [$ pointerBefore ]['line ' ]) {
215
222
$ memberFirstCodePointer = array_key_exists ('comment_opener ' , $ tokens [$ pointerBefore ])
@@ -240,7 +247,11 @@ private function getMemberFirstCodePointer(File $phpcsFile, int $memberPointer):
240
247
/** @var int $firstCodePointer */
241
248
$ firstCodePointer = TokenHelper::findPrevious (
242
249
$ phpcsFile ,
243
- [T_VAR , T_PUBLIC , T_PROTECTED , T_PRIVATE , T_ABSTRACT , T_FINAL , T_SEMICOLON , T_CLOSE_CURLY_BRACKET ],
250
+ array_merge (
251
+ Tokens::$ methodPrefixes ,
252
+ TokenHelper::$ propertyModifiersTokenCodes ,
253
+ [T_SEMICOLON , T_CLOSE_CURLY_BRACKET ],
254
+ ),
244
255
$ firstCodePointer - 1 ,
245
256
);
246
257
0 commit comments