@@ -30,6 +30,13 @@ class ForLoopDeclarationSniff implements Sniff
30
30
*/
31
31
public $ requiredSpacesBeforeClose = 0 ;
32
32
33
+ /**
34
+ * Allow newlines instead of spaces.
35
+ *
36
+ * @var boolean
37
+ */
38
+ public $ ignoreNewlines = false ;
39
+
33
40
/**
34
41
* A list of tokenizers this sniff supports.
35
42
*
@@ -77,20 +84,27 @@ public function process(File $phpcsFile, $stackPtr)
77
84
78
85
$ closingBracket = $ tokens [$ openingBracket ]['parenthesis_closer ' ];
79
86
80
- if ($ this ->requiredSpacesAfterOpen === 0 && $ tokens [($ openingBracket + 1 )]['code ' ] === T_WHITESPACE ) {
81
- $ error = 'Whitespace found after opening bracket of FOR loop ' ;
82
- $ fix = $ phpcsFile ->addFixableError ($ error , $ openingBracket , 'SpacingAfterOpen ' );
83
- if ($ fix === true ) {
84
- $ phpcsFile ->fixer ->beginChangeset ();
85
- for ($ i = ($ openingBracket + 1 ); $ i < $ closingBracket ; $ i ++) {
86
- if ($ tokens [$ i ]['code ' ] !== T_WHITESPACE ) {
87
- break ;
87
+ if ($ this ->requiredSpacesAfterOpen === 0
88
+ && $ tokens [($ openingBracket + 1 )]['code ' ] === T_WHITESPACE
89
+ ) {
90
+ $ nextNonWhiteSpace = $ phpcsFile ->findNext (T_WHITESPACE , ($ openingBracket + 1 ), $ closingBracket , true );
91
+ if ($ this ->ignoreNewlines === false
92
+ || $ tokens [$ nextNonWhiteSpace ]['line ' ] === $ tokens [$ openingBracket ]['line ' ]
93
+ ) {
94
+ $ error = 'Whitespace found after opening bracket of FOR loop ' ;
95
+ $ fix = $ phpcsFile ->addFixableError ($ error , $ openingBracket , 'SpacingAfterOpen ' );
96
+ if ($ fix === true ) {
97
+ $ phpcsFile ->fixer ->beginChangeset ();
98
+ for ($ i = ($ openingBracket + 1 ); $ i < $ closingBracket ; $ i ++) {
99
+ if ($ tokens [$ i ]['code ' ] !== T_WHITESPACE ) {
100
+ break ;
101
+ }
102
+
103
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
88
104
}
89
105
90
- $ phpcsFile ->fixer ->replaceToken ( $ i , '' );
106
+ $ phpcsFile ->fixer ->endChangeset ( );
91
107
}
92
-
93
- $ phpcsFile ->fixer ->endChangeset ();
94
108
}
95
109
} else if ($ this ->requiredSpacesAfterOpen > 0 ) {
96
110
$ nextNonWhiteSpace = $ phpcsFile ->findNext (T_WHITESPACE , ($ openingBracket + 1 ), $ closingBracket , true );
@@ -101,7 +115,10 @@ public function process(File $phpcsFile, $stackPtr)
101
115
$ spaceAfterOpen = $ tokens [($ openingBracket + 1 )]['length ' ];
102
116
}
103
117
104
- if ($ spaceAfterOpen !== $ this ->requiredSpacesAfterOpen ) {
118
+ if ($ spaceAfterOpen !== $ this ->requiredSpacesAfterOpen
119
+ && ($ this ->ignoreNewlines === false
120
+ || $ spaceAfterOpen !== 'newline ' )
121
+ ) {
105
122
$ error = 'Expected %s spaces after opening bracket; %s found ' ;
106
123
$ data = [
107
124
$ this ->requiredSpacesAfterOpen ,
@@ -133,7 +150,11 @@ public function process(File $phpcsFile, $stackPtr)
133
150
$ beforeClosefixable = false ;
134
151
}
135
152
136
- if ($ this ->requiredSpacesBeforeClose === 0 && $ tokens [($ closingBracket - 1 )]['code ' ] === T_WHITESPACE ) {
153
+ if ($ this ->requiredSpacesBeforeClose === 0
154
+ && $ tokens [($ closingBracket - 1 )]['code ' ] === T_WHITESPACE
155
+ && ($ this ->ignoreNewlines === false
156
+ || $ tokens [$ prevNonWhiteSpace ]['line ' ] === $ tokens [$ closingBracket ]['line ' ])
157
+ ) {
137
158
$ error = 'Whitespace found before closing bracket of FOR loop ' ;
138
159
139
160
if ($ beforeClosefixable === false ) {
@@ -161,7 +182,10 @@ public function process(File $phpcsFile, $stackPtr)
161
182
$ spaceBeforeClose = $ tokens [($ closingBracket - 1 )]['length ' ];
162
183
}
163
184
164
- if ($ this ->requiredSpacesBeforeClose !== $ spaceBeforeClose ) {
185
+ if ($ this ->requiredSpacesBeforeClose !== $ spaceBeforeClose
186
+ && ($ this ->ignoreNewlines === false
187
+ || $ spaceBeforeClose !== 'newline ' )
188
+ ) {
165
189
$ error = 'Expected %s spaces before closing bracket; %s found ' ;
166
190
$ data = [
167
191
$ this ->requiredSpacesBeforeClose ,
@@ -264,7 +288,10 @@ public function process(File $phpcsFile, $stackPtr)
264
288
$ spaces = 'newline ' ;
265
289
}
266
290
267
- if ($ spaces !== 1 ) {
291
+ if ($ spaces !== 1
292
+ && ($ this ->ignoreNewlines === false
293
+ || $ spaces !== 'newline ' )
294
+ ) {
268
295
$ error = 'Expected 1 space after %s semicolon of FOR loop; %s found ' ;
269
296
$ errorCode = 'SpacingAfter ' .$ humanReadableCode ;
270
297
$ data [] = $ spaces ;
0 commit comments