Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
DbrQueryUsageSniff
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 2
72
0.00% covered (danger)
0.00%
0 / 1
 register
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 process
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
56
1<?php
2/**
3 * Report warnings when $dbr->query() is used instead of $dbr->select()
4 */
5
6namespace MediaWiki\Sniffs\Usage;
7
8use PHP_CodeSniffer\Files\File;
9use PHP_CodeSniffer\Sniffs\Sniff;
10use PHP_CodeSniffer\Util\Tokens;
11
12class DbrQueryUsageSniff implements Sniff {
13
14    /**
15     * @inheritDoc
16     */
17    public function register(): array {
18        return [ T_OBJECT_OPERATOR ];
19    }
20
21    /**
22     * @param File $phpcsFile
23     * @param int $stackPtr The current token index.
24     * @return void
25     */
26    public function process( File $phpcsFile, $stackPtr ) {
27        $tokens = $phpcsFile->getTokens();
28
29        $dbrPtr = $phpcsFile->findPrevious( Tokens::$emptyTokens, $stackPtr - 1, null, true );
30        if ( !$dbrPtr
31            || $tokens[$dbrPtr]['code'] !== T_VARIABLE
32            || $tokens[$dbrPtr]['content'] !== '$dbr'
33        ) {
34            return;
35        }
36
37        $methodPtr = $phpcsFile->findNext( Tokens::$emptyTokens, $stackPtr + 1, null, true );
38        if ( $methodPtr
39            && $tokens[$methodPtr]['code'] === T_STRING
40            && $tokens[$methodPtr]['content'] === 'query'
41        ) {
42            $phpcsFile->addWarning(
43                'Call $dbr->select() wrapper instead of $dbr->query()',
44                $stackPtr,
45                'DbrQueryFound'
46            );
47        }
48    }
49}