Repository navigation
Expand file tree
/
Copy pathNestedTernaryToMatchRector.php
More file actions
70 lines (63 loc) · 1.86 KB
/
Copy pathNestedTernaryToMatchRector.php
File metadata and controls
70 lines (63 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
declare(strict_types=1);
namespace Rector\CodingStyle\Rector\Assign;
use PhpParser\Node;
use PhpParser\Node\Expr\Assign;
use Rector\Configuration\Deprecation\Contract\DeprecatedInterface;
use Rector\Exception\ShouldNotHappenException;
use Rector\Rector\AbstractRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @deprecated This rule is deprecated, as match(true) with nested conditions is often less readable and more confusing than the original ternary. Refactor to an explicit intent instead, e.g. early returns or a named method.
*/
final class NestedTernaryToMatchRector extends AbstractRector implements DeprecatedInterface
{
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition('Convert nested ternary expressions to match(true) statements', [
new CodeSample(
<<<'CODE_SAMPLE'
class SomeClass
{
public function getValue($input)
{
return $input > 100 ? 'more than 100' : ($input > 5 ? 'more than 5' : 'less');
}
}
CODE_SAMPLE
,
<<<'CODE_SAMPLE'
class SomeClass
{
public function getValue($input)
{
return match (true) {
$input > 100 => 'more than 100',
$input > 5 => 'more than 5',
default => 'less',
};
}
}
CODE_SAMPLE
),
]);
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes(): array
{
return [Assign::class];
}
/**
* @param Assign $node
*/
public function refactor(Node $node): ?Assign
{
throw new ShouldNotHappenException(sprintf(
'"%s" is deprecated, as match(true) with nested conditions is often less readable than the original ternary',
self::class
));
}
}