Completed
Branch dev (02312e)
by
unknown
11:42 queued 04:50
created
src/Standards/PSR2/Tests/Classes/ClassDeclarationUnitTest.inc 3 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -1,10 +1,10 @@  discard block
 block discarded – undo
1 1
 <?php
2
-class ClassName extends ParentClass implements \ArrayAccess,  \Countable
2
+class ClassName extends ParentClass implements \ArrayAccess, \Countable
3 3
 {
4 4
     // constants, properties, methods
5 5
 }
6 6
 
7
-class ClassName extends ParentClass,AnotherParentClass implements \ArrayAccess,\Countable {
7
+class ClassName extends ParentClass, AnotherParentClass implements \ArrayAccess, \Countable {
8 8
     // constants, properties, methods
9 9
 }
10 10
 
@@ -60,7 +60,7 @@  discard block
 block discarded – undo
60 60
 }
61 61
 
62 62
 class ClassName extends ParentClass implements
63
-    \Foo\Bar\Countable ,
63
+    \Foo\Bar\Countable,
64 64
     \Serializable
65 65
 {
66 66
     // constants, properties, methods
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
 
128 128
 class ClassName implements
129 129
 
130
-    \ArrayAccess,\Countable,
130
+    \ArrayAccess, \Countable,
131 131
 \Serializable
132 132
 {
133 133
     // constants, properties, methods
Please login to merge, or discard this patch.
Braces   +3 added lines, -1 removed lines patch added patch discarded remove patch
@@ -69,7 +69,9 @@
 block discarded – undo
69 69
 class Test
70 70
 {
71 71
     public function test() {
72
-        if (1) 1;
72
+        if (1) {
73
+        	1;
74
+        }
73 75
         1 ? (1 ? 1 : 1) : 1;
74 76
     }
75 77
 }
Please login to merge, or discard this patch.
Indentation   +58 added lines, -58 removed lines patch added patch discarded remove patch
@@ -1,51 +1,51 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 class ClassName extends ParentClass implements \ArrayAccess,  \Countable
3 3
 {
4
-    // constants, properties, methods
4
+	// constants, properties, methods
5 5
 }
6 6
 
7 7
 class ClassName extends ParentClass,AnotherParentClass implements \ArrayAccess,\Countable {
8
-    // constants, properties, methods
8
+	// constants, properties, methods
9 9
 }
10 10
 
11 11
 class ClassName
12 12
 extends ParentClass
13 13
 implements \ArrayAccess, \Countable
14 14
 {
15
-    // constants, properties, methods
15
+	// constants, properties, methods
16 16
     
17 17
 }
18 18
 
19 19
 class ClassName extends  ParentClass  implements
20 20
    \ArrayAccess,
21
-        \Foo\Bar\Countable,
22
-    \Serializable {
23
-    // constants, properties, methods
21
+		\Foo\Bar\Countable,
22
+	\Serializable {
23
+	// constants, properties, methods
24 24
 
25 25
 }
26 26
 
27 27
 class ClassName extends ParentClass  implements \ArrayAccess,
28
-    \Countable,
29
-    \Serializable
28
+	\Countable,
29
+	\Serializable
30 30
 {
31
-    // constants, properties, methods
31
+	// constants, properties, methods
32 32
 }
33 33
 
34 34
 class ClassName extends ParentClass  implements
35
-    \ArrayAccess, \Countable, \Foo\Serializable
35
+	\ArrayAccess, \Countable, \Foo\Serializable
36 36
 {
37
-    // constants, properties, methods
37
+	// constants, properties, methods
38 38
 }
39 39
 
40 40
 // Different indent
41 41
 if ($foo) {
42
-    class ClassName extends ParentClass implements
43
-        \ArrayAccess,
44
-    \Countable,
45
-            \Serializable
46
-    {
47
-        // constants, properties, methods
48
-    }
42
+	class ClassName extends ParentClass implements
43
+		\ArrayAccess,
44
+	\Countable,
45
+			\Serializable
46
+	{
47
+		// constants, properties, methods
48
+	}
49 49
 }
50 50
 
51 51
 class Foo extends \Foo\Bar\Object
@@ -53,25 +53,25 @@  discard block
 block discarded – undo
53 53
 }
54 54
 
55 55
 class ClassName extends ParentClass implements
56
-    \Foo\Bar\Countable,
57
-    \Serializable
56
+	\Foo\Bar\Countable,
57
+	\Serializable
58 58
 {
59
-    // constants, properties, methods
59
+	// constants, properties, methods
60 60
 }
61 61
 
62 62
 class ClassName extends ParentClass implements
63
-    \Foo\Bar\Countable ,
64
-    \Serializable
63
+	\Foo\Bar\Countable ,
64
+	\Serializable
65 65
 {
66
-    // constants, properties, methods
66
+	// constants, properties, methods
67 67
 }
68 68
 
69 69
 class Test
70 70
 {
71
-    public function test() {
72
-        if (1) 1;
73
-        1 ? (1 ? 1 : 1) : 1;
74
-    }
71
+	public function test() {
72
+		if (1) 1;
73
+		1 ? (1 ? 1 : 1) : 1;
74
+	}
75 75
 }
76 76
 
77 77
 class MyClass
@@ -85,18 +85,18 @@  discard block
 block discarded – undo
85 85
 
86 86
 class MyClass
87 87
 {
88
-    // Foo.
88
+	// Foo.
89 89
 }
90 90
 
91 91
 class MyClass
92 92
 {
93
-    // Foo.
93
+	// Foo.
94 94
 
95 95
 }
96 96
 
97 97
 abstract class Test implements
98
-    TestInterface1,
99
-    TestInterface2
98
+	TestInterface1,
99
+	TestInterface2
100 100
 {
101 101
 }
102 102
 
@@ -105,17 +105,17 @@  discard block
 block discarded – undo
105 105
 }
106 106
 
107 107
 interface MyInterface extends
108
-    LongInterfaceName1,
109
-    LongInterfaceName2,
110
-    LongInterfaceName3,
111
-    LoginInterfaceName4
108
+	LongInterfaceName1,
109
+	LongInterfaceName2,
110
+	LongInterfaceName3,
111
+	LoginInterfaceName4
112 112
 {
113 113
 }
114 114
 
115 115
 interface MyInterface extends
116 116
  LongInterfaceName1,
117
-    LongInterfaceName2,
118
-     LongInterfaceName3,
117
+	LongInterfaceName2,
118
+	 LongInterfaceName3,
119 119
 LongInterfaceName4
120 120
 {
121 121
 }
@@ -127,10 +127,10 @@  discard block
 block discarded – undo
127 127
 
128 128
 class ClassName implements
129 129
 
130
-    \ArrayAccess,\Countable,
130
+	\ArrayAccess,\Countable,
131 131
 \Serializable
132 132
 {
133
-    // constants, properties, methods
133
+	// constants, properties, methods
134 134
 }
135 135
 
136 136
 class C1
@@ -140,22 +140,22 @@  discard block
 block discarded – undo
140 140
 
141 141
 class Base
142 142
 {
143
-    protected $anonymous;
143
+	protected $anonymous;
144 144
 
145
-    public function __construct()
146
-    {
147
-        $this->anonymous = new class extends ArrayObject
148
-        {
149
-            public function __construct()
150
-            {
151
-                parent::__construct(['a' => 1, 'b' => 2]);
152
-            }
153
-        };
154
-    }
145
+	public function __construct()
146
+	{
147
+		$this->anonymous = new class extends ArrayObject
148
+		{
149
+			public function __construct()
150
+			{
151
+				parent::__construct(['a' => 1, 'b' => 2]);
152
+			}
153
+		};
154
+	}
155 155
 }
156 156
 
157 157
 class A extends B
158
-    implements C
158
+	implements C
159 159
 {
160 160
 }
161 161
 
@@ -170,7 +170,7 @@  discard block
 block discarded – undo
170 170
 }
171 171
 
172 172
 interface I2 extends
173
-    Bar
173
+	Bar
174 174
 {
175 175
 }
176 176
 
@@ -186,7 +186,7 @@  discard block
 block discarded – undo
186 186
 }
187 187
 
188 188
 class C2 extends
189
-    Bar
189
+	Bar
190 190
 {
191 191
 }
192 192
 
@@ -196,7 +196,7 @@  discard block
 block discarded – undo
196 196
 }
197 197
 
198 198
 class C4 extends Foo implements
199
-    Bar
199
+	Bar
200 200
 {
201 201
 }
202 202
 
@@ -218,17 +218,17 @@  discard block
 block discarded – undo
218 218
 }
219 219
 
220 220
 interface I5 extends /* comment */
221
-    \Foo\Bar
221
+	\Foo\Bar
222 222
 {
223 223
 }
224 224
 
225 225
 interface I6 extends // comment
226
-    \Foo\Bar
226
+	\Foo\Bar
227 227
 {
228 228
 }
229 229
 
230 230
 class C7 extends // comment
231
-    \Foo\Bar implements \Baz\Bar
231
+	\Foo\Bar implements \Baz\Bar
232 232
 {
233 233
 }
234 234
 
Please login to merge, or discard this patch.
src/Standards/PSR2/Tests/Namespaces/UseDeclarationUnitTest.1.inc 2 patches
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -15,23 +15,23 @@
 block discarded – undo
15 15
 }
16 16
 
17 17
 $var = new MyClass(
18
-    function () use ($foo, $bar) {
19
-        return true;
20
-    }
18
+	function () use ($foo, $bar) {
19
+		return true;
20
+	}
21 21
 );
22 22
 
23 23
 class Container extends Component implements IContainer
24 24
 {
25
-    use TContainer;
25
+	use TContainer;
26 26
 }
27 27
 
28 28
 trait HelloWorld
29 29
 {
30
-    use Hello, World;
30
+	use Hello, World;
31 31
 }
32 32
 
33 33
 $x = $foo ? function ($foo) use /* comment */ ($bar): int {
34
-    return 1;
34
+	return 1;
35 35
 } : $bar;
36 36
 
37 37
 // Testcase must be on last line in the file.
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
 }
16 16
 
17 17
 $var = new MyClass(
18
-    function () use ($foo, $bar) {
18
+    function() use ($foo, $bar) {
19 19
         return true;
20 20
     }
21 21
 );
@@ -30,7 +30,7 @@  discard block
 block discarded – undo
30 30
     use Hello, World;
31 31
 }
32 32
 
