@@ -8,6 +8,7 @@ class VerbosityLevel
8
8
private const TYPE_ONLY = 1 ;
9
9
private const VALUE = 2 ;
10
10
private const PRECISE = 3 ;
11
+ private const CACHE = 4 ;
11
12
12
13
/** @var self[] */
13
14
private static $ registry ;
@@ -41,6 +42,11 @@ public static function precise(): self
41
42
return self ::create (self ::PRECISE );
42
43
}
43
44
45
+ public static function cache (): self
46
+ {
47
+ return self ::create (self ::CACHE );
48
+ }
49
+
44
50
public static function getRecommendedLevelByType (Type $ type ): self
45
51
{
46
52
if (TypeUtils::containsCallable ($ type ) || count (TypeUtils::getConstantArrays ($ type )) > 0 ) {
@@ -54,23 +60,45 @@ public static function getRecommendedLevelByType(Type $type): self
54
60
* @param callable(): string $typeOnlyCallback
55
61
* @param callable(): string $valueCallback
56
62
* @param callable(): string|null $preciseCallback
63
+ * @param callable(): string|null $cacheCallback
57
64
* @return string
58
65
*/
59
66
public function handle (
60
67
callable $ typeOnlyCallback ,
61
68
callable $ valueCallback ,
62
- ?callable $ preciseCallback = null
69
+ ?callable $ preciseCallback = null ,
70
+ ?callable $ cacheCallback = null
63
71
): string
64
72
{
65
73
if ($ this ->value === self ::TYPE_ONLY ) {
66
74
return $ typeOnlyCallback ();
67
75
}
68
76
69
- if ($ this ->value === self ::VALUE || $ preciseCallback === null ) {
77
+ if ($ this ->value === self ::VALUE ) {
78
+ return $ valueCallback ();
79
+ }
80
+
81
+ if ($ this ->value === self ::PRECISE ) {
82
+ if ($ preciseCallback !== null ) {
83
+ return $ preciseCallback ();
84
+ }
85
+
86
+ return $ valueCallback ();
87
+ }
88
+
89
+ if ($ this ->value === self ::CACHE ) {
90
+ if ($ cacheCallback !== null ) {
91
+ return $ cacheCallback ();
92
+ }
93
+
94
+ if ($ preciseCallback !== null ) {
95
+ return $ preciseCallback ();
96
+ }
97
+
70
98
return $ valueCallback ();
71
99
}
72
100
73
- return $ preciseCallback ();
101
+ throw new \ PHPStan \ ShouldNotHappenException ();
74
102
}
75
103
76
104
}
0 commit comments