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