Fixes #4337 : Make Option::SKIP works again with ParameterProvider (#4339)

This commit is contained in:
Abdul Malik Ikhsan 2020-10-01 23:55:10 +07:00 committed by GitHub
parent 7a5cf0ed5a
commit ae816c2c3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 1135 additions and 186 deletions

View File

@ -29,4 +29,5 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$parameters->set(Option::PROJECT_TYPE, Option::PROJECT_TYPE_PROPRIETARY);
$parameters->set(Option::NESTED_CHAIN_METHOD_CALL_LIMIT, 30);
$parameters->set(Option::SKIP, []);
};

View File

@ -53,7 +53,9 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$services->set(ArgumentRemoverRector::class)
->call('configure', [[
ArgumentRemoverRector::REMOVED_ARGUMENTS => inline_value_objects([
new ArgumentRemover('Illuminate\Foundation\Application', 'register', 1, ['name' => 'options']),
new ArgumentRemover('Illuminate\Foundation\Application', 'register', 1, [
'name' => 'options',
]),
]),
]]);
};

File diff suppressed because it is too large Load Diff

View File

@ -91,10 +91,8 @@ return static function (ContainerConfigurator $containerConfigurator): void {
'*TypeResolverTest.php',
],
UnaryOperatorSpacesFixer::class => null,
// breaks on-purpose annotated variables
ReturnAssignmentFixer::class => null,
StrictComparisonFixer::class => [__DIR__ . '/rules/polyfill/src/ConditionEvaluator.php'],
]);

View File

@ -90,7 +90,8 @@ final class PhpDocInfoFactory
$tokens = [];
$phpDocNode = new AttributeAwarePhpDocNode([]);
} else {
$content = $node->getDocComment()->getText();
$content = $node->getDocComment()
->getText();
$tokens = $this->lexer->tokenize($content);
$phpDocNode = $this->parseTokensToPhpDocNode($tokens);
$this->setPositionOfLastToken($phpDocNode);

View File

@ -61,16 +61,13 @@ final class MultiPhpDocNodeFactory extends AbstractPhpDocNodeFactory implements
IdTagValueNode::class => 'Doctrine\ORM\Mapping\Id',
GeneratedValueTagValueNode::class => 'Doctrine\ORM\Mapping\GeneratedValue',
JoinColumnTagValueNode::class => 'Doctrine\ORM\Mapping\JoinColumn',
// symfony/http-kernel
SymfonyRouteTagValueNode::class => 'Symfony\Component\Routing\Annotation\Route',
// symfony/validator
AssertRangeTagValueNode::class => 'Symfony\Component\Validator\Constraints\Range',
AssertTypeTagValueNode::class => 'Symfony\Component\Validator\Constraints\Type',
AssertChoiceTagValueNode::class => 'Symfony\Component\Validator\Constraints\Choice',
AssertEmailTagValueNode::class => 'Symfony\Component\Validator\Constraints\Email',
// gedmo
LocaleTagValueNode::class => 'Gedmo\Mapping\Annotation\Locale',
BlameableTagValueNode::class => 'Gedmo\Mapping\Annotation\Blameable',
@ -85,17 +82,14 @@ final class MultiPhpDocNodeFactory extends AbstractPhpDocNodeFactory implements
TranslatableTagValueNode::class => 'Gedmo\Mapping\Annotation\Translatable',
LoggableTagValueNode::class => 'Gedmo\Mapping\Annotation\Loggable',
TreeTagValueNode::class => 'Gedmo\Mapping\Annotation\Tree',
// Sensio
SensioTemplateTagValueNode::class => 'Sensio\Bundle\FrameworkExtraBundle\Configuration\Template',
SensioMethodTagValueNode::class => 'Sensio\Bundle\FrameworkExtraBundle\Configuration\Method',
SensioRouteTagValueNode::class => 'Sensio\Bundle\FrameworkExtraBundle\Configuration\Route',
// JMS
JMSInjectParamsTagValueNode::class => 'JMS\DiExtraBundle\Annotation\InjectParams',
JMSServiceValueNode::class => 'JMS\DiExtraBundle\Annotation\Service',
SerializerTypeTagValueNode::class => 'JMS\Serializer\Annotation\Type',
PHPDIInjectTagValueNode::class => 'DI\Annotation\Inject',
];
}

View File

@ -339,7 +339,8 @@ final class PhpDocInfoPrinter
/** @var AttributeAwareNodeInterface[] $removedNodes */
$removedNodes = array_diff(
$this->phpDocInfo->getOriginalPhpDocNode()->children,
$this->phpDocInfo->getOriginalPhpDocNode()
->children,
$this->attributeAwarePhpDocNode->children
);

