Completed
Push — master ( 9ba91d...ed1504 )
by Bill
10s
created

FunctionNameContainsAndOrSniff::contains()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace Codor\Sniffs\Files;
4
5
use PHP_CodeSniffer_Sniff;
6
use PHP_CodeSniffer_File;
7
8
class FunctionNameContainsAndOrSniff implements PHP_CodeSniffer_Sniff
9
{
10
11
    /**
12
     * The forbidden strings this sniff looks for.
13
     * @var array
14
     */
15
    protected $keywords = ['And', '_and', 'Or', '_or'];
16
17
    /**
18
     * Returns the token types that this sniff is interested in.
19
     * @return array
20
     */
21
    public function register()
22
    {
23
        return [T_FUNCTION];
24
    }
25
26
    /**
27
     * Processes the tokens that this sniff is interested in.
28
     *
29
     * @param PHP_CodeSniffer_File $phpcsFile The file where the token was found.
30
     * @param integer              $stackPtr  The position in the stack where
31
     *                                    the token was found.
32
     * @return void
33
     */
34
    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
35
    {
36
        $tokens = $phpcsFile->getTokens();
37
        $functionNameToken = $tokens[$stackPtr + 2];
38
        $functionName = $functionNameToken['content'];
39
        
40
        if (! $this->containsKeywords($functionName)) {
41
            return;
42
        }
43
44
        $phpcsFile->addError($this->getErrorMessage(), $stackPtr);
45
    }
46
47
    /**
48
     * Determines if the provided $string contains any of the
49
     * strings in the $this->keywords property.
50
     * @param  string $string The string to check.
51
     * @return boolean
52
     */
53
    protected function containsKeywords($string)
54
    {
55
        foreach ($this->keywords as $keyword) {
56
            if ($this->contains($keyword, $string)) {
57
                return true;
58
            }
59
        }
60
61
        return false;
62
    }
63
64
    /**
65
     * Checks if the $haystack contains the $needle.
66
     * @param  string $needle   Needle string.
67
     * @param  string $haystack Haystack string.
68
     * @return boolean
69
     */
70
    protected function contains($needle, $haystack)
71
    {
72
        return strpos($haystack, $needle) !== false;
73
    }
74
75
    /**
76
     * Gets the error message for this sniff.
77
     * @return string
78
     */
79
    protected function getErrorMessage()
80
    {
81
        return "Your function contains 'and' or 'or' which indicates it might be doing more than one thing.";
82
    }
83
}
84