33
-$x = $foo ? function ($foo) use /* comment */ ($bar): int {
33
+$x = $foo ? function($foo) use /* comment */ ($bar) : int {
34 34
     return 1;
35 35
 } : $bar;
36 36
 
Please login to merge, or discard this patch.
src/Standards/PSR2/Tests/Namespaces/UseDeclarationUnitTest.3.inc 2 patches
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -2,15 +2,15 @@
 block discarded – undo
2 2
 namespace bug;
3 3
 
4 4
 use
5
-    someNS\A;
5
+	someNS\A;
6 6
 use someNS\B;
7 7
 class Bug
8 8
 {
9
-    public function __construct()
10
-    {
11
-        $b = 1;
12
-        $a = function () use ($b) {
13
-            echo $b;
14
-        };
15
-    }
9
+	public function __construct()
10
+	{
11
+		$b = 1;
12
+		$a = function () use ($b) {
13
+			echo $b;
14
+		};
15
+	}
16 16
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@
 block discarded – undo
9 9
     public function __construct()
10 10
     {
11 11
         $b = 1;
12
-        $a = function () use ($b) {
12
+        $a = function() use ($b) {
13 13
             echo $b;
14 14
         };
15 15
     }
Please login to merge, or discard this patch.
src/Standards/PSR2/Tests/Namespaces/UseDeclarationUnitTest.php 3 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -25,7 +25,7 @@
 block discarded – undo
25 25
      *
26 26
      * @return array<int, int>
27 27
      */
28
-    public function getErrorList($testFile='')
28
+    public function getErrorList($testFile = '')
29 29
     {
30 30
         switch ($testFile) {
31 31
         case 'UseDeclarationUnitTest.2.inc':
Please login to merge, or discard this patch.
Indentation   +73 added lines, -73 removed lines patch added patch discarded remove patch
@@ -15,83 +15,83 @@
 block discarded – undo
15 15
 {
16 16
 
17 17
 
18
-    /**
19
-     * Returns the lines where errors should occur.
20
-     *
21
-     * The key of the array should represent the line number and the value
22
-     * should represent the number of errors that should occur on that line.
23
-     *
24
-     * @param string $testFile The name of the file being tested.
25
-     *
26
-     * @return array<int, int>
27
-     */
28
-    public function getErrorList($testFile='')
29
-    {
30
-        switch ($testFile) {
31
-        case 'UseDeclarationUnitTest.2.inc':
32
-            return [
33
-                4  => 1,
34
-                5  => 1,
35
-                6  => 1,
36
-                7  => 1,
37
-                9  => 1,
38
-                10 => 1,
39
-                11 => 1,
40
-                16 => 1,
41
-            ];
42
-        case 'UseDeclarationUnitTest.3.inc':
43
-            return [
44
-                4 => 1,
45
-                6 => 1,
46
-            ];
47
-        case 'UseDeclarationUnitTest.5.inc':
48
-            return [
49
-                5  => 1,
50
-                6  => 1,
51
-                8  => 1,
52
-                14 => 1,
53
-                17 => 1,
54
-                18 => 1,
55
-                19 => 1,
56
-                21 => 1,
57
-                28 => 1,
58
-                30 => 1,
59
-                35 => 1,
60
-            ];
61
-        case 'UseDeclarationUnitTest.10.inc':
62
-        case 'UseDeclarationUnitTest.11.inc':
63
-        case 'UseDeclarationUnitTest.12.inc':
64
-        case 'UseDeclarationUnitTest.13.inc':
65
-        case 'UseDeclarationUnitTest.14.inc':
66
-        case 'UseDeclarationUnitTest.16.inc':
67
-        case 'UseDeclarationUnitTest.17.inc':
68
-            return [2 => 1];
69
-        case 'UseDeclarationUnitTest.15.inc':
70
-            return [
71
-                3 => 1,
72
-                4 => 1,
73
-                5 => 1,
74
-            ];
75
-        default:
76
-            return [];
77
-        }//end switch
18
+	/**
19
+	 * Returns the lines where errors should occur.
20
+	 *
21
+	 * The key of the array should represent the line number and the value
22
+	 * should represent the number of errors that should occur on that line.
23
+	 *
24
+	 * @param string $testFile The name of the file being tested.
25
+	 *
26
+	 * @return array<int, int>
27
+	 */
28
+	public function getErrorList($testFile='')
29
+	{
30
+		switch ($testFile) {
31
+		case 'UseDeclarationUnitTest.2.inc':
32
+			return [
33
+				4  => 1,
34
+				5  => 1,
35
+				6  => 1,
36
+				7  => 1,
37
+				9  => 1,
38
+				10 => 1,
39
+				11 => 1,
40
+				16 => 1,
41
+			];
42
+		case 'UseDeclarationUnitTest.3.inc':
43
+			return [
44
+				4 => 1,
45
+				6 => 1,
46
+			];
47
+		case 'UseDeclarationUnitTest.5.inc':
48
+			return [
49
+				5  => 1,
50
+				6  => 1,
51
+				8  => 1,
52
+				14 => 1,
53
+				17 => 1,
54
+				18 => 1,
55
+				19 => 1,
56
+				21 => 1,
57
+				28 => 1,
58
+				30 => 1,
59
+				35 => 1,
60
+			];
61
+		case 'UseDeclarationUnitTest.10.inc':
62
+		case 'UseDeclarationUnitTest.11.inc':
63
+		case 'UseDeclarationUnitTest.12.inc':
64
+		case 'UseDeclarationUnitTest.13.inc':
65
+		case 'UseDeclarationUnitTest.14.inc':
66
+		case 'UseDeclarationUnitTest.16.inc':
67
+		case 'UseDeclarationUnitTest.17.inc':
68
+			return [2 => 1];
69
+		case 'UseDeclarationUnitTest.15.inc':
70
+			return [
71
+				3 => 1,
72
+				4 => 1,
73
+				5 => 1,
74
+			];
75
+		default:
76
+			return [];
77
+		}//end switch
78 78
 
79
-    }//end getErrorList()
79
+	}//end getErrorList()
80 80
 
81 81
 
82
-    /**
83
-     * Returns the lines where warnings should occur.
84
-     *
85
-     * The key of the array should represent the line number and the value
86
-     * should represent the number of warnings that should occur on that line.
87
-     *
88
-     * @return array<int, int>
89
-     */
90
-    public function getWarningList()
91
-    {
92
-        return [];
82
+	/**
83
+	 * Returns the lines where warnings should occur.
84
+	 *
85
+	 * The key of the array should represent the line number and the value
86
+	 * should represent the number of warnings that should occur on that line.
87
+	 *
88
+	 * @return array<int, int>
89
+	 */
90
+	public function getWarningList()
91
+	{
92
+		return [];
93 93
 
94
-    }//end getWarningList()
94
+	}//end getWarningList()
95 95
 
96 96
 
97 97
 }//end class
Please login to merge, or discard this patch.
Switch Indentation   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -28,52 +28,52 @@
 block discarded – undo
28 28
     public function getErrorList($testFile='')
29 29
     {
30 30
         switch ($testFile) {
31
-        case 'UseDeclarationUnitTest.2.inc':
32
-            return [
33
-                4  => 1,
34
-                5  => 1,
35
-                6  => 1,
36
-                7  => 1,
37
-                9  => 1,
38
-                10 => 1,
39
-                11 => 1,
40
-                16 => 1,
41
-            ];
42
-        case 'UseDeclarationUnitTest.3.inc':
43
-            return [
44
-                4 => 1,
45
-                6 => 1,
46
-            ];
47
-        case 'UseDeclarationUnitTest.5.inc':
48
-            return [
49
-                5  => 1,
50
-                6  => 1,
51
-                8  => 1,
52
-                14 => 1,
53
-                17 => 1,
54
-                18 => 1,
55
-                19 => 1,
56
-                21 => 1,
57
-                28 => 1,
58
-                30 => 1,
59
-                35 => 1,
60
-            ];
61
-        case 'UseDeclarationUnitTest.10.inc':
62
-        case 'UseDeclarationUnitTest.11.inc':
63
-        case 'UseDeclarationUnitTest.12.inc':
64
-        case 'UseDeclarationUnitTest.13.inc':
65
-        case 'UseDeclarationUnitTest.14.inc':
66
-        case 'UseDeclarationUnitTest.16.inc':
67
-        case 'UseDeclarationUnitTest.17.inc':
68
-            return [2 => 1];
69
-        case 'UseDeclarationUnitTest.15.inc':
70
-            return [
71
-                3 => 1,
72
-                4 => 1,
73
-                5 => 1,
74
-            ];
75
-        default:
76
-            return [];
31
+        	case 'UseDeclarationUnitTest.2.inc':
32
+            	return [
33
+                	4  => 1,
34
+                	5  => 1,
35
+                	6  => 1,
36
+                	7  => 1,
37
+                	9  => 1,
38
+                	10 => 1,
39
+                	11 => 1,
40
+                	16 => 1,
41
+            	];
42
+        	case 'UseDeclarationUnitTest.3.inc':
43
+            	return [
44
+                	4 => 1,
45
+                	6 => 1,
46
+            	];
47
+        	case 'UseDeclarationUnitTest.5.inc':
48
+            	return [
49
+                	5  => 1,
50
+                	6  => 1,
51
+                	8  => 1,
52
+                	14 => 1,
53
+                	17 => 1,
54
+                	18 => 1,
55
+                	19 => 1,
56
+                	21 => 1,
57
+                	28 => 1,
58
+                	30 => 1,
59
+                	35 => 1,
60
+            	];
61
+        	case 'UseDeclarationUnitTest.10.inc':
62
+        	case 'UseDeclarationUnitTest.11.inc':
63
+        	case 'UseDeclarationUnitTest.12.inc':
64
+        	case 'UseDeclarationUnitTest.13.inc':
65
+        	case 'UseDeclarationUnitTest.14.inc':
66
+        	case 'UseDeclarationUnitTest.16.inc':
67
+        	case 'UseDeclarationUnitTest.17.inc':
68
+            	return [2 => 1];
69
+        	case 'UseDeclarationUnitTest.15.inc':
70
+            	return [
71
+                	3 => 1,
72
+                	4 => 1,
73
+                	5 => 1,
74
+            	];
75
+        	default:
76
+            	return [];
77 77
         }//end switch
78 78
 
79 79
     }//end getErrorList()
Please login to merge, or discard this patch.
src/Standards/PSR2/Sniffs/Methods/MethodDeclarationSniff.php 2 patches
Switch Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -64,18 +64,18 @@
 block discarded – undo
64 64
         $prefix = $stackPtr;
65 65
         while (($prefix = $phpcsFile->findPrevious(Tokens::$methodPrefixes, ($prefix - 1), $prev)) !== false) {
66 66
             switch ($tokens[$prefix]['code']) {
67
-            case T_STATIC:
68
-                $static = $prefix;
69
-                break;
70
-            case T_ABSTRACT:
71
-                $abstract = $prefix;
72
-                break;
73
-            case T_FINAL:
74
-                $final = $prefix;
75
-                break;
76
-            default:
77
-                $visibility = $prefix;
78
-                break;
67
+            	case T_STATIC:
68
+                	$static = $prefix;
69
+                	break;
70
+            	case T_ABSTRACT:
71
+                	$abstract = $prefix;
72
+                	break;
73
+            	case T_FINAL:
74
+                	$final = $prefix;
75
+                	break;
76
+            	default:
77
+                	$visibility = $prefix;
78
+                	break;
79 79
             }
80 80
         }
81 81
 
Please login to merge, or discard this patch.
Indentation   +140 added lines, -140 removed lines patch added patch discarded remove patch
@@ -17,146 +17,146 @@
 block discarded – undo
17 17
 {
18 18
 
19 19
 
20
-    /**
21
-     * Constructs a Squiz_Sniffs_Scope_MethodScopeSniff.
22
-     */
23
-    public function __construct()
24
-    {
25
-        parent::__construct(Tokens::$ooScopeTokens, [T_FUNCTION]);
26
-
27
-    }//end __construct()
28
-
29
-
30
-    /**
31
-     * Processes the function tokens within the class.
32
-     *
33
-     * @param \PHP_CodeSniffer\Files\File $phpcsFile The file where this token was found.
34
-     * @param int                         $stackPtr  The position where the token was found.
35
-     * @param int                         $currScope The current scope opener token.
36
-     *
37
-     * @return void
38
-     */
39
-    protected function processTokenWithinScope(File $phpcsFile, $stackPtr, $currScope)
40
-    {
41
-        $tokens = $phpcsFile->getTokens();
42
-
43
-        // Determine if this is a function which needs to be examined.
44
-        $conditions = $tokens[$stackPtr]['conditions'];
45
-        end($conditions);
46
-        $deepestScope = key($conditions);
47
-        if ($deepestScope !== $currScope) {
48
-            return;
49
-        }
50
-
51
-        $methodName = $phpcsFile->getDeclarationName($stackPtr);
52
-        if ($methodName === null) {
53
-            // Ignore closures.
54
-            return;
55
-        }
56
-
57
-        if ($methodName[0] === '_' && isset($methodName[1]) === true && $methodName[1] !== '_') {
58
-            $error = 'Method name "%s" should not be prefixed with an underscore to indicate visibility';
59
-            $data  = [$methodName];
60
-            $phpcsFile->addWarning($error, $stackPtr, 'Underscore', $data);
61
-        }
62
-
63
-        $visibility = 0;
64
-        $static     = 0;
65
-        $abstract   = 0;
66
-        $final      = 0;
67
-
68
-        $find = (Tokens::$methodPrefixes + Tokens::$emptyTokens);
69
-        $prev = $phpcsFile->findPrevious($find, ($stackPtr - 1), null, true);
70
-
71
-        $prefix = $stackPtr;
72
-        while (($prefix = $phpcsFile->findPrevious(Tokens::$methodPrefixes, ($prefix - 1), $prev)) !== false) {
73
-            switch ($tokens[$prefix]['code']) {
74
-            case T_STATIC:
75
-                $static = $prefix;
76
-                break;
77
-            case T_ABSTRACT:
78
-                $abstract = $prefix;
79
-                break;
80
-            case T_FINAL:
81
-                $final = $prefix;
82
-                break;
83
-            default:
84
-                $visibility = $prefix;
85
-                break;
86
-            }
87
-        }
88
-
89
-        $fixes = [];
90
-
91
-        if ($visibility !== 0 && $final > $visibility) {
92
-            $error = 'The final declaration must precede the visibility declaration';
93
-            $fix   = $phpcsFile->addFixableError($error, $final, 'FinalAfterVisibility');
94
-            if ($fix === true) {
95
-                $fixes[$final]       = '';
96
-                $fixes[($final + 1)] = '';
97
-                if (isset($fixes[$visibility]) === true) {
98
-                    $fixes[$visibility] = 'final '.$fixes[$visibility];
99
-                } else {
100
-                    $fixes[$visibility] = 'final '.$tokens[$visibility]['content'];
101
-                }
102
-            }
103
-        }
104
-
105
-        if ($visibility !== 0 && $abstract > $visibility) {
106
-            $error = 'The abstract declaration must precede the visibility declaration';
107
-            $fix   = $phpcsFile->addFixableError($error, $abstract, 'AbstractAfterVisibility');
108
-            if ($fix === true) {
109
-                $fixes[$abstract]       = '';
110
-                $fixes[($abstract + 1)] = '';
111
-                if (isset($fixes[$visibility]) === true) {
112
-                    $fixes[$visibility] = 'abstract '.$fixes[$visibility];
113
-                } else {
114
-                    $fixes[$visibility] = 'abstract '.$tokens[$visibility]['content'];
115
-                }
116
-            }
117
-        }
118
-
119
-        if ($static !== 0 && $static < $visibility) {
120
-            $error = 'The static declaration must come after the visibility declaration';
121
-            $fix   = $phpcsFile->addFixableError($error, $static, 'StaticBeforeVisibility');
122
-            if ($fix === true) {
123
-                $fixes[$static]       = '';
124
-                $fixes[($static + 1)] = '';
125
-                if (isset($fixes[$visibility]) === true) {
126
-                    $fixes[$visibility] .= ' static';
127
-                } else {
128
-                    $fixes[$visibility] = $tokens[$visibility]['content'].' static';
129
-                }
130
-            }
131
-        }
132
-
133
-        // Batch all the fixes together to reduce the possibility of conflicts.
134
-        if (empty($fixes) === false) {
135
-            $phpcsFile->fixer->beginChangeset();
136
-            foreach ($fixes as $stackPtr => $content) {
137
-                $phpcsFile->fixer->replaceToken($stackPtr, $content);
138
-            }
139
-
140
-            $phpcsFile->fixer->endChangeset();
141
-        }
142
-
143
-    }//end processTokenWithinScope()
144
-
145
-
146
-    /**
147
-     * Processes a token that is found within the scope that this test is
148
-     * listening to.
149
-     *
150
-     * @param \PHP_CodeSniffer\Files\File $phpcsFile The file where this token was found.
151
-     * @param int                         $stackPtr  The position in the stack where this
152
-     *                                               token was found.
153
-     *
154
-     * @return void
155
-     */
156
-    protected function processTokenOutsideScope(File $phpcsFile, $stackPtr)
157
-    {
158
-
159
-    }//end processTokenOutsideScope()
20
+	/**
21
+	 * Constructs a Squiz_Sniffs_Scope_MethodScopeSniff.
22
+	 */
23
+	public function __construct()
24
+	{
25
+		parent::__construct(Tokens::$ooScopeTokens, [T_FUNCTION]);
26
+
27
+	}//end __construct()
28
+
29
+
30
+	/**
31
+	 * Processes the function tokens within the class.
32
+	 *
33
+	 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file where this token was found.
34
+	 * @param int                         $stackPtr  The position where the token was found.
35
+	 * @param int                         $currScope The current scope opener token.
36
+	 *
37
+	 * @return void
38
+	 */
39
+	protected function processTokenWithinScope(File $phpcsFile, $stackPtr, $currScope)
40
+	{
41
+		$tokens = $phpcsFile->getTokens();
42
+
43
+		// Determine if this is a function which needs to be examined.
44
+		$conditions = $tokens[$stackPtr]['conditions'];
45
+		end($conditions);
46
+		$deepestScope = key($conditions);
47
+		if ($deepestScope !== $currScope) {
48
+			return;
49
+		}
50
+
51
+		$methodName = $phpcsFile->getDeclarationName($stackPtr);
52
+		if ($methodName === null) {
53
+			// Ignore closures.
54
+			return;
55
+		}
56
+
57
+		if ($methodName[0] === '_' && isset($methodName[1]) === true && $methodName[1] !== '_') {
58
+			$error = 'Method name "%s" should not be prefixed with an underscore to indicate visibility';
59
+			$data  = [$methodName];
60
+			$phpcsFile->addWarning($error, $stackPtr, 'Underscore', $data);
61
+		}
62
+
63
+		$visibility = 0;
64
+		$static     = 0;
65
+		$abstract   = 0;
66
+		$final      = 0;
67
+
68
+		$find = (Tokens::$methodPrefixes + Tokens::$emptyTokens);
69
+		$prev = $phpcsFile->findPrevious($find, ($stackPtr - 1), null, true);
70
+
71
+		$prefix = $stackPtr;
72
+		while (($prefix = $phpcsFile->findPrevious(Tokens::$methodPrefixes, ($prefix - 1), $prev)) !== false) {
73
+			switch ($tokens[$prefix]['code']) {
74
+			case T_STATIC:
75
+				$static = $prefix;
76
+				break;
77
+			case T_ABSTRACT:
78
+				$abstract = $prefix;
79
+				break;
80
+			case T_FINAL:
81
+				$final = $prefix;
82
+				break;
83
+			default:
84
+				$visibility = $prefix;
85
+				break;
86
+			}
87
+		}
88
+
89
+		$fixes = [];
90
+
91
+		if ($visibility !== 0 && $final > $visibility) {
92
+			$error = 'The final declaration must precede the visibility declaration';
93
+			$fix   = $phpcsFile->addFixableError($error, $final, 'FinalAfterVisibility');
94
+			if ($fix === true) {
95
+				$fixes[$final]       = '';
96
+				$fixes[($final + 1)] = '';
97
+				if (isset($fixes[$visibility]) === true) {
98
+					$fixes[$visibility] = 'final '.$fixes[$visibility];
99
+				} else {
100
+					$fixes[$visibility] = 'final '.$tokens[$visibility]['content'];
101
+				}
102
+			}
103
+		}
104
+
105
+		if ($visibility !== 0 && $abstract > $visibility) {
106
+			$error = 'The abstract declaration must precede the visibility declaration';
107
+			$fix   = $phpcsFile->addFixableError($error, $abstract, 'AbstractAfterVisibility');
108
+			if ($fix === true) {
109
+				$fixes[$abstract]       = '';
110
+				$fixes[($abstract + 1)] = '';
111
+				if (isset($fixes[$visibility]) === true) {
112
+					$fixes[$visibility] = 'abstract '.$fixes[$visibility];
113
+				} else {
114
+					$fixes[$visibility] = 'abstract '.$tokens[$visibility]['content'];
115
+				}
116
+			}
117
+		}
118
+
119
+		if ($static !== 0 && $static < $visibility) {
120
+			$error = 'The static declaration must come after the visibility declaration';
121
+			$fix   = $phpcsFile->addFixableError($error, $static, 'StaticBeforeVisibility');
122
+			if ($fix === true) {
123
+				$fixes[$static]       = '';
124
+				$fixes[($static + 1)] = '';
125
+				if (isset($fixes[$visibility]) === true) {
126
+					$fixes[$visibility] .= ' static';
127
+				} else {
128
+					$fixes[$visibility] = $tokens[$visibility]['content'].' static';
129
+				}
130
+			}
131
+		}
132
+
133
+		// Batch all the fixes together to reduce the possibility of conflicts.
134
+		if (empty($fixes) === false) {
135
+			$phpcsFile->fixer->beginChangeset();
136
+			foreach ($fixes as $stackPtr => $content) {
137
+				$phpcsFile->fixer->replaceToken($stackPtr, $content);
138
+			}
139
+
140
+			$phpcsFile->fixer->endChangeset();
141
+		}
142
+
143
+	}//end processTokenWithinScope()
144
+
145
+
146
+	/**
147
+	 * Processes a token that is found within the scope that this test is
148
+	 * listening to.
149
+	 *
150
+	 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file where this token was found.
151
+	 * @param int                         $stackPtr  The position in the stack where this
152
+	 *                                               token was found.
153
+	 *
154
+	 * @return void
155
+	 */
156
+	protected function processTokenOutsideScope(File $phpcsFile, $stackPtr)
157
+	{
158
+
159
+	}//end processTokenOutsideScope()
160 160
 
161 161
 
162 162
 }//end class
Please login to merge, or discard this patch.
src/Standards/PSR2/Sniffs/ControlStructures/ElseIfDeclarationSniff.php 1 patch
Indentation   +43 added lines, -43 removed lines patch added patch discarded remove patch
@@ -16,57 +16,57 @@
 block discarded – undo
16 16
 {
17 17
 
18 18
 
19
-    /**
20
-     * Returns an array of tokens this test wants to listen for.
21
-     *
22
-     * @return array
23
-     */
24
-    public function register()
25
-    {
26
-        return [
27
-            T_ELSE,
28
-            T_ELSEIF,
29
-        ];
19
+	/**
20
+	 * Returns an array of tokens this test wants to listen for.
21
+	 *
22
+	 * @return array
23
+	 */
24
+	public function register()
25
+	{
26
+		return [
27
+			T_ELSE,
28
+			T_ELSEIF,
29
+		];
30 30
 
31
-    }//end register()
31
+	}//end register()
32 32
 
33 33
 
34
-    /**
35
-     * Processes this test, when one of its tokens is encountered.
36
-     *
37
-     * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
38
-     * @param int                         $stackPtr  The position of the current token in the
39
-     *                                               stack passed in $tokens.
40
-     *
41
-     * @return void
42
-     */
43
-    public function process(File $phpcsFile, $stackPtr)
44
-    {
45
-        $tokens = $phpcsFile->getTokens();
34
+	/**
35
+	 * Processes this test, when one of its tokens is encountered.
36
+	 *
37
+	 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
38
+	 * @param int                         $stackPtr  The position of the current token in the
39
+	 *                                               stack passed in $tokens.
40
+	 *
41
+	 * @return void
42
+	 */
43
+	public function process(File $phpcsFile, $stackPtr)
44
+	{
45
+		$tokens = $phpcsFile->getTokens();
46 46
 
47
-        if ($tokens[$stackPtr]['code'] === T_ELSEIF) {
48
-            $phpcsFile->recordMetric($stackPtr, 'Use of ELSE IF or ELSEIF', 'elseif');
49
-            return;
50
-        }
47
+		if ($tokens[$stackPtr]['code'] === T_ELSEIF) {
48
+			$phpcsFile->recordMetric($stackPtr, 'Use of ELSE IF or ELSEIF', 'elseif');
49
+			return;
50
+		}
51 51
 
52
-        $next = $phpcsFile->findNext(T_WHITESPACE, ($stackPtr + 1), null, true);
53
-        if ($tokens[$next]['code'] === T_IF) {
54
-            $phpcsFile->recordMetric($stackPtr, 'Use of ELSE IF or ELSEIF', 'else if');
55
-            $error = 'Usage of ELSE IF is discouraged; use ELSEIF instead';
56
-            $fix   = $phpcsFile->addFixableWarning($error, $stackPtr, 'NotAllowed');
52
+		$next = $phpcsFile->findNext(T_WHITESPACE, ($stackPtr + 1), null, true);
53
+		if ($tokens[$next]['code'] === T_IF) {
54
+			$phpcsFile->recordMetric($stackPtr, 'Use of ELSE IF or ELSEIF', 'else if');
55
+			$error = 'Usage of ELSE IF is discouraged; use ELSEIF instead';
56
+			$fix   = $phpcsFile->addFixableWarning($error, $stackPtr, 'NotAllowed');
57 57
 
58
-            if ($fix === true) {
59
-                $phpcsFile->fixer->beginChangeset();
60
-                $phpcsFile->fixer->replaceToken($stackPtr, 'elseif');
61
-                for ($i = ($stackPtr + 1); $i <= $next; $i++) {
62
-                    $phpcsFile->fixer->replaceToken($i, '');
63
-                }
58
+			if ($fix === true) {
59
+				$phpcsFile->fixer->beginChangeset();
60
+				$phpcsFile->fixer->replaceToken($stackPtr, 'elseif');
61
+				for ($i = ($stackPtr + 1); $i <= $next; $i++) {
62
+					$phpcsFile->fixer->replaceToken($i, '');
63
+				}
64 64
 
65
-                $phpcsFile->fixer->endChangeset();
66
-            }
67
-        }
65
+				$phpcsFile->fixer->endChangeset();
66
+			}
67
+		}
68 68
 
69
-    }//end process()
69
+	}//end process()
70 70
 
71 71
 
72 72
 }//end class
Please login to merge, or discard this patch.
php_codesniffer/src/Standards/PSR2/Sniffs/Classes/ClassDeclarationSniff.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -312,7 +312,7 @@
 block discarded – undo
312 312
                             $expected,
313 313
                             $found,
314 314
                         ];
315
-                        $fix   = $phpcsFile->addFixableError($error, $className, 'InterfaceWrongIndent', $data);
315
+                        $fix = $phpcsFile->addFixableError($error, $className, 'InterfaceWrongIndent', $data);
316 316
                         if ($fix === true) {
317 317
                             $padding = str_repeat(' ', $expected);
318 318
                             if ($found === 0) {
Please login to merge, or discard this patch.
Indentation   +507 added lines, -507 removed lines patch added patch discarded remove patch
@@ -16,513 +16,513 @@
 block discarded – undo
16 16
 class ClassDeclarationSniff extends PEARClassDeclarationSniff
17 17
 {
18 18
 
19
-    /**
20
-     * The number of spaces code should be indented.
21
-     *
22
-     * @var integer
23
-     */
24
-    public $indent = 4;
25
-
26
-
27
-    /**
28
-     * Processes this test, when one of its tokens is encountered.
29
-     *
30
-     * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
31
-     * @param int                         $stackPtr  The position of the current token
32
-     *                                               in the stack passed in $tokens.
33
-     *
34
-     * @return void
35
-     */
36
-    public function process(File $phpcsFile, $stackPtr)
37
-    {
38
-        // We want all the errors from the PEAR standard, plus some of our own.
39
-        parent::process($phpcsFile, $stackPtr);
40
-
41
-        // Just in case.
42
-        $tokens = $phpcsFile->getTokens();
43
-        if (isset($tokens[$stackPtr]['scope_opener']) === false) {
44
-            return;
45
-        }
46
-
47
-        $this->processOpen($phpcsFile, $stackPtr);
48
-        $this->processClose($phpcsFile, $stackPtr);
49
-
50
-    }//end process()
51
-
52
-
53
-    /**
54
-     * Processes the opening section of a class declaration.
55
-     *
56
-     * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
57
-     * @param int                         $stackPtr  The position of the current token
58
-     *                                               in the stack passed in $tokens.
59
-     *
60
-     * @return void
61
-     */
62
-    public function processOpen(File $phpcsFile, $stackPtr)
63
-    {
64
-        $tokens       = $phpcsFile->getTokens();
65
-        $stackPtrType = strtolower($tokens[$stackPtr]['content']);
66
-
67
-        // Check alignment of the keyword and braces.
68
-        if ($tokens[($stackPtr - 1)]['code'] === T_WHITESPACE) {
69
-            $prevContent = $tokens[($stackPtr - 1)]['content'];
70
-            if ($prevContent !== $phpcsFile->eolChar) {
71
-                $blankSpace = substr($prevContent, strpos($prevContent, $phpcsFile->eolChar));
72
-                $spaces     = strlen($blankSpace);
73
-
74
-                if (in_array($tokens[($stackPtr - 2)]['code'], [T_ABSTRACT, T_FINAL], true) === true
75
-                    && $spaces !== 1
76
-                ) {
77
-                    $prevContent = strtolower($tokens[($stackPtr - 2)]['content']);
78
-                    $error       = 'Expected 1 space between %s and %s keywords; %s found';
79
-                    $data        = [
80
-                        $prevContent,
81
-                        $stackPtrType,
82
-                        $spaces,
83
-                    ];
84
-
85
-                    $fix = $phpcsFile->addFixableError($error, $stackPtr, 'SpaceBeforeKeyword', $data);
86
-                    if ($fix === true) {
87
-                        $phpcsFile->fixer->replaceToken(($stackPtr - 1), ' ');
88
-                    }
89
-                }
90
-            } else if ($tokens[($stackPtr - 2)]['code'] === T_ABSTRACT
91
-                || $tokens[($stackPtr - 2)]['code'] === T_FINAL
92
-            ) {
93
-                $prevContent = strtolower($tokens[($stackPtr - 2)]['content']);
94
-                $error       = 'Expected 1 space between %s and %s keywords; newline found';
95
-                $data        = [
96
-                    $prevContent,
97
-                    $stackPtrType,
98
-                ];
99
-
100
-                $fix = $phpcsFile->addFixableError($error, $stackPtr, 'NewlineBeforeKeyword', $data);
101
-                if ($fix === true) {
102
-                    $phpcsFile->fixer->replaceToken(($stackPtr - 1), ' ');
103
-                }
104
-            }//end if
105
-        }//end if
106
-
107
-        // We'll need the indent of the class/interface declaration for later.
108
-        $classIndent = 0;
109
-        for ($i = ($stackPtr - 1); $i > 0; $i--) {
110
-            if ($tokens[$i]['line'] === $tokens[$stackPtr]['line']) {
111
-                continue;
112
-            }
113
-
114
-            // We changed lines.
115
-            if ($tokens[($i + 1)]['code'] === T_WHITESPACE) {
116
-                $classIndent = $tokens[($i + 1)]['length'];
117
-            }
118
-
119
-            break;
120
-        }
121
-
122
-        $className    = null;
123
-        $checkSpacing = true;
124
-
125
-        if ($tokens[$stackPtr]['code'] !== T_ANON_CLASS) {
126
-            $className = $phpcsFile->findNext(T_STRING, $stackPtr);
127
-        } else {
128
-            // Ignore the spacing check if this is a simple anon class.
129
-            $next = $phpcsFile->findNext(T_WHITESPACE, ($stackPtr + 1), null, true);
130
-            if ($next === $tokens[$stackPtr]['scope_opener']
131
-                && $tokens[$next]['line'] > $tokens[$stackPtr]['line']
132
-            ) {
133
-                $checkSpacing = false;
134
-            }
135
-        }
136
-
137
-        if ($checkSpacing === true) {
138
-            // Spacing of the keyword.
139
-            if ($tokens[($stackPtr + 1)]['code'] !== T_WHITESPACE) {
140
-                $gap = 0;
141
-            } else if ($tokens[($stackPtr + 2)]['line'] !== $tokens[$stackPtr]['line']) {
142
-                $gap = 'newline';
143
-            } else {
144
-                $gap = $tokens[($stackPtr + 1)]['length'];
145
-            }
146
-
147
-            if ($gap !== 1) {
148
-                $error = 'Expected 1 space after %s keyword; %s found';
149
-                $data  = [
150
-                    $stackPtrType,
151
-                    $gap,
152
-                ];
153
-
154
-                $fix = $phpcsFile->addFixableError($error, $stackPtr, 'SpaceAfterKeyword', $data);
155
-                if ($fix === true) {
156
-                    if ($gap === 0) {
157
-                        $phpcsFile->fixer->addContent($stackPtr, ' ');
158
-                    } else {
159
-                        $phpcsFile->fixer->replaceToken(($stackPtr + 1), ' ');
160
-                    }
161
-                }
162
-            }
163
-        }//end if
164
-
165
-        // Check after the class/interface name.
166
-        if ($className !== null
167
-            && $tokens[($className + 2)]['line'] === $tokens[$className]['line']
168
-        ) {
169
-            $gap = $tokens[($className + 1)]['content'];
170
-            if (strlen($gap) !== 1) {
171
-                $found = strlen($gap);
172
-                $error = 'Expected 1 space after %s name; %s found';
173
-                $data  = [
174
-                    $stackPtrType,
175
-                    $found,
176
-                ];
177
-
178
-                $fix = $phpcsFile->addFixableError($error, $className, 'SpaceAfterName', $data);
179
-                if ($fix === true) {
180
-                    $phpcsFile->fixer->replaceToken(($className + 1), ' ');
181
-                }
182
-            }
183
-        }
184
-
185
-        $openingBrace = $tokens[$stackPtr]['scope_opener'];
186
-
187
-        // Check positions of the extends and implements keywords.
188
-        $compareToken = $stackPtr;
189
-        $compareType  = 'name';
190
-        if ($tokens[$stackPtr]['code'] === T_ANON_CLASS) {
191
-            if (isset($tokens[$stackPtr]['parenthesis_opener']) === true) {
192
-                $compareToken = $tokens[$stackPtr]['parenthesis_closer'];
193
-                $compareType  = 'closing parenthesis';
194
-            } else {
195
-                $compareType = 'keyword';
196
-            }
197
-        }
198
-
199
-        foreach (['extends', 'implements'] as $keywordType) {
200
-            $keyword = $phpcsFile->findNext(constant('T_'.strtoupper($keywordType)), ($compareToken + 1), $openingBrace);
201
-            if ($keyword !== false) {
202
-                if ($tokens[$keyword]['line'] !== $tokens[$compareToken]['line']) {
203
-                    $error = 'The '.$keywordType.' keyword must be on the same line as the %s '.$compareType;
204
-                    $data  = [$stackPtrType];
205
-                    $fix   = $phpcsFile->addFixableError($error, $keyword, ucfirst($keywordType).'Line', $data);
206
-                    if ($fix === true) {
207
-                        $phpcsFile->fixer->beginChangeset();
208
-                        $comments = [];
209
-
210
-                        for ($i = ($compareToken + 1); $i < $keyword; ++$i) {
211
-                            if ($tokens[$i]['code'] === T_COMMENT) {
212
-                                $comments[] = trim($tokens[$i]['content']);
213
-                            }
214
-
215
-                            if ($tokens[$i]['code'] === T_WHITESPACE
216
-                                || $tokens[$i]['code'] === T_COMMENT
217
-                            ) {
218
-                                $phpcsFile->fixer->replaceToken($i, ' ');
219
-                            }
220
-                        }
221
-
222
-                        $phpcsFile->fixer->addContent($compareToken, ' ');
223
-                        if (empty($comments) === false) {
224
-                            $i = $keyword;
225
-                            while ($tokens[($i + 1)]['line'] === $tokens[$keyword]['line']) {
226
-                                ++$i;
227
-                            }
228
-
229
-                            $phpcsFile->fixer->addContentBefore($i, ' '.implode(' ', $comments));
230
-                        }
231
-
232
-                        $phpcsFile->fixer->endChangeset();
233
-                    }//end if
234
-                } else {
235
-                    // Check the whitespace before. Whitespace after is checked
236
-                    // later by looking at the whitespace before the first class name
237
-                    // in the list.
238
-                    $gap = $tokens[($keyword - 1)]['length'];
239
-                    if ($gap !== 1) {
240
-                        $error = 'Expected 1 space before '.$keywordType.' keyword; %s found';
241
-                        $data  = [$gap];
242
-                        $fix   = $phpcsFile->addFixableError($error, $keyword, 'SpaceBefore'.ucfirst($keywordType), $data);
243
-                        if ($fix === true) {
244
-                            $phpcsFile->fixer->replaceToken(($keyword - 1), ' ');
245
-                        }
246
-                    }
247
-                }//end if
248
-            }//end if
249
-        }//end foreach
250
-
251
-        // Check each of the extends/implements class names. If the extends/implements
252
-        // keyword is the last content on the line, it means we need to check for
253
-        // the multi-line format, so we do not include the class names
254
-        // from the extends/implements list in the following check.
255
-        // Note that classes can only extend one other class, so they can't use a
256
-        // multi-line extends format, whereas an interface can extend multiple
257
-        // other interfaces, and so uses a multi-line extends format.
258
-        if ($tokens[$stackPtr]['code'] === T_INTERFACE) {
259
-            $keywordTokenType = T_EXTENDS;
260
-        } else {
261
-            $keywordTokenType = T_IMPLEMENTS;
262
-        }
263
-
264
-        $implements          = $phpcsFile->findNext($keywordTokenType, ($stackPtr + 1), $openingBrace);
265
-        $multiLineImplements = false;
266
-        if ($implements !== false) {
267
-            $prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($openingBrace - 1), $implements, true);
268
-            if ($tokens[$prev]['line'] !== $tokens[$implements]['line']) {
269
-                $multiLineImplements = true;
270
-            }
271
-        }
272
-
273
-        $find = [
274
-            T_STRING,
275
-            $keywordTokenType,
276
-        ];
277
-
278
-        if ($className !== null) {
279
-            $start = $className;
280
-        } else if (isset($tokens[$stackPtr]['parenthesis_closer']) === true) {
281
-            $start = $tokens[$stackPtr]['parenthesis_closer'];
282
-        } else {
283
-            $start = $stackPtr;
284
-        }
285
-
286
-        $classNames = [];
287
-        $nextClass  = $phpcsFile->findNext($find, ($start + 2), ($openingBrace - 1));
288
-        while ($nextClass !== false) {
289
-            $classNames[] = $nextClass;
290
-            $nextClass    = $phpcsFile->findNext($find, ($nextClass + 1), ($openingBrace - 1));
291
-        }
292
-
293
-        $classCount         = count($classNames);
294
-        $checkingImplements = false;
295
-        $implementsToken    = null;
296
-        foreach ($classNames as $n => $className) {
297
-            if ($tokens[$className]['code'] === $keywordTokenType) {
298
-                $checkingImplements = true;
299
-                $implementsToken    = $className;
300
-
301
-                continue;
302
-            }
303
-
304
-            if ($checkingImplements === true
305
-                && $multiLineImplements === true
306
-                && ($tokens[($className - 1)]['code'] !== T_NS_SEPARATOR
307
-                || $tokens[($className - 2)]['code'] !== T_STRING)
308
-            ) {
309
-                $prev = $phpcsFile->findPrevious(
310
-                    [
311
-                        T_NS_SEPARATOR,
312
-                        T_WHITESPACE,
313
-                    ],
314
-                    ($className - 1),
315
-                    $implements,
316
-                    true
317
-                );
318
-
319
-                if ($prev === $implementsToken && $tokens[$className]['line'] !== ($tokens[$prev]['line'] + 1)) {
320
-                    if ($keywordTokenType === T_EXTENDS) {
321
-                        $error = 'The first item in a multi-line extends list must be on the line following the extends keyword';
322
-                        $fix   = $phpcsFile->addFixableError($error, $className, 'FirstExtendsInterfaceSameLine');
323
-                    } else {
324
-                        $error = 'The first item in a multi-line implements list must be on the line following the implements keyword';
325
-                        $fix   = $phpcsFile->addFixableError($error, $className, 'FirstInterfaceSameLine');
326
-                    }
327
-
328
-                    if ($fix === true) {
329
-                        $phpcsFile->fixer->beginChangeset();
330
-                        for ($i = ($prev + 1); $i < $className; $i++) {
331
-                            if ($tokens[$i]['code'] !== T_WHITESPACE) {
332
-                                break;
333
-                            }
334
-
335
-                            $phpcsFile->fixer->replaceToken($i, '');
336
-                        }
337
-
338
-                        $phpcsFile->fixer->addNewline($prev);
339
-                        $phpcsFile->fixer->endChangeset();
340
-                    }
341
-                } else if ($tokens[$prev]['line'] !== ($tokens[$className]['line'] - 1)) {
342
-                    if ($keywordTokenType === T_EXTENDS) {
343
-                        $error = 'Only one interface may be specified per line in a multi-line extends declaration';
344
-                        $fix   = $phpcsFile->addFixableError($error, $className, 'ExtendsInterfaceSameLine');
345
-                    } else {
346
-                        $error = 'Only one interface may be specified per line in a multi-line implements declaration';
347
-                        $fix   = $phpcsFile->addFixableError($error, $className, 'InterfaceSameLine');
348
-                    }
349
-
350
-                    if ($fix === true) {
351
-                        $phpcsFile->fixer->beginChangeset();
352
-                        for ($i = ($prev + 1); $i < $className; $i++) {
353
-                            if ($tokens[$i]['code'] !== T_WHITESPACE) {
354
-                                break;
355
-                            }
356
-
357
-                            $phpcsFile->fixer->replaceToken($i, '');
358
-                        }
359
-
360
-                        $phpcsFile->fixer->addNewline($prev);
361
-                        $phpcsFile->fixer->endChangeset();
362
-                    }
363
-                } else {
364
-                    $prev = $phpcsFile->findPrevious(T_WHITESPACE, ($className - 1), $implements);
365
-                    if ($tokens[$prev]['line'] !== $tokens[$className]['line']) {
366
-                        $found = 0;
367
-                    } else {
368
-                        $found = $tokens[$prev]['length'];
369
-                    }
370
-
371
-                    $expected = ($classIndent + $this->indent);
372
-                    if ($found !== $expected) {
373
-                        $error = 'Expected %s spaces before interface name; %s found';
374
-                        $data  = [
375
-                            $expected,
376
-                            $found,
377
-                        ];
378
-                        $fix   = $phpcsFile->addFixableError($error, $className, 'InterfaceWrongIndent', $data);
379
-                        if ($fix === true) {
380
-                            $padding = str_repeat(' ', $expected);
381
-                            if ($found === 0) {
382
-                                $phpcsFile->fixer->addContent($prev, $padding);
383
-                            } else {
384
-                                $phpcsFile->fixer->replaceToken($prev, $padding);
385
-                            }
386
-                        }
387
-                    }
388
-                }//end if
389
-            } else if ($tokens[($className - 1)]['code'] !== T_NS_SEPARATOR
390
-                || $tokens[($className - 2)]['code'] !== T_STRING
391
-            ) {
392
-                // Not part of a longer fully qualified class name.
393
-                if ($tokens[($className - 1)]['code'] === T_COMMA
394
-                    || ($tokens[($className - 1)]['code'] === T_NS_SEPARATOR
395
-                    && $tokens[($className - 2)]['code'] === T_COMMA)
396
-                ) {
397
-                    $error = 'Expected 1 space before "%s"; 0 found';
398
-                    $data  = [$tokens[$className]['content']];
399
-                    $fix   = $phpcsFile->addFixableError($error, ($nextComma + 1), 'NoSpaceBeforeName', $data);
400
-                    if ($fix === true) {
401
-                        $phpcsFile->fixer->addContentBefore(($nextComma + 1), ' ');
402
-                    }
403
-                } else {
404
-                    if ($tokens[($className - 1)]['code'] === T_NS_SEPARATOR) {
405
-                        $prev = ($className - 2);
406
-                    } else {
407
-                        $prev = ($className - 1);
408
-                    }
409
-
410
-                    $last    = $phpcsFile->findPrevious(T_WHITESPACE, $prev, null, true);
411
-                    $content = $phpcsFile->getTokensAsString(($last + 1), ($prev - $last));
412
-                    if ($content !== ' ') {
413
-                        $found = strlen($content);
414
-
415
-                        $error = 'Expected 1 space before "%s"; %s found';
416
-                        $data  = [
417
-                            $tokens[$className]['content'],
418
-                            $found,
419
-                        ];
420
-
421
-                        $fix = $phpcsFile->addFixableError($error, $className, 'SpaceBeforeName', $data);
422
-                        if ($fix === true) {
423
-                            if ($tokens[$prev]['code'] === T_WHITESPACE) {
424
-                                $phpcsFile->fixer->beginChangeset();
425
-                                $phpcsFile->fixer->replaceToken($prev, ' ');
426
-                                while ($tokens[--$prev]['code'] === T_WHITESPACE) {
427
-                                    $phpcsFile->fixer->replaceToken($prev, ' ');
428
-                                }
429
-
430
-                                $phpcsFile->fixer->endChangeset();
431
-                            } else {
432
-                                $phpcsFile->fixer->addContent($prev, ' ');
433
-                            }
434
-                        }
435
-                    }//end if
436
-                }//end if
437
-            }//end if
438
-
439
-            if ($checkingImplements === true
440
-                && $tokens[($className + 1)]['code'] !== T_NS_SEPARATOR
441
-                && $tokens[($className + 1)]['code'] !== T_COMMA
442
-            ) {
443
-                if ($n !== ($classCount - 1)) {
444
-                    // This is not the last class name, and the comma
445
-                    // is not where we expect it to be.
446
-                    if ($tokens[($className + 2)]['code'] !== $keywordTokenType) {
447
-                        $error = 'Expected 0 spaces between "%s" and comma; %s found';
448
-                        $data  = [
449
-                            $tokens[$className]['content'],
450
-                            $tokens[($className + 1)]['length'],
451
-                        ];
452
-
453
-                        $fix = $phpcsFile->addFixableError($error, $className, 'SpaceBeforeComma', $data);
454
-                        if ($fix === true) {
455
-                            $phpcsFile->fixer->replaceToken(($className + 1), '');
456
-                        }
457
-                    }
458
-                }
459
-
460
-                $nextComma = $phpcsFile->findNext(T_COMMA, $className);
461
-            } else {
462
-                $nextComma = ($className + 1);
463
-            }//end if
464
-        }//end foreach
465
-
466
-    }//end processOpen()
467
-
468
-
469
-    /**
470
-     * Processes the closing section of a class declaration.
471
-     *
472
-     * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
473
-     * @param int                         $stackPtr  The position of the current token
474
-     *                                               in the stack passed in $tokens.
475
-     *
476
-     * @return void
477
-     */
478
-    public function processClose(File $phpcsFile, $stackPtr)
479
-    {
480
-        $tokens = $phpcsFile->getTokens();
481
-
482
-        // Check that the closing brace comes right after the code body.
483
-        $closeBrace  = $tokens[$stackPtr]['scope_closer'];
484
-        $prevContent = $phpcsFile->findPrevious(T_WHITESPACE, ($closeBrace - 1), null, true);
485
-        if ($prevContent !== $tokens[$stackPtr]['scope_opener']
486
-            && $tokens[$prevContent]['line'] !== ($tokens[$closeBrace]['line'] - 1)
487
-        ) {
488
-            $error = 'The closing brace for the %s must go on the next line after the body';
489
-            $data  = [$tokens[$stackPtr]['content']];
490
-            $fix   = $phpcsFile->addFixableError($error, $closeBrace, 'CloseBraceAfterBody', $data);
491
-
492
-            if ($fix === true) {
493
-                $phpcsFile->fixer->beginChangeset();
494
-                for ($i = ($prevContent + 1); $i < $closeBrace; $i++) {
495
-                    $phpcsFile->fixer->replaceToken($i, '');
496
-                }
497
-
498
-                if (strpos($tokens[$prevContent]['content'], $phpcsFile->eolChar) === false) {
499
-                    $phpcsFile->fixer->replaceToken($closeBrace, $phpcsFile->eolChar.$tokens[$closeBrace]['content']);
500
-                }
501
-
502
-                $phpcsFile->fixer->endChangeset();
503
-            }
504
-        }//end if
505
-
506
-        if ($tokens[$stackPtr]['code'] !== T_ANON_CLASS) {
507
-            // Check the closing brace is on it's own line, but allow
508
-            // for comments like "//end class".
509
-            $ignoreTokens   = Tokens::$phpcsCommentTokens;
510
-            $ignoreTokens[] = T_WHITESPACE;
511
-            $ignoreTokens[] = T_COMMENT;
512
-            $ignoreTokens[] = T_SEMICOLON;
513
-            $ignoreTokens[] = T_COMMA;
514
-            $nextContent    = $phpcsFile->findNext($ignoreTokens, ($closeBrace + 1), null, true);
515
-            if ($tokens[$nextContent]['content'] !== $phpcsFile->eolChar
516
-                && $tokens[$nextContent]['line'] === $tokens[$closeBrace]['line']
517
-            ) {
518
-                $type  = strtolower($tokens[$stackPtr]['content']);
519
-                $error = 'Closing %s brace must be on a line by itself';
520
-                $data  = [$type];
521
-                $phpcsFile->addError($error, $closeBrace, 'CloseBraceSameLine', $data);
522
-            }
523
-        }
524
-
525
-    }//end processClose()
19
+	/**
20
+	 * The number of spaces code should be indented.
21
+	 *
22
+	 * @var integer
23
+	 */
24
+	public $indent = 4;
25
+
26
+
27
+	/**
28
+	 * Processes this test, when one of its tokens is encountered.
29
+	 *
30
+	 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
31
+	 * @param int                         $stackPtr  The position of the current token
32
+	 *                                               in the stack passed in $tokens.
33
+	 *
34
+	 * @return void
35
+	 */
36
+	public function process(File $phpcsFile, $stackPtr)
37
+	{
38
+		// We want all the errors from the PEAR standard, plus some of our own.
39
+		parent::process($phpcsFile, $stackPtr);
40
+
41
+		// Just in case.
42
+		$tokens = $phpcsFile->getTokens();
43
+		if (isset($tokens[$stackPtr]['scope_opener']) === false) {
44
+			return;
45
+		}
46
+
47
+		$this->processOpen($phpcsFile, $stackPtr);
48
+		$this->processClose($phpcsFile, $stackPtr);
49
+
50
+	}//end process()
51
+
52
+
53
+	/**
54
+	 * Processes the opening section of a class declaration.
55
+	 *
56
+	 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
57
+	 * @param int                         $stackPtr  The position of the current token
58
+	 *                                               in the stack passed in $tokens.
59
+	 *
60
+	 * @return void
61
+	 */
62
+	public function processOpen(File $phpcsFile, $stackPtr)
63
+	{
64
+		$tokens       = $phpcsFile->getTokens();
65
+		$stackPtrType = strtolower($tokens[$stackPtr]['content']);
66
+
67
+		// Check alignment of the keyword and braces.
68
+		if ($tokens[($stackPtr - 1)]['code'] === T_WHITESPACE) {
69
+			$prevContent = $tokens[($stackPtr - 1)]['content'];
70
+			if ($prevContent !== $phpcsFile->eolChar) {
71
+				$blankSpace = substr($prevContent, strpos($prevContent, $phpcsFile->eolChar));
72
+				$spaces     = strlen($blankSpace);
73
+
74
+				if (in_array($tokens[($stackPtr - 2)]['code'], [T_ABSTRACT, T_FINAL], true) === true
75
+					&& $spaces !== 1
76
+				) {
77
+					$prevContent = strtolower($tokens[($stackPtr - 2)]['content']);
78
+					$error       = 'Expected 1 space between %s and %s keywords; %s found';
79
+					$data        = [
80
+						$prevContent,
81
+						$stackPtrType,
82
+						$spaces,
83
+					];
84
+
85
+					$fix = $phpcsFile->addFixableError($error, $stackPtr, 'SpaceBeforeKeyword', $data);
86
+					if ($fix === true) {
87
+						$phpcsFile->fixer->replaceToken(($stackPtr - 1), ' ');
88
+					}
89
+				}
90
+			} else if ($tokens[($stackPtr - 2)]['code'] === T_ABSTRACT
91
+				|| $tokens[($stackPtr - 2)]['code'] === T_FINAL
92
+			) {
93
+				$prevContent = strtolower($tokens[($stackPtr - 2)]['content']);
94
+				$error       = 'Expected 1 space between %s and %s keywords; newline found';
95
+				$data        = [
96
+					$prevContent,
97
+					$stackPtrType,
98
+				];
99
+
100
+				$fix = $phpcsFile->addFixableError($error, $stackPtr, 'NewlineBeforeKeyword', $data);
101
+				if ($fix === true) {
102
+					$phpcsFile->fixer->replaceToken(($stackPtr - 1), ' ');
103
+				}
104
+			}//end if
105
+		}//end if
106
+
107
+		// We'll need the indent of the class/interface declaration for later.
108
+		$classIndent = 0;
109
+		for ($i = ($stackPtr - 1); $i > 0; $i--) {
110
+			if ($tokens[$i]['line'] === $tokens[$stackPtr]['line']) {
111
+				continue;
112
+			}
113
+
114
+			// We changed lines.
115
+			if ($tokens[($i + 1)]['code'] === T_WHITESPACE) {
116
+				$classIndent = $tokens[($i + 1)]['length'];
117
+			}
118
+
119
+			break;
120
+		}
121
+
122
+		$className    = null;
123
+		$checkSpacing = true;
124
+
125
+		if ($tokens[$stackPtr]['code'] !== T_ANON_CLASS) {
126
+			$className = $phpcsFile->findNext(T_STRING, $stackPtr);
127
+		} else {
128
+			// Ignore the spacing check if this is a simple anon class.
129
+			$next = $phpcsFile->findNext(T_WHITESPACE, ($stackPtr + 1), null, true);
130
+			if ($next === $tokens[$stackPtr]['scope_opener']
131
+				&& $tokens[$next]['line'] > $tokens[$stackPtr]['line']
132
+			) {
133
+				$checkSpacing = false;
134
+			}
135
+		}
136
+
137
+		if ($checkSpacing === true) {
138
+			// Spacing of the keyword.
139
+			if ($tokens[($stackPtr + 1)]['code'] !== T_WHITESPACE) {
140
+				$gap = 0;
141
+			} else if ($tokens[($stackPtr + 2)]['line'] !== $tokens[$stackPtr]['line']) {
142
+				$gap = 'newline';
143
+			} else {
144
+				$gap = $tokens[($stackPtr + 1)]['length'];
145
+			}
146
+
147
+			if ($gap !== 1) {
148
+				$error = 'Expected 1 space after %s keyword; %s found';
149
+				$data  = [
150
+					$stackPtrType,
151
+					$gap,
152
+				];
153
+
154
+				$fix = $phpcsFile->addFixableError($error, $stackPtr, 'SpaceAfterKeyword', $data);
155
+				if ($fix === true) {
156
+					if ($gap === 0) {
157
+						$phpcsFile->fixer->addContent($stackPtr, ' ');
158
+					} else {
159
+						$phpcsFile->fixer->replaceToken(($stackPtr + 1), ' ');
160
+					}
161
+				}
162
+			}
163
+		}//end if
164
+
165
+		// Check after the class/interface name.
166
+		if ($className !== null
167
+			&& $tokens[($className + 2)]['line'] === $tokens[$className]['line']
168
+		) {
169
+			$gap = $tokens[($className + 1)]['content'];
170
+			if (strlen($gap) !== 1) {
171
+				$found = strlen($gap);
172
+				$error = 'Expected 1 space after %s name; %s found';
173
+				$data  = [
174
+					$stackPtrType,
175
+					$found,
176
+				];
177
+
178
+				$fix = $phpcsFile->addFixableError($error, $className, 'SpaceAfterName', $data);
179
+				if ($fix === true) {
180
+					$phpcsFile->fixer->replaceToken(($className + 1), ' ');
181
+				}
182
+			}
183
+		}
184
+
185
+		$openingBrace = $tokens[$stackPtr]['scope_opener'];
186
+
187
+		// Check positions of the extends and implements keywords.
188
+		$compareToken = $stackPtr;
189
+		$compareType  = 'name';
190
+		if ($tokens[$stackPtr]['code'] === T_ANON_CLASS) {
191
+			if (isset($tokens[$stackPtr]['parenthesis_opener']) === true) {
192
+				$compareToken = $tokens[$stackPtr]['parenthesis_closer'];
193
+				$compareType  = 'closing parenthesis';
194
+			} else {
195
+				$compareType = 'keyword';
196
+			}
197
+		}
198
+
199
+		foreach (['extends', 'implements'] as $keywordType) {
200
+			$keyword = $phpcsFile->findNext(constant('T_'.strtoupper($keywordType)), ($compareToken + 1), $openingBrace);
201
+			if ($keyword !== false) {
202
+				if ($tokens[$keyword]['line'] !== $tokens[$compareToken]['line']) {
203
+					$error = 'The '.$keywordType.' keyword must be on the same line as the %s '.$compareType;
204
+					$data  = [$stackPtrType];
205
+					$fix   = $phpcsFile->addFixableError($error, $keyword, ucfirst($keywordType).'Line', $data);
206
+					if ($fix === true) {
207
+						$phpcsFile->fixer->beginChangeset();
208
+						$comments = [];
209
+
210
+						for ($i = ($compareToken + 1); $i < $keyword; ++$i) {
211
+							if ($tokens[$i]['code'] === T_COMMENT) {
212
+								$comments[] = trim($tokens[$i]['content']);
213
+							}
214
+
215
+							if ($tokens[$i]['code'] === T_WHITESPACE
216
+								|| $tokens[$i]['code'] === T_COMMENT
217
+							) {
218
+								$phpcsFile->fixer->replaceToken($i, ' ');
219
+							}
220
+						}
221
+
222
+						$phpcsFile->fixer->addContent($compareToken, ' ');
223
+						if (empty($comments) === false) {
224
+							$i = $keyword;
225
+							while ($tokens[($i + 1)]['line'] === $tokens[$keyword]['line']) {
226
+								++$i;
227
+							}
228
+
229
+							$phpcsFile->fixer->addContentBefore($i, ' '.implode(' ', $comments));
230
+						}
231
+
232
+						$phpcsFile->fixer->endChangeset();
233
+					}//end if
234
+				} else {
235
+					// Check the whitespace before. Whitespace after is checked
236
+					// later by looking at the whitespace before the first class name
237
+					// in the list.
238
+					$gap = $tokens[($keyword - 1)]['length'];
239
+					if ($gap !== 1) {
240
+						$error = 'Expected 1 space before '.$keywordType.' keyword; %s found';
241
+						$data  = [$gap];
242
+						$fix   = $phpcsFile->addFixableError($error, $keyword, 'SpaceBefore'.ucfirst($keywordType), $data);
243
+						if ($fix === true) {
244
+							$phpcsFile->fixer->replaceToken(($keyword - 1), ' ');
245
+						}
246
+					}
247
+				}//end if
248
+			}//end if
249
+		}//end foreach
250
+
251
+		// Check each of the extends/implements class names. If the extends/implements
252
+		// keyword is the last content on the line, it means we need to check for
253
+		// the multi-line format, so we do not include the class names
254
+		// from the extends/implements list in the following check.
255
+		// Note that classes can only extend one other class, so they can't use a
256
+		// multi-line extends format, whereas an interface can extend multiple
257
+		// other interfaces, and so uses a multi-line extends format.
258
+		if ($tokens[$stackPtr]['code'] === T_INTERFACE) {
259
+			$keywordTokenType = T_EXTENDS;
260
+		} else {
261
+			$keywordTokenType = T_IMPLEMENTS;
262
+		}
263
+
264
+		$implements          = $phpcsFile->findNext($keywordTokenType, ($stackPtr + 1), $openingBrace);
265
+		$multiLineImplements = false;
266
+		if ($implements !== false) {
267
+			$prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($openingBrace - 1), $implements, true);
268
+			if ($tokens[$prev]['line'] !== $tokens[$implements]['line']) {
269
+				$multiLineImplements = true;
270
+			}
271
+		}
272
+
273
+		$find = [
274
+			T_STRING,
275
+			$keywordTokenType,
276
+		];
277
+
278
+		if ($className !== null) {
279
+			$start = $className;
280
+		} else if (isset($tokens[$stackPtr]['parenthesis_closer']) === true) {
281
+			$start = $tokens[$stackPtr]['parenthesis_closer'];
282
+		} else {
283
+			$start = $stackPtr;
284
+		}
285
+
286
+		$classNames = [];
287
+		$nextClass  = $phpcsFile->findNext($find, ($start + 2), ($openingBrace - 1));
288
+		while ($nextClass !== false) {
289
+			$classNames[] = $nextClass;
290
+			$nextClass    = $phpcsFile->findNext($find, ($nextClass + 1), ($openingBrace - 1));
291
+		}
292
+
293
+		$classCount         = count($classNames);
294
+		$checkingImplements = false;
295
+		$implementsToken    = null;
296
+		foreach ($classNames as $n => $className) {
297
+			if ($tokens[$className]['code'] === $keywordTokenType) {
298
+				$checkingImplements = true;
299
+				$implementsToken    = $className;
300
+
301
+				continue;
302
+			}
303
+
304
+			if ($checkingImplements === true
305
+				&& $multiLineImplements === true
306
+				&& ($tokens[($className - 1)]['code'] !== T_NS_SEPARATOR
307
+				|| $tokens[($className - 2)]['code'] !== T_STRING)
308
+			) {
309
+				$prev = $phpcsFile->findPrevious(
310
+					[
311
+						T_NS_SEPARATOR,
312
+						T_WHITESPACE,
313
+					],
314
+					($className - 1),
315
+					$implements,
316
+					true
317
+				);
318
+
319
+				if ($prev === $implementsToken && $tokens[$className]['line'] !== ($tokens[$prev]['line'] + 1)) {
320
+					if ($keywordTokenType === T_EXTENDS) {
321
+						$error = 'The first item in a multi-line extends list must be on the line following the extends keyword';
322
+						$fix   = $phpcsFile->addFixableError($error, $className, 'FirstExtendsInterfaceSameLine');
323
+					} else {
324
+						$error = 'The first item in a multi-line implements list must be on the line following the implements keyword';
325
+						$fix   = $phpcsFile->addFixableError($error, $className, 'FirstInterfaceSameLine');
326
+					}
327
+
328
+					if ($fix === true) {
329
+						$phpcsFile->fixer->beginChangeset();
330
+						for ($i = ($prev + 1); $i < $className; $i++) {
331
+							if ($tokens[$i]['code'] !== T_WHITESPACE) {
332
+								break;
333
+							}
334
+
335
+							$phpcsFile->fixer->replaceToken($i, '');
336
+						}
337
+
338
+						$phpcsFile->fixer->addNewline($prev);
339
+						$phpcsFile->fixer->endChangeset();
340
+					}
341
+				} else if ($tokens[$prev]['line'] !== ($tokens[$className]['line'] - 1)) {
342
+					if ($keywordTokenType === T_EXTENDS) {
343
+						$error = 'Only one interface may be specified per line in a multi-line extends declaration';
344
+						$fix   = $phpcsFile->addFixableError($error, $className, 'ExtendsInterfaceSameLine');
345
+					} else {
346
+						$error = 'Only one interface may be specified per line in a multi-line implements declaration';
347
+						$fix   = $phpcsFile->addFixableError($error, $className, 'InterfaceSameLine');
348
+					}
349
+
350
+					if ($fix === true) {
351
+						$phpcsFile->fixer->beginChangeset();
352
+						for ($i = ($prev + 1); $i < $className; $i++) {
353
+							if ($tokens[$i]['code'] !== T_WHITESPACE) {
354
+								break;
355
+							}
356
+
357
+							$phpcsFile->fixer->replaceToken($i, '');
358
+						}
359
+
360
+						$phpcsFile->fixer->addNewline($prev);
361
+						$phpcsFile->fixer->endChangeset();
362
+					}
363
+				} else {
364
+					$prev = $phpcsFile->findPrevious(T_WHITESPACE, ($className - 1), $implements);
365
+					if ($tokens[$prev]['line'] !== $tokens[$className]['line']) {
366
+						$found = 0;
367
+					} else {
368
+						$found = $tokens[$prev]['length'];
369
+					}
370
+
371
+					$expected = ($classIndent + $this->indent);
372
+					if ($found !== $expected) {
373
+						$error = 'Expected %s spaces before interface name; %s found';
374
+						$data  = [
375
+							$expected,
376
+							$found,
377
+						];
378
+						$fix   = $phpcsFile->addFixableError($error, $className, 'InterfaceWrongIndent', $data);
379
+						if ($fix === true) {
380
+							$padding = str_repeat(' ', $expected);
381
+							if ($found === 0) {
382
+								$phpcsFile->fixer->addContent($prev, $padding);
383
+							} else {
384
+								$phpcsFile->fixer->replaceToken($prev, $padding);
385
+							}
386
+						}
387
+					}
388
+				}//end if
389
+			} else if ($tokens[($className - 1)]['code'] !== T_NS_SEPARATOR
390
+				|| $tokens[($className - 2)]['code'] !== T_STRING
391
+			) {
392
+				// Not part of a longer fully qualified class name.
393
+				if ($tokens[($className - 1)]['code'] === T_COMMA
394
+					|| ($tokens[($className - 1)]['code'] === T_NS_SEPARATOR
395
+					&& $tokens[($className - 2)]['code'] === T_COMMA)
396
+				) {
397
+					$error = 'Expected 1 space before "%s"; 0 found';
398
+					$data  = [$tokens[$className]['content']];
399
+					$fix   = $phpcsFile->addFixableError($error, ($nextComma + 1), 'NoSpaceBeforeName', $data);
400
+					if ($fix === true) {
401
+						$phpcsFile->fixer->addContentBefore(($nextComma + 1), ' ');
402
+					}
403
+				} else {
404
+					if ($tokens[($className - 1)]['code'] === T_NS_SEPARATOR) {
405
+						$prev = ($className - 2);
406
+					} else {
407
+						$prev = ($className - 1);
408
+					}
409
+
410
+					$last    = $phpcsFile->findPrevious(T_WHITESPACE, $prev, null, true);
411
+					$content = $phpcsFile->getTokensAsString(($last + 1), ($prev - $last));
412
+					if ($content !== ' ') {
413
+						$found = strlen($content);
414
+
415
+						$error = 'Expected 1 space before "%s"; %s found';
416
+						$data  = [
417
+							$tokens[$className]['content'],
418
+							$found,
419
+						];
420
+
421
+						$fix = $phpcsFile->addFixableError($error, $className, 'SpaceBeforeName', $data);
422
+						if ($fix === true) {
423
+							if ($tokens[$prev]['code'] === T_WHITESPACE) {
424
+								$phpcsFile->fixer->beginChangeset();
425
+								$phpcsFile->fixer->replaceToken($prev, ' ');
426
+								while ($tokens[--$prev]['code'] === T_WHITESPACE) {
427
+									$phpcsFile->fixer->replaceToken($prev, ' ');
428
+								}
429
+
430
+								$phpcsFile->fixer->endChangeset();
431
+							} else {
432
+								$phpcsFile->fixer->addContent($prev, ' ');
433
+							}
434
+						}
435
+					}//end if
436
+				}//end if
437
+			}//end if
438
+
439
+			if ($checkingImplements === true
440
+				&& $tokens[($className + 1)]['code'] !== T_NS_SEPARATOR
441
+				&& $tokens[($className + 1)]['code'] !== T_COMMA
442
+			) {
443
+				if ($n !== ($classCount - 1)) {
444
+					// This is not the last class name, and the comma
445
+					// is not where we expect it to be.
446
+					if ($tokens[($className + 2)]['code'] !== $keywordTokenType) {
447
+						$error = 'Expected 0 spaces between "%s" and comma; %s found';
448
+						$data  = [
449
+							$tokens[$className]['content'],
450
+							$tokens[($className + 1)]['length'],
451
+						];
452
+
453
+						$fix = $phpcsFile->addFixableError($error, $className, 'SpaceBeforeComma', $data);
454
+						if ($fix === true) {
455
+							$phpcsFile->fixer->replaceToken(($className + 1), '');
456
+						}
457
+					}
458
+				}
459
+
460
+				$nextComma = $phpcsFile->findNext(T_COMMA, $className);
461
+			} else {
462
+				$nextComma = ($className + 1);
463
+			}//end if
464
+		}//end foreach
465
+
466
+	}//end processOpen()
467
+
468
+
469
+	/**
470
+	 * Processes the closing section of a class declaration.
471
+	 *
472
+	 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
473
+	 * @param int                         $stackPtr  The position of the current token
474
+	 *                                               in the stack passed in $tokens.
475
+	 *
476
+	 * @return void
477
+	 */
478
+	public function processClose(File $phpcsFile, $stackPtr)
479
+	{
480
+		$tokens = $phpcsFile->getTokens();
481
+
482
+		// Check that the closing brace comes right after the code body.
483
+		$closeBrace  = $tokens[$stackPtr]['scope_closer'];
484
+		$prevContent = $phpcsFile->findPrevious(T_WHITESPACE, ($closeBrace - 1), null, true);
485
+		if ($prevContent !== $tokens[$stackPtr]['scope_opener']
486
+			&& $tokens[$prevContent]['line'] !== ($tokens[$closeBrace]['line'] - 1)
487
+		) {
488
+			$error = 'The closing brace for the %s must go on the next line after the body';
489
+			$data  = [$tokens[$stackPtr]['content']];
490
+			$fix   = $phpcsFile->addFixableError($error, $closeBrace, 'CloseBraceAfterBody', $data);
491
+
492
+			if ($fix === true) {
493
+				$phpcsFile->fixer->beginChangeset();
494
+				for ($i = ($prevContent + 1); $i < $closeBrace; $i++) {
495
+					$phpcsFile->fixer->replaceToken($i, '');
496
+				}
497
+
498
+				if (strpos($tokens[$prevContent]['content'], $phpcsFile->eolChar) === false) {
499
+					$phpcsFile->fixer->replaceToken($closeBrace, $phpcsFile->eolChar.$tokens[$closeBrace]['content']);
500
+				}
501
+
502
+				$phpcsFile->fixer->endChangeset();
503
+			}
504
+		}//end if
505
+
506
+		if ($tokens[$stackPtr]['code'] !== T_ANON_CLASS) {
507
+			// Check the closing brace is on it's own line, but allow
508
+			// for comments like "//end class".
509
+			$ignoreTokens   = Tokens::$phpcsCommentTokens;
510
+			$ignoreTokens[] = T_WHITESPACE;
511
+			$ignoreTokens[] = T_COMMENT;
512
+			$ignoreTokens[] = T_SEMICOLON;
513
+			$ignoreTokens[] = T_COMMA;
514
+			$nextContent    = $phpcsFile->findNext($ignoreTokens, ($closeBrace + 1), null, true);
515
+			if ($tokens[$nextContent]['content'] !== $phpcsFile->eolChar
516
+				&& $tokens[$nextContent]['line'] === $tokens[$closeBrace]['line']
517
+			) {
518
+				$type  = strtolower($tokens[$stackPtr]['content']);
519
+				$error = 'Closing %s brace must be on a line by itself';
520
+				$data  = [$type];
521
+				$phpcsFile->addError($error, $closeBrace, 'CloseBraceSameLine', $data);
522
+			}
523
+		}
524
+
525
+	}//end processClose()
526 526
 
527 527
 
528 528
 }//end class
Please login to merge, or discard this patch.
src/Standards/PEAR/Tests/NamingConventions/ValidVariableNameUnitTest.inc 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -58,14 +58,14 @@
 block discarded – undo
58 58
     }
59 59
 }
60 60
 
61
-class mpgResponse{
61
+class mpgResponse {
62 62
    var $term_id;
63 63
    var $currentTag;
64
-   function characterHandler($parser,$data){
65
-       switch($this->currentTag)
64
+   function characterHandler($parser, $data) {
65
+       switch ($this->currentTag)
66 66
        {
67 67
            case "term_id": {
68
-               $this->term_id=$data;
68
+               $this->term_id = $data;
69 69
                break;
70 70
            }
71 71
        }
Please login to merge, or discard this patch.
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -1,101 +1,101 @@
 block discarded – undo
1 1
 <?php
2 2
 class MyClass
3 3
 {
4
-    var $varName  = 'hello';
5
-    var $var_name = 'hello';
6
-    var $varname  = 'hello';
7
-    var $_varName = 'hello';
4
+	var $varName  = 'hello';
5
+	var $var_name = 'hello';
6
+	var $varname  = 'hello';
7
+	var $_varName = 'hello';
8 8
 
9
-    public $varName  = 'hello';
10
-    public $var_name = 'hello';
11
-    public $varname  = 'hello';
12
-    public $_varName = 'hello';
9
+	public $varName  = 'hello';
10
+	public $var_name = 'hello';
11
+	public $varname  = 'hello';
12
+	public $_varName = 'hello';
13 13
 
14
-    protected $varName  = 'hello';
15
-    protected $var_name = 'hello';
16
-    protected $varname  = 'hello';
17
-    protected $_varName = 'hello';
14
+	protected $varName  = 'hello';
15
+	protected $var_name = 'hello';
16
+	protected $varname  = 'hello';
17
+	protected $_varName = 'hello';
18 18
 
19
-    private $_varName  = 'hello';
20
-    private $_var_name = 'hello';
21
-    private $_varname  = 'hello';
22
-    private $varName   = 'hello';
19
+	private $_varName  = 'hello';
20
+	private $_var_name = 'hello';
21
+	private $_varname  = 'hello';
22
+	private $varName   = 'hello';
23 23
 }
24 24
 
25 25
 class MyClass
26 26
 {
27 27
   function func1()
28 28
   {
29
-    function func2()
30
-    {
31
-     return $a;
32
-    }
33
-    return $data;
29
+	function func2()
30
+	{
31
+	 return $a;
32
+	}
33
+	return $data;
34 34
   }
35 35
 }
36 36
 
37 37
 class MyClass
38 38
 {
39
-    public function prepare() {}
40
-    public function paint() {}
39
+	public function prepare() {}
40
+	public function paint() {}
41 41
 }
42 42
 
43 43
 if (true) {
44
-    class MyClass
45
-    {
46
-        var $varName  = 'hello';
47
-        var $var_name = 'hello';
48
-    }
44
+	class MyClass
45
+	{
46
+		var $varName  = 'hello';
47
+		var $var_name = 'hello';
48
+	}
49 49
 }
50 50
 
51 51
 class MyClass {
52
-    function myFunction($cc, $cv) {
53
-        $req = "delete from blah
52
+	function myFunction($cc, $cv) {
53
+		$req = "delete from blah
54 54
                 where not (POP_{$cc}_A =
55 55
 '{$this->def["POP_{$cc}_A"]}'
56 56
                          and POP_{$cc}_B =
57 57
 '{$this->def["POP_{$cc}_B"]}')";
58
-    }
58
+	}
59 59
 }
60 60
 
61 61
 class mpgResponse{
62 62
    var $term_id;
63 63
    var $currentTag;
64 64
    function characterHandler($parser,$data){
65
-       switch($this->currentTag)
66
-       {
67
-           case "term_id": {
68
-               $this->term_id=$data;
69
-               break;
70
-           }
71
-       }
65
+	   switch($this->currentTag)
66
+	   {
67
+		   case "term_id": {
68
+			   $this->term_id=$data;
69
+			   break;
70
+		   }
71
+	   }
72 72
    }//end characterHandler
73 73
 }//end class mpgResponse
74 74
 
75 75
 class foo
76 76
 {
77
-    const bar = <<<BAZ
77
+	const bar = <<<BAZ
78 78
 qux
79 79
 BAZ;
80 80
 }
81 81
 
82 82
 class foo
83 83
 {
84
-    var $c = <<<C
84
+	var $c = <<<C
85 85
 ccc
86 86
 C;
87 87
 }
88 88
 
89 89
 class a
90 90
 {
91
-    protected
92
-        $_sheet,
93
-        $_FieldParser,
94
-        $_key;
91
+	protected
92
+		$_sheet,
93
+		$_FieldParser,
94
+		$_key;
95 95
 }
96 96
 
97 97
 $util->setLogger(
98
-    new class {
99
-        private $varName  = 'hello';
100
-        private $_varName = 'hello';
98
+	new class {
99
+		private $varName  = 'hello';
100
+		private $_varName = 'hello';
101 101
 });
Please login to merge, or discard this patch.
src/Standards/PEAR/Tests/NamingConventions/ValidVariableNameUnitTest.php 1 patch
Indentation   +36 added lines, -36 removed lines patch added patch discarded remove patch
@@ -15,42 +15,42 @@
 block discarded – undo
15 15
 {
16 16
 
17 17
 
18
-    /**
19
-     * Returns the lines where errors should occur.
20
-     *
21
-     * The key of the array should represent the line number and the value
22
-     * should represent the number of errors that should occur on that line.
23
-     *
24
-     * @return array<int, int>
25
-     */
26
-    public function getErrorList()
27
-    {
28
-        return [
29
-            12 => 1,
30
-            17 => 1,
31
-            22 => 1,
32
-            92 => 1,
33
-            93 => 1,
34
-            94 => 1,
35
-            99 => 1,
36
-        ];
37
-
38
-    }//end getErrorList()
39
-
40
-
41
-    /**
42
-     * Returns the lines where warnings should occur.
43
-     *
44
-     * The key of the array should represent the line number and the value
45
-     * should represent the number of warnings that should occur on that line.
46
-     *
47
-     * @return array<int, int>
48
-     */
49
-    public function getWarningList()
50
-    {
51
-        return [];
52
-
53
-    }//end getWarningList()
18
+	/**
19
+	 * Returns the lines where errors should occur.
20
+	 *
21
+	 * The key of the array should represent the line number and the value
22
+	 * should represent the number of errors that should occur on that line.
23
+	 *
24
+	 * @return array<int, int>
25
+	 */
26
+	public function getErrorList()
27
+	{
28
+		return [
29
+			12 => 1,
30
+			17 => 1,
31
+			22 => 1,
32
+			92 => 1,
33
+			93 => 1,
34
+			94 => 1,
35
+			99 => 1,
36
+		];
37
+
38
+	}//end getErrorList()
39
+
40
+
41
+	/**
42
+	 * Returns the lines where warnings should occur.
43
+	 *
44
+	 * The key of the array should represent the line number and the value
45
+	 * should represent the number of warnings that should occur on that line.
46
+	 *
47
+	 * @return array<int, int>
48
+	 */
49
+	public function getWarningList()
50
+	{
51
+		return [];
52
+
53
+	}//end getWarningList()
54 54
 
55 55
 
56 56
 }//end class
Please login to merge, or discard this patch.