GlobalClassSniff.php in Coder 8.2
File
coder_sniffer/DrupalPractice/Sniffs/Objects/GlobalClassSniff.php
View source
<?php
namespace DrupalPractice\Sniffs\Objects;
use PHP_CodeSniffer\Files\File;
use PHP_CodeSniffer\Sniffs\Sniff;
use DrupalPractice\Project;
class GlobalClassSniff implements Sniff {
protected $classes = array(
'File',
'Node',
'NodeType',
'Role',
'Term',
'User',
);
public function register() {
return array(
T_STRING,
);
}
public function process(File $phpcsFile, $stackPtr) {
$tokens = $phpcsFile
->getTokens();
if (in_array($tokens[$stackPtr]['content'], $this->classes) === false || $tokens[$stackPtr + 1]['code'] !== T_DOUBLE_COLON || isset($tokens[$stackPtr + 2]) === false || $tokens[$stackPtr + 2]['code'] !== T_STRING || in_array($tokens[$stackPtr + 2]['content'], array(
'load',
'loadMultiple',
)) === false || isset($tokens[$stackPtr + 3]) === false || $tokens[$stackPtr + 3]['code'] !== T_OPEN_PARENTHESIS || empty($tokens[$stackPtr]['conditions']) === true) {
return;
}
foreach ($tokens[$stackPtr]['conditions'] as $conditionPtr => $conditionCode) {
if ($conditionCode === T_FUNCTION && $phpcsFile
->getMethodProperties($conditionPtr)['is_static'] === true) {
return;
}
}
$classPtr = key($tokens[$stackPtr]['conditions']);
$extendsName = $phpcsFile
->findExtendedClassName($classPtr);
if (($extendsName === false || in_array($extendsName, GlobalDrupalSniff::$baseClasses) === false) && Project::isServiceClass($phpcsFile, $classPtr) === false) {
return;
}
$warning = '%s::%s calls should be avoided in classes, use dependency injection instead';
$data = array(
$tokens[$stackPtr]['content'],
$tokens[$stackPtr + 2]['content'],
);
$phpcsFile
->addWarning($warning, $stackPtr, 'GlobalClass', $data);
}
}
Classes
Name |
Description |
GlobalClassSniff |
Checks that Node::load() calls and friends are not used in forms, controllers or
services. |