jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/355067 )

Change subject: Update for CodeSniffer 3.0
......................................................................


Update for CodeSniffer 3.0

CodeSniffer 3.0 is a major upstream refactor which requires changes to
all of our custom sniffs and test harness.

Each sniff is now placed in a MediaWiki\Sniffs\<category> namespace, and
uses the namespaced versions of the PHP_CodeSniffer classes.

PrefixedGlobalFunctions is changed to not use static state which is
unreliable in the multi-processed environment.

addWarning() now requires a third $code argument.

The test harness uses the new internal mechanisms for running tests, and
avoids the need for the vfs dependency.

Bug: T142474
Change-Id: I6a934e15fd85aec31b9070c9fbaa34cadd763296
---
M MediaWiki/Sniffs/AlternativeSyntax/AlternativeSyntaxSniff.php
M MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
M MediaWiki/Sniffs/Commenting/IllegalSingleLineCommentSniff.php
M MediaWiki/Sniffs/ControlStructures/AssignmentInControlStructuresSniff.php
M MediaWiki/Sniffs/ControlStructures/IfElseStructureSniff.php
M MediaWiki/Sniffs/ExtraCharacters/ParenthesesAroundKeywordSniff.php
M MediaWiki/Sniffs/NamingConventions/LowerCamelFunctionsNameSniff.php
M MediaWiki/Sniffs/NamingConventions/PrefixedGlobalFunctionsSniff.php
M MediaWiki/Sniffs/NamingConventions/ValidGlobalNameSniff.php
M MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php
M MediaWiki/Sniffs/Usage/DirUsageSniff.php
M MediaWiki/Sniffs/Usage/ExtendClassUsageSniff.php
M MediaWiki/Sniffs/Usage/GotoUsageSniff.php
M MediaWiki/Sniffs/Usage/SuperGlobalsUsageSniff.php
M MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php
M MediaWiki/Sniffs/WhiteSpace/DisallowEmptyLineFunctionsSniff.php
M MediaWiki/Sniffs/WhiteSpace/MultipleEmptyLinesSniff.php
M MediaWiki/Sniffs/WhiteSpace/SpaceAfterControlStructureSniff.php
M MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php
M MediaWiki/Sniffs/WhiteSpace/SpaceBeforeControlStructureBraceSniff.php
M MediaWiki/Sniffs/WhiteSpace/SpaceBeforeSingleLineCommentSniff.php
M MediaWiki/Sniffs/WhiteSpace/SpaceyParenthesisSniff.php
M MediaWiki/Tests/MediaWikiStandardTest.php
M MediaWiki/Tests/MediaWikiTestHelper.php
M TestHelper.php
M composer.json
M phpunit.bootstrap.php
27 files changed, 301 insertions(+), 229 deletions(-)

Approvals:
  Paladox: Looks good to me, but someone else must approve
  Hashar: Looks good to me, but someone else must approve
  Addshore: Looks good to me, approved
  jenkins-bot: Verified
  Jforrester: Looks good to me, but someone else must approve



diff --git a/MediaWiki/Sniffs/AlternativeSyntax/AlternativeSyntaxSniff.php 
b/MediaWiki/Sniffs/AlternativeSyntax/AlternativeSyntaxSniff.php
index b44e4b4..c8201b9 100644
--- a/MediaWiki/Sniffs/AlternativeSyntax/AlternativeSyntaxSniff.php
+++ b/MediaWiki/Sniffs/AlternativeSyntax/AlternativeSyntaxSniff.php
@@ -2,11 +2,13 @@
 /**
  * Verify alternative syntax is not being used
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_AlternativeSyntax_AlternativeSyntaxSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
 
+namespace MediaWiki\Sniffs\AlternativeSyntax;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class AlternativeSyntaxSniff implements Sniff {
        /**
         * @return array
         */
@@ -24,11 +26,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $error = 'Alternative syntax such as "%s" should not be used';
                $data = [ $tokens[$stackPtr]['content'] ];
diff --git a/MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php 
b/MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
index 93a21ea..3edbfdf 100644
--- a/MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
+++ b/MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
@@ -16,8 +16,14 @@
  * @license   
