Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DX] Replace deprecated danielstjules/stringy with Symfony\String #1425

Merged
merged 2 commits into from
Dec 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
"clue/ndjson-react": "^1.2",
"composer/semver": "^3.2",
"composer/xdebug-handler": "^2.0",
"danielstjules/stringy": "^3.1",
"doctrine/inflector": "^2.0",
"ergebnis/json-printer": "^3.1",
"idiosyncratic/editorconfig": "^0.1.3",
Expand Down Expand Up @@ -44,6 +43,7 @@
"symfony/deprecation-contracts": "^2.4",
"symfony/finder": "^5.4|^6.0",
"symfony/process": "^5.4|^6.0",
"symfony/string": "^5.4|^6.0",
"symfony/yaml": "^5.4|^6.0",
"symplify/astral": "^10.0-beta17",
"symplify/autowire-array-parameter": "^10.0-beta17",
Expand All @@ -69,7 +69,7 @@
"phpstan/phpstan-webmozart-assert": "^1.0",
"phpunit/phpunit": "^9.5",
"rector/phpstan-rules": "^0.4.15",
"rector/rector-generator": "^0.4.4",
"rector/rector-generator": "^0.4.7",
"spatie/enum": "^3.10",
"symplify/coding-standard": "^10.0",
"symplify/easy-ci": "^10.0",
Expand Down Expand Up @@ -152,9 +152,6 @@
},
"extra": {
"patches": {
"danielstjules/stringy": [
"https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/danielstjules-stringy-src-stringy-php.patch"
],
"helmich/typo3-typoscript-parser": [
"https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/helmich-typo3-typoscript-parser-parser-tokenstream-php.patch"
],
Expand Down
7 changes: 7 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -615,3 +615,10 @@ parameters:
- rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php
- rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php
- rules/Transform/Rector/Assign/PropertyFetchToMethodCallRector.php

# fixed in symplify dev-main
-
message: '#Do not use chained method calls\. Put each on separated lines#'
paths:
- rules/Privatization/Naming/ConstantNaming.php
- rules/Naming/Naming/VariableNaming.php
44 changes: 0 additions & 44 deletions rules/CodingStyle/Naming/ClassNaming.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,9 @@
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\Function_;
use Rector\Testing\PHPUnit\StaticPHPUnitEnvironment;
use Stringy\Stringy;
use Symplify\SmartFileSystem\SmartFileInfo;

final class ClassNaming
{
/**
* @see https://regex101.com/r/8BdrI3/1
* @var string
*/
private const INPUT_HASH_NAMING_REGEX = '#input_(.*?)_#';

public function getVariableName(string | Name | Identifier $name): string
{
$shortName = $this->getShortName($name);
Expand Down Expand Up @@ -57,38 +47,4 @@ public function getNamespace(string $fullyQualifiedName): ?string

return Strings::before($fullyQualifiedName, '\\', -1);
}

public function getNameFromFileInfo(SmartFileInfo $smartFileInfo): string
{
$basenameWithoutSuffix = $smartFileInfo->getBasenameWithoutSuffix();

// remove PHPUnit fixture file prefix
if (StaticPHPUnitEnvironment::isPHPUnitRun()) {
$basenameWithoutSuffix = Strings::replace($basenameWithoutSuffix, self::INPUT_HASH_NAMING_REGEX, '');
}

$stringy = new Stringy($basenameWithoutSuffix);
return (string) $stringy->upperCamelize();
}

/**
* "some_function" → "someFunction"
*/
public function createMethodNameFromFunction(Function_ $function): string
{
$functionName = (string) $function->name;

$stringy = new Stringy($functionName);
return (string) $stringy->camelize();
}

public function replaceSuffix(string $content, string $oldSuffix, string $newSuffix): string
{
if (! \str_ends_with($content, $oldSuffix)) {
return $content . $newSuffix;
}

$contentWithoutOldSuffix = Strings::substring($content, 0, -Strings::length($oldSuffix));
return $contentWithoutOldSuffix . $newSuffix;
}
}
68 changes: 22 additions & 46 deletions rules/Naming/Naming/VariableNaming.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
use PhpParser\Node;
use PhpParser\Node\Arg;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\ArrayDimFetch;
use PhpParser\Node\Expr\Cast;
use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\MethodCall;
Expand All @@ -18,43 +17,23 @@
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Expr\Ternary;
use PhpParser\Node\Name;
use PhpParser\Node\Scalar;
use PhpParser\Node\Scalar\String_;
use PHPStan\Analyser\Scope;
use PHPStan\Type\ThisType;
use PHPStan\Type\Type;
use Rector\Core\Exception\NotImplementedYetException;
use Rector\Core\PhpParser\Node\Value\ValueResolver;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\NodeTypeResolver;
use Stringy\Stringy;
use Symfony\Component\String\UnicodeString;

final class VariableNaming
{
public function __construct(
private readonly NodeNameResolver $nodeNameResolver,
private readonly ValueResolver $valueResolver,
private readonly NodeTypeResolver $nodeTypeResolver,
) {
}

public function resolveFromNodeAndType(Node $node, Type $type): ?string
{
$variableName = $this->resolveBareFromNode($node);
if ($variableName === null) {
return null;
}

// adjust static to specific class
if ($variableName === 'this' && $type instanceof ThisType) {
$shortClassName = $this->nodeNameResolver->getShortName($type->getClassName());
$variableName = lcfirst($shortClassName);
}

$stringy = new Stringy($variableName);
return (string) $stringy->camelize();
}

public function resolveFromNodeWithScopeCountAndFallbackName(
Expr $expr,
?Scope $scope,
Expand Down Expand Up @@ -105,7 +84,27 @@ public function resolveFromFuncCallFirstArgumentWithSuffix(
return $this->createCountedValueName($bareName, $scope);
}

public function resolveFromNode(Node $node): ?string
public function resolveFromNodeAndType(Node $node, Type $type): ?string
{
$variableName = $this->resolveBareFromNode($node);
if ($variableName === null) {
return null;
}

// adjust static to specific class
if ($variableName === 'this' && $type instanceof ThisType) {
$shortClassName = $this->nodeNameResolver->getShortName($type->getClassName());
$variableName = lcfirst($shortClassName);
} else {
$variableName = $this->nodeNameResolver->getShortName($variableName);
}

$variableNameUnicodeString = new UnicodeString($variableName);
return $variableNameUnicodeString->camel()
->toString();
}

private function resolveFromNode(Node $node): ?string
{
$nodeType = $this->nodeTypeResolver->getType($node);
return $this->resolveFromNodeAndType($node, $nodeType);
Expand All @@ -115,10 +114,6 @@ private function resolveBareFromNode(Node $node): ?string
{
$node = $this->unwrapNode($node);

if ($node instanceof ArrayDimFetch) {
return $this->resolveParamNameFromArrayDimFetch($node);
}

if ($node instanceof PropertyFetch) {
return $this->resolveFromPropertyFetch($node);
}
Expand Down Expand Up @@ -151,25 +146,6 @@ private function resolveBareFromNode(Node $node): ?string
return null;
}

private function resolveParamNameFromArrayDimFetch(ArrayDimFetch $arrayDimFetch): ?string
{
while ($arrayDimFetch instanceof ArrayDimFetch) {
if ($arrayDimFetch->dim instanceof Scalar) {
$valueName = $this->nodeNameResolver->getName($arrayDimFetch->var);
$dimName = $this->valueResolver->getValue($arrayDimFetch->dim);

$stringy = new Stringy($dimName);
$dimName = (string) $stringy->upperCamelize();

return $valueName . $dimName;
}

$arrayDimFetch = $arrayDimFetch->var;
}

return $this->resolveBareFromNode($arrayDimFetch);
}

private function resolveFromPropertyFetch(PropertyFetch $propertyFetch): string
{
$varName = $this->nodeNameResolver->getName($propertyFetch->var);
Expand Down
28 changes: 23 additions & 5 deletions rules/Privatization/Naming/ConstantNaming.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

namespace Rector\Privatization\Naming;

use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt\PropertyProperty;
use Rector\NodeNameResolver\NodeNameResolver;
use Stringy\Stringy;
use Symfony\Component\String\UnicodeString;

final class ConstantNaming
{
Expand All @@ -15,12 +16,29 @@ public function __construct(
) {
}

public function createFromProperty(PropertyProperty $propertyProperty): string
public function createFromProperty(PropertyProperty|Variable $propertyProperty): string
{
/** @var string $propertyName */
$propertyName = $this->nodeNameResolver->getName($propertyProperty);
return $this->createUnderscoreUppercaseString($propertyName);
}

public function createFromVariable(Variable $variable): string|null
{
$variableName = $this->nodeNameResolver->getName($variable);
if ($variableName === null) {
return null;
}

return $this->createUnderscoreUppercaseString($variableName);
}

private function createUnderscoreUppercaseString(string $propertyName): string
{
$propertyNameUnicodeString = new UnicodeString($propertyName);

$stringy = new Stringy($propertyName);
return (string) $stringy->underscored()
->toUpperCase();
return $propertyNameUnicodeString->snake()
->upper()
->toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use Rector\Core\NodeManipulator\ClassMethodAssignManipulator;
use Rector\Core\Rector\AbstractRector;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Stringy\Stringy;
use Rector\Privatization\Naming\ConstantNaming;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;

Expand All @@ -32,7 +32,8 @@ final class ChangeReadOnlyVariableWithDefaultValueToConstantRector extends Abstr
public function __construct(
private readonly ClassMethodAssignManipulator $classMethodAssignManipulator,
private readonly VarAnnotationManipulator $varAnnotationManipulator,
private readonly PropertyToAddCollector $propertyToAddCollector
private readonly PropertyToAddCollector $propertyToAddCollector,
private readonly ConstantNaming $constantNaming,
) {
}

Expand Down Expand Up @@ -225,7 +226,10 @@ private function isFoundByRefParam(ClassMethod $classMethod): bool

private function createPrivateClassConst(Variable $variable, Expr $expr): ClassConst
{
$constantName = $this->createConstantNameFromVariable($variable);
$constantName = $this->constantNaming->createFromVariable($variable);
if ($constantName === null) {
throw new ShouldNotHappenException();
}

$const = new Const_($constantName, $expr);

Expand Down Expand Up @@ -266,16 +270,4 @@ private function replaceVariableWithClassConstFetch(
return new ClassConstFetch(new Name('self'), new Identifier($constantName));
});
}

private function createConstantNameFromVariable(Variable $variable): string
{
$variableName = $this->getName($variable);
if ($variableName === null) {
throw new ShouldNotHappenException();
}

$stringy = new Stringy($variableName);
return (string) $stringy->underscored()
->toUpperCase();
}
}