Skip to content

Commit

Permalink
feat: PHP 8.2 (#10)
Browse files Browse the repository at this point in the history
* feat: support for PHP 8.2

* [TASK] ECS

* [TASK] ECS, Rector

* [TASK] PHPStan

* [TASK] GitHub workflow

* [TASK] fix functional tests and codestyle

* chore: add gitignore

* Update tests.yml

* chore: update extensions

* chore: change php version

* chore: update workflow

---------

Co-authored-by: thomas.layh <[email protected]>
Co-authored-by: Thomas Layh <[email protected]>
  • Loading branch information
3 people authored Aug 20, 2024
1 parent 7d3b4b9 commit 92b439a
Show file tree
Hide file tree
Showing 31 changed files with 333 additions and 588 deletions.
43 changes: 17 additions & 26 deletions .code-quality/ecs.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,45 +5,41 @@
use PhpCsFixer\Fixer\ClassNotation\ClassAttributesSeparationFixer;
use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
use PhpCsFixer\Fixer\Operator\NotOperatorWithSuccessorSpaceFixer;
use PhpCsFixer\Fixer\Phpdoc\NoSuperfluousPhpdocTagsFixer;
use PhpCsFixer\Fixer\Strict\DeclareStrictTypesFixer;
use PhpCsFixer\Fixer\Strict\StrictComparisonFixer;
use PhpCsFixer\Fixer\Strict\StrictParamFixer;
use PhpCsFixer\Fixer\StringNotation\ExplicitStringVariableFixer;
use PhpCsFixer\Fixer\Whitespace\ArrayIndentationFixer;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\CodingStandard\Fixer\ArrayNotation\ArrayListItemNewlineFixer;
use Symplify\CodingStandard\Fixer\ArrayNotation\ArrayOpenerAndCloserNewlineFixer;
use Symplify\CodingStandard\Fixer\LineLength\DocBlockLineLengthFixer;
use Symplify\CodingStandard\Fixer\LineLength\LineLengthFixer;
use Symplify\EasyCodingStandard\ValueObject\Option;
use Symplify\EasyCodingStandard\Config\ECSConfig;
use Symplify\EasyCodingStandard\ValueObject\Set\SetList;
use PhpCsFixer\Fixer\Phpdoc\NoSuperfluousPhpdocTagsFixer;

return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
$parameters->set(
Option::PATHS,
return static function (ECSConfig $ecsConfig): void {
$ecsConfig->paths(
[
__DIR__ . '/../Classes',
__DIR__ . '/ecs.php',
]
);

$containerConfigurator->import(SetList::COMMON);
$containerConfigurator->import(SetList::CLEAN_CODE);
$containerConfigurator->import(SetList::PSR_12);
$containerConfigurator->import(SetList::SYMPLIFY);
$ecsConfig->import(SetList::COMMON);
$ecsConfig->import(SetList::CLEAN_CODE);
$ecsConfig->import(SetList::PSR_12);
$ecsConfig->import(SetList::SYMPLIFY);

$containerConfigurator->services()
$ecsConfig->services()
->set(LineLengthFixer::class)
->call('configure', [[
LineLengthFixer::LINE_LENGTH => 140,
LineLengthFixer::INLINE_SHORT_LINES => false,
]]);

$ecsConfig->indentation('spaces');
$ecsConfig->lineEnding(PHP_EOL);
$ecsConfig->cacheDirectory('.cache/ecs/default/');

// Skip Rules and Sniffer
$parameters->set(
Option::SKIP,
$ecsConfig->skip(
[
// Default Skips
Symplify\CodingStandard\Fixer\LineLength\LineLengthFixer::class => [
Expand All @@ -56,16 +52,11 @@
NotOperatorWithSuccessorSpaceFixer::class => null,
ExplicitStringVariableFixer::class => null,
ArrayIndentationFixer::class => null,
DocBlockLineLengthFixer::class => null,
'\SlevomatCodingStandard\Sniffs\Whitespaces\DuplicateSpacesSniff.DuplicateSpaces' => null,
'\SlevomatCodingStandard\Sniffs\Namespaces\ReferenceUsedNamesOnlySniff.PartialUse' => null,

// @todo for next upgrade
NoSuperfluousPhpdocTagsFixer::class => null,
// @todo strict php
DeclareStrictTypesFixer::class => null,
StrictComparisonFixer::class => null,
StrictParamFixer::class => null,
NoSuperfluousPhpdocTagsFixer::class => [
__DIR__ . '/../Classes/Controller/CarController.php',
],
]
);
};
15 changes: 14 additions & 1 deletion .code-quality/phpstan-baseline.neon
Original file line number Diff line number Diff line change
@@ -1,2 +1,15 @@
parameters:
ignoreErrors:
ignoreErrors:
-
message: "#^Anonymous variables in a (.*) property fetch can lead to false dead property\\. Make sure the variable type is known$#"
count: 2
path: ../Classes/Controller/FeUserController.php

-
message: "#^There are 2 way to get (.*) value: public property and getter now - pick one to avoid variant behavior\\.$#"
count: 3
path: ../Classes/Domain/Model/Product.php

-
message: "#^Anonymous variables in a (.*) property fetch can lead to false dead property\\. Make sure the variable type is known$#"
path: ../Classes/
24 changes: 11 additions & 13 deletions .code-quality/phpstan.neon
Original file line number Diff line number Diff line change
@@ -1,31 +1,29 @@
includes:
- phpstan-baseline.neon
- ../.Build/vendor/symplify/phpstan-rules/packages/cognitive-complexity/config/cognitive-complexity-rules.neon
- ../.Build/vendor/symplify/phpstan-rules/config/code-complexity-rules.neon

rules:
- Symplify\PHPStanRules\Rules\NoDefaultExceptionRule

parameters:
level: max
level: 6
paths:
- "../Classes/"
- "../Tests/"

inferPrivatePropertyTypeFromConstructor: true
checkMissingIterableValueType: false
checkGenericClassInNonGenericObjectType: false
checkAlwaysTrueCheckTypeFunctionCall: false
checkAlwaysTrueStrictComparison: false

services:
- class: Symplify\Astral\Naming\SimpleNameResolver
- class: Symplify\PHPStanRules\CognitiveComplexity\AstCognitiveComplexityAnalyzer
- class: Symplify\PHPStanRules\CognitiveComplexity\NodeTraverser\ComplexityNodeTraverserFactory
- class: Symplify\PHPStanRules\CognitiveComplexity\DataCollector\CognitiveComplexityDataCollector
- class: Symplify\PHPStanRules\CognitiveComplexity\NodeVisitor\NestingNodeVisitor
- class: Symplify\PHPStanRules\CognitiveComplexity\NodeVisitor\ComplexityNodeVisitor
- class: Symplify\PHPStanRules\CognitiveComplexity\NodeAnalyzer\ComplexityAffectingNodeFinder
- class: Symplify\PackageBuilder\Php\TypeChecker
- class: Symplify\PackageBuilder\Matcher\ArrayStringAndFnMatcher
- class: Symplify\PHPStanRules\TypeAnalyzer\ObjectTypeAnalyzer
- class: Symplify\PHPStanRules\TypeAnalyzer\TypeUnwrapper
- class: Symplify\PHPStanRules\TypeResolver\ClassMethodReturnTypeResolver
- class: Symplify\PHPStanRules\Reflection\MethodCallNodeAnalyzer
- class: Symplify\PHPStanRules\NodeAnalyzer\MethodCall\MethodCallClassConstFetchPositionResolver
- class: Symplify\PHPStanRules\TypeAnalyzer\CallableTypeAnalyzer
- class: Symplify\PHPStanRules\Matcher\ArrayStringAndFnMatcher
- class: Symplify\PHPStanRules\Formatter\RequiredWithMessageFormatter
-
class: Symplify\PHPStanRules\Rules\ForbiddenFuncCallRule
tags: [phpstan.rules.rule]
Expand Down
30 changes: 0 additions & 30 deletions .code-quality/rector-8_0.php

This file was deleted.

51 changes: 51 additions & 0 deletions .code-quality/rector-8_1.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

declare(strict_types=1);

use Rector\CodeQuality\Rector\Identical\FlipTypeControlToUseExclusiveTypeRector;
use Rector\CodeQuality\Rector\Isset_\IssetOnPropertyObjectToPropertyExistsRector;
use Rector\CodingStyle\Rector\PostInc\PostIncDecToPreIncDecRector;
use Rector\Config\RectorConfig;
use Rector\DeadCode\Rector\Cast\RecastingRemovalRector;
use Rector\DeadCode\Rector\Property\RemoveUnusedPrivatePropertyRector;
use Rector\EarlyReturn\Rector\If_\ChangeAndIfToEarlyReturnRector;
use Rector\Naming\Rector\ClassMethod\RenameVariableToMatchNewTypeRector;
use Rector\Naming\Rector\Foreach_\RenameForeachValueVariableToMatchMethodCallReturnTypeRector;
use Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector;
use Rector\Privatization\Rector\Class_\FinalizeClassesWithoutChildrenRector;
use Rector\Set\ValueObject\SetList;
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths(
[
__DIR__ . '/../Classes',
__DIR__ . '/../Tests',
__DIR__ . '/rector-8_1.php',
]
);

$rectorConfig->import(SetList::PHP_82);

$rectorConfig->rule(TypedPropertyFromStrictConstructorRector::class);

$rectorConfig->importNames(false);
$rectorConfig->autoloadPaths([__DIR__ . '/../Classes']);
$rectorConfig->cacheDirectory('.cache/rector/upgrade_8-2/');
$rectorConfig->skip(
[
RecastingRemovalRector::class,
PostIncDecToPreIncDecRector::class,
FinalizeClassesWithoutChildrenRector::class,
ChangeAndIfToEarlyReturnRector::class,

IssetOnPropertyObjectToPropertyExistsRector::class,
FlipTypeControlToUseExclusiveTypeRector::class,
RenameVariableToMatchNewTypeRector::class,
AddLiteralSeparatorToNumberRector::class,
RenameForeachValueVariableToMatchMethodCallReturnTypeRector::class,
]
);

$rectorConfig->rule(RemoveUnusedPrivatePropertyRector::class);
};
51 changes: 51 additions & 0 deletions .code-quality/rector-8_2.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

declare(strict_types=1);

use Rector\CodeQuality\Rector\Identical\FlipTypeControlToUseExclusiveTypeRector;
use Rector\CodeQuality\Rector\Isset_\IssetOnPropertyObjectToPropertyExistsRector;
use Rector\CodingStyle\Rector\PostInc\PostIncDecToPreIncDecRector;
use Rector\Config\RectorConfig;
use Rector\DeadCode\Rector\Cast\RecastingRemovalRector;
use Rector\DeadCode\Rector\Property\RemoveUnusedPrivatePropertyRector;
use Rector\EarlyReturn\Rector\If_\ChangeAndIfToEarlyReturnRector;
use Rector\Naming\Rector\ClassMethod\RenameVariableToMatchNewTypeRector;
use Rector\Naming\Rector\Foreach_\RenameForeachValueVariableToMatchMethodCallReturnTypeRector;
use Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector;
use Rector\Privatization\Rector\Class_\FinalizeClassesWithoutChildrenRector;
use Rector\Set\ValueObject\SetList;
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths(
[
__DIR__ . '/../Classes',
__DIR__ . '/../Tests',
__DIR__ . '/rector-8_2.php',
]
);

$rectorConfig->import(SetList::PHP_82);

$rectorConfig->rule(TypedPropertyFromStrictConstructorRector::class);

$rectorConfig->importNames(false);
$rectorConfig->autoloadPaths([__DIR__ . '/../Classes']);
$rectorConfig->cacheDirectory('.cache/rector/upgrade_8-1/');
$rectorConfig->skip(
[
RecastingRemovalRector::class,
PostIncDecToPreIncDecRector::class,
FinalizeClassesWithoutChildrenRector::class,
ChangeAndIfToEarlyReturnRector::class,

IssetOnPropertyObjectToPropertyExistsRector::class,
FlipTypeControlToUseExclusiveTypeRector::class,
RenameVariableToMatchNewTypeRector::class,
AddLiteralSeparatorToNumberRector::class,
RenameForeachValueVariableToMatchMethodCallReturnTypeRector::class,
]
);

$rectorConfig->rule(RemoveUnusedPrivatePropertyRector::class);
};
Loading

0 comments on commit 92b439a

Please sign in to comment.