@@ -20,14 +20,14 @@ class ArrayAutovivificationSniff implements Sniff
20
20
*
21
21
* @var string
22
22
*/
23
- private $ warningMessage = 'Deprecated: Automatic conversion of false to array is deprecated. ' ;
23
+ private const WARNING_MESSAGE = 'Deprecated: Automatic conversion of false to array is deprecated. ' ;
24
24
25
25
/**
26
- * Warning violation code.
26
+ * Error violation code.
27
27
*
28
28
* @var string
29
29
*/
30
- private $ warningCode = 'Autovivification ' ;
30
+ private const WARNING_CODE = 'Autovivification ' ;
31
31
32
32
/**
33
33
* @inheritdoc
@@ -44,25 +44,37 @@ public function register(): array
44
44
*/
45
45
public function process (File $ phpcsFile , $ stackPtr ): void
46
46
{
47
- $ positionSquareBracket = $ phpcsFile ->findNext (T_OPEN_SQUARE_BRACKET , $ stackPtr , $ stackPtr + 2 );
47
+ $ openSquareBracketKey = $ phpcsFile ->findNext (T_OPEN_SQUARE_BRACKET , $ stackPtr , $ stackPtr + 2 );
48
48
49
- if ($ positionSquareBracket ) {
50
- $ tokens = $ phpcsFile ->getTokens ();
51
- $ positionFunction = $ phpcsFile ->findPrevious (T_FUNCTION , $ positionSquareBracket ) ?: 0 ;
52
- $ sliceLength = $ stackPtr - $ positionFunction ;
53
- $ sliceToken = array_slice (array_column ($ tokens , 'content ' ), $ positionFunction , $ sliceLength , true );
54
- $ propertyTokenKey = array_keys ($ sliceToken , $ tokens [$ stackPtr ]['content ' ]);
49
+ if (!$ openSquareBracketKey ) {
50
+ return ;
51
+ }
52
+
53
+ $ closeSquareBracketKey = $ phpcsFile ->findNext (T_CLOSE_SQUARE_BRACKET , $ openSquareBracketKey );
54
+ $ hasEqualKey = $ phpcsFile ->findNext (T_EQUAL , $ closeSquareBracketKey , $ closeSquareBracketKey + 3 );
55
+
56
+ if (!$ hasEqualKey ) {
57
+ return ;
58
+ }
55
59
56
- arsort ($ propertyTokenKey );
60
+ $ tokens = $ phpcsFile ->getTokens ();
61
+ $ functionKey = $ phpcsFile ->findPrevious (T_FUNCTION , $ openSquareBracketKey ) ?: 0 ;
62
+ $ sliceToken = array_slice (array_column ($ tokens , 'content ' ), $ functionKey , $ stackPtr - $ functionKey , true );
63
+ $ propertyTokenKey = array_keys ($ sliceToken , $ tokens [$ stackPtr ]['content ' ]);
57
64
58
- foreach ($ propertyTokenKey as $ tokenKey ) {
59
- if ($ tokens [$ tokenKey + 2 ]['content ' ] === '= ' ) {
60
- if ($ tokens [$ tokenKey + 4 ]['content ' ] != 'false ' ) {
61
- return ;
62
- }
65
+ arsort ($ propertyTokenKey );
63
66
64
- $ phpcsFile ->addWarning ($ this ->warningMessage , $ positionSquareBracket , $ this ->warningCode );
67
+ foreach ($ propertyTokenKey as $ propertyKey ) {
68
+ $ positionEqualKey = $ phpcsFile ->findNext (T_EQUAL , $ propertyKey , $ propertyKey + 3 );
69
+
70
+ if ($ positionEqualKey ) {
71
+ $ falseKey = $ phpcsFile ->findNext (T_FALSE , $ positionEqualKey , $ positionEqualKey + 3 );
72
+
73
+ if (!($ falseKey && $ phpcsFile ->findNext (T_SEMICOLON , $ falseKey , $ falseKey + 2 ))) {
74
+ return ;
65
75
}
76
+
77
+ $ phpcsFile ->addWarning (self ::WARNING_MESSAGE , $ openSquareBracketKey , self ::WARNING_CODE );
66
78
}
67
79
}
68
80
}
0 commit comments