Lethexie has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/301364

Change subject: Report warnings when $dbr->query() is used instead of 
$dbr->select().
......................................................................

Report warnings when $dbr->query() is used instead of $dbr->select().

Change-Id: I4cc7f60ed95ddb825037d0128ba66366687030fe
---
A MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php
A MediaWiki/Tests/files/Usage/dbr_query_usage.php
A MediaWiki/Tests/files/Usage/dbr_query_usage.php.expect
3 files changed, 91 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/tools/codesniffer 
refs/changes/64/301364/1

diff --git a/MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php 
b/MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php
new file mode 100644
index 0000000..8eec13b
--- /dev/null
+++ b/MediaWiki/Sniffs/Usage/DbrQueryUsageSniff.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Report warnings when $dbr->query() is used instead of $dbr->select()
+ *
+ */
+
+// @codingStandardsIgnoreStart
+class MediaWiki_Sniffs_Usage_DbrQueryUsageSniff implements 
PHP_CodeSniffer_Sniff {
+       // @codingStandardsIgnoreEnd
+
+       /**
+        * @return array
+        */
+       public function register() {
+               return [
+                       T_VARIABLE,
+                       T_OBJECT_OPERATOR,
+                       T_STRING
+               ];
+       }
+
+       /**
+        * @param PHP_CodeSniffer_File $phpcsFile PHP_CodeSniffer_File object.
+        * @param int $stackPtr The current token index.
+        * @return void
+        */
+       public function process( PHP_CodeSniffer_File $phpcsFile, $stackPtr ) {
+               $tokens = $phpcsFile->getTokens();
+               $currToken = $tokens[$stackPtr];
+
+               if ( $currToken['code'] === T_OBJECT_OPERATOR ) {
+                       $dbrPtr = $phpcsFile->findPrevious( T_VARIABLE, 
$stackPtr );
+                       $methodPtr = $phpcsFile->findNext( T_STRING, $stackPtr 
);
+
+                       if ( $tokens[$dbrPtr]['content'] === '$dbr'
+                               && $tokens[$methodPtr]['content'] === 'query' ) 
{
+                               $phpcsFile->addWarning(
+                                       'Call $dbr->select() wrapper instead of 
$dbr->query()',
+                                       $stackPtr,
+                                       'DbrQueryFound'
+                               );
+                       }
+               }
+       }
+}
diff --git a/MediaWiki/Tests/files/Usage/dbr_query_usage.php 
b/MediaWiki/Tests/files/Usage/dbr_query_usage.php
new file mode 100644
index 0000000..64566cf
--- /dev/null
+++ b/MediaWiki/Tests/files/Usage/dbr_query_usage.php
@@ -0,0 +1,36 @@
+<?php
+
+class TestClass {
+
+       /**
+        * This example should fail.
+        * @return void
+        */
+       public function testDbrQuery() {
+               $sql = "SHOW GLOBAL VARIABLES LIKE 'ft\\_min\\_word\\_len'";
+               $dbr = wfGetDB( DB_SLAVE );
+               $result = $dbr->query( $sql, __METHOD__ );
+               $row = $result->fetchObject();
+               $result->free();
+       }
+
+       /**
+        * This example should pass.
+        * @return void
+        */
+       public function testDbrSelect() {
+               $dbr = wfGetDB( DB_SLAVE );
+
+               $oldTitle = Title::makeTitle( NS_USER, $olduser->getName() );
+
+               $result = $dbr->select( 'logging', '*',
+                       [ 'log_type' => 'renameuser',
+                               'log_action' => 'renameuser',
+                               'log_namespace' => NS_USER,
+                               'log_title' => $oldTitle->getDBkey(),
+                               'log_params' => $newuser->getName()
+                       ],
+                       __METHOD__
+               );
+       }
+}
diff --git a/MediaWiki/Tests/files/Usage/dbr_query_usage.php.expect 
b/MediaWiki/Tests/files/Usage/dbr_query_usage.php.expect
new file mode 100644
index 0000000..efe23e2
--- /dev/null
+++ b/MediaWiki/Tests/files/Usage/dbr_query_usage.php.expect
@@ -0,0 +1,10 @@
+
+FILE: ...wiki-codesniffer/MediaWiki/Tests/files/Usage/dbr_query_usage.php
+----------------------------------------------------------------------
+FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
+----------------------------------------------------------------------
+ 12 | WARNING | Call $dbr->select() wrapper instead of $dbr->query()
+----------------------------------------------------------------------
+
+Time: 24ms; Memory: 3.75Mb
+

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4cc7f60ed95ddb825037d0128ba66366687030fe
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/tools/codesniffer
Gerrit-Branch: master
Gerrit-Owner: Lethexie <[email protected]>

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

Reply via email to