diff --git a/.forgejo/workflows/push.yml b/.forgejo/workflows/push.yml deleted file mode 100644 index 0f5e4de..0000000 --- a/.forgejo/workflows/push.yml +++ /dev/null @@ -1,34 +0,0 @@ -on: [push] -jobs: - ls: - runs-on: docker - container: - image: git.php.fail/lubiana/container/php:ci - steps: - - name: Manually checkout - env: - REPO: '${{ github.repository }}' - TOKEN: '${{ secrets.GITHUB_TOKEN }}' - GIT_SERVER: 'git.php.fail' - run: | - git clone --branch $GITHUB_REF_NAME https://${TOKEN}@${GIT_SERVER}/${REPO}.git . - git fetch - git checkout ${{ github.head_ref }} - - name: composer install - env: - COMPOSER_CACHE_DIR: /opt/hostedtoolcache/.composer/cache/files - run: | - mkdir -p ${{ env.COMPOSER_CACHE_DIR }} - composer install - - run: composer lint - - name: GIT commit and push all changed files - env: - CI_COMMIT_MESSAGE: Continuous Integration Fixes - CI_COMMIT_AUTHOR: Continuous Integration - run: | - if [[ -n "$(git status -s)" ]]; then - git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}" - git config --global user.email "gitbot@users.noreply.php.fail" - git commit -am "${{ env.CI_COMMIT_MESSAGE }}" - git push - fi \ No newline at end of file diff --git a/README.md b/README.md index 14f028e..24334c5 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,3 @@ # My very opiniated Configurations for Rector and ECS -## Installation - -```bash -composer require --dev lubiana/code-quality -``` - -Add my Setlist to ECS in `ecs.php`: - -```php -return static function (\Symplify\EasyCodingStandard\Config\ECSConfig $config): void { - $config->sets([ - \Lubiana\CodeQuality\LubiSetList::ECS, - ]); -}; -``` - -And for rector.php: - -```php -return static function (\Rector\Config\RectorConfig $config): void { - $config->sets([ - \Lubiana\CodeQuality\LubiSetList::RECTOR, - ]); -}; -``` - - diff --git a/composer.json b/composer.json index d384621..eb5a9bf 100644 --- a/composer.json +++ b/composer.json @@ -1,28 +1,19 @@ { "name": "lubiana/code-quality", "license": ["MIT"], - "keywords": ["dev"], "autoload": { "psr-4": { "Lubiana\\CodeQuality\\": "src/" } }, "require": { - "php": "^8.3", - "slevomat/coding-standard": "^8.15", - "symplify/easy-coding-standard": "^12.3.5", - "rector/rector": "^1.0.5" + "slevomat/coding-standard": "^8.6.2", + "symplify/easy-coding-standard": "^11.1.16", + "rector/rector": "^0.14.7" }, "config": { "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true } - }, - "scripts": { - "lint": [ - "rector", - "ecs --fix", - "ecs --fix" - ] } } diff --git a/composer.lock b/composer.lock index a57df23..dc1e4b6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,42 +4,39 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6eb7806e6594ecc073d158d2f9b483f0", + "content-hash": "8c32cd8c2b35ff1452742d3cd7d4ef77", "packages": [ { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v1.0.0", + "version": "v0.7.2", "source": { "type": "git", - "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "4be43904336affa5c2f70744a348312336afd0da" + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", - "reference": "4be43904336affa5c2f70744a348312336afd0da", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", "shasum": "" }, "require": { "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.4", + "php": ">=5.3", "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" }, "require-dev": { "composer/composer": "*", - "ext-json": "*", - "ext-zip": "*", "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0", - "yoast/phpunit-polyfills": "^1.0" + "phpcompatibility/php-compatibility": "^9.0" }, "type": "composer-plugin", "extra": { - "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, "autoload": { "psr-4": { - "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -55,7 +52,7 @@ }, { "name": "Contributors", - "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" + "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", @@ -79,31 +76,29 @@ "tests" ], "support": { - "issues": "https://github.com/PHPCSStandards/composer-installer/issues", - "source": "https://github.com/PHPCSStandards/composer-installer" + "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", + "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" }, - "time": "2023-01-05T11:28:13+00:00" + "time": "2022-02-04T12:51:07+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.28.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" + "reference": "33aefcdab42900e36366d0feab6206e2dd68f947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/33aefcdab42900e36366d0feab6206e2dd68f947", + "reference": "33aefcdab42900e36366d0feab6206e2dd68f947", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.5", @@ -127,22 +122,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.13.0" }, - "time": "2024-04-03T18:51:33+00:00" + "time": "2022-10-21T09:57:39+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.67", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493" + "reference": "e08de53a5eec983de78a787a88e72518cf8fe43a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493", - "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e08de53a5eec983de78a787a88e72518cf8fe43a", + "reference": "e08de53a5eec983de78a787a88e72518cf8fe43a", "shasum": "" }, "require": { @@ -171,11 +166,8 @@ "static analysis" ], "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" + "source": "https://github.com/phpstan/phpstan/tree/1.9.0" }, "funding": [ { @@ -185,41 +177,49 @@ { "url": "https://github.com/phpstan", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" } ], - "time": "2024-04-16T07:22:02+00:00" + "time": "2022-11-03T07:26:48+00:00" }, { "name": "rector/rector", - "version": "1.0.5", + "version": "0.14.7", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "73eb63e4f9011dba6b7c66c3262543014e352f34" + "reference": "3553aaba0e820083fc6d7f0dc78d8d789226a398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/73eb63e4f9011dba6b7c66c3262543014e352f34", - "reference": "73eb63e4f9011dba6b7c66c3262543014e352f34", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/3553aaba0e820083fc6d7f0dc78d8d789226a398", + "reference": "3553aaba0e820083fc6d7f0dc78d8d789226a398", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.10.57" + "phpstan/phpstan": "^1.9.0" }, "conflict": { "rector/rector-doctrine": "*", "rector/rector-downgrade-php": "*", + "rector/rector-php-parser": "*", + "rector/rector-phpoffice": "*", "rector/rector-phpunit": "*", "rector/rector-symfony": "*" }, - "suggest": { - "ext-dom": "To manipulate phpunit.xml via the custom-rule command" - }, "bin": [ "bin/rector" ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.14-dev" + } + }, "autoload": { "files": [ "bootstrap.php" @@ -230,15 +230,9 @@ "MIT" ], "description": "Instant Upgrade and Automated Refactoring of any PHP code", - "keywords": [ - "automation", - "dev", - "migration", - "refactoring" - ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.0.5" + "source": "https://github.com/rectorphp/rector/tree/0.14.7" }, "funding": [ { @@ -246,36 +240,36 @@ "type": "github" } ], - "time": "2024-05-10T05:31:15+00:00" + "time": "2022-11-04T08:48:40+00:00" }, { "name": "slevomat/coding-standard", - "version": "8.15.0", + "version": "8.6.2", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "7d1d957421618a3803b593ec31ace470177d7817" + "reference": "080f592b16f021a3a8e43d95ca8f57b87ddcf4e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/7d1d957421618a3803b593ec31ace470177d7817", - "reference": "7d1d957421618a3803b593ec31ace470177d7817", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/080f592b16f021a3a8e43d95ca8f57b87ddcf4e6", + "reference": "080f592b16f021a3a8e43d95ca8f57b87ddcf4e6", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": "^1.23.1", - "squizlabs/php_codesniffer": "^3.9.0" + "phpstan/phpdoc-parser": ">=1.11.0 <1.14.0", + "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { "phing/phing": "2.17.4", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.10.60", - "phpstan/phpstan-deprecation-rules": "1.1.4", - "phpstan/phpstan-phpunit": "1.3.16", - "phpstan/phpstan-strict-rules": "1.5.2", - "phpunit/phpunit": "8.5.21|9.6.8|10.5.11" + "phpstan/phpstan": "1.4.10|1.8.10", + "phpstan/phpstan-deprecation-rules": "1.0.0", + "phpstan/phpstan-phpunit": "1.0.0|1.1.1", + "phpstan/phpstan-strict-rules": "1.4.4", + "phpunit/phpunit": "7.5.20|8.5.21|9.5.25" }, "type": "phpcodesniffer-standard", "extra": { @@ -285,7 +279,7 @@ }, "autoload": { "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard/" + "SlevomatCodingStandard\\": "SlevomatCodingStandard" } }, "notification-url": "https://packagist.org/downloads/", @@ -299,7 +293,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.15.0" + "source": "https://github.com/slevomat/coding-standard/tree/8.6.2" }, "funding": [ { @@ -311,20 +305,20 @@ "type": "tidelift" } ], - "time": "2024-03-09T15:20:58+00:00" + "time": "2022-10-22T15:42:49+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.9.2", + "version": "3.7.1", "source": { "type": "git", - "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480" + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/aac1f6f347a5c5ac6bc98ad395007df00990f480", - "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", "shasum": "" }, "require": { @@ -334,11 +328,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "bin": [ - "bin/phpcbf", - "bin/phpcs" + "bin/phpcs", + "bin/phpcbf" ], "type": "library", "extra": { @@ -353,75 +347,52 @@ "authors": [ { "name": "Greg Sherwood", - "role": "Former lead" - }, - { - "name": "Juliette Reinders Folmer", - "role": "Current lead" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + "role": "lead" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards", - "static analysis" + "standards" ], "support": { - "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", - "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", - "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "funding": [ - { - "url": "https://github.com/PHPCSStandards", - "type": "github" - }, - { - "url": "https://github.com/jrfnl", - "type": "github" - }, - { - "url": "https://opencollective.com/php_codesniffer", - "type": "open_collective" - } - ], - "time": "2024-04-23T20:25:34+00:00" + "time": "2022-06-18T07:21:10+00:00" }, { "name": "symplify/easy-coding-standard", - "version": "12.3.5", + "version": "11.1.16", "source": { "type": "git", - "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", - "reference": "0d7c2cfee3debdf11c12135e90d69d1d9f4eef03" + "url": "https://github.com/symplify/easy-coding-standard.git", + "reference": "32ebd57f0f47713540df8ea39134adaa9d912fae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/0d7c2cfee3debdf11c12135e90d69d1d9f4eef03", - "reference": "0d7c2cfee3debdf11c12135e90d69d1d9f4eef03", + "url": "https://api.github.com/repos/symplify/easy-coding-standard/zipball/32ebd57f0f47713540df8ea39134adaa9d912fae", + "reference": "32ebd57f0f47713540df8ea39134adaa9d912fae", "shasum": "" }, "require": { "php": ">=7.2" }, "conflict": { - "friendsofphp/php-cs-fixer": "<3.46", - "phpcsstandards/php_codesniffer": "<3.8", - "symplify/coding-standard": "<12.1" - }, - "suggest": { - "ext-dom": "Needed to support checkstyle output format in class CheckstyleOutputFormatter" + "friendsofphp/php-cs-fixer": "<3.0", + "squizlabs/php_codesniffer": "<3.6" }, "bin": [ "bin/ecs" ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.3-dev" + } + }, "autoload": { "files": [ "bootstrap.php" @@ -431,16 +402,9 @@ "license": [ "MIT" ], - "description": "Use Coding Standard with 0-knowledge of PHP-CS-Fixer and PHP_CodeSniffer", - "keywords": [ - "Code style", - "automation", - "fixer", - "static analysis" - ], + "description": "Prefixed scoped version of ECS package", "support": { - "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", - "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.3.5" + "source": "https://github.com/symplify/easy-coding-standard/tree/11.1.16" }, "funding": [ { @@ -452,7 +416,7 @@ "type": "github" } ], - "time": "2024-08-08T08:43:50+00:00" + "time": "2022-10-27T10:48:13+00:00" } ], "packages-dev": [], @@ -461,9 +425,7 @@ "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, - "platform": { - "php": "^8.3" - }, + "platform": [], "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/config/ecs.php b/config/ecs.php index a964b49..76f1333 100644 --- a/config/ecs.php +++ b/config/ecs.php @@ -1,15 +1,11 @@ withPreparedSets( - symplify: true, - arrays: true, - comments: true, - docblocks: true, - spaces: true, - namespaces: true, - controlStructures: true, - strict: true, - cleanCode: true - ) - ->withPhpCsFixerSets( - perCS: true, - perCSRisky: true, - php80MigrationRisky: true, - php83Migration: true, - ) - ->withRules([ +return static function (ECSConfig $c): void { + $c->skip([ + BlankLineAfterOpeningTagFixer::class, + NewWithBracesFixer::class, + OrderedImportsFixer::class, + ]); + + $c->sets([ + SetList::ARRAY, + SetList::CLEAN_CODE, + SetList::COMMENTS, + SetList::COMMON, + SetList::CONTROL_STRUCTURES, + SetList::DOCBLOCK, + SetList::NAMESPACES, + SetList::PSR_12, + SetList::SPACES, + SetList::STRICT, + SetList::SYMPLIFY, + ]); + + // force visibility declaration on class constants + $c->ruleWithConfiguration(ClassConstantVisibilitySniff::class, [ + 'fixable' => true, + ]); + + // sort all use statements + $c->rules([ AlphabeticallySortedUsesSniff::class, DisallowGroupUseSniff::class, MultipleUsesPerLineSniff::class, NamespaceSpacingSniff::class, - OperatorLinebreakFixer::class, - NoWhitespaceInBlankLineFixer::class, - NewWithoutParenthesesSniff::class, - ]) - ->withConfiguredRule(ClassConstantVisibilitySniff::class, [ - 'fixable' => true, - ]) - ->withConfiguredRule( + ]); + + // import all namespaces, and event php core functions and classes + $c->ruleWithConfiguration( ReferenceUsedNamesOnlySniff::class, [ 'allowFallbackGlobalConstants' => false, @@ -66,57 +68,46 @@ return ECSConfig::configure() 'allowFullyQualifiedNameForCollidingFunctions' => true, 'searchAnnotations' => true, ] - ) + ); // define newlines between use statements - ->withConfiguredRule( - UseSpacingSniff::class, - [ - 'linesCountAfterLastUse' => 1, - 'linesCountBeforeFirstUse' => 1, - 'linesCountBetweenUseTypes' => 1, - ] - ) - ->withConfiguredRule( - ClassAttributesSeparationFixer::class, - [ - 'elements' => [ - 'const' => 'none', - 'method' => 'one', - 'property' => 'none', - 'trait_import' => 'none', - 'case' => 'none', - ], - ], - )->withConfiguredRule( + $c->ruleWithConfiguration(UseSpacingSniff::class, [ + 'linesCountAfterLastUse' => 1, + 'linesCountBeforeFirstUse' => 1, + 'linesCountBetweenUseTypes' => 1, + ]); + + // strict types declaration should be on same line as opening tag + $c->ruleWithConfiguration( DeclareStrictTypesSniff::class, [ 'declareOnFirstLine' => true, 'spacesCountAroundEqualsSign' => 0, ] - ) - ->withConfiguredRule( - UnionTypeHintFormatSniff::class, - [ - 'nullPosition' => 'last', - 'shortNullable' => 'no', - 'withSpaces' => 'no', - ] - ) - ->withConfiguredRule( + ); + + // disallow ?Foo typehint in favor of Foo|null + $c->ruleWithConfiguration(UnionTypeHintFormatSniff::class, [ + 'nullPosition' => 'last', + 'shortNullable' => 'no', + 'withSpaces' => 'no', + ]); + + // Remove useless parentheses in new statements + $c->rule(BracesFixer::class); + $c->rule(NewWithoutParenthesesSniff::class); + + // do not inline short multilinestatements + $c->ruleWithConfiguration(LineLengthFixer::class, [ + LineLengthFixer::INLINE_SHORT_LINES => false, + ]); + + $c->ruleWithConfiguration( NoExtraBlankLinesFixer::class, [ 'tokens' => ['square_brace_block', 'return', 'extra'], ] - ) - ->withConfiguredRule(AttributeAndTargetSpacingSniff::class, [ - 'linesCount' => 0, - ]) - ->withSkip([ - BlankLineAfterOpeningTagFixer::class, - OrderedImportsFixer::class, - FunctionToConstantFixer::class, - NewWithParenthesesFixer::class, - NewWithBracesFixer::class, - LineLengthFixer::class, - ]); + ); + + $c->rule(NoWhitespaceInBlankLineFixer::class); +}; diff --git a/config/rector.php b/config/rector.php index c6daf13..f49f121 100644 --- a/config/rector.php +++ b/config/rector.php @@ -4,7 +4,6 @@ use Rector\CodeQuality\Rector\BooleanAnd\SimplifyEmptyArrayCheckRector; use Rector\CodeQuality\Rector\BooleanNot\ReplaceMultipleBooleanNotRector; use Rector\CodeQuality\Rector\Catch_\ThrowWithPreviousExceptionRector; use Rector\CodeQuality\Rector\ClassMethod\InlineArrayReturnAssignRector; -use Rector\CodeQuality\Rector\Empty_\SimplifyEmptyCheckOnEmptyArrayRector; use Rector\CodeQuality\Rector\FuncCall\InlineIsAInstanceOfRector; use Rector\CodeQuality\Rector\Identical\BooleanNotIdenticalToNotIdenticalRector; use Rector\CodeQuality\Rector\Identical\SimplifyConditionsRector; @@ -14,79 +13,78 @@ use Rector\CodingStyle\Rector\ClassMethod\NewlineBeforeNewAssignSetRector; use Rector\CodingStyle\Rector\Closure\StaticClosureRector; use Rector\CodingStyle\Rector\FuncCall\CountArrayToEmptyArrayComparisonRector; use Rector\CodingStyle\Rector\If_\NullableCompareToNullRector; +use Rector\CodingStyle\Rector\Stmt\NewlineAfterStatementRector; use Rector\Config\RectorConfig; use Rector\EarlyReturn\Rector\Foreach_\ChangeNestedForeachIfsToEarlyContinueRector; +use Rector\EarlyReturn\Rector\If_\ChangeAndIfToEarlyReturnRector; use Rector\EarlyReturn\Rector\If_\ChangeNestedIfsToEarlyReturnRector; use Rector\EarlyReturn\Rector\If_\ChangeOrIfContinueToMultiContinueRector; -use Rector\EarlyReturn\Rector\If_\RemoveAlwaysElseRector; +use Rector\EarlyReturn\Rector\If_\ChangeOrIfReturnToEarlyReturnRector; use Rector\EarlyReturn\Rector\Return_\PreparedValueToEarlyReturnRector; +use Rector\EarlyReturn\Rector\Return_\ReturnBinaryAndToEarlyReturnRector; use Rector\EarlyReturn\Rector\Return_\ReturnBinaryOrToEarlyReturnRector; use Rector\EarlyReturn\Rector\StmtsAwareInterface\ReturnEarlyIfVariableRector; -use Rector\Php80\Rector\ClassConstFetch\ClassOnThisVariableObjectRector; +use Rector\Set\ValueObject\LevelSetList; use Rector\TypeDeclaration\Rector\ArrowFunction\AddArrowFunctionReturnTypeRector; +use Rector\TypeDeclaration\Rector\ClassMethod\AddArrayParamDocTypeRector; +use Rector\TypeDeclaration\Rector\ClassMethod\AddArrayReturnDocTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector; -use Rector\TypeDeclaration\Rector\ClassMethod\AddParamTypeFromPropertyTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\AddReturnTypeDeclarationBasedOnParentClassMethodRector; use Rector\TypeDeclaration\Rector\ClassMethod\ParamTypeByMethodCallTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\ParamTypeByParentCallTypeRector; -use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnDirectArrayRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnNewRector; -use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictConstantReturnRector; +use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictBoolReturnExprRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNativeCallRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNewArrayRector; -use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedCallRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedPropertyRector; -use Rector\TypeDeclaration\Rector\FunctionLike\AddParamTypeSplFixedArrayRector; -use Rector\TypeDeclaration\Rector\FunctionLike\AddReturnTypeDeclarationFromYieldsRector; +use Rector\TypeDeclaration\Rector\Closure\AddClosureReturnTypeRector; +use Rector\TypeDeclaration\Rector\FunctionLike\ReturnTypeDeclarationRector; +use Rector\TypeDeclaration\Rector\Param\ParamTypeFromStrictTypedPropertyRector; use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector; +use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictGetterMethodReturnTypeRector; -return RectorConfig::configure() - ->withPhpSets(php83: true) - ->withPreparedSets( - deadCode: true, - codeQuality: true, - typeDeclarations: true, - earlyReturn: true, - strictBooleans: true, - ) - ->withRules([ +return static function (RectorConfig $c): void { + $c->sets([LevelSetList::UP_TO_PHP_81]); + $c->rules([ + AddArrayParamDocTypeRector::class, + AddArrayReturnDocTypeRector::class, AddArrowFunctionReturnTypeRector::class, + AddClosureReturnTypeRector::class, AddMethodCallBasedStrictParamTypeRector::class, - AddParamTypeFromPropertyTypeRector::class, - AddParamTypeSplFixedArrayRector::class, AddReturnTypeDeclarationBasedOnParentClassMethodRector::class, - AddReturnTypeDeclarationFromYieldsRector::class, BooleanNotIdenticalToNotIdenticalRector::class, + ChangeAndIfToEarlyReturnRector::class, ChangeNestedForeachIfsToEarlyContinueRector::class, ChangeNestedIfsToEarlyReturnRector::class, ChangeOrIfContinueToMultiContinueRector::class, - ClassOnThisVariableObjectRector::class, + ChangeOrIfReturnToEarlyReturnRector::class, CountArrayToEmptyArrayComparisonRector::class, ExplicitBoolCompareRector::class, InlineArrayReturnAssignRector::class, InlineIsAInstanceOfRector::class, + NewlineAfterStatementRector::class, NewlineBeforeNewAssignSetRector::class, NullableCompareToNullRector::class, ParamTypeByMethodCallTypeRector::class, ParamTypeByParentCallTypeRector::class, + ParamTypeFromStrictTypedPropertyRector::class, PreparedValueToEarlyReturnRector::class, ReplaceMultipleBooleanNotRector::class, + ReturnBinaryAndToEarlyReturnRector::class, ReturnBinaryOrToEarlyReturnRector::class, ReturnEarlyIfVariableRector::class, - ReturnTypeFromReturnDirectArrayRector::class, + ReturnTypeDeclarationRector::class, ReturnTypeFromReturnNewRector::class, - ReturnTypeFromStrictConstantReturnRector::class, + ReturnTypeFromStrictBoolReturnExprRector::class, ReturnTypeFromStrictNativeCallRector::class, ReturnTypeFromStrictNewArrayRector::class, - ReturnTypeFromStrictTypedCallRector::class, ReturnTypeFromStrictTypedPropertyRector::class, SimplifyConditionsRector::class, SimplifyEmptyArrayCheckRector::class, - SimplifyEmptyCheckOnEmptyArrayRector::class, StaticArrowFunctionRector::class, StaticClosureRector::class, ThrowWithPreviousExceptionRector::class, TypedPropertyFromStrictConstructorRector::class, - RemoveAlwaysElseRector::class, - ]) -; + TypedPropertyFromStrictGetterMethodReturnTypeRector::class, + ]); +}; diff --git a/ecs.php b/ecs.php index 5ee3c42..7a1aa39 100644 --- a/ecs.php +++ b/ecs.php @@ -3,11 +3,13 @@ use Lubiana\CodeQuality\LubiSetList; use Symplify\EasyCodingStandard\Config\ECSConfig; -return ECSConfig::configure() - ->withSets([LubiSetList::ECS]) - ->withPaths( - [ - __DIR__ . '/src', - __DIR__ . '/config', - ] - )->withRootFiles(); +return static function (ECSConfig $c): void { + $c->paths([ + __DIR__ . '/src', + __DIR__ . '/config', + __DIR__ . '/rector.php', + __DIR__ . '/ecs.php', + ]); + + $c->sets([LubiSetList::ECS]); +}; diff --git a/rector.php b/rector.php index 87b24f1..80408b1 100644 --- a/rector.php +++ b/rector.php @@ -3,11 +3,13 @@ use Lubiana\CodeQuality\LubiSetList; use Rector\Config\RectorConfig; -return RectorConfig::configure() - ->withPaths([ +return static function (RectorConfig $c): void { + $c->paths([ __DIR__ . '/src', __DIR__ . '/config', - ]) - ->withSets([LubiSetList::RECTOR]) - ->withRootFiles() -; + __DIR__ . '/rector.php', + __DIR__ . '/ecs.php', + ]); + + $c->sets([LubiSetList::RECTOR]); +}; diff --git a/src/LubiSetList.php b/src/LubiSetList.php index 092d20f..d78838d 100644 --- a/src/LubiSetList.php +++ b/src/LubiSetList.php @@ -4,6 +4,7 @@ namespace Lubiana\CodeQuality; final class LubiSetList { - public const string RECTOR = __DIR__ . '/../config/rector.php'; - public const string ECS = __DIR__ . '/../config/ecs.php'; + public const RECTOR = __DIR__ . '/../config/rector.php'; + + public const ECS = __DIR__ . '/../config/ecs.php'; } diff --git a/src/SetList.php b/src/SetList.php new file mode 100644 index 0000000..00fe282 --- /dev/null +++ b/src/SetList.php @@ -0,0 +1,17 @@ +