Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 603b06f

Browse files
Adjust CallTo*StatementWithNoDiscardRule for pipe operator
1 parent fb2cc65 commit 603b06f

9 files changed

+125
-10
lines changed

‎src/Rules/Functions/CallToFunctionStatementWithNoDiscardRule.php‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,18 @@ public function processNode(Node $node, Scope $scope): array
4141
$funcCall = $funcCall->expr;
4242
}
4343

44+
if ($funcCall instanceof Node\Expr\BinaryOp\Pipe) {
45+
if ($funcCall->right instanceof Node\Expr\FuncCall) {
46+
if (!$funcCall->right->isFirstClassCallable()) {
47+
return [];
48+
}
49+
50+
$funcCall = new Node\Expr\FuncCall($funcCall->right->name, []);
51+
} elseif ($funcCall->right instanceof Node\Expr\ArrowFunction) {
52+
$funcCall = $funcCall->right->expr;
53+
}
54+
}
55+
4456
if (!$funcCall instanceof Node\Expr\FuncCall) {
4557
return [];
4658
}

‎src/Rules/Methods/CallToMethodStatementWithNoDiscardRule.php‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,18 @@ public function processNode(Node $node, Scope $scope): array
4242
$methodCall = $methodCall->expr;
4343
}
4444

45+
if ($methodCall instanceof Node\Expr\BinaryOp\Pipe) {
46+
if ($methodCall->right instanceof Node\Expr\MethodCall || $methodCall->right instanceof Node\Expr\NullsafeMethodCall) {
47+
if (!$methodCall->right->isFirstClassCallable()) {
48+
return [];
49+
}
50+
51+
$methodCall = new Node\Expr\MethodCall($methodCall->right->var, $methodCall->right->name, []);
52+
} elseif ($methodCall->right instanceof Node\Expr\ArrowFunction) {
53+
$methodCall = $methodCall->right->expr;
54+
}
55+
}
56+
4557
if (!$methodCall instanceof Node\Expr\MethodCall
4658
&& !$methodCall instanceof Node\Expr\NullsafeMethodCall
4759
) {

‎src/Rules/Methods/CallToStaticMethodStatementWithNoDiscardRule.php‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,19 @@ public function processNode(Node $node, Scope $scope): array
4444
$isInVoidCast = true;
4545
$methodCall = $methodCall->expr;
4646
}
47+
48+
if ($methodCall instanceof Node\Expr\BinaryOp\Pipe) {
49+
if ($methodCall->right instanceof Node\Expr\StaticCall) {
50+
if (!$methodCall->right->isFirstClassCallable()) {
51+
return [];
52+
}
53+
54+
$methodCall = new Node\Expr\StaticCall($methodCall->right->class, $methodCall->right->name, []);
55+
} elseif ($methodCall->right instanceof Node\Expr\ArrowFunction) {
56+
$methodCall = $methodCall->right->expr;
57+
}
58+
}
59+
4760
if (!$methodCall instanceof Node\Expr\StaticCall) {
4861
return [];
4962
}

‎tests/PHPStan/Rules/Functions/CallToFunctionStatementWithNoDiscardRuleTest.php‎

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function testRule(): void
3636
30,
3737
],
3838
[
39-
'Call to callable Closure(): array on a separate line discards return value.',
39+
'Call to callable Closure(int): array on a separate line discards return value.',
4040
35,
4141
],
4242
[
@@ -55,6 +55,22 @@ public function testRule(): void
5555
'Call to callable \'FunctionCallStateme...\' in (void) cast but callable allows discarding return value.',
5656
59,
5757
],
58+
[
59+
'Call to function FunctionCallStatementResultDiscarded\withSideEffects() on a separate line discards return value.',
60+
61,
61+
],
62+
[
63+
'Call to function FunctionCallStatementResultDiscarded\canDiscard() in (void) cast but function allows discarding return value.',
64+
64,
65+
],
66+
[
67+
'Call to function FunctionCallStatementResultDiscarded\withSideEffects() on a separate line discards return value.',
68+
66,
69+
],
70+
[
71+
'Call to function FunctionCallStatementResultDiscarded\canDiscard() in (void) cast but function allows discarding return value.',
72+
69,
73+
],
5874
]);
5975
}
6076

‎tests/PHPStan/Rules/Functions/data/function-call-statement-result-discarded.php‎

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
namespace FunctionCallStatementResultDiscarded;
44

