@@ -28,19 +28,27 @@ public function register(): array
28
28
*/
29
29
public function process (File $ phpcsFile , $ stackPtr ): void
30
30
{
31
- $ tokens = $ phpcsFile ->getTokens ();
31
+ $ this ->processProperty ($ phpcsFile , $ stackPtr );
32
+ $ this ->processFunction ($ phpcsFile , $ stackPtr );
33
+ }
32
34
33
- $ end = null ;
34
- if (isset ($ tokens [$ stackPtr ]['scope_closer ' ])) {
35
- $ end = $ tokens [$ stackPtr ]['scope_closer ' ];
36
- }
35
+ /**
36
+ * @param File $phpcsFile
37
+ * @param int $stackPtr
38
+ *
39
+ * @return void
40
+ */
41
+ private function processFunction (File $ phpcsFile , int $ stackPtr ): void
42
+ {
43
+ $ tokens = $ phpcsFile ->getTokens ();
44
+ $ end = $ tokens [$ stackPtr ]['scope_closer ' ] ?? null ;
37
45
38
46
$ function = $ phpcsFile ->findNext (T_FUNCTION , $ stackPtr , $ end );
39
47
if (false === $ function ) {
40
48
return ;
41
49
}
42
50
43
- $ wantedTokens = [T_PUBLIC , T_PROTECTED , T_PRIVATE , T_ANON_CLASS ];
51
+ $ wantedTokens = [T_CONST , T_PUBLIC , T_PROTECTED , T_PRIVATE , T_ANON_CLASS ];
44
52
$ scope = $ phpcsFile ->findNext ($ wantedTokens , $ function + 1 , $ end );
45
53
46
54
while (false !== $ scope ) {
@@ -50,8 +58,57 @@ public function process(File $phpcsFile, $stackPtr): void
50
58
continue ;
51
59
}
52
60
53
- if (T_VARIABLE === $ tokens [$ scope + 2 ]['code ' ]) {
54
- $ phpcsFile ->addError ('Declare class properties before methods ' , $ scope , 'Invalid ' );
61
+ if (T_CONST === $ tokens [$ scope ]['code ' ]) {
62
+ $ phpcsFile ->addError ('Declare class constants before methods ' , $ scope , 'ConstBeforeFunction ' );
63
+ } elseif (T_VARIABLE === $ tokens [$ scope + 2 ]['code ' ]) {
64
+ $ phpcsFile ->addError ('Declare class properties before methods ' , $ scope , 'PropertyBeforeFunction ' );
65
+ }
66
+
67
+ $ scope = $ phpcsFile ->findNext ($ wantedTokens , $ scope + 1 , $ end );
68
+ }
69
+ }
70
+
71
+ /**
72
+ * @param File $phpcsFile
73
+ * @param int $stackPtr
74
+ *
75
+ * @return void
76
+ */
77
+ private function processProperty (File $ phpcsFile , int $ stackPtr ): void
78
+ {
79
+ $ tokens = $ phpcsFile ->getTokens ();
80
+ $ end = $ tokens [$ stackPtr ]['scope_closer ' ] ?? null ;
81
+
82
+ $ wantedTokens = [T_PUBLIC , T_PROTECTED , T_PRIVATE , T_ANON_CLASS ];
83
+ $ scope = $ phpcsFile ->findNext ($ wantedTokens , $ stackPtr + 1 , $ end );
84
+
85
+ while (false !== $ scope && T_VARIABLE !== $ tokens [$ scope + 2 ]['code ' ]) {
86
+ if (T_ANON_CLASS === $ tokens [$ scope ]['code ' ]) {
87
+ $ scope = $ tokens [$ scope ]['scope_closer ' ];
88
+
89
+ continue ;
90
+ }
91
+
92
+ $ scope = $ phpcsFile ->findNext ($ wantedTokens , $ scope + 1 , $ end );
93
+ }
94
+
95
+ if (false === $ scope ) {
96
+ return ;
97
+ }
98
+ $ property = $ scope + 2 ;
99
+
100
+ $ wantedTokens = [T_CONST , T_ANON_CLASS ];
101
+ $ scope = $ phpcsFile ->findNext ($ wantedTokens , $ property + 1 , $ end );
102
+
103
+ while (false !== $ scope ) {
104
+ if (T_ANON_CLASS === $ tokens [$ scope ]['code ' ]) {
105
+ $ scope = $ tokens [$ scope ]['scope_closer ' ];
106
+
107
+ continue ;
108
+ }
109
+
110
+ if (T_CONST === $ tokens [$ scope ]['code ' ]) {
111
+ $ phpcsFile ->addError ('Declare class property before const ' , $ scope , 'ConstBeforeProperty ' );
55
112
}
56
113
57
114
$ scope = $ phpcsFile ->findNext ($ wantedTokens , $ scope + 1 , $ end );
0 commit comments