class ForbiddenPublicPropertySniff
Hierarchy
- class \SlevomatCodingStandard\Sniffs\Classes\ForbiddenPublicPropertySniff implements \PHP_CodeSniffer\Sniffs\Sniff
Expanded class hierarchy of ForbiddenPublicPropertySniff
File
-
vendor/
slevomat/ coding-standard/ SlevomatCodingStandard/ Sniffs/ Classes/ ForbiddenPublicPropertySniff.php, line 18
Namespace
SlevomatCodingStandard\Sniffs\ClassesView source
final class ForbiddenPublicPropertySniff implements Sniff {
public const CODE_FORBIDDEN_PUBLIC_PROPERTY = 'ForbiddenPublicProperty';
/** @var bool */
public $checkPromoted = false;
/**
* @return array<int, (int|string)>
*/
public function register() : array {
return [
T_VARIABLE,
];
}
/**
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
* @param int $variablePointer
*/
public function process(File $file, $variablePointer) : void {
if (!PropertyHelper::isProperty($file, $variablePointer, $this->checkPromoted)) {
return;
}
// skip Sniff classes, they have public properties for configuration (unfortunately)
if ($this->isSniffClass($file, $variablePointer)) {
return;
}
$scopeModifierToken = $this->getPropertyScopeModifier($file, $variablePointer);
if ($scopeModifierToken['code'] === T_PROTECTED || $scopeModifierToken['code'] === T_PRIVATE) {
return;
}
$errorMessage = 'Do not use public properties. Use method access instead.';
$file->addError($errorMessage, $variablePointer, self::CODE_FORBIDDEN_PUBLIC_PROPERTY);
}
private function isSniffClass(File $file, int $position) : bool {
$classTokenPosition = ClassHelper::getClassPointer($file, $position);
$classNameToken = ClassHelper::getName($file, $classTokenPosition);
return StringHelper::endsWith($classNameToken, 'Sniff');
}
/**
* @phpcsSuppress SlevomatCodingStandard.TypeHints.DisallowMixedTypeHint.DisallowedMixedTypeHint
* @return array{code: int|string}
*/
private function getPropertyScopeModifier(File $file, int $position) : array {
$scopeModifierPosition = TokenHelper::findPrevious($file, array_merge([
T_VAR,
], Tokens::$scopeModifiers), $position - 1);
return $file->getTokens()[$scopeModifierPosition];
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
ForbiddenPublicPropertySniff::$checkPromoted | public | property | @var bool | |
ForbiddenPublicPropertySniff::CODE_FORBIDDEN_PUBLIC_PROPERTY | public | constant | ||
ForbiddenPublicPropertySniff::getPropertyScopeModifier | private | function | * @phpcsSuppress SlevomatCodingStandard.TypeHints.DisallowMixedTypeHint.DisallowedMixedTypeHint * |
|
ForbiddenPublicPropertySniff::isSniffClass | private | function | ||
ForbiddenPublicPropertySniff::process | public | function | * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint * |
Overrides Sniff::process |
ForbiddenPublicPropertySniff::register | public | function | * | Overrides Sniff::register |