Skip to content

Commit 74cd92a

Browse files
authored
Fix the rule override in the set (#318)
* Fix the rule override in the set * Add tests
1 parent 6ec981c commit 74cd92a

5 files changed

Lines changed: 110 additions & 0 deletions

File tree

src/Config/ECSConfig.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,16 @@ public function rule(string $checkerClass): void
7777

7878
$this->singleton($checkerClass);
7979
$this->autowireWhitespaceAwareFixer($checkerClass);
80+
81+
if (is_a($checkerClass, ConfigurableFixerInterface::class, true)) {
82+
$this->extend(
83+
$checkerClass,
84+
static function (ConfigurableFixerInterface $configurableFixer): ConfigurableFixerInterface {
85+
$configurableFixer->configure([]);
86+
return $configurableFixer;
87+
}
88+
);
89+
}
8090
}
8191

8292
/**

tests/FixerRunner/DependencyInjection/FixerServiceRegistrationTest.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44

55
namespace Symplify\EasyCodingStandard\Tests\FixerRunner\DependencyInjection;
66

7+
use Iterator;
78
use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer;
89
use PhpCsFixer\Fixer\ClassNotation\VisibilityRequiredFixer;
10+
use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
11+
use PHPUnit\Framework\Attributes\DataProvider;
912
use Symplify\EasyCodingStandard\FixerRunner\Application\FixerFileProcessor;
1013
use Symplify\EasyCodingStandard\Testing\PHPUnit\AbstractTestCase;
1114
use Symplify\EasyCodingStandard\Utils\PrivatesAccessorHelper;
@@ -43,4 +46,67 @@ public function test(): void
4346
'elements' => ['property'],
4447
], $visibilityRequiredConfiguration);
4548
}
49+
50+
/**
51+
* See https://github.com/easy-coding-standard/easy-coding-standard/discussions/198
52+
*
53+
* @param array{
54+
* case_sensitive: bool,
55+
* imports_order: list<string>|null,
56+
* sort_algorithm: string,
57+
* } $expectedConfiguration
58+
*/
59+
#[DataProvider('provideRuleOverrideInSetData')]
60+
public function testRuleOverrideInSet(string $filename, array $expectedConfiguration): void
61+
{
62+
$this->createContainerWithConfigs([__DIR__ . '/config/test-rule-override-in-set/' . $filename]);
63+
$fixerFileProcessor = $this->make(FixerFileProcessor::class);
64+
65+
$checkers = $fixerFileProcessor->getCheckers();
66+
$orderedImportsFixerInstances = [];
67+
68+
foreach ($checkers as $checker) {
69+
if ($checker instanceof OrderedImportsFixer) {
70+
$orderedImportsFixerInstances[] = $checker;
71+
}
72+
}
73+
74+
$this->assertCount(2, $orderedImportsFixerInstances);
75+
76+
foreach ($orderedImportsFixerInstances as $orderedImportFixerInstance) {
77+
$configuration = PrivatesAccessorHelper::getPropertyValue($orderedImportFixerInstance, 'configuration');
78+
79+
$this->assertSame($expectedConfiguration, $configuration);
80+
}
81+
}
82+
83+
public static function provideRuleOverrideInSetData(): Iterator
84+
{
85+
yield [
86+
'with-rules.php',
87+
[
88+
'case_sensitive' => false,
89+
'imports_order' => null,
90+
'sort_algorithm' => OrderedImportsFixer::SORT_ALPHA,
91+
],
92+
];
93+
94+
yield [
95+
'with-configured-rule.php',
96+
[
97+
'case_sensitive' => true,
98+
'imports_order' => ['const', 'class', 'function'],
99+
'sort_algorithm' => 'alpha',
100+
],
101+
];
102+
103+
yield [
104+
'with-configured-rule-and-empty-config.php',
105+
[
106+
'case_sensitive' => false,
107+
'imports_order' => null,
108+
'sort_algorithm' => OrderedImportsFixer::SORT_ALPHA,
109+
],
110+
];
111+
}
46112
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
6+
use Symplify\EasyCodingStandard\Config\ECSConfig;
7+
8+
return ECSConfig::configure()
9+
->withPhpCsFixerSets(perCS: true)
10+
->withConfiguredRule(OrderedImportsFixer::class, []);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
6+
use Symplify\EasyCodingStandard\Config\ECSConfig;
7+
8+
return ECSConfig::configure()
9+
->withPhpCsFixerSets(perCS: true)
10+
->withConfiguredRule(OrderedImportsFixer::class, [
11+
'case_sensitive' => true,
12+
'imports_order' => ['const', 'class', 'function'],
13+
'sort_algorithm' => 'alpha',
14+
]);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
6+
use Symplify\EasyCodingStandard\Config\ECSConfig;
7+
8+
return ECSConfig::configure()
9+
->withPhpCsFixerSets(perCS: true)
10+
->withRules([OrderedImportsFixer::class]);

0 commit comments

Comments
 (0)