55
#[\NoDiscard]
6-
function withSideEffects(): array {
6+
function withSideEffects(int$i): array {
77
echo __FUNCTION__ . "\n";
88
return [1];
99
}
1010

11-
withSideEffects();
11+
withSideEffects(5);
1212

13-
(void)withSideEffects();
13+
(void)withSideEffects(5);
1414

15-
foreach (withSideEffects() as $num) {
15+
foreach (withSideEffects(5) as $num) {
1616
var_dump($num);
1717
}
1818

@@ -30,9 +30,9 @@ function differentCase(): array {
3030
$callable();
3131

3232
$firstClassCallable = withSideEffects(...);
33-
$firstClasCallableResult = $firstClassCallable();
33+
$firstClasCallableResult = $firstClassCallable(5);
3434

35-
$firstClassCallable();
35+
$firstClassCallable(5);
3636

3737
$closureWithNoDiscard = #[\NoDiscard] function () { return 1; };
3838
$a = $closureWithNoDiscard();
@@ -46,14 +46,24 @@ function differentCase(): array {
4646

4747
withSideEffects(...);
4848

49-
function canDiscard(): int
49+
function canDiscard(int$i): int
5050
{
5151
return 1;
5252
}
5353

54-
canDiscard();
55-
(void) canDiscard();
54+
canDiscard(5);
55+
(void) canDiscard(5);
5656

5757
$canDiscardCb = 'FunctionCallStatementResultDiscarded\\canDiscard';
5858
$canDiscardCb();
5959
(void) $canDiscardCb();
60+
61+
5 |> withSideEffects(...);
62+
5 |> canDiscard(...);
63+
(void) 5 |> withSideEffects(...);
64+
(void) 5 |> canDiscard(...);
65+
66+
5 |> fn ($x) => withSideEffects($x);
67+
5 |> fn ($x) => canDiscard($x);
68+
(void) 5 |> fn ($x) => withSideEffects($x);
69+
(void) 5 |> fn ($x) => canDiscard($x);

‎tests/PHPStan/Rules/Methods/CallToMethodStatementWithNoDiscardRuleTest.php‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,22 @@ public function testRule(): void
4040
'Call to method MethodCallStatementResultDiscarded\Foo::canDiscard() in (void) cast but method allows discarding return value.',
4141
45,
4242
],
43+
[
44+
'Call to method MethodCallStatementResultDiscarded\ClassWithInstanceSideEffects::instanceMethod() on a separate line discards return value.',
45+
47,
46+
],
47+
[
48+
'Call to method MethodCallStatementResultDiscarded\Foo::canDiscard() in (void) cast but method allows discarding return value.',
49+
50,
50+
],
51+
[
52+
'Call to method MethodCallStatementResultDiscarded\ClassWithInstanceSideEffects::instanceMethod() on a separate line discards return value.',
53+
52,
54+
],
55+
[
56+
'Call to method MethodCallStatementResultDiscarded\Foo::canDiscard() in (void) cast but method allows discarding return value.',
57+
55,
58+
],
4359
]);
4460
}
4561

‎tests/PHPStan/Rules/Methods/CallToStaticMethodStatementWithNoDiscardRuleTest.php‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,22 @@ public function testRule(): void
4141
'Call to static method StaticMethodCallStatementResultDiscarded\Foo::canDiscard() in (void) cast but method allows discarding return value.',
4242
41,
4343
],
44+
[
45+
'Call to static method StaticMethodCallStatementResultDiscarded\ClassWithStaticSideEffects::staticMethod() on a separate line discards return value.',
46+
43,
47+
],
48+
[
49+
'Call to static method StaticMethodCallStatementResultDiscarded\Foo::canDiscard() in (void) cast but method allows discarding return value.',
50+
46,
51+
],
52+
[
53+
'Call to static method StaticMethodCallStatementResultDiscarded\ClassWithStaticSideEffects::staticMethod() on a separate line discards return value.',
54+
48,
55+
],
56+
[
57+
'Call to static method StaticMethodCallStatementResultDiscarded\Foo::canDiscard() in (void) cast but method allows discarding return value.',
58+
51,
59+
],
4460
]);
4561
}
4662

‎tests/PHPStan/Rules/Methods/data/method-call-statement-result-discarded.php‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,13 @@ public function canDiscard(): array {
4343
$foo = new Foo();
4444
$foo->canDiscard();
4545
(void) $foo->canDiscard();
46+
47+
5 |> $o->instanceMethod(...);
48+
5 |> $foo->canDiscard(...);
49+
(void) 5 |> $o->instanceMethod(...);
50+
(void) 5 |> $foo->canDiscard(...);
51+
52+
5 |> fn ($x) => $o->instanceMethod($x);
53+
5 |> fn ($x) => $foo->canDiscard($x);
54+
(void) 5 |> fn ($x) => $o->instanceMethod($x);
55+
(void) 5 |> fn ($x) => $foo->canDiscard($x);

‎tests/PHPStan/Rules/Methods/data/static-method-call-statement-result-discarded.php‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,13 @@ public static function canDiscard(): array {
3939

4040
Foo::canDiscard();
4141
(void) Foo::canDiscard();
42+
43+
5 |> ClassWithStaticSideEffects::staticMethod(...);
44+
5 |> Foo::canDiscard(...);
45+
(void) 5 |> ClassWithStaticSideEffects::staticMethod(...);
46+
(void) 5 |> Foo::canDiscard(...);
47+
48+
5 |> fn ($x) => ClassWithStaticSideEffects::staticMethod($x);
49+
5 |> fn ($x) => Foo::canDiscard($x);
50+
(void) 5 |> fn ($x) => ClassWithStaticSideEffects::staticMethod($x);
51+
(void) 5 |> fn ($x) => Foo::canDiscard($x);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /