-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathunused-catches.php
135 lines (102 loc) · 2.45 KB
/
unused-catches.php
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php declare(strict_types = 1);
namespace Pepakriz\PHPStanExceptionRules\Rules\UnusedCatches;
use LogicException;
use PharData;
use RuntimeException;
class FooException extends RuntimeException
{
}
class BarException extends RuntimeException
{
}
class UnusedCatches
{
public function correctCatch(): void
{
try {
throw new RuntimeException();
} catch (RuntimeException $e) {
}
}
public function unusedCatch(): void
{
try {
throw new LogicException();
} catch (LogicException $e) {
} catch (RuntimeException $e) { // error: RuntimeException is never thrown in the corresponding try block
}
}
public function unusedCatchWithLogic(): void
{
try {
throw new LogicException();
} catch (LogicException | RuntimeException $e) { // error: RuntimeException is never thrown in the corresponding try block
}
}
public function unusedWithUsed(): void
{
try {
throw new FooException();
} catch (BarException | FooException $e) { // error: Pepakriz\PHPStanExceptionRules\Rules\UnusedCatches\BarException is never thrown in the corresponding try block
}
}
public function nestedUnusedCatch(): void
{
try {
try {
throw new FooException();
} catch (LogicException $e) {
} catch (RuntimeException $e) {
}
} catch (FooException $e) { // error: Pepakriz\PHPStanExceptionRules\Rules\UnusedCatches\FooException is never thrown in the corresponding try block
}
}
public function correctCatchMethodCall(): void
{
try {
$this->someVoidMethod();
} catch (LogicException $e) {
} catch (RuntimeException $e) { // error: RuntimeException is never thrown in the corresponding try block
}
}
public function correctCatchMethodCallWithThrows(): void
{
try {
$this->throwLogic();
} catch (LogicException $e) {
} catch (RuntimeException $e) { // error: RuntimeException is never thrown in the corresponding try block
}
}
public function correctCatchMethodCallWithThrows2(): void
{
try {
$this->throwLogic();
} catch (\Throwable $e) {
}
}
private function someVoidMethod(): void
{
}
/**
* @throws LogicException
*/
private function throwLogic(): void
{
throw new LogicException();
}
private function dynamicThrowType(): void
{
try {
$tar = new PharData('input.txt');
$tar->extractTo('output');
} catch (RuntimeException $exception) {
}
}
/**
* @throws FooException
*/
private function methodWithDefaultThrowType(callable $callable): void
{
$callable();
}
}