[Rector] Refactor UnderscoreToCamelCaseVariableNameRector so no longer require symplify/package-builder

This commit is contained in:
Abdul Malik Ikhsan 2021-11-01 23:10:46 +07:00
parent c833671022
commit 0568464585
No known key found for this signature in database
GPG Key ID: 69AC5BC354C89BE6
3 changed files with 19 additions and 34 deletions

View File

@ -24,8 +24,7 @@
"phpstan/phpstan": "^0.12.91",
"phpunit/phpunit": "^9.1",
"predis/predis": "^1.1",
"rector/rector": "0.11.60",
"symplify/package-builder": "^9.3"
"rector/rector": "0.11.60"
},
"suggest": {
"ext-fileinfo": "Improves mime type detection for files"

View File

@ -117,8 +117,6 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$parameters->set(Option::PHP_VERSION_FEATURES, PhpVersion::PHP_73);
$services = $containerConfigurator->services();
$services->load('Symplify\\PackageBuilder\\', __DIR__ . '/vendor/symplify/package-builder/src');
$services->set(UnderscoreToCamelCaseVariableNameRector::class);
$services->set(SimplifyUselessVariableRector::class);
$services->set(RemoveAlwaysElseRector::class);

View File

@ -13,7 +13,6 @@ declare(strict_types=1);
namespace Utils\Rector;
use Nette\Utils\Strings;
use PhpParser\Comment\Doc;
use PhpParser\Node;
use PhpParser\Node\Expr\Variable;
@ -21,8 +20,7 @@ use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use Rector\Core\Php\ReservedKeywordAnalyzer;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\PackageBuilder\Strings\StringFormatConverter;
use Rector\NodeNestingScope\ParentFinder;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -43,16 +41,16 @@ final class UnderscoreToCamelCaseVariableNameRector extends AbstractRector
private $reservedKeywordAnalyzer;
/**
* @var StringFormatConverter
* @var ParentFinder
*/
private $stringFormatConverter;
private $parentFinder;
public function __construct(
ReservedKeywordAnalyzer $reservedKeywordAnalyzer,
StringFormatConverter $stringFormatConverter
ParentFinder $parentFinder
) {
$this->reservedKeywordAnalyzer = $reservedKeywordAnalyzer;
$this->stringFormatConverter = $stringFormatConverter;
$this->parentFinder = $parentFinder;
}
public function getRuleDefinition(): RuleDefinition
@ -100,19 +98,20 @@ final class UnderscoreToCamelCaseVariableNameRector extends AbstractRector
return null;
}
if (! Strings::contains($nodeName, '_')) {
return null;
}
if ($this->reservedKeywordAnalyzer->isNativeVariable($nodeName)) {
return null;
}
if ($nodeName[0] === '_') {
$underscorePosition = strpos($nodeName, '_');
// underscore not found, or in the first char, skip
if ($underscorePosition === false || $underscorePosition === 0) {
return null;
}
$camelCaseName = $this->stringFormatConverter->underscoreAndHyphenToCamelCase($nodeName);
$replaceUnderscoreToSpace = str_replace('_', ' ', $nodeName);
$uppercaseFirstChar = ucwords($replaceUnderscoreToSpace);
$camelCaseName = lcfirst(str_replace(' ', '', $uppercaseFirstChar));
if ($camelCaseName === 'this') {
return null;
}
@ -125,24 +124,13 @@ final class UnderscoreToCamelCaseVariableNameRector extends AbstractRector
private function updateDocblock(Variable $variable, string $variableName, string $camelCaseName): void
{
$parentNode = $variable->getAttribute(AttributeKey::PARENT_NODE);
$parentClassMethodOrFunction = $this->parentFinder->findByTypes($variable, [ClassMethod::class, Function_::class]);
while ($parentNode) {
/**
* @var ClassMethod|Function_ $parentNode
*/
$parentNode = $parentNode->getAttribute(AttributeKey::PARENT_NODE);
if ($parentNode instanceof ClassMethod || $parentNode instanceof Function_) {
break;
}
}
if ($parentNode === null) {
if ($parentClassMethodOrFunction === null) {
return;
}
$docComment = $parentNode->getDocComment();
$docComment = $parentClassMethodOrFunction->getDocComment();
if ($docComment === null) {
return;
}
@ -152,11 +140,11 @@ final class UnderscoreToCamelCaseVariableNameRector extends AbstractRector
return;
}
if (! Strings::match($docCommentText, sprintf(self::PARAM_NAME_REGEX, $variableName))) {
if (! preg_match(sprintf(self::PARAM_NAME_REGEX, $variableName), $docCommentText)) {
return;
}
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($parentNode);
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($parentClassMethodOrFunction);
$paramTagValueNodes = $phpDocInfo->getParamTagValueNodes();
foreach ($paramTagValueNodes as $paramTagValueNode) {
@ -166,6 +154,6 @@ final class UnderscoreToCamelCaseVariableNameRector extends AbstractRector
}
}
$parentNode->setDocComment(new Doc($phpDocInfo->getPhpDocNode()->__toString()));
$parentClassMethodOrFunction->setDocComment(new Doc($phpDocInfo->getPhpDocNode()->__toString()));
}
}