View File

@ -37,10 +37,14 @@ final class ArrayPartPhpDocTagPrinterTest extends TestCase
public function provideData(): Iterator
{
yield [['strict' => 'yes'], 'option', 'option={"strict":"yes"}'];
yield [[
'strict' => 'yes',
], 'option', 'option={"strict":"yes"}'];
// bool
yield [['strict' => false], 'option', 'option={"strict":false}'];
yield [[
'strict' => false,
], 'option', 'option={"strict":false}'];
// multiple items, separated by comma
yield [

View File

@ -36,7 +36,6 @@ final class TagValueToPhpParserNodeMap
// symfony/validation
AssertChoiceTagValueNode::class => Property::class,
AssertTypeTagValueNode::class => Property::class,
// doctrine
ColumnTagValueNode::class => Property::class,
JoinTableTagValueNode::class => Property::class,
@ -44,10 +43,8 @@ final class TagValueToPhpParserNodeMap
TableTagValueNode::class => Class_::class,
CustomIdGeneratorTagValueNode::class => Property::class,
GeneratedValueTagValueNode::class => Property::class,
// special case for constants
GenericTagValueNode::class => Property::class,
SensioTemplateTagValueNode::class => Class_::class,
SensioMethodTagValueNode::class => ClassMethod::class,
TemplateTagValueNode::class => Class_::class,

View File

@ -64,7 +64,6 @@ final class TagValueNodeReprintTest extends AbstractPhpDocInfoTest
TableTagValueNode::class => __DIR__ . '/Fixture/DoctrineTable',
CustomIdGeneratorTagValueNode::class => __DIR__ . '/Fixture/DoctrineCustomIdGenerator',
GeneratedValueTagValueNode::class => __DIR__ . '/Fixture/DoctrineGeneratedValue',
// special case
GenericTagValueNode::class => __DIR__ . '/Fixture/ConstantReference',
SensioTemplateTagValueNode::class => __DIR__ . '/Fixture/SensioTemplate',

View File

@ -138,7 +138,8 @@ final class ConsoleOutputFormatter implements OutputFormatterInterface
$message = sprintf(
'Could not process "%s" file%s, due to: %s"%s".',
$error->getFileInfo()->getRelativeFilePathFromCwd(),
$error->getFileInfo()
->getRelativeFilePathFromCwd(),
$error->getRectorClass() ? ' by "' . $error->getRectorClass() . '"' : '',
PHP_EOL,
$errorMessage

View File

@ -83,7 +83,8 @@ final class JsonOutputFormatter implements OutputFormatterInterface
foreach ($errors as $error) {
$errorData = [
'message' => $error->getMessage(),
'file' => $error->getFileInfo()->getPathname(),
'file' => $error->getFileInfo()
->getPathname(),
];
if ($error->getRectorClass()) {

View File

@ -32,7 +32,8 @@ final class RectorWithFileAndLineChange
public function getRectorDefinitionsDescription(): string
{
return $this->rector->getDefinition()->getDescription();
return $this->rector->getDefinition()
->getDescription();
}
public function getRectorClass(): string

View File

@ -275,7 +275,8 @@ final class NodeRepository
$methodName = $methodReflection->getName();
/** @var string $className */
$className = $methodReflection->getDeclaringClass()->getName();
$className = $methodReflection->getDeclaringClass()
->getName();
return $this->findClassMethod($className, $methodName);
}

View File

@ -133,7 +133,8 @@ final class PHPStanNodeScopeResolver
// traversing trait inside class that is using it scope (from referenced) - the trait traversed by Rector is different (directly from parsed file)
if ($scope->isInTrait()) {
$traitName = $scope->getTraitReflection()->getName();
$traitName = $scope->getTraitReflection()
->getName();
$this->traitNodeScopeCollector->addForTraitAndNode($traitName, $node, $scope);
return;

View File

@ -60,7 +60,9 @@ final class PrintReportCollectorEventSubscriber implements EventSubscriberInterf
*/
public static function getSubscribedEvents(): array
{
return [AfterReportEvent::class => 'printReportCollector'];
return [
AfterReportEvent::class => 'printReportCollector',
];
}
private function shouldSkip(): bool

View File

@ -40,7 +40,8 @@ final class NameScopeFactory
foreach ($useNodes as $useNode) {
foreach ($useNode->uses as $useUse) {
/** @var UseUse $useUse */
$aliasName = $useUse->getAlias()->name;
$aliasName = $useUse->getAlias()
->name;
$useName = $useUse->name->toString();
if (! is_string($useName)) {

View File

@ -9,20 +9,21 @@ includes:
services:
# require constant in argument position
-
class: Symplify\CodingStandard\Rules\ForceMethodCallArgumentConstantRule
tags: [phpstan.rules.rule]
arguments:
constantArgByMethodByType:
Symfony\Component\Console\Command\Command:
addArgument: [0]
addOption: [0]
Symfony\Component\Console\Input\InputInterface:
getOption: [0]
getArgument: [0]
PhpParser\Node:
getAttribute: [0]
setAttribute: [0]
#-
# class: Symplify\CodingStandard\Rules\RequireMethodCallArgumentConstantRule
# tags: [phpstan.rules.rule]
# arguments:
# constantArgByMethodByType:
# Symfony\Component\Console\Command\Command:
# addArgument: [0]
# addOption: [0]
# Symfony\Component\Console\Input\InputInterface:
# getOption: [0]
# getArgument: [0]
# PhpParser\Node:
# getAttribute: [0]
# setAttribute: [0]
-
class: Symplify\CodingStandard\Rules\SeeAnnotationToTestRule
@ -512,10 +513,209 @@ parameters:
- src/FileSystem/FilesFinder.php
# @todo fix in symplify
-
message: '#Method call argument on position 0 must use constant over value#'
path: 'src/Rector/AbstractRector.php'
#-
# message: '#Method call argument on position 0 must use constant over value#'
# path: 'src/Rector/AbstractRector.php'
- '#Method Rector\\DocumentationGenerator\\Tests\\Printer\\RectorsDocumentationPrinter\\RectorsDocumentationPrinterTest\:\:createRectorsFromRectorClasses\(\) should return array<Rector\\Core\\Contract\\Rector\\RectorInterface\> but returns array<int, object\>#'
- '#Parameter \#1 \$rectors of method Rector\\DocumentationGenerator\\Printer\\RectorsDocumentationPrinter\:\:print\(\) expects array<Rector\\Core\\Contract\\Rector\\RectorInterface\>, array<object\> given#'
- '#Use "Symplify\\SmartFileSystem\\SmartFileSystem\:\:dumpFile\(\)" static call over "file_put_contents\(\)" func call#'
- '#Class name start with Abstract must have abstract keyword#'
- '#Class with base "CheckNotTestsNamespaceOutsideTestsDirectoryRule" name is already used in "Rector\\PHPStanExtensions\\Rule\\CheckNotTestsNamespaceOutsideTestsDirectoryRule", "Symplify\\CodingStandard\\Rules\\CheckNotTestsNamespaceOutsideTestsDirectoryRule"\. Use unique name to make classes easy to recognize#'
- '#Class "Rector\\PHPStanExtensions\\Tests\\Rule\\CheckGetNodeTypesReturnPhpParserNodeRule\\CheckGetNodeTypesReturnPhpParserNodeRuleTest" inherits from forbidden parent class "PHPStan\\Testing\\RuleTestCase"\. Use "Symplify\\PHPStanExtensions\\Testing\\AbstractServiceAwareRuleTestCase" instead#'
- '#Class "Rector\\PHPStanExtensions\\Tests\\Rule\\CheckNotTestsNamespaceOutsideTestsDirectoryRule\\CheckNotTestsNamespaceOutsideTestsDirectoryRuleTest" inherits from forbidden parent class "PHPStan\\Testing\\RuleTestCase"\. Use "Symplify\\PHPStanExtensions\\Testing\\AbstractServiceAwareRuleTestCase" instead#'
- '#Class "Rector\\PHPStanExtensions\\Tests\\Rule\\ConfigurableRectorRule\\ConfigurableRectorRuleTest" inherits from forbidden parent class "PHPStan\\Testing\\RuleTestCase"\. Use "Symplify\\PHPStanExtensions\\Testing\\AbstractServiceAwareRuleTestCase" instead#'
- '#Class "Rector\\PHPStanExtensions\\Tests\\Rule\\KeepRectorNamespaceForRectorRule\\KeepRectorNamespaceForRectorRuleTest" inherits from forbidden parent class "PHPStan\\Testing\\RuleTestCase"\. Use "Symplify\\PHPStanExtensions\\Testing\\AbstractServiceAwareRuleTestCase" instead#'
- '#Class "Rector\\PHPStanExtensions\\Tests\\Rule\\RectorRuleAndValueObjectHaveSameStartsRule\\RectorRuleAndValueObjectHaveSameStartsRuleTest" inherits from forbidden parent class "PHPStan\\Testing\\RuleTestCase"\. Use "Symplify\\PHPStanExtensions\\Testing\\AbstractServiceAwareRuleTestCase" instead#'
- '#Class "Rector\\PHPStanExtensions\\Tests\\Rule\\RequireRectorCategoryByGetNodeTypesRule\\RequireRectorCategoryByGetNodeTypesRuleTest" inherits from forbidden parent class "PHPStan\\Testing\\RuleTestCase"\. Use "Symplify\\PHPStanExtensions\\Testing\\AbstractServiceAwareRuleTestCase" instead#'
- '#Class "Rector\\PHPStanExtensions\\Tests\\Rule\\ValueObjectHasNoValueObjectSuffixRule\\ValueObjectHasNoValueObjectSuffixRuleTest" inherits from forbidden parent class "PHPStan\\Testing\\RuleTestCase"\. Use "Symplify\\PHPStanExtensions\\Testing\\AbstractServiceAwareRuleTestCase" instead#'
-
message: '#Do not call parent method if no override process#'
paths:
- rules/symfony/tests/Rector/MethodCall/StringFormTypeToClassRector/WithContainerTest.php # 30
- src/PhpParser/Builder/UseBuilder.php # 19
-
message: '#Use "Nette\\Utils\\Strings\:\:contains\(\)" static call over "strstr\(\)" func call#'
paths:
- utils/phpstan-extensions/src/Rule/CheckNotTestsNamespaceOutsideTestsDirectoryRule.php # 76
- utils/phpstan-extensions/src/Rule/CheckNotTestsNamespaceOutsideTestsDirectoryRule.php # 81
-
message: '#Do not call parent method if parent method is empty#'
paths:
- rules/type-declaration/src/Exception/ConflictingPriorityException.php # 26
- src/Exception/Application/FileProcessingException.php # 22
- src/Exception/Rector/RectorNotFoundOrNotValidRectorClassException.php # 15
- src/Exception/ShouldNotHappenException.php # 18
- src/Testing/PHPUnit/AbstractGenericRectorTestCase.php # 77
-
message: '#Do not use factory in constructor#'
paths:
- compiler/src/Console/Command/CompileCommand.php # 70
- packages/node-type-resolver/src/DependencyInjection/PHPStanServicesFactory.php # 38
- packages/node-type-resolver/src/PHPStan/Scope/NodeVisitor/RemoveDeepChainMethodCallNodeVisitor.php # 37
- packages/phpstan-static-type-mapper/src/PHPStanStaticTypeMapper.php # 37
- packages/post-rector/src/Rector/NameImportingPostRector.php # 39
- rules/nette-code-quality/src/NodeResolver/MethodNamesByInputNamesResolver.php # 21
- rules/nette-to-symfony/src/Rector/ClassMethod/RenameEventNamesInEventSubscriberRector.php # 37
- rules/type-declaration/src/Exception/ConflictingPriorityException.php # 12
- src/Application/ActiveRectorsProvider.php # 27
- src/Autoloading/AdditionalAutoloader.php # 39
- src/Configuration/Configuration.php # 104
- src/Console/Application.php # 39
- src/Console/Output/OutputFormatterCollector.php # 20
- src/Exception/Application/FileProcessingException.php # 13
- src/FileSystem/FilesFinder.php # 56
- src/Php/TypeAnalyzer.php # 47
- src/PhpParser/NodeTraverser/RectorNodeTraverser.php # 30
- src/Skip/Skipper.php # 30
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareMethodTagValueNodeFactory.php # 53
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareMethodTagValueParameterNodeFactory.php # 50
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareParamTagValueNodeFactory.php # 48
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwarePhpDocNodeFactory.php # 61
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwarePropertyTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareReturnTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareThrowsTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareVarTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareArrayShapeItemNodeFactory.php # 41
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareArrayShapeNodeFactory.php # 45
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareArrayTypeNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareCallableTypeNodeFactory.php # 48
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareGenericTypeNodeFactory.php # 47
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareIntersectionTypeNodeFactory.php # 44
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareNullableTypeNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareUnionTypeNodeFactory.php # 44
- packages/better-php-doc-parser/src/PhpDocNodeFactory/PHPUnitDataProviderDocNodeFactory.php # 52
- packages/better-php-doc-parser/src/PhpDocNodeFactory/ParamPhpDocNodeFactory.php # 81
- packages/dynamic-type-analysis/src/Probe/TypeStaticProbe.php # 82
- packages/node-type-resolver/src/FileSystem/CurrentFileInfoProvider.php # 22
- packages/node-type-resolver/src/FileSystem/CurrentFileInfoProvider.php # 35
- packages/phpstan-static-type-mapper/src/TypeMapper/ObjectTypeMapper.php # 123
- packages/phpstan-static-type-mapper/src/TypeMapper/ObjectWithoutClassTypeMapper.php # 72
- packages/rector-generator/src/Rector/Closure/AddNewServiceToSymfonyPhpConfigRector.php # 39
- rules/nette-code-quality/src/FormControlTypeResolver/AssignedVariablesMethodCallsFormTypeResolver.php # 50
- rules/nette-code-quality/src/FormControlTypeResolver/ClassMethodFormTypeResolver.php # 67
- rules/nette-code-quality/src/FormControlTypeResolver/ConstructorFormControlTypeResolver.php # 62
- rules/nette-code-quality/src/FormControlTypeResolver/GetComponentMethodCallFormControlTypeResolver.php # 110
- rules/nette-code-quality/src/FormControlTypeResolver/MagicNetteFactoryInterfaceFormControlTypeResolver.php # 95
- rules/nette-code-quality/src/FormControlTypeResolver/MethodCallFormControlTypeResolver.php # 59
- rules/nette-code-quality/src/FormControlTypeResolver/NewFormControlTypeResolver.php # 61
- rules/nette-code-quality/src/FormControlTypeResolver/ReturnFormControlTypeResolver.php # 54
- rules/nette-code-quality/src/FormControlTypeResolver/ThisVariableInAnotherMethodFormControlTypeResolver.php # 52
- rules/nette-code-quality/src/FormControlTypeResolver/VariableConstructorFormControlTypeResolver.php # 84
- src/Configuration/ChangeConfiguration.php # 17
- src/Configuration/Configuration.php # 149
- src/Configuration/Configuration.php # 172
- src/Configuration/Configuration.php # 204
- src/Configuration/Configuration.php # 227
- src/Configuration/CurrentNodeProvider.php # 16
- src/HttpKernel/RectorKernel.php # 70
- src/Rector/AbstractRector/CallableNodeTraverserTrait.php # 24
- src/Rector/AbstractRector/CallableNodeTraverserTrait.php # 24
- src/Rector/AbstractRector/ConstFetchAnalyzerTrait.php # 24
- src/Rector/AbstractRector/ConstFetchAnalyzerTrait.php # 24
- src/Testing/NodeVisitor/AttributeCollectingNodeVisitor.php # 24
-
message: '#Do not use factory in constructor#'
paths:
- src/Testing/PHPUnit/Runnable/ClassLikeNamesSuffixer.php # 27
- src/Testing/PHPUnit/Runnable/RunnableClassFinder.php # 29
- utils/node-documentation-generator/src/ValueObject/NodeInfo.php # 29
-
message: '#Method with @required need to be named autowire\+class name#'
paths:
- packages/node-collector/src/NodeCollector/NodeRepository.php # 126
- packages/node-collector/src/NodeCollector/ParsedClassConstFetchNodeCollector.php # 44
- packages/node-collector/src/NodeCollector/ParsedPropertyFetchNodeCollector.php # 46
- packages/node-name-resolver/src/NodeNameResolver/ClassConstFetchNameResolver.php # 22
- packages/node-name-resolver/src/NodeNameResolver/ClassConstNameResolver.php # 22
- packages/node-name-resolver/src/NodeNameResolver/ParamNameResolver.php # 22
- packages/node-name-resolver/src/NodeNameResolver/PropertyNameResolver.php # 22
- packages/node-name-resolver/src/NodeNameResolver/UseNameResolver.php # 22
- packages/node-type-resolver/src/NodeTypeResolver/ArrayDimFetchTypeResolver.php # 24
- packages/node-type-resolver/src/NodeTypeResolver/CastTypeResolver.php # 23
- packages/node-type-resolver/src/NodeTypeResolver/ClassConstFetchTypeResolver.php # 23
- packages/node-type-resolver/src/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php # 27
- packages/node-type-resolver/src/NodeTypeResolver/ParamTypeResolver.php # 58
- packages/node-type-resolver/src/NodeTypeResolver/PropertyFetchTypeResolver.php # 79
- packages/node-type-resolver/src/NodeTypeResolver/StaticCallTypeResolver.php # 37
- packages/node-type-resolver/src/NodeTypeResolver/VariableTypeResolver.php # 92
- packages/phpstan-static-type-mapper/src/TypeMapper/CallableTypeMapper.php # 28
- packages/static-type-mapper/src/PhpDocParser/ArrayTypeMapper.php # 35
- packages/static-type-mapper/src/PhpDocParser/NullableTypeMapper.php # 32
- rules/naming/src/Guard/PropertyConflictingNameGuard/MatchPropertyTypeConflictingNameGuard.php # 14
- rules/naming/src/Guard/PropertyConflictingNameGuard/UnderscoreCamelCaseConflictingNameGuard.php # 14
- rules/symfony/src/Rector/MethodCall/AbstractToConstructorInjectionRector.php # 37
- rules/type-declaration/src/TypeInferer/ParamTypeInferer/PHPUnitDataProviderParamTypeInferer.php # 51
- src/Console/Command/AbstractCommand.php # 26
- src/Rector/AbstractRector.php # 125
- src/Rector/AbstractRector/BetterStandardPrinterTrait.php # 37
- src/Rector/AbstractRector/BetterStandardPrinterTrait.php # 37
- src/Rector/AbstractRector/CallableNodeTraverserTrait.php # 24
- src/Rector/AbstractRector/CallableNodeTraverserTrait.php # 24
- src/Rector/AbstractRector/ComplexRemovalTrait.php # 59
- src/Rector/AbstractRector/ComplexRemovalTrait.php # 59
- src/Rector/AbstractRector/ConstFetchAnalyzerTrait.php # 24
- src/Rector/AbstractRector/ConstFetchAnalyzerTrait.php # 24
- src/Rector/AbstractRector/NodeTypeResolverTrait.php # 59
- src/Rector/AbstractRector/NodeTypeResolverTrait.php # 59
- src/Rector/AbstractRector/VisibilityTrait.php # 29
- src/Rector/AbstractRector/VisibilityTrait.php # 29
-
message: '#Do not use setter on a service#'
paths:
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareExtendsTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareImplementsTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareMethodTagValueNodeFactory.php # 53
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareMethodTagValueParameterNodeFactory.php # 50
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareParamTagValueNodeFactory.php # 48
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwarePhpDocNodeFactory.php # 61
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwarePropertyTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareReturnTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareThrowsTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/PhpDoc/AttributeAwareVarTagValueNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareArrayShapeItemNodeFactory.php # 41
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareArrayShapeNodeFactory.php # 45
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareArrayTypeNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareCallableTypeNodeFactory.php # 48
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareGenericTypeNodeFactory.php # 47
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareIntersectionTypeNodeFactory.php # 44
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareNullableTypeNodeFactory.php # 42
- packages/attribute-aware-php-doc/src/AttributeAwareNodeFactory/Type/AttributeAwareUnionTypeNodeFactory.php # 44
- packages/better-php-doc-parser/src/PhpDocNodeFactory/PHPUnitDataProviderDocNodeFactory.php # 52
- packages/better-php-doc-parser/src/PhpDocNodeFactory/ParamPhpDocNodeFactory.php # 81
- packages/dynamic-type-analysis/src/Probe/TypeStaticProbe.php # 82
- packages/node-type-resolver/src/FileSystem/CurrentFileInfoProvider.php # 22
- packages/node-type-resolver/src/FileSystem/CurrentFileInfoProvider.php # 35
- packages/phpstan-static-type-mapper/src/TypeMapper/ObjectTypeMapper.php # 123
- packages/phpstan-static-type-mapper/src/TypeMapper/ObjectWithoutClassTypeMapper.php # 72
- packages/rector-generator/src/Rector/Closure/AddNewServiceToSymfonyPhpConfigRector.php # 39
- rules/nette-code-quality/src/FormControlTypeResolver/AssignedVariablesMethodCallsFormTypeResolver.php # 50
- rules/nette-code-quality/src/FormControlTypeResolver/ClassMethodFormTypeResolver.php # 67
- rules/nette-code-quality/src/FormControlTypeResolver/ConstructorFormControlTypeResolver.php # 62
- rules/nette-code-quality/src/FormControlTypeResolver/GetComponentMethodCallFormControlTypeResolver.php # 110
- rules/nette-code-quality/src/FormControlTypeResolver/MagicNetteFactoryInterfaceFormControlTypeResolver.php # 95
- rules/nette-code-quality/src/FormControlTypeResolver/MethodCallFormControlTypeResolver.php # 59
- rules/nette-code-quality/src/FormControlTypeResolver/NewFormControlTypeResolver.php # 61
- rules/nette-code-quality/src/FormControlTypeResolver/ReturnFormControlTypeResolver.php # 54
- rules/nette-code-quality/src/FormControlTypeResolver/ThisVariableInAnotherMethodFormControlTypeResolver.php # 52
- rules/nette-code-quality/src/FormControlTypeResolver/VariableConstructorFormControlTypeResolver.php # 84
- src/Configuration/ChangeConfiguration.php # 17
- src/Configuration/Configuration.php # 149
- src/Configuration/Configuration.php # 172
- src/Configuration/Configuration.php # 204
- src/Configuration/Configuration.php # 227
- src/Configuration/CurrentNodeProvider.php # 16
- src/HttpKernel/RectorKernel.php # 70
- src/Rector/AbstractRector/CallableNodeTraverserTrait.php # 24
- src/Rector/AbstractRector/CallableNodeTraverserTrait.php # 24
- src/Rector/AbstractRector/ConstFetchAnalyzerTrait.php # 24
- src/Rector/AbstractRector/ConstFetchAnalyzerTrait.php # 24
- src/Testing/NodeVisitor/AttributeCollectingNodeVisitor.php # 24

View File

@ -56,7 +56,9 @@ final class ReportEntitiesWithAddedPropertiesEventSubscriber implements EventSub
*/
public static function getSubscribedEvents(): array
{
return [AfterProcessEvent::class => 'reportEntities'];
return [
AfterProcessEvent::class => 'reportEntities',
];
}
/**
@ -68,7 +70,9 @@ final class ReportEntitiesWithAddedPropertiesEventSubscriber implements EventSub
return;
}
$jsonContent = Json::encode(['new_columns_by_class' => $data], Json::PRETTY);
$jsonContent = Json::encode([
'new_columns_by_class' => $data,
], Json::PRETTY);
$filePath = getcwd() . '/' . $fileName;
$this->smartFileSystem->dumpFile($filePath, $jsonContent);

View File

@ -68,8 +68,12 @@ final class PhpDocTagNodeFactory
$joinTableTagValueNode = new JoinTableTagValueNode(
$uuidJoinTable,
null,
[new JoinColumnTagValueNode(['referencedColumnName' => self::UUID])],
[new JoinColumnTagValueNode(['referencedColumnName' => self::UUID])],
[new JoinColumnTagValueNode([
'referencedColumnName' => self::UUID,
])],
[new JoinColumnTagValueNode([
'referencedColumnName' => self::UUID,
])],
'',
new OpeningAndClosingSpace('', ''),
new OpeningAndClosingSpace('', '')

View File

@ -43,7 +43,9 @@ final class ArgumentRemoverRectorTest extends AbstractRectorTestCase
55,
5.5,
]),
new ArgumentRemover(RemoveInTheMiddle::class, 'run', 1, ['name' => 'second']),
new ArgumentRemover(RemoveInTheMiddle::class, 'run', 1, [
'name' => 'second',
]),
],
],
];

View File

@ -75,7 +75,8 @@ final class AssignAndRootExpr
{
if ($this->isFirstCallFactory && $this->getFirstAssign() !== null) {
/** @var Assign $currentMethodCall */
$currentMethodCall = $this->getFirstAssign()->expr;
$currentMethodCall = $this->getFirstAssign()
->expr;
while ($currentMethodCall->var instanceof MethodCall) {
$currentMethodCall = $currentMethodCall->var;
}

View File

@ -14,6 +14,7 @@ final class NotPrivatePropertyGuard implements GuardInterface
*/
public function check(RenameValueObjectInterface $renameValueObject): bool
{
return ! $renameValueObject->getNode()->isPrivate();
return ! $renameValueObject->getNode()
->isPrivate();
}
}

View File

@ -130,7 +130,8 @@ final class EventValueObjectClassFactory
{
$usedVariableNames = [];
$className = $classBuilder->getNode()->name;
$className = $classBuilder->getNode()
->name;
foreach ($variablesWithTypes as $variablesWithType) {
if (in_array($variablesWithType->getName(), $usedVariableNames, true)) {

View File

@ -41,17 +41,14 @@ final class NetteFormToSymfonyFormRector extends AbstractRector
'addHidden' => 'Symfony\Component\Form\Extension\Core\Type\HiddenType',
// https://symfony.com/doc/current/reference/forms/types/checkbox.html
'addCheckbox' => 'Symfony\Component\Form\Extension\Core\Type\CheckboxType',
'addUpload' => 'Symfony\Component\Form\Extension\Core\Type\FileType',
'addImage' => 'Symfony\Component\Form\Extension\Core\Type\FileType',
'addMultiUpload' => 'Symfony\Component\Form\Extension\Core\Type\FileType',
// https://symfony.com/doc/current/reference/forms/types/choice.html#select-tag-checkboxes-or-radio-buttons
'addSelect' => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
'addRadioList' => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
'addCheckboxList' => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
'addMultiSelect' => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
'addSubmit' => 'Symfony\Component\Form\Extension\Core\Type\SubmitType',
'addButton' => 'Symfony\Component\Form\Extension\Core\Type\ButtonType',
];

View File

@ -125,7 +125,8 @@ CODE_SAMPLE
private function getDocContent(Node $node): string
{
if ($node->getDocComment() !== null) {
return $node->getDocComment()->getText();
return $node->getDocComment()
->getText();
}
if ($node->getComments() !== []) {

View File

@ -261,7 +261,9 @@ CODE_SAMPLE
return false;
}
return $currentReturnType->getItemType()->isCallable()->yes();
return $currentReturnType->getItemType()
->isCallable()
->yes();
}
private function isClassStringArrayByStringArrayOverride(ArrayType $arrayType, ClassMethod $classMethod): bool

View File

@ -36,11 +36,13 @@ abstract class AbstractCommand extends Command
} catch (RuntimeException $runtimeException) {
if (Strings::contains($runtimeException->getMessage(), 'Not enough arguments')) {
// sometimes there is "command" argument, not really needed on fail of chosen command and missing argument
$arguments = $this->getDefinition()->getArguments();
$arguments = $this->getDefinition()
->getArguments();
if (isset($arguments['command'])) {
unset($arguments['command']);
$this->getDefinition()->setArguments($arguments);
$this->getDefinition()
->setArguments($arguments);
}
$this->textDescriptor->describe($output, $this);
@ -59,7 +61,8 @@ abstract class AbstractCommand extends Command
return;
}
$this->getApplication()->setCatchExceptions(false);
$this->getApplication()
->setCatchExceptions(false);
}
}
}

View File

@ -86,7 +86,8 @@ final class ValueResolver
}
try {
$value = $this->getConstExprEvaluator()->evaluateDirectly($expr);
$value = $this->getConstExprEvaluator()
->evaluateDirectly($expr);
} catch (ConstExprEvaluationException $constExprEvaluationException) {
$value = null;
}

View File

@ -5,7 +5,9 @@ declare(strict_types=1);
namespace Rector\Core\Skip;
use Nette\Utils\Strings;
use Rector\Core\Configuration\Option;
use Rector\Core\Rector\AbstractRector;
use Symplify\PackageBuilder\Parameter\ParameterProvider;
use Symplify\SmartFileSystem\SmartFileInfo;
final class Skipper
@ -21,30 +23,28 @@ final class Skipper
private const ONLY_STARTS_WITH_ASTERISK_REGEX = '#^\*(.*?)[^*]$#';
/**
* @var mixed[]
* @var ParameterProvider
*/
private $skip = [];
private $parameterProvider;
/**
* @param mixed[] $skip
*/
public function __construct(array $skip = [])
public function __construct(ParameterProvider $parameterProvider)
{
$this->skip = $skip;
$this->parameterProvider = $parameterProvider;
}
public function shouldSkipFileInfoAndRule(SmartFileInfo $smartFileInfo, AbstractRector $rector): bool
{
if ($this->skip === []) {
$skip = $this->parameterProvider->provideArrayParameter(Option::SKIP);
if ($skip === []) {
return false;
}
$rectorClass = get_class($rector);
if (! array_key_exists($rectorClass, $this->skip)) {
if (! array_key_exists($rectorClass, $skip)) {
return false;
}
$locations = $this->skip[$rectorClass];
$locations = $skip[$rectorClass];
$filePathName = $smartFileInfo->getPathName();
if (in_array($filePathName, $locations, true)) {
return true;

View File

@ -37,7 +37,9 @@ final class AttributeCollectingNodeVisitor extends NodeVisitorAbstract
}
$attributes = $this->getFilteredAttributes($node);
$this->attributes[] = array_merge(['node_class' => get_class($node)], $attributes);
$this->attributes[] = array_merge([
'node_class' => get_class($node),
], $attributes);
return null;
}

View File

@ -198,7 +198,9 @@ abstract class AbstractGenericRectorTestCase extends AbstractKernelTestCase impl
$rectorClass = $this->getRectorClass();
$this->ensureRectorClassIsValid($rectorClass, 'getRectorClass');
return [$rectorClass => null];
return [
$rectorClass => null,
];
}
protected function yieldFilesFromDirectory(string $directory, string $suffix = '*.php.inc'): Iterator

View File

@ -49,7 +49,9 @@ final class RunnableClassFinder
private function decorateNodesWithNames(array $nodes): void
{
$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor(new NameResolver(null, ['preserveOriginalNames' => true]));
$nodeTraverser->addVisitor(new NameResolver(null, [
'preserveOriginalNames' => true,
]));
$nodeTraverser->traverse($nodes);
}

View File

@ -48,6 +48,8 @@ final class NodeFactoryTest extends AbstractKernelTestCase
$array = new Array_();
$array->items[] = new ArrayItem(new LNumber(1), new String_('a'));
yield [['a' => 1], $array];
yield [[
'a' => 1,
], $array];
}
}

View File

@ -50,7 +50,8 @@ final class CheckGetNodeTypesReturnPhpParserNodeRule implements Rule
return [sprintf(
self::ERROR,
$scope->getClassReflection()->getName(),
$scope->getClassReflection()
->getName(),
Node::class,
implode(",\n", $incorrectClassNames)
)];