mirror of
https://github.com/rectorphp/rector.git
synced 2024-05-30 07:50:53 +00:00
Refactor composer modifier to ComposerRector (#5198)
This commit is contained in:
parent
35e83f75c6
commit
04db98620a
13
.github/workflows/code_analysis.yaml
vendored
13
.github/workflows/code_analysis.yaml
vendored
|
@ -4,19 +4,11 @@ on:
|
|||
pull_request: null
|
||||
|
||||
jobs:
|
||||
matrix:
|
||||
code_analysis:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
actions:
|
||||
-
|
||||
name: 'PHPStan'
|
||||
run: composer phpstan
|
||||
|
||||
-
|
||||
name: 'PHPStan for config'
|
||||
run: composer phpstan-config
|
||||
|
||||
-
|
||||
name: 'Show command'
|
||||
run: bin/rector show --ansi
|
||||
|
@ -57,7 +49,7 @@ jobs:
|
|||
|
||||
-
|
||||
name: 'PHP Linter'
|
||||
run: vendor/bin/parallel-lint src bin/rector config tests packages rules --exclude packages/rector-generator/templates --colors --exclude rules/psr4/tests/Rector/Namespace_/MultipleClassFileToPsr4ClassesRector/Source --exclude rules/autodiscovery/tests/Rector/FileNode/MoveInterfacesToContractNamespaceDirectoryRector/Expected
|
||||
run: vendor/bin/parallel-lint src bin/rector config tests packages rules --colors --exclude packages/rector-generator/templates --exclude rules/psr4/tests/Rector/Namespace_/MultipleClassFileToPsr4ClassesRector/Source --exclude rules/autodiscovery/tests/Rector/FileNode/MoveInterfacesToContractNamespaceDirectoryRector/Expected
|
||||
|
||||
name: ${{ matrix.actions.name }}
|
||||
runs-on: ubuntu-latest
|
||||
|
@ -71,7 +63,6 @@ jobs:
|
|||
with:
|
||||
php-version: 7.3
|
||||
coverage: none
|
||||
tools: composer:v2
|
||||
|
||||
- uses: "ramsey/composer-install@v1"
|
||||
|
||||
|
|
2
.github/workflows/code_analysis_no_dev.yaml
vendored
2
.github/workflows/code_analysis_no_dev.yaml
vendored
|
@ -25,7 +25,7 @@ jobs:
|
|||
with:
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
tools: composer:v2
|
||||
|
||||
|
||||
- run: composer install --no-progress --ansi
|
||||
|
||||
|
|
35
.github/workflows/code_analysis_php80.yaml
vendored
Normal file
35
.github/workflows/code_analysis_php80.yaml
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
name: Code Analysis PHP 8.0
|
||||
|
||||
on:
|
||||
pull_request: null
|
||||
|
||||
jobs:
|
||||
code_analysis_php80:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
actions:
|
||||
-
|
||||
name: 'PHPStan'
|
||||
run: vendor/bin/phpstan analyse --ansi --error-format symplify
|
||||
|
||||
-
|
||||
name: 'PHPStan for config'
|
||||
run: composer phpstan-config
|
||||
|
||||
name: ${{ matrix.actions.name }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
# see https://github.com/shivammathur/setup-php
|
||||
-
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: 8.0
|
||||
coverage: none
|
||||
|
||||
- uses: "ramsey/composer-install@v1"
|
||||
|
||||
- run: ${{ matrix.actions.run }}
|
2
.github/workflows/daily_pull_requests.yaml
vendored
2
.github/workflows/daily_pull_requests.yaml
vendored
|
@ -37,7 +37,7 @@ jobs:
|
|||
with:
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
tools: composer:v2
|
||||
|
||||
|
||||
-
|
||||
run: composer install --no-progress --ansi
|
||||
|
|
2
.github/workflows/rector.yaml
vendored
2
.github/workflows/rector.yaml
vendored
|
@ -27,7 +27,7 @@ jobs:
|
|||
with:
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
tools: composer:v2
|
||||
|
||||
|
||||
- run: ${{ matrix.actions.install }}
|
||||
|
||||
|
|
2
.github/workflows/rector_ci.yaml
vendored
2
.github/workflows/rector_ci.yaml
vendored
|
@ -48,7 +48,7 @@ jobs:
|
|||
# PHP 7.3 is required, so Rector's code is PHP 7.3 compatible even after refactoring
|
||||
php-version: 7.3
|
||||
coverage: none
|
||||
tools: composer:v2
|
||||
|
||||
|
||||
- run: composer install --no-progress --ansi
|
||||
|
||||
|
|
4
.github/workflows/weekly_code_coverage.yaml
vendored
4
.github/workflows/weekly_code_coverage.yaml
vendored
|
@ -26,7 +26,7 @@ jobs:
|
|||
# Coveralls.io
|
||||
composer require --dev php-coveralls/php-coveralls:^2.4
|
||||
vendor/bin/php-coveralls --coverage_clover=clover.xml -v
|
||||
|
||||
|
||||
# clean up
|
||||
git checkout .
|
||||
git clean -xfd build
|
||||
|
@ -47,7 +47,7 @@ jobs:
|
|||
with:
|
||||
php-version: 7.4
|
||||
coverage: xdebug
|
||||
tools: composer:v2
|
||||
|
||||
|
||||
-
|
||||
run: composer install --no-progress --ansi
|
||||
|
|
2
.github/workflows/weekly_pull_requests.yaml
vendored
2
.github/workflows/weekly_pull_requests.yaml
vendored
|
@ -41,7 +41,7 @@ jobs:
|
|||
with:
|
||||
php-version: 7.4
|
||||
coverage: xdebug
|
||||
tools: composer:v2
|
||||
|
||||
|
||||
-
|
||||
run: composer install --no-progress --ansi
|
||||
|
|
66
config/set/nette-30-composer.php
Normal file
66
config/set/nette-30-composer.php
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\ChangePackageVersionRector;
|
||||
use Rector\Composer\Rector\RemovePackageRector;
|
||||
use Rector\Composer\Rector\ReplacePackageAndVersionRector;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Rector\Composer\ValueObject\ReplacePackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(ChangePackageVersionRector::class)
|
||||
->call('configure', [[
|
||||
ChangePackageVersionRector::PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new PackageAndVersion('nette/nette', '^3.0'),
|
||||
// https://github.com/nette/nette/blob/v2.4.0/composer.json vs https://github.com/nette/nette/blob/v3.0.0/composer.json
|
||||
// older versions have security issues
|
||||
new PackageAndVersion('nette/application', '^3.0.6'),
|
||||
new PackageAndVersion('nette/bootstrap', '^3.0'),
|
||||
new PackageAndVersion('nette/caching', '^3.0'),
|
||||
new PackageAndVersion('nette/component-model', '^3.0'),
|
||||
new PackageAndVersion('nette/database', '^3.0'),
|
||||
new PackageAndVersion('nette/di', '^3.0'),
|
||||
new PackageAndVersion('nette/finder', '^2.5'),
|
||||
new PackageAndVersion('nette/forms', '^3.0'),
|
||||
new PackageAndVersion('nette/http', '^3.0'),
|
||||
new PackageAndVersion('nette/mail', '^3.0'),
|
||||
new PackageAndVersion('nette/neon', '^3.0'),
|
||||
new PackageAndVersion('nette/php-generator', '^3.0'),
|
||||
new PackageAndVersion('nette/robot-loader', '^3.0'),
|
||||
new PackageAndVersion('nette/safe-stream', '^2.4'),
|
||||
new PackageAndVersion('nette/security', '^3.0'),
|
||||
new PackageAndVersion('nette/tokenizer', '^3.0'),
|
||||
new PackageAndVersion('nette/utils', '^3.0'),
|
||||
new PackageAndVersion('latte/latte', '^2.5'),
|
||||
new PackageAndVersion('tracy/tracy', '^2.6'),
|
||||
|
||||
// contributte packages
|
||||
new PackageAndVersion('contributte/event-dispatcher-extra', '^0.8'),
|
||||
new PackageAndVersion('contributte/forms-multiplier', '3.1.x-dev'),
|
||||
// other packages
|
||||
new PackageAndVersion('radekdostal/nette-datetimepicker', '^3.0'),
|
||||
]),
|
||||
]]);
|
||||
|
||||
$services->set(RemovePackageRector::class)
|
||||
->call('configure', [[
|
||||
RemovePackageRector::PACKAGE_NAMES => ['nette/deprecated', 'nette/reflection'],
|
||||
]]);
|
||||
|
||||
$services->set(ReplacePackageAndVersionRector::class)
|
||||
->call('configure', [[
|
||||
ReplacePackageAndVersionRector::REPLACE_PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
// webchemistry to contributte
|
||||
new ReplacePackageAndVersion(
|
||||
'webchemistry/forms-multiplier',
|
||||
'contributte/forms-multiplier',
|
||||
'3.1.x-dev'
|
||||
),
|
||||
]),
|
||||
]]);
|
||||
};
|
|
@ -2,10 +2,6 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Modifier\ComposerModifier;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\ChangePackageVersion;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\RemovePackage;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\ReplacePackage;
|
||||
use Rector\DeadCode\Rector\StaticCall\RemoveParentCallWithoutParentRector;
|
||||
use Rector\Generic\Rector\ClassMethod\ArgumentDefaultValueReplacerRector;
|
||||
use Rector\Generic\Rector\MethodCall\FormerNullableArgumentToScalarTypedRector;
|
||||
|
@ -29,6 +25,7 @@ use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigura
|
|||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$containerConfigurator->import(__DIR__ . '/nette-30-composer.php');
|
||||
$containerConfigurator->import(__DIR__ . '/nette-30-dependency-injection.php');
|
||||
$containerConfigurator->import(__DIR__ . '/nette-30-return-types.php');
|
||||
$containerConfigurator->import(__DIR__ . '/nette-30-param-types.php');
|
||||
|
@ -99,42 +96,4 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
$services->set(RemoveParentAndNameFromComponentConstructorRector::class);
|
||||
$services->set(MoveFinalGetUserToCheckRequirementsClassMethodRector::class);
|
||||
$services->set(ConvertAddUploadWithThirdArgumentTrueToAddMultiUploadRector::class);
|
||||
|
||||
$services->set(ComposerModifier::class)
|
||||
->call('configure', [
|
||||
ValueObjectInliner::inline([
|
||||
// meta package
|
||||
new ChangePackageVersion('nette/nette', '^3.0'),
|
||||
// https://github.com/nette/nette/blob/v2.4.0/composer.json vs https://github.com/nette/nette/blob/v3.0.0/composer.json
|
||||
// older versions have security issues
|
||||
new ChangePackageVersion('nette/application', '^3.0.6'),
|
||||
new ChangePackageVersion('nette/bootstrap', '^3.0'),
|
||||
new ChangePackageVersion('nette/caching', '^3.0'),
|
||||
new ChangePackageVersion('nette/component-model', '^3.0'),
|
||||
new ChangePackageVersion('nette/database', '^3.0'),
|
||||
new RemovePackage('nette/deprecated'),
|
||||
new ChangePackageVersion('nette/di', '^3.0'),
|
||||
new ChangePackageVersion('nette/finder', '^2.5'),
|
||||
new ChangePackageVersion('nette/forms', '^3.0'),
|
||||
new ChangePackageVersion('nette/http', '^3.0'),
|
||||
new ChangePackageVersion('nette/mail', '^3.0'),
|
||||
new ChangePackageVersion('nette/neon', '^3.0'),
|
||||
new ChangePackageVersion('nette/php-generator', '^3.0'),
|
||||
new RemovePackage('nette/reflection'),
|
||||
new ChangePackageVersion('nette/robot-loader', '^3.0'),
|
||||
new ChangePackageVersion('nette/safe-stream', '^2.4'),
|
||||
new ChangePackageVersion('nette/security', '^3.0'),
|
||||
new ChangePackageVersion('nette/tokenizer', '^3.0'),
|
||||
new ChangePackageVersion('nette/utils', '^3.0'),
|
||||
new ChangePackageVersion('latte/latte', '^2.5'),
|
||||
new ChangePackageVersion('tracy/tracy', '^2.6'),
|
||||
// webchemistry to contributte
|
||||
new ReplacePackage('webchemistry/forms-multiplier', 'contributte/forms-multiplier', '3.1.x-dev'),
|
||||
// contributte packages
|
||||
new ChangePackageVersion('contributte/event-dispatcher-extra', '^0.8'),
|
||||
new ChangePackageVersion('contributte/forms-multiplier', '3.1.x-dev'),
|
||||
// other packages
|
||||
new ChangePackageVersion('radekdostal/nette-datetimepicker', '^3.0'),
|
||||
]),
|
||||
]);
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# 660 Rules Overview
|
||||
# 668 Rules Overview
|
||||
|
||||
<br>
|
||||
|
||||
|
@ -18,7 +18,9 @@
|
|||
|
||||
- [CodingStyle](#codingstyle) (37)
|
||||
|
||||
- [DeadCode](#deadcode) (44)
|
||||
- [Composer](#composer) (7)
|
||||
|
||||
- [DeadCode](#deadcode) (45)
|
||||
|
||||
- [DeadDocBlock](#deaddocblock) (3)
|
||||
|
||||
|
@ -311,12 +313,8 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
|
||||
$services->set(MoveValueObjectsToValueObjectDirectoryRector::class)
|
||||
->call('configure', [[
|
||||
MoveValueObjectsToValueObjectDirectoryRector::TYPES => [
|
||||
'ValueObjectInterfaceClassName',
|
||||
],
|
||||
MoveValueObjectsToValueObjectDirectoryRector::SUFFIXES => [
|
||||
'Search',
|
||||
],
|
||||
MoveValueObjectsToValueObjectDirectoryRector::TYPES => ['ValueObjectInterfaceClassName'],
|
||||
MoveValueObjectsToValueObjectDirectoryRector::SUFFIXES => ['Search'],
|
||||
MoveValueObjectsToValueObjectDirectoryRector::ENABLE_VALUE_OBJECT_GUESSING => true,
|
||||
]]);
|
||||
};
|
||||
|
@ -2470,7 +2468,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
|
||||
### SplitDoubleAssignRector
|
||||
|
||||
Split multiple inline assigns to `each` own lines default value, to prevent undefined array issues
|
||||
Split multiple inline assigns to each own lines default value, to prevent undefined array issues
|
||||
|
||||
- class: `Rector\CodingStyle\Rector\Assign\SplitDoubleAssignRector`
|
||||
|
||||
|
@ -2781,6 +2779,267 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
|
||||
<br>
|
||||
|
||||
## Composer
|
||||
|
||||
### AddPackageToRequireDevRector
|
||||
|
||||
Add package to "require-dev" in `composer.json`
|
||||
|
||||
:wrench: **configure it!**
|
||||
|
||||
- class: `Rector\Composer\Rector\AddPackageToRequireDevRector`
|
||||
|
||||
```php
|
||||
use Rector\Composer\Rector\AddPackageToRequireDevRector;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(AddPackageToRequireDevRector::class)
|
||||
->call('configure', [[
|
||||
AddPackageToRequireDevRector::PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new PackageAndVersion('symfony/console', '^3.4'),
|
||||
]),
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
||||
↓
|
||||
|
||||
```diff
|
||||
{
|
||||
+ "require-dev": {
|
||||
+ "symfony/console": "^3.4"
|
||||
+ }
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### AddPackageToRequireRector
|
||||
|
||||
Add package to "require" in `composer.json`
|
||||
|
||||
:wrench: **configure it!**
|
||||
|
||||
- class: `Rector\Composer\Rector\AddPackageToRequireRector`
|
||||
|
||||
```php
|
||||
use Rector\Composer\Rector\AddPackageToRequireRector;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(AddPackageToRequireRector::class)
|
||||
->call('configure', [[
|
||||
AddPackageToRequireRector::PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new PackageAndVersion('symfony/console', '^3.4'),
|
||||
]),
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
||||
↓
|
||||
|
||||
```diff
|
||||
{
|
||||
+ "require": {
|
||||
+ "symfony/console": "^3.4"
|
||||
+ }
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### ChangePackageVersionRector
|
||||
|
||||
Change package version `composer.json`
|
||||
|
||||
:wrench: **configure it!**
|
||||
|
||||
- class: `Rector\Composer\Rector\ChangePackageVersionRector`
|
||||
|
||||
```php
|
||||
use Rector\Composer\Rector\ChangePackageVersionRector;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(ChangePackageVersionRector::class)
|
||||
->call('configure', [[
|
||||
ChangePackageVersionRector::PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new PackageAndVersion('symfony/console', '^4.4'),
|
||||
]),
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
||||
↓
|
||||
|
||||
```diff
|
||||
{
|
||||
- "require-dev": {
|
||||
- "symfony/console": "^3.4"
|
||||
+ "require": {
|
||||
+ "symfony/console": "^4.4"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### MovePackageToRequireDevRector
|
||||
|
||||
Moves package from "require" to "require-dev" in `composer.json`
|
||||
|
||||
:wrench: **configure it!**
|
||||
|
||||
- class: `Rector\Composer\Rector\MovePackageToRequireDevRector`
|
||||
|
||||
```php
|
||||
use Rector\Composer\Rector\MovePackageToRequireDevRector;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(MovePackageToRequireDevRector::class)
|
||||
->call('configure', [[
|
||||
MovePackageToRequireDevRector::PACKAGE_NAMES => ['symfony/console'],
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
||||
↓
|
||||
|
||||
```diff
|
||||
{
|
||||
- "require": {
|
||||
+ "require-dev": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### MovePackageToRequireRector
|
||||
|
||||
Moves package from "require-dev" to "require" in `composer.json`
|
||||
|
||||
:wrench: **configure it!**
|
||||
|
||||
- class: `Rector\Composer\Rector\MovePackageToRequireRector`
|
||||
|
||||
```php
|
||||
use Rector\Composer\Rector\MovePackageToRequireRector;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(MovePackageToRequireRector::class)
|
||||
->call('configure', [[
|
||||
MovePackageToRequireRector::PACKAGE_NAMES => ['symfony/console'],
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
||||
↓
|
||||
|
||||
```diff
|
||||
{
|
||||
- "require-dev": {
|
||||
+ "require": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### RemovePackageRector
|
||||
|
||||
Remove package from "require" and "require-dev" in `composer.json`
|
||||
|
||||
:wrench: **configure it!**
|
||||
|
||||
- class: `Rector\Composer\Rector\RemovePackageRector`
|
||||
|
||||
```php
|
||||
use Rector\Composer\Rector\RemovePackageRector;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(RemovePackageRector::class)
|
||||
->call('configure', [[
|
||||
RemovePackageRector::PACKAGE_NAMES => ['symfony/console'],
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
||||
↓
|
||||
|
||||
```diff
|
||||
{
|
||||
- "require": {
|
||||
- "symfony/console": "^3.4"
|
||||
- }
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### ReplacePackageAndVersionRector
|
||||
|
||||
Change package name and version `composer.json`
|
||||
|
||||
:wrench: **configure it!**
|
||||
|
||||
- class: `Rector\Composer\Rector\ReplacePackageAndVersionRector`
|
||||
|
||||
```php
|
||||
use Rector\Composer\Rector\ReplacePackageAndVersionRector;
|
||||
use Rector\Composer\ValueObject\ReplacePackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(ReplacePackageAndVersionRector::class)
|
||||
->call('configure', [[
|
||||
ReplacePackageAndVersionRector::REPLACE_PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new ReplacePackageAndVersion('symfony/console', 'symfony/http-kernel', '^4.4'),
|
||||
]),
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
||||
↓
|
||||
|
||||
```diff
|
||||
{
|
||||
"require-dev": {
|
||||
- "symfony/console": "^3.4"
|
||||
+ "symfony/http-kernel": "^4.4"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## DeadCode
|
||||
|
||||
### RecastingRemovalRector
|
||||
|
@ -2904,6 +3163,28 @@ Remove (string) casting when it comes to concat, that does this by default
|
|||
|
||||
<br>
|
||||
|
||||
### RemoveDeadConditionAboveReturnRector
|
||||
|
||||
Remove dead condition above return
|
||||
|
||||
- class: `Rector\DeadCode\Rector\Return_\RemoveDeadConditionAboveReturnRector`
|
||||
|
||||
```diff
|
||||
final class SomeClass
|
||||
{
|
||||
public function go()
|
||||
{
|
||||
- if (1 === 1) {
|
||||
- return 'yes';
|
||||
- }
|
||||
-
|
||||
return 'yes';
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### RemoveDeadConstructorRector
|
||||
|
||||
Remove empty constructor
|
||||
|
@ -6919,7 +7200,10 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
|
||||
$services->set(InjectAnnotationClassRector::class)
|
||||
->call('configure', [[
|
||||
InjectAnnotationClassRector::ANNOTATION_CLASSES => ['DI\Annotation\Inject', 'JMS\DiExtraBundle\Annotation\Inject'],
|
||||
InjectAnnotationClassRector::ANNOTATION_CLASSES => [
|
||||
'DI\Annotation\Inject',
|
||||
'JMS\DiExtraBundle\Annotation\Inject',
|
||||
],
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
@ -7930,10 +8214,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
$services->set(AddTopIncludeRector::class)
|
||||
->call('configure', [[
|
||||
AddTopIncludeRector::AUTOLOAD_FILE_PATH => '/../autoloader.php',
|
||||
AddTopIncludeRector::PATTERNS => [
|
||||
'pat*/*/?ame.php',
|
||||
'somepath/?ame.php',
|
||||
],
|
||||
AddTopIncludeRector::PATTERNS => ['pat*/*/?ame.php', 'somepath/?ame.php'],
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
@ -8202,8 +8483,8 @@ Changes mockery mock creation to Prophesize
|
|||
- class: `Rector\MockeryToProphecy\Rector\ClassMethod\MockeryCreateMockToProphizeRector`
|
||||
|
||||
```diff
|
||||
-$mock = \Mockery::mock(\'MyClass\');
|
||||
+ $mock = $this->prophesize(\'MyClass\');
|
||||
-$mock = \Mockery::mock('MyClass');
|
||||
+ $mock = $this->prophesize('MyClass');
|
||||
+
|
||||
$service = new Service();
|
||||
-$service->injectDependency($mock);
|
||||
|
@ -14021,7 +14302,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
|
||||
### PassFactoryToUniqueObjectRector
|
||||
|
||||
Convert new `X/Static::call()` to factories in entities, pass them via constructor to `each` other
|
||||
Convert new `X/Static::call()` to factories in entities, pass them via constructor to each other
|
||||
|
||||
:wrench: **configure it!**
|
||||
|
||||
|
@ -15020,7 +15301,10 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
|
||||
$services->set(GetToConstructorInjectionRector::class)
|
||||
->call('configure', [[
|
||||
GetToConstructorInjectionRector::GET_METHOD_AWARE_TYPES => ['SymfonyControllerClassName', 'GetTraitClassName'],
|
||||
GetToConstructorInjectionRector::GET_METHOD_AWARE_TYPES => [
|
||||
'SymfonyControllerClassName',
|
||||
'GetTraitClassName',
|
||||
],
|
||||
]]);
|
||||
};
|
||||
```
|
||||
|
|
|
@ -41,7 +41,6 @@ use Rector\StaticTypeMapper\TypeFactory\TypeFactoryStaticHelper;
|
|||
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
|
||||
use Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType;
|
||||
use Rector\TypeDeclaration\PHPStan\Type\ObjectTypeSpecifier;
|
||||
use Webmozart\Assert\Assert;
|
||||
|
||||
final class NodeTypeResolver
|
||||
{
|
||||
|
|
|
@ -13,5 +13,5 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||
->autoconfigure();
|
||||
|
||||
$services->load('Rector\Composer\\', __DIR__ . '/../src')
|
||||
->exclude([__DIR__ . '/../src/ValueObject']);
|
||||
->exclude([__DIR__ . '/../src/Rector', __DIR__ . '/../src/ValueObject']);
|
||||
};
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Contract\ComposerModifier;
|
||||
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
interface ComposerModifierInterface
|
||||
{
|
||||
public function modify(ComposerJson $composerJson): void;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Contract\Rector;
|
||||
|
||||
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
|
||||
use Rector\Core\Contract\Rector\RectorInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\RuleDocGenerator\Contract\ConfigurableRuleInterface;
|
||||
|
||||
interface ComposerRectorInterface extends RectorInterface, ConfigurableRuleInterface, ConfigurableRectorInterface
|
||||
{
|
||||
public function refactor(ComposerJson $composerJson): void;
|
||||
}
|
|
@ -4,72 +4,33 @@ declare(strict_types=1);
|
|||
|
||||
namespace Rector\Composer\Modifier;
|
||||
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Webmozart\Assert\Assert;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Modifier\ComposerModifierTest
|
||||
*/
|
||||
final class ComposerModifier
|
||||
{
|
||||
/**
|
||||
* @var string|null
|
||||
* @var ComposerRectorInterface[]
|
||||
*/
|
||||
private $filePath;
|
||||
private $composerRectors = [];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
* @param ComposerRectorInterface[] $composerRectors
|
||||
*/
|
||||
private $command = 'composer update';
|
||||
|
||||
/**
|
||||
* @var ComposerModifierInterface[]
|
||||
*/
|
||||
private $configuration = [];
|
||||
|
||||
/**
|
||||
* @param ComposerModifierInterface[] $configuration
|
||||
*/
|
||||
public function configure(array $configuration): void
|
||||
public function __construct(array $composerRectors)
|
||||
{
|
||||
Assert::allIsInstanceOf($configuration, ComposerModifierInterface::class);
|
||||
$this->configuration = array_merge($this->configuration, $configuration);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ComposerModifierInterface[] $configuration
|
||||
*/
|
||||
public function reconfigure(array $configuration): void
|
||||
{
|
||||
Assert::allIsInstanceOf($configuration, ComposerModifierInterface::class);
|
||||
$this->configuration = $configuration;
|
||||
}
|
||||
|
||||
public function setFilePath(string $filePath): void
|
||||
{
|
||||
$this->filePath = $filePath;
|
||||
}
|
||||
|
||||
public function getFilePath(): string
|
||||
{
|
||||
return $this->filePath ?: getcwd() . '/composer.json';
|
||||
}
|
||||
|
||||
public function setCommand(string $command): void
|
||||
{
|
||||
$this->command = $command;
|
||||
}
|
||||
|
||||
public function getCommand(): string
|
||||
{
|
||||
return $this->command;
|
||||
$this->composerRectors = $composerRectors;
|
||||
}
|
||||
|
||||
public function modify(ComposerJson $composerJson): void
|
||||
{
|
||||
foreach ($this->configuration as $composerChanger) {
|
||||
$composerChanger->modify($composerJson);
|
||||
foreach ($this->composerRectors as $composerRector) {
|
||||
$composerRector->refactor($composerJson);
|
||||
}
|
||||
}
|
||||
|
||||
public function enabled(): bool
|
||||
{
|
||||
return $this->composerRectors !== [];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,14 +10,17 @@ use Rector\Core\Configuration\Configuration;
|
|||
use Symfony\Component\Process\Process;
|
||||
use Symplify\ComposerJsonManipulator\ComposerJsonFactory;
|
||||
use Symplify\ComposerJsonManipulator\Printer\ComposerJsonPrinter;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
use Symplify\SmartFileSystem\SmartFileSystem;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Processor\ComposerProcessorTest
|
||||
*/
|
||||
final class ComposerProcessor
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private const COMPOSER_UPDATE = 'composer update';
|
||||
|
||||
/**
|
||||
* @var ComposerJsonFactory
|
||||
*/
|
||||
|
@ -28,79 +31,90 @@ final class ComposerProcessor
|
|||
*/
|
||||
private $composerJsonPrinter;
|
||||
|
||||
/**
|
||||
* @var ComposerModifier
|
||||
*/
|
||||
private $composerModifier;
|
||||
|
||||
/**
|
||||
* @var Configuration
|
||||
*/
|
||||
private $configuration;
|
||||
|
||||
/**
|
||||
* @var ErrorAndDiffCollector
|
||||
*/
|
||||
private $errorAndDiffCollector;
|
||||
|
||||
/**
|
||||
* @var SmartFileSystem
|
||||
*/
|
||||
private $smartFileSystem;
|
||||
|
||||
/**
|
||||
* @var ErrorAndDiffCollector
|
||||
* @var ComposerModifier
|
||||
*/
|
||||
private $errorAndDiffCollector;
|
||||
private $composerModifier;
|
||||
|
||||
public function __construct(
|
||||
ComposerJsonFactory $composerJsonFactory,
|
||||
ComposerJsonPrinter $composerJsonPrinter,
|
||||
ComposerModifier $composerModifier,
|
||||
Configuration $configuration,
|
||||
ErrorAndDiffCollector $errorAndDiffCollector,
|
||||
SmartFileSystem $smartFileSystem,
|
||||
ErrorAndDiffCollector $errorAndDiffCollector
|
||||
ComposerModifier $composerModifier
|
||||
) {
|
||||
$this->composerJsonFactory = $composerJsonFactory;
|
||||
$this->composerJsonPrinter = $composerJsonPrinter;
|
||||
$this->composerModifier = $composerModifier;
|
||||
$this->configuration = $configuration;
|
||||
$this->smartFileSystem = $smartFileSystem;
|
||||
$this->errorAndDiffCollector = $errorAndDiffCollector;
|
||||
$this->smartFileSystem = $smartFileSystem;
|
||||
$this->composerModifier = $composerModifier;
|
||||
}
|
||||
|
||||
public function process(): void
|
||||
public function process(string $composerJsonFilePath): void
|
||||
{
|
||||
$composerJsonFilePath = $this->composerModifier->getFilePath();
|
||||
if (! $this->smartFileSystem->exists($composerJsonFilePath)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// to avoid modification of file
|
||||
if (! $this->composerModifier->enabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$smartFileInfo = new SmartFileInfo($composerJsonFilePath);
|
||||
$composerJson = $this->composerJsonFactory->createFromFileInfo($smartFileInfo);
|
||||
|
||||
$oldContents = $smartFileInfo->getContents();
|
||||
$oldComposerJson = clone $composerJson;
|
||||
$this->composerModifier->modify($composerJson);
|
||||
$newContents = $this->composerJsonPrinter->printToString($composerJson);
|
||||
|
||||
// nothing has changed
|
||||
if ($oldContents === $newContents) {
|
||||
if ($oldComposerJson->getJsonArray() === $composerJson->getJsonArray()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->errorAndDiffCollector->addFileDiff($smartFileInfo, $newContents, $oldContents);
|
||||
$this->reportFileContentChange($smartFileInfo, $newContents);
|
||||
$this->addComposerJsonFileDiff($oldComposerJson, $composerJson, $smartFileInfo);
|
||||
$this->reportFileContentChange($composerJson, $smartFileInfo);
|
||||
}
|
||||
|
||||
private function reportFileContentChange(SmartFileInfo $smartFileInfo, string $newContent): void
|
||||
private function reportFileContentChange(ComposerJson $composerJson, SmartFileInfo $smartFileInfo): void
|
||||
{
|
||||
if ($this->configuration->isDryRun()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->smartFileSystem->dumpFile($smartFileInfo->getRealPath(), $newContent);
|
||||
$this->smartFileSystem->chmod($smartFileInfo->getRealPath(), $smartFileInfo->getPerms());
|
||||
$this->composerJsonPrinter->print($composerJson, $smartFileInfo);
|
||||
|
||||
$command = $this->composerModifier->getCommand();
|
||||
$process = new Process(explode(' ', $command), getcwd());
|
||||
$process = new Process(explode(' ', self::COMPOSER_UPDATE), getcwd());
|
||||
$process->run(function (string $type, string $message): void {
|
||||
// $type is always err https://github.com/composer/composer/issues/3795#issuecomment-76401013
|
||||
echo $message;
|
||||
});
|
||||
}
|
||||
|
||||
private function addComposerJsonFileDiff(
|
||||
ComposerJson $oldComposerJson,
|
||||
ComposerJson $newComposerJson,
|
||||
SmartFileInfo $smartFileInfo
|
||||
): void {
|
||||
$newContents = $this->composerJsonPrinter->printToString($newComposerJson);
|
||||
$oldContents = $this->composerJsonPrinter->printToString($oldComposerJson);
|
||||
$this->errorAndDiffCollector->addFileDiff($smartFileInfo, $newContents, $oldContents);
|
||||
}
|
||||
}
|
||||
|
|
67
rules/composer/src/Rector/AddPackageToRequireDevRector.php
Normal file
67
rules/composer/src/Rector/AddPackageToRequireDevRector.php
Normal file
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Rector;
|
||||
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Rector\AddPackageToRequireDevRector\AddPackageToRequireDevRectorTest
|
||||
*/
|
||||
final class AddPackageToRequireDevRector implements ComposerRectorInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGES_AND_VERSIONS = 'packages_and_version';
|
||||
|
||||
/**
|
||||
* @var PackageAndVersion[]
|
||||
*/
|
||||
private $packageAndVersions = [];
|
||||
|
||||
public function refactor(ComposerJson $composerJson): void
|
||||
{
|
||||
foreach ($this->packageAndVersions as $packageAndVersion) {
|
||||
$composerJson->addRequiredDevPackage(
|
||||
$packageAndVersion->getPackageName(),
|
||||
$packageAndVersion->getVersion()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Add package to "require-dev" in `composer.json`', [new ConfiguredCodeSample(
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
}
|
||||
CODE_SAMPLE
|
||||
,
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require-dev": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, [
|
||||
self::PACKAGES_AND_VERSIONS => [new PackageAndVersion('symfony/console', '^3.4')],
|
||||
]
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, PackageAndVersion[]> $configuration
|
||||
*/
|
||||
public function configure(array $configuration): void
|
||||
{
|
||||
$this->packageAndVersions = $configuration[self::PACKAGES_AND_VERSIONS] ?? [];
|
||||
}
|
||||
}
|
64
rules/composer/src/Rector/AddPackageToRequireRector.php
Normal file
64
rules/composer/src/Rector/AddPackageToRequireRector.php
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Rector;
|
||||
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Rector\AddPackageToRequireRector\AddPackageToRequireRectorTest
|
||||
*/
|
||||
final class AddPackageToRequireRector implements ComposerRectorInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGES_AND_VERSIONS = 'packages_and_versions';
|
||||
|
||||
/**
|
||||
* @var PackageAndVersion[]
|
||||
*/
|
||||
private $packagesAndVersions = [];
|
||||
|
||||
public function refactor(ComposerJson $composerJson): void
|
||||
{
|
||||
foreach ($this->packagesAndVersions as $packageAndVersion) {
|
||||
$composerJson->addRequiredPackage($packageAndVersion->getPackageName(), $packageAndVersion->getVersion());
|
||||
}
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Add package to "require" in `composer.json`', [new ConfiguredCodeSample(
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
}
|
||||
CODE_SAMPLE
|
||||
,
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, [
|
||||
self::PACKAGES_AND_VERSIONS => [new PackageAndVersion('symfony/console', '^3.4')],
|
||||
]
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, PackageAndVersion[]> $configuration
|
||||
*/
|
||||
public function configure(array $configuration): void
|
||||
{
|
||||
$this->packagesAndVersions = $configuration[self::PACKAGES_AND_VERSIONS] ?? [];
|
||||
}
|
||||
}
|
70
rules/composer/src/Rector/ChangePackageVersionRector.php
Normal file
70
rules/composer/src/Rector/ChangePackageVersionRector.php
Normal file
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Rector;
|
||||
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Rector\ChangePackageVersionRector\ChangePackageVersionRectorTest
|
||||
*/
|
||||
final class ChangePackageVersionRector implements ComposerRectorInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGES_AND_VERSIONS = 'packages_and_versions';
|
||||
|
||||
/**
|
||||
* @var PackageAndVersion[]
|
||||
*/
|
||||
private $packagesAndVersions = [];
|
||||
|
||||
public function refactor(ComposerJson $composerJson): void
|
||||
{
|
||||
foreach ($this->packagesAndVersions as $packagesAndVersion) {
|
||||
$composerJson->changePackageVersion(
|
||||
$packagesAndVersion->getPackageName(),
|
||||
$packagesAndVersion->getVersion()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Change package version `composer.json`', [new ConfiguredCodeSample(
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require-dev": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
,
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require": {
|
||||
"symfony/console": "^4.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, [
|
||||
self::PACKAGES_AND_VERSIONS => [new PackageAndVersion('symfony/console', '^4.4')],
|
||||
]
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, PackageAndVersion[]> $configuration
|
||||
*/
|
||||
public function configure(array $configuration): void
|
||||
{
|
||||
$this->packagesAndVersions = $configuration[self::PACKAGES_AND_VERSIONS] ?? [];
|
||||
}
|
||||
}
|
66
rules/composer/src/Rector/MovePackageToRequireDevRector.php
Normal file
66
rules/composer/src/Rector/MovePackageToRequireDevRector.php
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Rector;
|
||||
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Rector\MovePackageToRequireDevRector\MovePackageToRequireDevRectorTest
|
||||
*/
|
||||
final class MovePackageToRequireDevRector implements ComposerRectorInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_NAMES = 'package_names';
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
private $packageNames = [];
|
||||
|
||||
public function refactor(ComposerJson $composerJson): void
|
||||
{
|
||||
foreach ($this->packageNames as $packageName) {
|
||||
$composerJson->movePackageToRequireDev($packageName);
|
||||
}
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Moves package from "require" to "require-dev" in `composer.json`', [new ConfiguredCodeSample(
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
,
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require-dev": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, [
|
||||
self::PACKAGE_NAMES => ['symfony/console'],
|
||||
]
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string[]> $configuration
|
||||
*/
|
||||
public function configure(array $configuration): void
|
||||
{
|
||||
$this->packageNames = $configuration[self::PACKAGE_NAMES] ?? [];
|
||||
}
|
||||
}
|
66
rules/composer/src/Rector/MovePackageToRequireRector.php
Normal file
66
rules/composer/src/Rector/MovePackageToRequireRector.php
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Rector;
|
||||
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Rector\MovePackageToRequireRector\MovePackageToRequireRectorTest
|
||||
*/
|
||||
final class MovePackageToRequireRector implements ComposerRectorInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_NAMES = 'package_names';
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
private $packageNames = [];
|
||||
|
||||
public function refactor(ComposerJson $composerJson): void
|
||||
{
|
||||
foreach ($this->packageNames as $packageName) {
|
||||
$composerJson->movePackageToRequire($packageName);
|
||||
}
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Moves package from "require-dev" to "require" in `composer.json`', [new ConfiguredCodeSample(
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require-dev": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
,
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, [
|
||||
self::PACKAGE_NAMES => ['symfony/console'],
|
||||
]
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string[]> $configuration
|
||||
*/
|
||||
public function configure(array $configuration): void
|
||||
{
|
||||
$this->packageNames = $configuration[self::PACKAGE_NAMES] ?? [];
|
||||
}
|
||||
}
|
63
rules/composer/src/Rector/RemovePackageRector.php
Normal file
63
rules/composer/src/Rector/RemovePackageRector.php
Normal file
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Rector;
|
||||
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Rector\RemovePackageRector\RemovePackageRectorTest
|
||||
*/
|
||||
final class RemovePackageRector implements ComposerRectorInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_NAMES = 'package_names';
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
private $packageNames = [];
|
||||
|
||||
public function refactor(ComposerJson $composerJson): void
|
||||
{
|
||||
foreach ($this->packageNames as $packageName) {
|
||||
$composerJson->removePackage($packageName);
|
||||
}
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Remove package from "require" and "require-dev" in `composer.json`', [new ConfiguredCodeSample(
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
,
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, [
|
||||
self::PACKAGE_NAMES => ['symfony/console'],
|
||||
]
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string[]> $configuration
|
||||
*/
|
||||
public function configure(array $configuration): void
|
||||
{
|
||||
$this->packageNames = $configuration[self::PACKAGE_NAMES] ?? [];
|
||||
}
|
||||
}
|
75
rules/composer/src/Rector/ReplacePackageAndVersionRector.php
Normal file
75
rules/composer/src/Rector/ReplacePackageAndVersionRector.php
Normal file
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Rector;
|
||||
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
use Rector\Composer\ValueObject\ReplacePackageAndVersion;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\Rector\ReplacePackageAndVersionRector\ReplacePackageAndVersionRectorTest
|
||||
*/
|
||||
final class ReplacePackageAndVersionRector implements ComposerRectorInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public const REPLACE_PACKAGES_AND_VERSIONS = 'replace_packages_and_versions';
|
||||
|
||||
/**
|
||||
* @var ReplacePackageAndVersion[]
|
||||
*/
|
||||
private $replacePackagesAndVersions = [];
|
||||
|
||||
public function refactor(ComposerJson $composerJson): void
|
||||
{
|
||||
foreach ($this->replacePackagesAndVersions as $replacePackagesAndVersion) {
|
||||
$composerJson->replacePackage(
|
||||
$replacePackagesAndVersion->getOldPackageName(),
|
||||
$replacePackagesAndVersion->getNewPackageName(),
|
||||
$replacePackagesAndVersion->getTargetVersion()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function getRuleDefinition(): RuleDefinition
|
||||
{
|
||||
return new RuleDefinition('Change package name and version `composer.json`', [new ConfiguredCodeSample(
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require-dev": {
|
||||
"symfony/console": "^3.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
,
|
||||
<<<'CODE_SAMPLE'
|
||||
{
|
||||
"require-dev": {
|
||||
"symfony/http-kernel": "^4.4"
|
||||
}
|
||||
}
|
||||
CODE_SAMPLE
|
||||
, [
|
||||
self::REPLACE_PACKAGES_AND_VERSIONS => [new ReplacePackageAndVersion(
|
||||
'symfony/console',
|
||||
'symfony/http-kernel',
|
||||
'^4.4'
|
||||
)],
|
||||
]
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, ReplacePackageAndVersion[]> $configuration
|
||||
*/
|
||||
public function configure(array $configuration): void
|
||||
{
|
||||
$this->replacePackagesAndVersions = $configuration[self::REPLACE_PACKAGES_AND_VERSIONS] ?? [];
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject\ComposerModifier;
|
||||
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
/**
|
||||
* Only adds package to require section, if package is already in composer data, nothing happen
|
||||
* @see \Rector\Composer\Tests\ValueObject\ComposerModifier\AddPackageToRequireTest
|
||||
*/
|
||||
final class AddPackageToRequire implements ComposerModifierInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $packageName;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $version;
|
||||
|
||||
public function __construct(string $packageName, string $version)
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
public function modify(ComposerJson $composerJson): void
|
||||
{
|
||||
$composerJson->addRequiredPackage($this->packageName, $this->version);
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject\ComposerModifier;
|
||||
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
/**
|
||||
* Only adds package to require-dev section, if package is already in composer data, nothing happen
|
||||
* @see \Rector\Composer\Tests\ValueObject\ComposerModifier\AddPackageToRequireDevTest
|
||||
*/
|
||||
final class AddPackageToRequireDev implements ComposerModifierInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $packageName;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $version;
|
||||
|
||||
public function __construct(string $packageName, string $version)
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
public function modify(ComposerJson $composerJson): void
|
||||
{
|
||||
$composerJson->addRequiredDevPackage($this->packageName, $this->version);
|
||||
}
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject\ComposerModifier;
|
||||
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
/**
|
||||
* @see \Rector\Composer\Tests\ValueObject\ComposerModifier\ChangePackageVersionTest
|
||||
*/
|
||||
final class ChangePackageVersion implements ComposerModifierInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $packageName;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $targetVersion;
|
||||
|
||||
public function __construct(string $packageName, string $targetVersion)
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
$this->targetVersion = $targetVersion;
|
||||
}
|
||||
|
||||
public function modify(ComposerJson $composerJson): void
|
||||
{
|
||||
$composerJson->changePackageVersion($this->packageName, $this->targetVersion);
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject\ComposerModifier;
|
||||
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
/**
|
||||
* Moves package to require section, if package is not in composer data, nothing happen, also if package is already in require section
|
||||
* @see \Rector\Composer\Tests\ValueObject\ComposerModifier\MovePackageToRequireTest
|
||||
*/
|
||||
final class MovePackageToRequire implements ComposerModifierInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $packageName;
|
||||
|
||||
public function __construct(string $packageName)
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
}
|
||||
|
||||
public function modify(ComposerJson $composerJson): void
|
||||
{
|
||||
$composerJson->movePackageToRequire($this->packageName);
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject\ComposerModifier;
|
||||
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
/**
|
||||
* Moves package to require-dev section, if package is not in composer data, nothing happen, also if package is already in require-dev section
|
||||
* @see \Rector\Composer\Tests\ValueObject\ComposerModifier\MovePackageToRequireDevTest
|
||||
*/
|
||||
final class MovePackageToRequireDev implements ComposerModifierInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $packageName;
|
||||
|
||||
public function __construct(string $packageName)
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
}
|
||||
|
||||
public function modify(ComposerJson $composerJson): void
|
||||
{
|
||||
$composerJson->movePackageToRequireDev($this->packageName);
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject\ComposerModifier;
|
||||
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
/**
|
||||
* Removes package from composer data
|
||||
* @see \Rector\Composer\Tests\ValueObject\ComposerModifier\RemovePackageTest
|
||||
*/
|
||||
final class RemovePackage implements ComposerModifierInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $packageName;
|
||||
|
||||
public function __construct(string $packageName)
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
}
|
||||
|
||||
public function modify(ComposerJson $composerJson): void
|
||||
{
|
||||
$composerJson->removePackage($this->packageName);
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject\ComposerModifier;
|
||||
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Webmozart\Assert\Assert;
|
||||
|
||||
/**
|
||||
* Replace one package for another
|
||||
* @see \Rector\Composer\Tests\ValueObject\ComposerModifier\ReplacePackageTest
|
||||
*/
|
||||
final class ReplacePackage implements ComposerModifierInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $oldPackageName;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $newPackageName;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $targetVersion;
|
||||
|
||||
public function __construct(string $oldPackageName, string $newPackageName, string $targetVersion)
|
||||
{
|
||||
Assert::notSame(
|
||||
$oldPackageName,
|
||||
$newPackageName,
|
||||
'$oldPackageName cannot be the same as $newPackageName. If you want to change version of package, use ' . ChangePackageVersion::class
|
||||
);
|
||||
|
||||
$this->oldPackageName = $oldPackageName;
|
||||
$this->newPackageName = $newPackageName;
|
||||
$this->targetVersion = $targetVersion;
|
||||
}
|
||||
|
||||
public function modify(ComposerJson $composerJson): void
|
||||
{
|
||||
$composerJson->replacePackage($this->oldPackageName, $this->newPackageName, $this->targetVersion);
|
||||
}
|
||||
}
|
34
rules/composer/src/ValueObject/PackageAndVersion.php
Normal file
34
rules/composer/src/ValueObject/PackageAndVersion.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject;
|
||||
|
||||
final class PackageAndVersion
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $packageName;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $version;
|
||||
|
||||
public function __construct(string $packageName, string $version)
|
||||
{
|
||||
$this->packageName = $packageName;
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
public function getPackageName(): string
|
||||
{
|
||||
return $this->packageName;
|
||||
}
|
||||
|
||||
public function getVersion(): string
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
}
|
54
rules/composer/src/ValueObject/ReplacePackageAndVersion.php
Normal file
54
rules/composer/src/ValueObject/ReplacePackageAndVersion.php
Normal file
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\ValueObject;
|
||||
|
||||
use Rector\Composer\Rector\ChangePackageVersionRector;
|
||||
use Webmozart\Assert\Assert;
|
||||
|
||||
final class ReplacePackageAndVersion
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $oldPackageName;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $newPackageName;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $targetVersion;
|
||||
|
||||
public function __construct(string $oldPackageName, string $newPackageName, string $targetVersion)
|
||||
{
|
||||
Assert::notSame(
|
||||
$oldPackageName,
|
||||
$newPackageName,
|
||||
'Old and new package have to be different. If you want to only change package version, use ' . ChangePackageVersionRector::class
|
||||
);
|
||||
|
||||
$this->oldPackageName = $oldPackageName;
|
||||
$this->newPackageName = $newPackageName;
|
||||
$this->targetVersion = $targetVersion;
|
||||
}
|
||||
|
||||
public function getOldPackageName(): string
|
||||
{
|
||||
return $this->oldPackageName;
|
||||
}
|
||||
|
||||
public function getNewPackageName(): string
|
||||
{
|
||||
return $this->newPackageName;
|
||||
}
|
||||
|
||||
public function getTargetVersion(): string
|
||||
{
|
||||
return $this->targetVersion;
|
||||
}
|
||||
}
|
10
rules/composer/tests/Contract/ConfigFileAwareInterface.php
Normal file
10
rules/composer/tests/Contract/ConfigFileAwareInterface.php
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Contract;
|
||||
|
||||
interface ConfigFileAwareInterface
|
||||
{
|
||||
public function provideConfigFile(): string;
|
||||
}
|
|
@ -1,254 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Modifier;
|
||||
|
||||
use Rector\Composer\Modifier\ComposerModifier;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\AddPackageToRequire;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\ChangePackageVersion;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\MovePackageToRequireDev;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\RemovePackage;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\ReplacePackage;
|
||||
use Rector\Core\HttpKernel\RectorKernel;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
use Symplify\PackageBuilder\Testing\AbstractKernelTestCase;
|
||||
|
||||
final class ComposerModifierTest extends AbstractKernelTestCase
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->bootKernelWithConfigs(RectorKernel::class, []);
|
||||
}
|
||||
|
||||
public function testRefactorWithOneAddedPackage(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$composerModifier->configure([new AddPackageToRequire('vendor1/package3', '^3.0')]);
|
||||
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
$composerModifier->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRefactorWithOneAddedAndOneRemovedPackage(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$composerModifier->configure([
|
||||
new AddPackageToRequire('vendor1/package3', '^3.0'),
|
||||
new RemovePackage('vendor1/package1'),
|
||||
]);
|
||||
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package2' => '^2.0',
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
$composerModifier->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRefactorWithAddedAndRemovedSamePackage(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$composerModifier->configure([
|
||||
new AddPackageToRequire('vendor1/package3', '^3.0'),
|
||||
new RemovePackage('vendor1/package3'),
|
||||
]);
|
||||
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
$composerModifier->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRefactorWithRemovedAndAddedBackSamePackage(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$composerModifier->configure([
|
||||
new RemovePackage('vendor1/package3'),
|
||||
new AddPackageToRequire('vendor1/package3', '^3.0'),
|
||||
]);
|
||||
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
$composerModifier->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRefactorWithMovedAndChangedPackages(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$composerModifier->configure([
|
||||
new MovePackageToRequireDev('vendor1/package1'),
|
||||
new ReplacePackage('vendor1/package2', 'vendor2/package1', '^3.0'),
|
||||
new ChangePackageVersion('vendor1/package3', '~3.0.0'),
|
||||
]);
|
||||
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package3' => '~3.0.0',
|
||||
'vendor2/package1' => '^3.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerModifier->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRefactorWithMultipleConfiguration(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$composerModifier->configure([new MovePackageToRequireDev('vendor1/package1')]);
|
||||
$composerModifier->configure([new ReplacePackage('vendor1/package2', 'vendor2/package1', '^3.0')]);
|
||||
$composerModifier->configure([new ChangePackageVersion('vendor1/package3', '~3.0.0')]);
|
||||
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package3' => '~3.0.0',
|
||||
'vendor2/package1' => '^3.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerModifier->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRefactorWithConfigurationAndReconfigurationAndConfiguration(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$composerModifier->configure([new MovePackageToRequireDev('vendor1/package1')]);
|
||||
$composerModifier->reconfigure([new ReplacePackage('vendor1/package2', 'vendor2/package1', '^3.0')]);
|
||||
$composerModifier->configure([new ChangePackageVersion('vendor1/package3', '~3.0.0')]);
|
||||
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package3' => '~3.0.0',
|
||||
'vendor2/package1' => '^3.0',
|
||||
]);
|
||||
$composerModifier->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRefactorWithMovedAndChangedPackagesWithSortPackages(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$composerModifier->configure([
|
||||
new MovePackageToRequireDev('vendor1/package1'),
|
||||
new ReplacePackage('vendor1/package2', 'vendor1/package0', '^3.0'),
|
||||
new ChangePackageVersion('vendor1/package3', '~3.0.0'),
|
||||
]);
|
||||
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setConfig([
|
||||
'sort-packages' => true,
|
||||
]);
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setConfig([
|
||||
'sort-packages' => true,
|
||||
]);
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package0' => '^3.0',
|
||||
'vendor1/package3' => '~3.0.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerModifier->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testFilePath(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$this->assertSame(getcwd() . '/composer.json', $composerModifier->getFilePath());
|
||||
|
||||
$composerModifier->setFilePath('test/composer.json');
|
||||
$this->assertSame('test/composer.json', $composerModifier->getFilePath());
|
||||
}
|
||||
|
||||
public function testCommand(): void
|
||||
{
|
||||
/** @var ComposerModifier $composerModifier */
|
||||
$composerModifier = $this->getService(ComposerModifier::class);
|
||||
$this->assertSame('composer update', $composerModifier->getCommand());
|
||||
|
||||
$composerModifier->setCommand('composer update --prefer-stable');
|
||||
$this->assertSame('composer update --prefer-stable', $composerModifier->getCommand());
|
||||
}
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Processor;
|
||||
|
||||
use Rector\Composer\Processor\ComposerProcessor;
|
||||
use Rector\Core\HttpKernel\RectorKernel;
|
||||
use Symplify\PackageBuilder\Testing\AbstractKernelTestCase;
|
||||
|
||||
final class ComposerProcessorTest extends AbstractKernelTestCase
|
||||
{
|
||||
/**
|
||||
* @var ComposerProcessor
|
||||
*/
|
||||
private $composerProcessor;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->bootKernelWithConfigs(RectorKernel::class, [__DIR__ . '/config/configured_composer_processor.php']);
|
||||
$this->composerProcessor = $this->getService(ComposerProcessor::class);
|
||||
}
|
||||
|
||||
public function test(): void
|
||||
{
|
||||
$this->composerProcessor->process();
|
||||
$this->assertFileEquals(
|
||||
__DIR__ . '/Fixture/composer_after.json',
|
||||
__DIR__ . '/Fixture/composer_before.json'
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"require": {
|
||||
"nette/nette": "^3.0"
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"require": {
|
||||
"nette/nette": "^3.0"
|
||||
}
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Modifier\ComposerModifier;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\ChangePackageVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(ComposerModifier::class)
|
||||
->call('setFilePath', [__DIR__ . '/../Fixture/composer_before.json'])
|
||||
->call('configure', [ValueObjectInliner::inline([new ChangePackageVersion('nette/nette', '^3.0')])]);
|
||||
};
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector;
|
||||
|
||||
use Nette\Utils\Json;
|
||||
use Rector\Composer\Modifier\ComposerModifier;
|
||||
use Rector\Composer\Tests\Contract\ConfigFileAwareInterface;
|
||||
use Rector\Core\HttpKernel\RectorKernel;
|
||||
use Rector\Testing\Guard\FixtureGuard;
|
||||
use Symplify\ComposerJsonManipulator\ComposerJsonFactory;
|
||||
use Symplify\EasyTesting\StaticFixtureSplitter;
|
||||
use Symplify\PackageBuilder\Testing\AbstractKernelTestCase;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
abstract class AbstractComposerRectorTestCase extends AbstractKernelTestCase implements ConfigFileAwareInterface
|
||||
{
|
||||
/**
|
||||
* @var FixtureGuard
|
||||
*/
|
||||
private $fixtureGuard;
|
||||
|
||||
/**
|
||||
* @var ComposerJsonFactory
|
||||
*/
|
||||
private $composerJsonFactory;
|
||||
|
||||
/**
|
||||
* @var ComposerModifier
|
||||
*/
|
||||
private $composerModifier;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->bootKernelWithConfigs(RectorKernel::class, [$this->provideConfigFile()]);
|
||||
|
||||
$this->fixtureGuard = $this->getService(FixtureGuard::class);
|
||||
$this->composerModifier = $this->getService(ComposerModifier::class);
|
||||
$this->composerJsonFactory = $this->getService(ComposerJsonFactory::class);
|
||||
}
|
||||
|
||||
protected function doTestFileInfo(SmartFileInfo $smartFileInfo): void
|
||||
{
|
||||
$this->fixtureGuard->ensureFileInfoHasDifferentBeforeAndAfterContent($smartFileInfo);
|
||||
|
||||
$inputFileInfoAndExpected = StaticFixtureSplitter::splitFileInfoToLocalInputAndExpected($smartFileInfo);
|
||||
|
||||
$composerJson = $this->composerJsonFactory->createFromFileInfo($inputFileInfoAndExpected->getInputFileInfo());
|
||||
$this->composerModifier->modify($composerJson);
|
||||
|
||||
$changedComposerJson = Json::encode($composerJson->getJsonArray(), Json::PRETTY);
|
||||
$this->assertJsonStringEqualsJsonString($inputFileInfoAndExpected->getExpected(), $changedComposerJson);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector\AddPackageToRequireDevRector;
|
||||
|
||||
use Iterator;
|
||||
use Rector\Composer\Tests\Rector\AbstractComposerRectorTestCase;
|
||||
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
final class AddPackageToRequireDevRectorTest extends AbstractComposerRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData()
|
||||
*/
|
||||
public function test(SmartFileInfo $fileInfo): void
|
||||
{
|
||||
$this->doTestFileInfo($fileInfo);
|
||||
}
|
||||
|
||||
public function provideData(): Iterator
|
||||
{
|
||||
return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.json');
|
||||
}
|
||||
|
||||
public function provideConfigFile(): string
|
||||
{
|
||||
return __DIR__ . '/config/some_config.php';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package2": "^2.0"
|
||||
}
|
||||
}
|
||||
-----
|
||||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package2": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"vendor1/package3": "^3.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"vendor1/package2": "^2.0",
|
||||
"vendor1/package3": "^3.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package2": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"vendor1/package3": "^3.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\AddPackageToRequireDevRector;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(AddPackageToRequireDevRector::class)
|
||||
->call('configure', [[
|
||||
AddPackageToRequireDevRector::PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new PackageAndVersion('vendor1/package3', '^3.0'),
|
||||
new PackageAndVersion('vendor1/package1', '^3.0'),
|
||||
new PackageAndVersion('vendor1/package2', '^3.0'),
|
||||
]),
|
||||
]]);
|
||||
};
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector\AddPackageToRequireRector;
|
||||
|
||||
use Iterator;
|
||||
use Rector\Composer\Tests\Rector\AbstractComposerRectorTestCase;
|
||||
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
final class AddPackageToRequireRectorTest extends AbstractComposerRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData()
|
||||
*/
|
||||
public function test(SmartFileInfo $fileInfo): void
|
||||
{
|
||||
$this->doTestFileInfo($fileInfo);
|
||||
}
|
||||
|
||||
public function provideData(): Iterator
|
||||
{
|
||||
return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.json');
|
||||
}
|
||||
|
||||
public function provideConfigFile(): string
|
||||
{
|
||||
return __DIR__ . '/config/some_config.php';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"require-dev": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package2": "^2.0"
|
||||
}
|
||||
}
|
||||
-----
|
||||
{
|
||||
"require": {
|
||||
"vendor1/package3": "^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package2": "^2.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\AddPackageToRequireRector;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(AddPackageToRequireRector::class)
|
||||
->call('configure', [[
|
||||
AddPackageToRequireRector::PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new PackageAndVersion('vendor1/package3', '^3.0'),
|
||||
]),
|
||||
]]);
|
||||
};
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector\ChangePackageVersionRector;
|
||||
|
||||
use Iterator;
|
||||
use Rector\Composer\Tests\Rector\AbstractComposerRectorTestCase;
|
||||
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
final class ChangePackageVersionRectorTest extends AbstractComposerRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData()
|
||||
*/
|
||||
public function test(SmartFileInfo $fileInfo): void
|
||||
{
|
||||
$this->doTestFileInfo($fileInfo);
|
||||
}
|
||||
|
||||
public function provideData(): Iterator
|
||||
{
|
||||
return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.json');
|
||||
}
|
||||
|
||||
public function provideConfigFile(): string
|
||||
{
|
||||
return __DIR__ . '/config/some_config.php';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"require-dev": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package3": "^2.0"
|
||||
}
|
||||
}
|
||||
-----
|
||||
{
|
||||
"require-dev": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package3": "^15.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\ChangePackageVersionRector;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(ChangePackageVersionRector::class)
|
||||
->call('configure', [[
|
||||
ChangePackageVersionRector::PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new PackageAndVersion('vendor1/package3', '^15.0'),
|
||||
]),
|
||||
]]);
|
||||
};
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector\CombinationComposerRector;
|
||||
|
||||
use Iterator;
|
||||
use Rector\Composer\Tests\Rector\AbstractComposerRectorTestCase;
|
||||
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
final class CombinationComposerRectorTest extends AbstractComposerRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData()
|
||||
*/
|
||||
public function test(SmartFileInfo $fileInfo): void
|
||||
{
|
||||
$this->doTestFileInfo($fileInfo);
|
||||
}
|
||||
|
||||
public function provideData(): Iterator
|
||||
{
|
||||
return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.json');
|
||||
}
|
||||
|
||||
public function provideConfigFile(): string
|
||||
{
|
||||
return __DIR__ . '/config/some_config.php';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package2": "^2.0",
|
||||
"vendor1/package3": "^3.0"
|
||||
}
|
||||
}
|
||||
-----
|
||||
{
|
||||
"require": {
|
||||
"vendor1/package3": "~3.0.0",
|
||||
"vendor2/package1": "^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"vendor1/package1": "^1.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\ChangePackageVersionRector;
|
||||
use Rector\Composer\Rector\MovePackageToRequireDevRector;
|
||||
use Rector\Composer\Rector\ReplacePackageAndVersionRector;
|
||||
use Rector\Composer\ValueObject\PackageAndVersion;
|
||||
use Rector\Composer\ValueObject\ReplacePackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(MovePackageToRequireDevRector::class)
|
||||
->call('configure', [[
|
||||
MovePackageToRequireDevRector::PACKAGE_NAMES => ['vendor1/package1'],
|
||||
]]);
|
||||
|
||||
$services->set(ReplacePackageAndVersionRector::class)
|
||||
->call('configure', [[
|
||||
ReplacePackageAndVersionRector::REPLACE_PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new ReplacePackageAndVersion('vendor1/package2', 'vendor2/package1', '^3.0'),
|
||||
]),
|
||||
]]);
|
||||
|
||||
$services->set(ChangePackageVersionRector::class)
|
||||
->call('configure', [[
|
||||
ChangePackageVersionRector::PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new PackageAndVersion('vendor1/package3', '~3.0.0'),
|
||||
]),
|
||||
]]);
|
||||
};
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package3": "^300.0"
|
||||
}
|
||||
}
|
||||
-----
|
||||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"vendor1/package3": "^300.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector\MovePackageToRequireDevRector;
|
||||
|
||||
use Iterator;
|
||||
use Rector\Composer\Tests\Rector\AbstractComposerRectorTestCase;
|
||||
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
final class MovePackageToRequireDevRectorTest extends AbstractComposerRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData()
|
||||
*/
|
||||
public function test(SmartFileInfo $fileInfo): void
|
||||
{
|
||||
$this->doTestFileInfo($fileInfo);
|
||||
}
|
||||
|
||||
public function provideData(): Iterator
|
||||
{
|
||||
return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.json');
|
||||
}
|
||||
|
||||
public function provideConfigFile(): string
|
||||
{
|
||||
return __DIR__ . '/config/some_config.php';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\MovePackageToRequireDevRector;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(MovePackageToRequireDevRector::class)
|
||||
->call('configure', [[
|
||||
MovePackageToRequireDevRector::PACKAGE_NAMES => ['vendor1/package3'],
|
||||
]]);
|
||||
};
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"require-dev": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package3": "^300.0"
|
||||
}
|
||||
}
|
||||
-----
|
||||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"vendor1/package3": "^300.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector\MovePackageToRequireRector;
|
||||
|
||||
use Iterator;
|
||||
use Rector\Composer\Tests\Rector\AbstractComposerRectorTestCase;
|
||||
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
final class MovePackageToRequireRectorTest extends AbstractComposerRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData()
|
||||
*/
|
||||
public function test(SmartFileInfo $fileInfo): void
|
||||
{
|
||||
$this->doTestFileInfo($fileInfo);
|
||||
}
|
||||
|
||||
public function provideData(): Iterator
|
||||
{
|
||||
return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.json');
|
||||
}
|
||||
|
||||
public function provideConfigFile(): string
|
||||
{
|
||||
return __DIR__ . '/config/some_config.php';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\MovePackageToRequireRector;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(MovePackageToRequireRector::class)
|
||||
->call('configure', [[
|
||||
MovePackageToRequireRector::PACKAGE_NAMES => ['vendor1/package1'],
|
||||
]]);
|
||||
};
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0",
|
||||
"vendor1/package2": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"vendor1/package3": "^3.0"
|
||||
}
|
||||
}
|
||||
-----
|
||||
[]
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector\RemovePackageRector;
|
||||
|
||||
use Iterator;
|
||||
use Rector\Composer\Tests\Rector\AbstractComposerRectorTestCase;
|
||||
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
final class RemovePackageRectorTest extends AbstractComposerRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData()
|
||||
*/
|
||||
public function test(SmartFileInfo $fileInfo): void
|
||||
{
|
||||
$this->doTestFileInfo($fileInfo);
|
||||
}
|
||||
|
||||
public function provideData(): Iterator
|
||||
{
|
||||
return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.json');
|
||||
}
|
||||
|
||||
public function provideConfigFile(): string
|
||||
{
|
||||
return __DIR__ . '/config/some_config.php';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\RemovePackageRector;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(RemovePackageRector::class)
|
||||
->call('configure', [[
|
||||
RemovePackageRector::PACKAGE_NAMES => ['vendor1/package3', 'vendor1/package1', 'vendor1/package2'],
|
||||
]]);
|
||||
};
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"require": {
|
||||
"vendor1/package1": "^1.0"
|
||||
}
|
||||
}
|
||||
-----
|
||||
{
|
||||
"require": {
|
||||
"vendor1/package3": "^4.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\Rector\ReplacePackageAndVersionRector;
|
||||
|
||||
use Iterator;
|
||||
use Rector\Composer\Tests\Rector\AbstractComposerRectorTestCase;
|
||||
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
|
||||
use Symplify\SmartFileSystem\SmartFileInfo;
|
||||
|
||||
final class ReplacePackageAndVersionRectorTest extends AbstractComposerRectorTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData()
|
||||
*/
|
||||
public function test(SmartFileInfo $fileInfo): void
|
||||
{
|
||||
$this->doTestFileInfo($fileInfo);
|
||||
}
|
||||
|
||||
public function provideData(): Iterator
|
||||
{
|
||||
return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.json');
|
||||
}
|
||||
|
||||
public function provideConfigFile(): string
|
||||
{
|
||||
return __DIR__ . '/config/some_config.php';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Composer\Rector\ReplacePackageAndVersionRector;
|
||||
use Rector\Composer\ValueObject\ReplacePackageAndVersion;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
|
||||
|
||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||
$services = $containerConfigurator->services();
|
||||
|
||||
$services->set(ReplacePackageAndVersionRector::class)
|
||||
->call('configure', [[
|
||||
ReplacePackageAndVersionRector::REPLACE_PACKAGES_AND_VERSIONS => ValueObjectInliner::inline([
|
||||
new ReplacePackageAndVersion('vendor1/package1', 'vendor1/package3', '^4.0'),
|
||||
]),
|
||||
]]);
|
||||
};
|
|
@ -1,79 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\ValueObject\ComposerModifier;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\AddPackageToRequireDev;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
final class AddPackageToRequireDevTest extends TestCase
|
||||
{
|
||||
public function testAddNonExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
|
||||
$addPackageToRequireDev = new AddPackageToRequireDev('vendor1/package3', '^3.0');
|
||||
$addPackageToRequireDev->modify($composerJson);
|
||||
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testAddExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$addPackageToRequireDev = new AddPackageToRequireDev('vendor1/package1', '^3.0');
|
||||
$addPackageToRequireDev->modify($composerJson);
|
||||
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $expectedComposerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testAddExistingDevPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$addPackageToRequireDev = new AddPackageToRequireDev('vendor1/package2', '^3.0');
|
||||
$addPackageToRequireDev->modify($composerJson);
|
||||
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\ValueObject\ComposerModifier;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\AddPackageToRequire;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
final class AddPackageToRequireTest extends TestCase
|
||||
{
|
||||
public function testAddNonExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
|
||||
$addPackageToRequire = new AddPackageToRequire('vendor1/package3', '^3.0');
|
||||
$addPackageToRequire->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testAddExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$addPackageToRequire = new AddPackageToRequire('vendor1/package1', '^3.0');
|
||||
$addPackageToRequire->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testAddExistingDevPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$addPackageToRequire = new AddPackageToRequire('vendor1/package2', '^3.0');
|
||||
$addPackageToRequire->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\ValueObject\ComposerModifier;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\ChangePackageVersion;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
final class ChangePackageVersionTest extends TestCase
|
||||
{
|
||||
public function testChangeVersionNonExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$changePackageVersion = new ChangePackageVersion('vendor1/package3', '^3.0');
|
||||
$changePackageVersion->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testChangeVersionExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^3.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$changePackageVersion = new ChangePackageVersion('vendor1/package1', '^3.0');
|
||||
$changePackageVersion->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testChangeVersionExistingDevPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package2' => '^3.0',
|
||||
]);
|
||||
|
||||
$changePackageVersion = new ChangePackageVersion('vendor1/package2', '^3.0');
|
||||
$changePackageVersion->modify($composerJson);
|
||||
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\ValueObject\ComposerModifier;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\MovePackageToRequireDev;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
final class MovePackageToRequireDevTest extends TestCase
|
||||
{
|
||||
public function testMoveNonExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$movePackageToRequireDev = new MovePackageToRequireDev('vendor1/package3');
|
||||
$movePackageToRequireDev->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testMoveExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
|
||||
$movePackageToRequireDev = new MovePackageToRequireDev('vendor1/package1');
|
||||
$movePackageToRequireDev->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testMoveExistingDevPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$movePackageToRequireDev = new MovePackageToRequireDev('vendor1/package2');
|
||||
$movePackageToRequireDev->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\ValueObject\ComposerModifier;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\MovePackageToRequire;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
final class MovePackageToRequireTest extends TestCase
|
||||
{
|
||||
public function testMoveNonExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$movePackageToRequire = new MovePackageToRequire('vendor1/package3');
|
||||
$movePackageToRequire->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testMoveExistingDevPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequireDev([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$movePackageToRequire = new MovePackageToRequire('vendor1/package1');
|
||||
$movePackageToRequire->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testMoveExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$movePackageToRequire = new MovePackageToRequire('vendor1/package1');
|
||||
$movePackageToRequire->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\ValueObject\ComposerModifier;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\RemovePackage;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
final class RemovePackageTest extends TestCase
|
||||
{
|
||||
public function testRemoveNonExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$removePackage = new RemovePackage('vendor1/package3');
|
||||
$removePackage->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRemoveExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$removePackage = new RemovePackage('vendor1/package1');
|
||||
$removePackage->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testRemoveExistingDevPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
|
||||
$removePackage = new RemovePackage('vendor1/package2');
|
||||
$removePackage->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Composer\Tests\ValueObject\ComposerModifier;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Rector\Composer\ValueObject\ComposerModifier\ReplacePackage;
|
||||
use Symplify\ComposerJsonManipulator\ValueObject\ComposerJson;
|
||||
|
||||
final class ReplacePackageTest extends TestCase
|
||||
{
|
||||
public function testReplaceNonExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$replacePackage = new ReplacePackage('vendor1/package3', 'vendor1/package4', '^3.0');
|
||||
$replacePackage->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testReplaceExistingPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package3' => '^3.0',
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$replacePackage = new ReplacePackage('vendor1/package1', 'vendor1/package3', '^3.0');
|
||||
$replacePackage->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
|
||||
public function testReplaceExistingDevPackage(): void
|
||||
{
|
||||
$composerJson = new ComposerJson();
|
||||
$composerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$composerJson->setRequireDev([
|
||||
'vendor1/package2' => '^2.0',
|
||||
]);
|
||||
|
||||
$expectedComposerJson = new ComposerJson();
|
||||
$expectedComposerJson->setRequire([
|
||||
'vendor1/package1' => '^1.0',
|
||||
]);
|
||||
$expectedComposerJson->setRequireDev([
|
||||
'vendor1/package3' => '^3.0',
|
||||
]);
|
||||
|
||||
$replacePackage = new ReplacePackage('vendor1/package2', 'vendor1/package3', '^3.0');
|
||||
$replacePackage->modify($composerJson);
|
||||
$this->assertSame($expectedComposerJson->getJsonArray(), $composerJson->getJsonArray());
|
||||
}
|
||||
}
|
|
@ -4,8 +4,8 @@ declare(strict_types=1);
|
|||
|
||||
namespace Rector\DeadCode\Tests\Rector\Property\RemoveUnusedPrivatePropertyRector\Fixture;
|
||||
|
||||
use Rector\Composer\Modifier\ComposerModifier;
|
||||
use Rector\Composer\Contract\ComposerModifier\ComposerModifierInterface;
|
||||
use Rector\Composer\Rector\ComposerModifier;
|
||||
use Rector\Composer\Contract\Rector\ComposerRectorInterface;
|
||||
|
||||
final class SkipUsedUnderIsset
|
||||
{
|
||||
|
@ -36,4 +36,4 @@ final class SkipUsedUnderIsset
|
|||
|
||||
return $composerData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ namespace Rector\Privatization\Rector\Class_;
|
|||
use Nette\Utils\Strings;
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\ClassConstFetch;
|
||||
use PhpParser\Node\Name;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
use PhpParser\Node\Stmt\ClassConst;
|
||||
|
@ -16,7 +15,6 @@ use Rector\Core\PhpParser\Node\Manipulator\ClassInsertManipulator;
|
|||
use Rector\Core\Rector\AbstractRector;
|
||||
use Rector\Core\Util\StaticRectorStrings;
|
||||
use Rector\NodeNestingScope\NodeFinder\ScopeAwareNodeFinder;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
||||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
||||
|
||||
|
|
|
@ -222,7 +222,8 @@ final class ProcessCommand extends AbstractCommand
|
|||
|
||||
$this->nonPhpFileProcessor->runOnFileInfos($nonPhpFileInfos);
|
||||
|
||||
$this->composerProcessor->process();
|
||||
$composerJsonFilePath = getcwd() . '/composer.json';
|
||||
$this->composerProcessor->process($composerJsonFilePath);
|
||||
|
||||
$this->reportZeroCacheRectorsCondition();
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user