class ConstantNameSniff
Checks that constants introduced with define() in module or install files start with the module's name.
Largely copied from \PHP_CodeSniffer\Standards\Generic\Sniffs\NamingConventions\UpperCaseConstantNameSniff.
@category PHP @package PHP_CodeSniffer @link http://pear.php.net/package/PHP_CodeSniffer
Hierarchy
- class \Drupal\Sniffs\Semantics\ConstantNameSniff implements \PHP_CodeSniffer\Sniffs\Sniff
Expanded class hierarchy of ConstantNameSniff
File
-
vendor/
drupal/ coder/ coder_sniffer/ Drupal/ Sniffs/ Semantics/ ConstantNameSniff.php, line 27
Namespace
Drupal\Sniffs\SemanticsView source
class ConstantNameSniff implements Sniff {
/**
* Returns an array of tokens this test wants to listen for.
*
* @return array<int|string>
*/
public function register() {
return [
T_STRING,
T_CONST,
];
}
//end register()
/**
* Processes this test, when one of its tokens is encountered.
*
* @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
* @param int $stackPtr The position of the current token in the
* stack passed in $tokens.
*
* @return void|int
*/
public function process(File $phpcsFile, $stackPtr) {
$nameParts = explode('.', basename($phpcsFile->getFilename()));
$fileExtension = end($nameParts);
// Only check in *.module files.
if ($fileExtension !== 'module' && $fileExtension !== 'install') {
return $phpcsFile->numTokens + 1;
}
$tokens = $phpcsFile->getTokens();
// Only check in the outer scope, not within classes.
if (empty($tokens[$stackPtr]['conditions']) === false) {
return;
}
$moduleName = reset($nameParts);
$expectedStart = strtoupper($moduleName);
if ($tokens[$stackPtr]['code'] === T_CONST) {
// This is a class constant.
$constant = $phpcsFile->findNext(Tokens::$emptyTokens, $stackPtr + 1, null, true);
if ($constant === false) {
return;
}
$constName = $tokens[$constant]['content'];
if (strpos($constName, $expectedStart) !== 0) {
$warning = 'All constants defined by a module must be prefixed with the module\'s name, expected "%s" but found "%s"';
$data = [
$expectedStart . "_{$constName}",
$constName,
];
$phpcsFile->addWarning($warning, $stackPtr, 'ConstConstantStart', $data);
return;
}
//end if
}
// Only interested in define statements now.
if (strtolower($tokens[$stackPtr]['content']) !== 'define') {
return;
}
// Make sure this is not a method call.
$prev = $phpcsFile->findPrevious(T_WHITESPACE, $stackPtr - 1, null, true);
if ($tokens[$prev]['code'] === T_OBJECT_OPERATOR || $tokens[$prev]['code'] === T_DOUBLE_COLON || $tokens[$prev]['code'] === T_NULLSAFE_OBJECT_OPERATOR) {
return;
}
// If the next non-whitespace token after this token
// is not an opening parenthesis then it is not a function call.
$openBracket = $phpcsFile->findNext(Tokens::$emptyTokens, $stackPtr + 1, null, true);
if ($openBracket === false) {
return;
}
// The next non-whitespace token must be the constant name.
$constPtr = $phpcsFile->findNext(T_WHITESPACE, $openBracket + 1, null, true);
if ($tokens[$constPtr]['code'] !== T_CONSTANT_ENCAPSED_STRING) {
return;
}
// Get the constant name and remove single and double quotes.
$constName = str_replace([
"'",
'"',
], [
'',
'',
], $tokens[$constPtr]['content']);
if (strpos($constName, $expectedStart) !== 0) {
$warning = 'All constants defined by a module must be prefixed with the module\'s name, expected "%s" but found "%s"';
$data = [
$expectedStart . "_{$constName}",
$constName,
];
$phpcsFile->addWarning($warning, $stackPtr, 'ConstantStart', $data);
}
//end if
}
//end process()
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
ConstantNameSniff::process | public | function | Processes this test, when one of its tokens is encountered. | Overrides Sniff::process |
ConstantNameSniff::register | public | function | Returns an array of tokens this test wants to listen for. | Overrides Sniff::register |