reflectionProvider = $reflectionProvider;
}
public function provideMinPhpVersion() : int
{
return PhpVersionFeature::DEPRECATE_INSENSITIVE_CONSTANT_NAME;
}
public function getRuleDefinition() : RuleDefinition
{
return new RuleDefinition('Changes case insensitive constants to sensitive ones.', [new CodeSample(<<<'CODE_SAMPLE'
define('FOO', 42, true);
var_dump(FOO);
var_dump(foo);
CODE_SAMPLE
, <<<'CODE_SAMPLE'
define('FOO', 42, true);
var_dump(FOO);
var_dump(FOO);
CODE_SAMPLE
)]);
}
/**
* @return array>
*/
public function getNodeTypes() : array
{
return [ConstFetch::class];
}
/**
* @param ConstFetch $node
*/
public function refactor(Node $node) : ?Node
{
$constantName = $this->getName($node);
if ($constantName === null) {
return null;
}
$uppercasedConstantName = \strtoupper($constantName);
// is system constant?
if (\in_array($uppercasedConstantName, self::PHP_RESERVED_CONSTANTS, \true)) {
return null;
}
// constant is defined in current lower/upper case
if ($this->reflectionProvider->hasConstant(new Name($constantName), null)) {
return null;
}
// is uppercase, all good
if ($constantName === $uppercasedConstantName) {
return null;
}
if (\strpos($uppercasedConstantName, '\\') !== \false || \strpos($uppercasedConstantName, '(') !== \false || \strpos($uppercasedConstantName, "'") !== \false) {
return null;
}
$node->name = new FullyQualified($uppercasedConstantName);
return $node;
}
}