Chris@0
|
1 <?php
|
Chris@0
|
2 /**
|
Chris@0
|
3 * This file is part of the CodeAnalysis add-on for PHP_CodeSniffer.
|
Chris@0
|
4 *
|
Chris@0
|
5 * PHP version 5
|
Chris@0
|
6 *
|
Chris@0
|
7 * @category PHP
|
Chris@0
|
8 * @package PHP_CodeSniffer
|
Chris@0
|
9 * @author Greg Sherwood <gsherwood@squiz.net>
|
Chris@0
|
10 * @author Manuel Pichler <mapi@manuel-pichler.de>
|
Chris@0
|
11 * @copyright 2007-2014 Manuel Pichler. All rights reserved.
|
Chris@0
|
12 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
Chris@0
|
13 * @link http://pear.php.net/package/PHP_CodeSniffer
|
Chris@0
|
14 */
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * Detects unconditional if- and elseif-statements.
|
Chris@0
|
18 *
|
Chris@0
|
19 * This rule is based on the PMD rule catalog. The Unconditional If Statement
|
Chris@0
|
20 * sniff detects statement conditions that are only set to one of the constant
|
Chris@0
|
21 * values <b>true</b> or <b>false</b>
|
Chris@0
|
22 *
|
Chris@0
|
23 * <code>
|
Chris@0
|
24 * class Foo
|
Chris@0
|
25 * {
|
Chris@0
|
26 * public function close()
|
Chris@0
|
27 * {
|
Chris@0
|
28 * if (true)
|
Chris@0
|
29 * {
|
Chris@0
|
30 * // ...
|
Chris@0
|
31 * }
|
Chris@0
|
32 * }
|
Chris@0
|
33 * }
|
Chris@0
|
34 * </code>
|
Chris@0
|
35 *
|
Chris@0
|
36 * @category PHP
|
Chris@0
|
37 * @package PHP_CodeSniffer
|
Chris@0
|
38 * @author Manuel Pichler <mapi@manuel-pichler.de>
|
Chris@0
|
39 * @copyright 2007-2014 Manuel Pichler. All rights reserved.
|
Chris@0
|
40 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
Chris@0
|
41 * @version Release: @package_version@
|
Chris@0
|
42 * @link http://pear.php.net/package/PHP_CodeSniffer
|
Chris@0
|
43 */
|
Chris@0
|
44 class Generic_Sniffs_CodeAnalysis_UnconditionalIfStatementSniff implements PHP_CodeSniffer_Sniff
|
Chris@0
|
45 {
|
Chris@0
|
46
|
Chris@0
|
47
|
Chris@0
|
48 /**
|
Chris@0
|
49 * Registers the tokens that this sniff wants to listen for.
|
Chris@0
|
50 *
|
Chris@0
|
51 * @return int[]
|
Chris@0
|
52 */
|
Chris@0
|
53 public function register()
|
Chris@0
|
54 {
|
Chris@0
|
55 return array(
|
Chris@0
|
56 T_IF,
|
Chris@0
|
57 T_ELSEIF,
|
Chris@0
|
58 );
|
Chris@0
|
59
|
Chris@0
|
60 }//end register()
|
Chris@0
|
61
|
Chris@0
|
62
|
Chris@0
|
63 /**
|
Chris@0
|
64 * Processes this test, when one of its tokens is encountered.
|
Chris@0
|
65 *
|
Chris@0
|
66 * @param PHP_CodeSniffer_File $phpcsFile The file being scanned.
|
Chris@0
|
67 * @param int $stackPtr The position of the current token
|
Chris@0
|
68 * in the stack passed in $tokens.
|
Chris@0
|
69 *
|
Chris@0
|
70 * @return void
|
Chris@0
|
71 */
|
Chris@0
|
72 public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
|
Chris@0
|
73 {
|
Chris@0
|
74 $tokens = $phpcsFile->getTokens();
|
Chris@0
|
75 $token = $tokens[$stackPtr];
|
Chris@0
|
76
|
Chris@0
|
77 // Skip for-loop without body.
|
Chris@0
|
78 if (isset($token['parenthesis_opener']) === false) {
|
Chris@0
|
79 return;
|
Chris@0
|
80 }
|
Chris@0
|
81
|
Chris@0
|
82 $next = ++$token['parenthesis_opener'];
|
Chris@0
|
83 $end = --$token['parenthesis_closer'];
|
Chris@0
|
84
|
Chris@0
|
85 $goodCondition = false;
|
Chris@0
|
86 for (; $next <= $end; ++$next) {
|
Chris@0
|
87 $code = $tokens[$next]['code'];
|
Chris@0
|
88
|
Chris@0
|
89 if (isset(PHP_CodeSniffer_Tokens::$emptyTokens[$code]) === true) {
|
Chris@0
|
90 continue;
|
Chris@0
|
91 } else if ($code !== T_TRUE && $code !== T_FALSE) {
|
Chris@0
|
92 $goodCondition = true;
|
Chris@0
|
93 }
|
Chris@0
|
94 }
|
Chris@0
|
95
|
Chris@0
|
96 if ($goodCondition === false) {
|
Chris@0
|
97 $error = 'Avoid IF statements that are always true or false';
|
Chris@0
|
98 $phpcsFile->addWarning($error, $stackPtr, 'Found');
|
Chris@0
|
99 }
|
Chris@0
|
100
|
Chris@0
|
101 }//end process()
|
Chris@0
|
102
|
Chris@0
|
103
|
Chris@0
|
104 }//end class
|