3
* Reports errors if the same class or interface name is used in multiple files.
8
* @package PHP_CodeSniffer
9
* @author Greg Sherwood <gsherwood@squiz.net>
10
* @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600)
11
* @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
12
* @link http://pear.php.net/package/PHP_CodeSniffer
16
* Reports errors if the same class or interface name is used in multiple files.
19
* @package PHP_CodeSniffer
20
* @author Greg Sherwood <gsherwood@squiz.net>
21
* @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600)
22
* @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
23
* @version Release: 1.5.5
24
* @link http://pear.php.net/package/PHP_CodeSniffer
26
class Generic_Sniffs_Classes_DuplicateClassNameSniff implements PHP_CodeSniffer_Sniff
30
* List of classes that have been found during checking.
34
public $foundClasses = array();
38
* Registers the tokens that this sniff wants to listen for.
42
public function register()
44
return array(T_OPEN_TAG);
50
* Processes this test, when one of its tokens is encountered.
52
* @param PHP_CodeSniffer_File $phpcsFile The file being scanned.
53
* @param int $stackPtr The position of the current token
54
* in the stack passed in $tokens.
58
public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
60
$tokens = $phpcsFile->getTokens();
70
$stackPtr = $phpcsFile->findNext($findTokens, ($stackPtr + 1));
71
while ($stackPtr !== false) {
72
if ($tokens[$stackPtr]['code'] === T_CLOSE_TAG) {
73
// We can stop here. The sniff will continue from the next open
74
// tag when PHPCS reaches that token, if there is one.
78
// Keep track of what namespace we are in.
79
if ($tokens[$stackPtr]['code'] === T_NAMESPACE) {
80
$nsEnd = $phpcsFile->findNext(
91
$namespace = trim($phpcsFile->getTokensAsString(($stackPtr + 1), ($nsEnd - $stackPtr - 1)));
94
$nameToken = $phpcsFile->findNext(T_STRING, $stackPtr);
95
$name = $tokens[$nameToken]['content'];
96
if ($namespace !== '') {
97
$name = $namespace.'\\'.$name;
100
$compareName = strtolower($name);
101
if (isset($this->foundClasses[$compareName]) === true) {
102
$type = strtolower($tokens[$stackPtr]['content']);
103
$file = $this->foundClasses[$compareName]['file'];
104
$line = $this->foundClasses[$compareName]['line'];
105
$error = 'Duplicate %s name "%s" found; first defined in %s on line %s';
112
$phpcsFile->addWarning($error, $stackPtr, 'Found', $data);
114
$this->foundClasses[$compareName] = array(
115
'file' => $phpcsFile->getFilename(),
116
'line' => $tokens[$stackPtr]['line'],
121
$stackPtr = $phpcsFile->findNext($findTokens, ($stackPtr + 1));