https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
  * @link      http://pear.php.net/package/PHP_CodeSniffer
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_Commenting_FunctionCommentSniff implements 
PHP_CodeSniffer_Sniff {
+
+namespace MediaWiki\Sniffs\Commenting;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+use PHP_CodeSniffer\Util\Tokens;
+
+class FunctionCommentSniff implements Sniff {
 
        /**
         * Standard class methods that
@@ -45,13 +51,13 @@
        /**
         * Processes this test, when one of its tokens is encountered.
         *
-        * @param PHP_CodeSniffer_File $phpcsFile The file being scanned.
+        * @param File $phpcsFile The file being scanned.
         * @param int $stackPtr The position of the current token in the stack 
passed in $tokens.
         *
         *
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                if ( substr( $phpcsFile->getFilename(), -8 ) === 'Test.php' ) {
                        // Don't check documentation for test cases
                        return;
@@ -82,7 +88,7 @@
                        }
                }
 
-               $find   = PHP_CodeSniffer_Tokens::$methodPrefixes;
+               $find   = Tokens::$methodPrefixes;
                $find[] = T_WHITESPACE;
                $commentEnd = $phpcsFile->findPrevious( $find, ( $stackPtr - 1 
), null, true );
                if ( $tokens[$commentEnd]['code'] === T_COMMENT ) {
@@ -98,7 +104,11 @@
                if ( $tokens[$commentEnd]['code'] !== T_DOC_COMMENT_CLOSE_TAG
                        && $tokens[$commentEnd]['code'] !== T_COMMENT
                ) {
-                       $phpcsFile->addError( 'Missing function doc comment', 
$stackPtr, "Missing.$visStr" );
+                       $phpcsFile->addError(
+                               'Missing function doc comment',
+                               $stackPtr,
+                               "FunctionComment.Missing.$visStr"
+                       );
                        $phpcsFile->recordMetric( $stackPtr, 'Function has doc 
comment', 'no' );
                        return;
                } else {
@@ -133,13 +143,13 @@
        /**
         * Process the return comment of this function comment.
         *
-        * @param PHP_CodeSniffer_File $phpcsFile The file being scanned.
+        * @param File $phpcsFile The file being scanned.
         * @param int $stackPtr The position of the current token in the stack 
passed in $tokens.
         * @param int $commentStart The position in the stack where the comment 
started.
         *
         * @return void
         */
-       protected function processReturn( PHP_CodeSniffer_File $phpcsFile, 
$stackPtr, $commentStart ) {
+       protected function processReturn( File $phpcsFile, $stackPtr, 
$commentStart ) {
                $tokens = $phpcsFile->getTokens();
                // Return if no scope_opener.
                if ( !isset( $tokens[$stackPtr]['scope_opener'] ) ) {
@@ -187,13 +197,13 @@
        /**
         * Process any throw tags that this function comment has.
         *
-        * @param PHP_CodeSniffer_File $phpcsFile The file being scanned.
+        * @param File $phpcsFile The file being scanned.
         * @param int $stackPtr The position of the current token in the stack 
passed in $tokens.
         * @param int $commentStart The position in the stack where the comment 
started.
         *
         * @return void
         */
-       protected function processThrows( PHP_CodeSniffer_File $phpcsFile, 
$stackPtr, $commentStart ) {
+       protected function processThrows( File $phpcsFile, $stackPtr, 
$commentStart ) {
                $tokens = $phpcsFile->getTokens();
                $throws = [];
                foreach ( $tokens[$commentStart]['comment_tags'] as $tag ) {
@@ -222,13 +232,13 @@
        /**
         * Process the function parameter comments.
         *
-        * @param PHP_CodeSniffer_File $phpcsFile The file being scanned.
+        * @param File $phpcsFile The file being scanned.
         * @param int $stackPtr The position of the current token in the stack 
passed in $tokens.
         * @param int $commentStart The position in the stack where the comment 
started.
         *
         * @return void
         */
-       protected function processParams( PHP_CodeSniffer_File $phpcsFile, 
$stackPtr, $commentStart ) {
+       protected function processParams( File $phpcsFile, $stackPtr, 
$commentStart ) {
                $tokens = $phpcsFile->getTokens();
                $params  = [];
                $maxType = 0;
diff --git a/MediaWiki/Sniffs/Commenting/IllegalSingleLineCommentSniff.php 
b/MediaWiki/Sniffs/Commenting/IllegalSingleLineCommentSniff.php
index 0c2d36a..4359da3 100644
--- a/MediaWiki/Sniffs/Commenting/IllegalSingleLineCommentSniff.php
+++ b/MediaWiki/Sniffs/Commenting/IllegalSingleLineCommentSniff.php
@@ -5,10 +5,13 @@
  * Fail: /*** Comments here again ***\/
  * Pass: /* Your comments here *\/
  */
- // @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_Commenting_IllegalSingleLineCommentSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\Commenting;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class IllegalSingleLineCommentSniff implements Sniff {
 
        /**
         * @return array
@@ -20,11 +23,11 @@
        }
 
        /**
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $stackPtr The index of current token.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $currentToken = $tokens[$stackPtr];
 
diff --git 
a/MediaWiki/Sniffs/ControlStructures/AssignmentInControlStructuresSniff.php 
b/MediaWiki/Sniffs/ControlStructures/AssignmentInControlStructuresSniff.php
index 88c0019..754caa2 100644
--- a/MediaWiki/Sniffs/ControlStructures/AssignmentInControlStructuresSniff.php
+++ b/MediaWiki/Sniffs/ControlStructures/AssignmentInControlStructuresSniff.php
@@ -10,11 +10,14 @@
  * Pass: if ( $a === array( 1 => 0 ) )
  * Pass: while ( $a < 0 )
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_ControlStructures_AssignmentInControlStructuresSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
 
+namespace MediaWiki\Sniffs\ControlStructures;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+use PHP_CodeSniffer\Util\Tokens;
+
+class AssignmentInControlStructuresSniff implements Sniff {
        /**
         * @return array
         */
@@ -27,11 +30,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $token  = $tokens[$stackPtr];
 
@@ -41,7 +44,7 @@
                        $code = $tokens[$next]['code'];
                        // Check if any assignment operator was used. Allow 
T_DOUBLE_ARROW as that can
                        // be used in an array like `if ( $foo === array( 'foo' 
=> 'bar' ) )`
-                       if ( in_array( $code, 
PHP_CodeSniffer_Tokens::$assignmentTokens, true )
+                       if ( in_array( $code, Tokens::$assignmentTokens, true )
                                && $code !== T_DOUBLE_ARROW ) {
                                $error = 'Assignment expression not allowed 
within "%s".';
                                $phpcsFile->addError(
diff --git a/MediaWiki/Sniffs/ControlStructures/IfElseStructureSniff.php 
b/MediaWiki/Sniffs/ControlStructures/IfElseStructureSniff.php
index 2c0be49..db710d3 100644
--- a/MediaWiki/Sniffs/ControlStructures/IfElseStructureSniff.php
+++ b/MediaWiki/Sniffs/ControlStructures/IfElseStructureSniff.php
@@ -6,11 +6,13 @@
  * Pass: } elseif ( $a == 1 ) {
  * Fail: }\nelseif ( $a == 1 ) {
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_ControlStructures_IfElseStructureSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
 
+namespace MediaWiki\Sniffs\ControlStructures;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class IfElseStructureSniff implements Sniff {
        /**
         * @return array
         */
@@ -22,11 +24,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $prevToken = $tokens[$stackPtr - 1];
                $nextToken = $tokens[$stackPtr + 1];
diff --git a/MediaWiki/Sniffs/ExtraCharacters/ParenthesesAroundKeywordSniff.php 
b/MediaWiki/Sniffs/ExtraCharacters/ParenthesesAroundKeywordSniff.php
index fab6ba9..e5147e7 100644
--- a/MediaWiki/Sniffs/ExtraCharacters/ParenthesesAroundKeywordSniff.php
+++ b/MediaWiki/Sniffs/ExtraCharacters/ParenthesesAroundKeywordSniff.php
@@ -13,9 +13,13 @@
  * * include
  * * include_once
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_ExtraCharacters_ParenthesesAroundKeywordSniff
-       implements PHP_CodeSniffer_Sniff {
+
+namespace MediaWiki\Sniffs\ExtraCharacters;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class ParenthesesAroundKeywordSniff implements Sniff {
        // @codingStandardsIgnoreEnd
 
        /**
@@ -32,11 +36,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $nextToken = $tokens[$stackPtr + 1];
                $nextSecondToken = $tokens[$stackPtr + 2];
diff --git 
a/MediaWiki/Sniffs/NamingConventions/LowerCamelFunctionsNameSniff.php 
b/MediaWiki/Sniffs/NamingConventions/LowerCamelFunctionsNameSniff.php
index 333e0ad..0b09cc0 100644
--- a/MediaWiki/Sniffs/NamingConventions/LowerCamelFunctionsNameSniff.php
+++ b/MediaWiki/Sniffs/NamingConventions/LowerCamelFunctionsNameSniff.php
@@ -2,9 +2,13 @@
 /**
  * Make sure lower camel function name.
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_NamingConventions_LowerCamelFunctionsNameSniff
-       implements PHP_CodeSniffer_Sniff {
+
+namespace MediaWiki\Sniffs\NamingConventions;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class LowerCamelFunctionsNameSniff implements Sniff {
        // @codingStandardsIgnoreEnd
 
        // Magic methods.
@@ -56,11 +60,11 @@
        }
 
        /**
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $functionContent = $tokens[$stackPtr+2]['content'];
                $lowerFunctionName = strtolower( $functionContent );
diff --git 
a/MediaWiki/Sniffs/NamingConventions/PrefixedGlobalFunctionsSniff.php 
b/MediaWiki/Sniffs/NamingConventions/PrefixedGlobalFunctionsSniff.php
index a6ff2c5..6aebc7b 100644
--- a/MediaWiki/Sniffs/NamingConventions/PrefixedGlobalFunctionsSniff.php
+++ b/MediaWiki/Sniffs/NamingConventions/PrefixedGlobalFunctionsSniff.php
@@ -4,9 +4,13 @@
  * A global function's name must be prefixed with 'wf' or 'ef'.
  * Per https://www.mediawiki.org/wiki/Manual:Coding_conventions/PHP#Naming
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_NamingConventions_PrefixedGlobalFunctionsSniff
-       implements PHP_CodeSniffer_Sniff {
+
+namespace MediaWiki\Sniffs\NamingConventions;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class PrefixedGlobalFunctionsSniff implements Sniff {
 
        // @codingStandardsIgnoreEnd
 
@@ -22,29 +26,29 @@
        /**
         * @var int[] array containing the first locations of namespaces in 
files that we have seen so far.
         */
-       private static $firstNamespaceLocations = [];
+       private $firstNamespaceLocations = [];
 
        /**
         * @var string[] array containing a list of files that contain no 
namespace statements.
         */
-       private static $noNamespaceFiles = [];
+       private $noNamespaceFiles = [];
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $ptr The current token index.
         *
         * @return bool Does a namespace statement exist before this position 
in the file?
         */
-       private function tokenIsNamespaced( PHP_CodeSniffer_File $phpcsFile, 
$ptr ) {
+       private function tokenIsNamespaced( File $phpcsFile, $ptr ) {
                $fileName = $phpcsFile->getFilename();
                // Check if we already know if the token is namespaced or not 
and return early if possible.
                if (
-                       isset( self::$firstNamespaceLocations[$fileName] ) &&
-                       $ptr > self::$firstNamespaceLocations[$fileName]
+                       isset( $this->firstNamespaceLocations[$fileName] ) &&
+                       $ptr > $this->firstNamespaceLocations[$fileName]
                ) {
                        return true;
                }
-               if ( isset( self::$noNamespaceFiles[$fileName] ) ) {
+               if ( isset( $this->noNamespaceFiles[$fileName] ) ) {
                        return false;
                }
 
@@ -55,18 +59,18 @@
                        $token = $tokens[$tokenIndex];
                        if ( $token['type'] === "T_NAMESPACE" && !isset( 
$token['scope_opener'] ) ) {
                                // In the format of "namespace Foo;", which 
applies to everything below
-                               self::$firstNamespaceLocations[$fileName] = 
$tokenIndex;
+                               $this->firstNamespaceLocations[$fileName] = 
$tokenIndex;
                        }
                        $tokenIndex--;
                }
-               if ( !isset( self::$firstNamespaceLocations[$fileName] ) ) {
-                       self::$noNamespaceFiles[$fileName] = true;
+               if ( !isset( $this->firstNamespaceLocations[$fileName] ) ) {
+                       $this->noNamespaceFiles[$fileName] = true;
                }
 
                // Return if the token was namespaced.
                if (
-                       isset( self::$firstNamespaceLocations[$fileName] ) &&
-                       $ptr > self::$firstNamespaceLocations[$fileName]
+                       isset( $this->firstNamespaceLocations[$fileName] ) &&
+                       $ptr > $this->firstNamespaceLocations[$fileName]
                ) {
                        return true;
                }
@@ -74,11 +78,11 @@
                return false;
        }
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                if ( $this->tokenIsNamespaced( $phpcsFile, $stackPtr ) ) {
                        return;
                }
diff --git a/MediaWiki/Sniffs/NamingConventions/ValidGlobalNameSniff.php 
b/MediaWiki/Sniffs/NamingConventions/ValidGlobalNameSniff.php
index cd82eae..27c1ae5 100644
--- a/MediaWiki/Sniffs/NamingConventions/ValidGlobalNameSniff.php
+++ b/MediaWiki/Sniffs/NamingConventions/ValidGlobalNameSniff.php
@@ -3,9 +3,13 @@
  * Verify MediaWiki global variable naming convention.
  * A global name must be prefixed with 'wg'.
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_NamingConventions_ValidGlobalNameSniff implements 
PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\NamingConventions;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class ValidGlobalNameSniff implements Sniff {
 
        /**
         * http://php.net/manual/en/reserved.variables.argv.php
@@ -37,11 +41,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
 
                $nameIndex  = $phpcsFile->findNext( T_VARIABLE, $stackPtr + 1 );
diff --git a/MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php 
b/MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php
index 8eec13b..3ba5374 100644
--- a/MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php
+++ b/MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php
@@ -4,9 +4,12 @@
  *
  */
 
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_Usage_DbrQueryUsageSniff implements 
PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+namespace MediaWiki\Sniffs\Usage;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class DbrQueryUsageSniff implements Sniff {
 
        /**
         * @return array
@@ -20,11 +23,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $currToken = $tokens[$stackPtr];
 
diff --git a/MediaWiki/Sniffs/Usage/DirUsageSniff.php 
b/MediaWiki/Sniffs/Usage/DirUsageSniff.php
index 43c52b6..cfc05eb 100644
--- a/MediaWiki/Sniffs/Usage/DirUsageSniff.php
+++ b/MediaWiki/Sniffs/Usage/DirUsageSniff.php
@@ -10,9 +10,12 @@
  * Pass: parent::dirname( __FILE__ )
  */
 
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_Usage_DirUsageSniff implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+namespace MediaWiki\Sniffs\Usage;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class DirUsageSniff implements Sniff {
 
        /**
         * @return array
@@ -23,11 +26,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
 
                $ignore = [
diff --git a/MediaWiki/Sniffs/Usage/ExtendClassUsageSniff.php 
b/MediaWiki/Sniffs/Usage/ExtendClassUsageSniff.php
index de84420..6881351 100644
--- a/MediaWiki/Sniffs/Usage/ExtendClassUsageSniff.php
+++ b/MediaWiki/Sniffs/Usage/ExtendClassUsageSniff.php
@@ -6,9 +6,12 @@
  * Should use $this->getRequest() rather than $wgRequest on ContextSource 
extend.
  */
 
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_Usage_ExtendClassUsageSniff implements 
PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+namespace MediaWiki\Sniffs\Usage;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class ExtendClassUsageSniff implements Sniff {
 
        private $eligableCls = null;
 
@@ -71,11 +74,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $currToken = $tokens[$stackPtr];
 
diff --git a/MediaWiki/Sniffs/Usage/GotoUsageSniff.php 
b/MediaWiki/Sniffs/Usage/GotoUsageSniff.php
index e6975ed..c8a7cd4 100644
--- a/MediaWiki/Sniffs/Usage/GotoUsageSniff.php
+++ b/MediaWiki/Sniffs/Usage/GotoUsageSniff.php
@@ -2,9 +2,13 @@
 /**
  * Report error when `goto` is used
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_Usage_GotoUsageSniff implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\Usage;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class GotoUsageSniff implements Sniff {
 
        /**
         * @return array
@@ -17,11 +21,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $error = 'Control statement "goto" must not be used.';
                $phpcsFile->addError( $error, $stackPtr, 'GotoUsage' );
        }
diff --git a/MediaWiki/Sniffs/Usage/SuperGlobalsUsageSniff.php 
b/MediaWiki/Sniffs/Usage/SuperGlobalsUsageSniff.php
index 118396f..cba6b8a 100644
--- a/MediaWiki/Sniffs/Usage/SuperGlobalsUsageSniff.php
+++ b/MediaWiki/Sniffs/Usage/SuperGlobalsUsageSniff.php
@@ -7,9 +7,12 @@
  * Fail: $_SERVER['ip']
  */
 
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_Usage_SuperGlobalsUsageSniff implements 
PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+namespace MediaWiki\Sniffs\Usage;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class SuperGlobalsUsageSniff implements Sniff {
 
        // The list of forbidden superglobals
        // As per 
https://www.mediawiki.org/wiki/Manual:Coding_conventions/PHP#Global_objects
@@ -25,11 +28,11 @@
        }
 
        /**
-        * @param  PHP_CodeSniffer_File $phpcsFile The PHP_CodeSniffer_File 
object.
+        * @param  File $phpcsFile The File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $currentToken = $tokens[$stackPtr];
                if ( isset( self::$forbiddenList[$currentToken['content']] ) 
=== true ) {
diff --git a/MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php 
b/MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php
index dc98ed2..3d7978e 100644
--- a/MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php
+++ b/MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php
@@ -3,10 +3,16 @@
  * Detect unused MediaWiki global variable.
  * Unused global variables should be removed.
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_VariableAnalysis_UnusedGlobalVariablesSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\VariableAnalysis;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+use PHP_CodeSniffer\Util\Tokens;
+use RecursiveArrayIterator;
+use RecursiveIteratorIterator;
+
+class UnusedGlobalVariablesSniff implements Sniff {
 
        /**
         * @return array
@@ -16,11 +22,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                if ( !isset( $tokens[$stackPtr]['scope_opener'] ) ) {
                        // An interface or abstract function which doesn't have 
a body
@@ -36,7 +42,7 @@
                $strVariables = [];
 
                for ( $i = $scopeOpener; $i < $scopeCloser; $i++ ) {
-                       if ( array_key_exists( $tokens[$i]['type'], 
PHP_CodeSniffer_Tokens::$emptyTokens ) ) {
+                       if ( array_key_exists( $tokens[$i]['type'], 
Tokens::$emptyTokens ) ) {
                                continue;
                        }
                        if ( $tokens[$i]['type'] === 'T_GLOBAL' ) {
@@ -63,7 +69,11 @@
                        if ( !array_key_exists( $global[0], $otherVariables )
                                && !in_array( $global[0], $strVariables )
                        ) {
-                               $phpcsFile->addWarning( 'Global ' . $global[0] 
.' is never used.', $global[1] );
+                               $phpcsFile->addWarning(
+                                       'Global ' . $global[0] .' is never 
used.',
+                                       $global[1],
+                                       'UnusedGlobal' . $global[0]
+                               );
                        }
                }
        }
diff --git a/MediaWiki/Sniffs/WhiteSpace/DisallowEmptyLineFunctionsSniff.php 
b/MediaWiki/Sniffs/WhiteSpace/DisallowEmptyLineFunctionsSniff.php
index 9f892ee..2c33eec 100644
--- a/MediaWiki/Sniffs/WhiteSpace/DisallowEmptyLineFunctionsSniff.php
+++ b/MediaWiki/Sniffs/WhiteSpace/DisallowEmptyLineFunctionsSniff.php
@@ -2,10 +2,13 @@
 /**
  * Disallow empty line at the begin of function.
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_WhiteSpace_DisallowEmptyLineFunctionsSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\WhiteSpace;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class DisallowEmptyLineFunctionsSniff implements Sniff {
 
        /**
         * @return array
@@ -17,11 +20,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $current = $tokens[$stackPtr];
                if ( isset( $current['scope_opener'] ) === false ||
diff --git a/MediaWiki/Sniffs/WhiteSpace/MultipleEmptyLinesSniff.php 
b/MediaWiki/Sniffs/WhiteSpace/MultipleEmptyLinesSniff.php
index f81813c..709aebf 100644
--- a/MediaWiki/Sniffs/WhiteSpace/MultipleEmptyLinesSniff.php
+++ b/MediaWiki/Sniffs/WhiteSpace/MultipleEmptyLinesSniff.php
@@ -2,9 +2,14 @@
 /**
  * Check multiple consecutive newlines in a file.
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_WhiteSpace_MultipleEmptyLinesSniff
-       implements PHP_CodeSniffer_Sniff {
+
+namespace MediaWiki\Sniffs\WhiteSpace;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class MultipleEmptyLinesSniff
+       implements Sniff {
        // @codingStandardsIgnoreEnd
 
        /**
@@ -17,11 +22,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
 
                if ( $stackPtr > 2
diff --git a/MediaWiki/Sniffs/WhiteSpace/SpaceAfterControlStructureSniff.php 
b/MediaWiki/Sniffs/WhiteSpace/SpaceAfterControlStructureSniff.php
index fd299de..65fe3c6 100644
--- a/MediaWiki/Sniffs/WhiteSpace/SpaceAfterControlStructureSniff.php
+++ b/MediaWiki/Sniffs/WhiteSpace/SpaceAfterControlStructureSniff.php
@@ -2,10 +2,14 @@
 /**
  * Verify specific control structures are followed by a single space.
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_WhiteSpace_SpaceAfterControlStructureSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\WhiteSpace;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class SpaceAfterControlStructureSniff
+       implements Sniff {
 
        /**
         * @return array
@@ -24,11 +28,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $nextToken = $tokens[$stackPtr + 1];
                if ( $nextToken['code'] !== T_WHITESPACE || 
$nextToken['content'] !== ' ' ) {
diff --git a/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php 
b/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php
index a126ab6..1bc82ca 100644
--- a/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php
+++ b/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeClassBraceSniff.php
@@ -6,10 +6,13 @@
  * fail: class TestClass   {
  * pass: class TestClass {
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_WhiteSpace_SpaceBeforeClassBraceSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\WhiteSpace;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class SpaceBeforeClassBraceSniff implements Sniff {
        /**
         * @return array
         */
@@ -22,11 +25,11 @@
        }
 
        /**
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $stackPtr The index of current token.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                if ( $tokens[$stackPtr]['scope_opener'] === false ) {
                        return;
diff --git 
a/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeControlStructureBraceSniff.php 
b/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeControlStructureBraceSniff.php
index 0523c24..a7a0a9c 100644
--- a/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeControlStructureBraceSniff.php
+++ b/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeControlStructureBraceSniff.php
@@ -8,9 +8,13 @@
  * pass: if ( $a == 1 ) {
  * pass: switch ( $a ) {
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_WhiteSpace_SpaceBeforeControlStructureBraceSniff
-       implements PHP_CodeSniffer_Sniff {
+
+namespace MediaWiki\Sniffs\WhiteSpace;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class SpaceBeforeControlStructureBraceSniff implements Sniff {
        // @codingStandardsIgnoreEnd
        /**
         * @return array
@@ -27,11 +31,11 @@
                ];
        }
        /**
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $stackPtr The index of current token.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                if ( !isset( $tokens[$stackPtr]['scope_opener'] ) ||
                        $tokens[$stackPtr]['scope_opener'] === false ) {
@@ -65,13 +69,13 @@
        /**
         * Process The close parenthesis on the same line as open brace.
         *
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $openBrace The index of open brace.
         * @param  int $closeBracket The index of close bracket.
         * @param  int $stackPtr The index of current token.
         * @return void
         */
-       protected function processLineDiff( PHP_CodeSniffer_File $phpcsFile, 
$openBrace,
+       protected function processLineDiff( File $phpcsFile, $openBrace,
                $closeBracket, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $phpcsFile->recordMetric( $stackPtr, 'Control Structs opening 
brace placement', 'new line' );
@@ -93,13 +97,13 @@
        /**
         * Process The close parenthesis on the different line with open brace.
         *
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $openBrace The index of open brace.
         * @param  int $closeBracket The index of close bracket.
         * @param  int $stackPtr The index of current token.
         * @return void
         */
-       protected function processLineSame( PHP_CodeSniffer_File $phpcsFile, 
$openBrace,
+       protected function processLineSame( File $phpcsFile, $openBrace,
                $closeBracket, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $content = $phpcsFile->getTokensAsString( $closeBracket + 1, 
$openBrace - $closeBracket - 1 );
@@ -124,12 +128,12 @@
        /**
         * Process empty line after the open brace.
         *
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $openBrace The index of open brace.
         * @param  int $stackPtr The index of current token.
         * @return void
         */
-       protected function processEmptyLine( PHP_CodeSniffer_File $phpcsFile, 
$openBrace, $stackPtr ) {
+       protected function processEmptyLine( File $phpcsFile, $openBrace, 
$stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $next = $phpcsFile->findNext( T_WHITESPACE, $openBrace + 2, 
null, false );
                $found = strpos( $tokens[$next]['content'], $phpcsFile->eolChar 
);
diff --git a/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeSingleLineCommentSniff.php 
b/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeSingleLineCommentSniff.php
index ec28776..2e32476 100644
--- a/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeSingleLineCommentSniff.php
+++ b/MediaWiki/Sniffs/WhiteSpace/SpaceBeforeSingleLineCommentSniff.php
@@ -2,10 +2,13 @@
 /**
 * Verify comments are preceeded by a single space.
 */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_WhiteSpace_SpaceBeforeSingleLineCommentSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\WhiteSpace;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class SpaceBeforeSingleLineCommentSniff implements Sniff {
 
        /**
         * @return array
@@ -17,11 +20,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
                $currToken = $tokens[$stackPtr];
                $preToken = $phpcsFile->findPrevious( T_WHITESPACE, 
$stackPtr-1, null, true );
diff --git a/MediaWiki/Sniffs/WhiteSpace/SpaceyParenthesisSniff.php 
b/MediaWiki/Sniffs/WhiteSpace/SpaceyParenthesisSniff.php
index d0ba31c..958ac6e 100644
--- a/MediaWiki/Sniffs/WhiteSpace/SpaceyParenthesisSniff.php
+++ b/MediaWiki/Sniffs/WhiteSpace/SpaceyParenthesisSniff.php
@@ -8,10 +8,13 @@
  *
  * Also disallow wfFoo( ) and wfFoo(  $param )
  */
-// @codingStandardsIgnoreStart
-class MediaWiki_Sniffs_WhiteSpace_SpaceyParenthesisSniff
-       implements PHP_CodeSniffer_Sniff {
-       // @codingStandardsIgnoreEnd
+
+namespace MediaWiki\Sniffs\WhiteSpace;
+
+use PHP_CodeSniffer\Files\File;
+use PHP_CodeSniffer\Sniffs\Sniff;
+
+class SpaceyParenthesisSniff implements Sniff {
 
        /**
         * @return array
@@ -53,11 +56,11 @@
        }
 
        /**
-        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param File $phpcsFile File object.
         * @param int $stackPtr The current token index.
         * @return void
         */
-       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+       public function process( File $phpcsFile, $stackPtr ) {
                $tokens = $phpcsFile->getTokens();
 
                $currentToken = $tokens[$stackPtr];
@@ -119,11 +122,11 @@
        }
 
        /**
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $stackPtr The current token index.
         * @return void
         */
-       protected function processOpenParenthesis( PHP_CodeSniffer_File 
$phpcsFile, $stackPtr ) {
+       protected function processOpenParenthesis( File $phpcsFile, $stackPtr ) 
{
                $tokens = $phpcsFile->getTokens();
                $nextToken = $tokens[$stackPtr + 1];
                // No space or not single space
@@ -149,11 +152,11 @@
        }
 
        /**
-        * @param  PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param  File $phpcsFile File object.
         * @param  int $stackPtr The current token index.
         * @return void
         */
-       protected function processCloseParenthesis( PHP_CodeSniffer_File 
$phpcsFile, $stackPtr ) {
+       protected function processCloseParenthesis( File $phpcsFile, $stackPtr 
) {
                $tokens = $phpcsFile->getTokens();
                $previousToken = $tokens[$stackPtr - 1];
 
diff --git a/MediaWiki/Tests/MediaWikiStandardTest.php 
b/MediaWiki/Tests/MediaWikiStandardTest.php
index 52915e0..aff79b4 100644
--- a/MediaWiki/Tests/MediaWikiStandardTest.php
+++ b/MediaWiki/Tests/MediaWikiStandardTest.php
@@ -23,10 +23,12 @@
  *  - Rename appropriatly
  *  - Adapt $this->helper->runPhpCs call to pass second parameter $standard
  */
+use MediaWiki\Sniffs\Tests\MediaWikiTestHelper;
+
 class MediaWikiStandardTest extends PHPUnit_Framework_TestCase {
 
        /**
-        * @var TestHelper
+        * @var MediaWikiTestHelper
         */
        private $helper;
 
@@ -126,6 +128,8 @@
         */
        private function prepareOutput( $outputStr ) {
                if ( $outputStr ) {
+                       // Remove colors
+                       $outputStr = preg_replace( '`\033\[[0-9;]+m`', '', 
$outputStr );
                        $outputLines = explode( "\n", $outputStr );
                        // Remove lines that are empty or all dashes:
                        $outputLines = preg_grep( '/^-*$/', $outputLines, 
PREG_GREP_INVERT );
diff --git a/MediaWiki/Tests/MediaWikiTestHelper.php 
b/MediaWiki/Tests/MediaWikiTestHelper.php
index 9491d6d..53e8601 100644
--- a/MediaWiki/Tests/MediaWikiTestHelper.php
+++ b/MediaWiki/Tests/MediaWikiTestHelper.php
@@ -1,15 +1,12 @@
 <?php
 
-use org\bovigo\vfs\vfsStream;
+namespace MediaWiki\Sniffs\Tests;
+
+use PHP_CodeSniffer\Config;
+use PHP_CodeSniffer\Files\DummyFile;
+use PHP_CodeSniffer\Ruleset;
 
 class MediaWikiTestHelper extends TestHelper {
-       /**
-        * @return void
-        */
-       public function __construct() {
-               parent::__construct();
-               $this->vfsRoot = vfsStream::setup( 'root' );
-       }
 
        /**
         * @param  string $file The path of file.
@@ -20,56 +17,20 @@
                if ( empty( $standard ) ) {
                        $standard = $this->rootDir . '/ruleset.xml';
                }
-               $defaults = $this->phpcs->getDefaults();
+               $config = new Config();
+               $config->standards = [ $standard ];
+               $config->files = [ $file ];
+               $config->encoding = 'utf-8';
 
-               if (
-                       defined( 'PHP_CodeSniffer::VERSION' ) &&
-                       version_compare( PHP_CodeSniffer::VERSION, '1.5.0' ) != 
-1
-               ) {
-                       $standard = [ $standard ];
-               }
-               $options = [
-                       'encoding' => 'utf-8',
-                       'files' => [ $file ],
-                       'standard' => $standard,
-                       'reports' => [ 'diff' => vfsStream::url( 
'root/phpcbf-fixed.diff' ) ]
-               ] + $defaults;
+               $ruleset = new Ruleset( $config );
+               $dummy = new DummyFile( file_get_contents( $file ), $ruleset, 
$config );
 
-               ob_start();
-               $this->phpcs->process( $options );
-               ob_end_clean();
-
-               if ( !$this->vfsRoot->hasChild( 'phpcbf-fixed.diff' ) ) {
-                       // no diff generated, return source file
+               $dummy->process();
+               if ( $dummy->getFixableCount() ) {
+                       $dummy->fixer->fixFile();
+                       return $dummy->fixer->getContents();
+               } else {
                        return file_get_contents( $file );
                }
-
-               $diff = $this->vfsRoot->getChild( 'phpcbf-fixed.diff' 
)->getContent();
-               if ( empty( trim( $diff ) ) ) {
-                       return file_get_contents( $file );
-               }
-
-               // patch the source file and output to stdout
-               $cmd = "patch -p0 -u -o -";
-               $descriptorSpec = [
-                       0 => [ 'pipe', 'r' ],
-                       1 => [ 'pipe', 'w' ],
-                       2 => [ 'file', '/dev/null', 'w' ],
-               ];
-               $process = proc_open( $cmd, $descriptorSpec, $pipes );
-               if ( !$process ) {
-                       throw new RuntimeException( "Failed to run $cmd" );
-               }
-
-               fwrite( $pipes[0], $diff );
-               fclose( $pipes[0] );
-
-               $output = stream_get_contents( $pipes[1] );
-               fclose( $pipes[1] );
-
-               $retval = proc_close( $process );
-
-               // test retval?
-               return $output;
        }
 }
diff --git a/TestHelper.php b/TestHelper.php
index 9d33f08..c7c5d33 100644
--- a/TestHelper.php
+++ b/TestHelper.php
@@ -23,6 +23,13 @@
  *  - runPhpCs takes a second parameter $standard to override the default
  */
 
+namespace MediaWiki\Sniffs\Tests;
+
+use PHP_CodeSniffer\Config;
+use PHP_CodeSniffer\Files\DummyFile;
+use PHP_CodeSniffer\Reporter;
+use PHP_CodeSniffer\Ruleset;
+
 class TestHelper {
 
        protected $rootDir;
@@ -31,13 +38,9 @@
 
        protected $phpcs;
 
-       /**
-        * @return void
-        */
        public function __construct() {
                $this->rootDir = dirname( __DIR__ );
                $this->dirName = basename( $this->rootDir );
-               $this->phpcs = new PHP_CodeSniffer_CLI();
        }
 
        /**
@@ -51,22 +54,21 @@
                if ( empty( $standard ) ) {
                        $standard = $this->rootDir . '/ruleset.xml';
                }
-               $defaults = $this->phpcs->getDefaults();
 
-               if (
-                       defined( 'PHP_CodeSniffer::VERSION' ) &&
-                       version_compare( PHP_CodeSniffer::VERSION, '1.5.0' ) != 
-1
-               ) {
-                       $standard = [ $standard ];
-               }
-               $options = [
-                               'encoding' => 'utf-8',
-                               'files' => [ $file ],
-                               'standard' => $standard,
-                       ] + $defaults;
+               $config = new Config();
+               $config->standards = [ $standard ];
+               $config->files = [ $file ];
+               $config->encoding = 'utf-8';
+               $config->reports = [ 'full' => null ];
+               $config->colors = false;
 
+               $ruleset = new Ruleset( $config );
+               $dummy = new DummyFile( file_get_contents( $file ), $ruleset, 
$config );
+               $reporter = new Reporter( $config );
+               $dummy->process();
+               $reporter->cacheFileReport( $dummy );
                ob_start();
-               $this->phpcs->process( $options );
+               $reporter->printReport( 'full' );
                $result = ob_get_contents();
                ob_end_clean();
                return $result;
diff --git a/composer.json b/composer.json
index 5f3e19e..dc523a9 100644
--- a/composer.json
+++ b/composer.json
@@ -6,18 +6,18 @@
        "license": "GPL-2.0+",
        "require": {
                "php": ">= 5.5.9",
-               "squizlabs/php_codesniffer": "2.9.0"
+               "squizlabs/php_codesniffer": "3.0.0"
        },
        "require-dev": {
                "jakub-onderka/php-parallel-lint": "0.9.*",
-               "phpunit/phpunit": "~4.1",
-               "mikey179/vfsStream": "~1.6"
+               "phpunit/phpunit": "~4.1"
        },
        "scripts": {
                "test": [
                        "parallel-lint . --exclude vendor",
                        "phpunit $PHPUNIT_ARGS",
                        "phpcs  -p -s"
-               ]
+               ],
+               "fix": "phpcbf"
        }
 }
diff --git a/phpunit.bootstrap.php b/phpunit.bootstrap.php
index 63d2aa3..9cdf9da 100644
--- a/phpunit.bootstrap.php
+++ b/phpunit.bootstrap.php
@@ -2,5 +2,23 @@
 
 require_once __DIR__ .'/vendor/autoload.php';
 
+require_once __DIR__ . '/vendor/squizlabs/php_codesniffer/autoload.php';
+
 // Load Test Helper
 require_once __DIR__ . '/TestHelper.php';
+require_once __DIR__ . '/MediaWiki/Tests/MediaWikiTestHelper.php';
+
+// Trigger autoload of tokens
+new PHP_CodeSniffer\Util\Tokens();
+
+if ( !defined( 'PHP_CODESNIFFER_IN_TESTS' ) ) {
+       define( 'PHP_CODESNIFFER_IN_TESTS', true );
+}
+
+if ( !defined( 'PHP_CODESNIFFER_CBF' ) ) {
+       define( 'PHP_CODESNIFFER_CBF', false );
+}
+
+if ( !defined( 'PHP_CODESNIFFER_VERBOSITY' ) ) {
+       define( 'PHP_CODESNIFFER_VERBOSITY', false );
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/355067
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I6a934e15fd85aec31b9070c9fbaa34cadd763296
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/tools/codesniffer
Gerrit-Branch: master
Gerrit-Owner: Legoktm <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Dereckson <[email protected]>
Gerrit-Reviewer: Hashar <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Paladox <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to