jenkins-bot has submitted this change and it was merged. Change subject: Sniff to detect unused global variables ......................................................................
Sniff to detect unused global variables Bug: T53279 Change-Id: I856564e2de73c113aa9863efdd69ba65b1d40cb6 --- A MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php A MediaWiki/Tests/files/VariableAnalysis/unused_global_variables_fail.php A MediaWiki/Tests/files/VariableAnalysis/used_global_variables_pass.php A MediaWiki/Tests/files/VariableAnalysis/used_global_variables_quote_string_pass.php 4 files changed, 71 insertions(+), 0 deletions(-) Approvals: Legoktm: Looks good to me, approved jenkins-bot: Verified diff --git a/MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php b/MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php new file mode 100644 index 0000000..f7409dd --- /dev/null +++ b/MediaWiki/Sniffs/VariableAnalysis/UnusedGlobalVariablesSniff.php @@ -0,0 +1,53 @@ +<?php +/** + * Detect unused MediaWiki global variable. + * Unused global variables should be removed. + */ +class MediaWiki_Sniffs_VariableAnalysis_UnusedGlobalVariablesSniff implements PHP_CodeSniffer_Sniff { + + public function register() { + return array( T_FUNCTION ); + } + + public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) { + $tokens = $phpcsFile->getTokens(); + + $scopeOpener = ++$tokens[$stackPtr]['scope_opener']; + $scopeCloser = $tokens[$stackPtr]['scope_closer']; + + $globalLine = 0; + $globalVariables = array(); + $otherVariables = array(); + $matches = array(); + $strVariables = array(); + + for ( $i = $scopeOpener; $i < $scopeCloser; $i++ ) { + if ( in_array( $tokens[$i]['type'], PHP_CodeSniffer_Tokens::$emptyTokens ) ) { + continue; + } + if ( $tokens[$i]['type'] === 'T_GLOBAL' ) { + $globalLine = $tokens[$i]['line']; + } + if ( $tokens[$i]['type'] === 'T_VARIABLE' && $tokens[$i]['line'] == $globalLine ) { + $globalVariables[] = $tokens[$i]['content'] .'#'. $i; + } + if ( $tokens[$i]['type'] === 'T_VARIABLE' && $tokens[$i]['line'] != $globalLine ) { + $otherVariables[] = $tokens[$i]['content']; + } + if ( $tokens[$i]['type'] === 'T_DOUBLE_QUOTED_STRING' ) { + preg_match_all( '/[$]\w+/', $tokens[$i]['content'], $matches ); + $strVariables = array_merge_recursive( $strVariables, $matches ); + } + } + $strVariables = iterator_to_array( + new RecursiveIteratorIterator( new RecursiveArrayIterator( $strVariables ) ), + false + ); + foreach ( $globalVariables as $global ) { + $global = explode( '#', $global ); + if ( !in_array( $global[0], $otherVariables ) && !in_array( $global[0], $strVariables ) ) { + $phpcsFile->addWarning( 'Global ' . $global[0] .' is never used.', $global[1] ); + } + } + } +} diff --git a/MediaWiki/Tests/files/VariableAnalysis/unused_global_variables_fail.php b/MediaWiki/Tests/files/VariableAnalysis/unused_global_variables_fail.php new file mode 100644 index 0000000..e500e0a --- /dev/null +++ b/MediaWiki/Tests/files/VariableAnalysis/unused_global_variables_fail.php @@ -0,0 +1,6 @@ +<?php + +function fooFoo () { + // The global variable is not used + global $wgSomething; +} diff --git a/MediaWiki/Tests/files/VariableAnalysis/used_global_variables_pass.php b/MediaWiki/Tests/files/VariableAnalysis/used_global_variables_pass.php new file mode 100644 index 0000000..aa16ff6 --- /dev/null +++ b/MediaWiki/Tests/files/VariableAnalysis/used_global_variables_pass.php @@ -0,0 +1,6 @@ +<?php + +function fooFoo() { + global $wgSomething; + $foo = $wgSomething + 2; +} diff --git a/MediaWiki/Tests/files/VariableAnalysis/used_global_variables_quote_string_pass.php b/MediaWiki/Tests/files/VariableAnalysis/used_global_variables_quote_string_pass.php new file mode 100644 index 0000000..33ecdc7 --- /dev/null +++ b/MediaWiki/Tests/files/VariableAnalysis/used_global_variables_quote_string_pass.php @@ -0,0 +1,6 @@ +<?php + +function fooFoo() { + global $wgSomething; + $foo = "foo$wgSomething"; +} -- To view, visit https://gerrit.wikimedia.org/r/192248 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I856564e2de73c113aa9863efdd69ba65b1d40cb6 Gerrit-PatchSet: 7 Gerrit-Project: mediawiki/tools/codesniffer Gerrit-Branch: master Gerrit-Owner: Phoenix303 <divyalife...@gmail.com> Gerrit-Reviewer: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits