Skip to content

Commit 3078280

Browse files
committed
fix phpstan
1 parent 3d04699 commit 3078280

1 file changed

Lines changed: 29 additions & 13 deletions

File tree

rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
final class JsonThrowOnErrorRector extends AbstractRector implements MinPhpVersionInterface
2727
{
2828
private bool $hasChanged = false;
29-
private const FLAGS = ['JSON_THROW_ON_ERROR'];
29+
private const array FLAGS = ['JSON_THROW_ON_ERROR'];
3030

3131
public function __construct(
3232
private readonly ValueResolver $valueResolver,
@@ -62,9 +62,6 @@ public function getNodeTypes(): array
6262
return NodeGroup::STMTS_AWARE;
6363
}
6464

65-
/**
66-
* @param StmtsAware $node
67-
*/
6865
public function refactor(Node $node): ?Node
6966
{
7067
// if found, skip it :)
@@ -134,11 +131,13 @@ private function shouldSkipFuncCall(FuncCall $funcCall): bool
134131
return $this->isFirstValueStringOrArray($funcCall);
135132
}
136133

137-
private function processJsonEncode(FuncCall $funcCall): ?FuncCall
134+
private function processJsonEncode(FuncCall $funcCall): FuncCall
138135
{
139136
$flags = [];
140137
if (isset($funcCall->args[1])) {
141-
$flags = $this->getFlags($funcCall->args[1]);
138+
/** @var Arg|Node\Expr\BinaryOp\BitwiseOr|ConstFetch $arg */
139+
$arg = $funcCall->args[1];
140+
$flags = $this->getFlags($arg);
142141
}
143142
if (!is_null($newArg = $this->getArgWithFlags($flags))) {
144143
$this->hasChanged = true;
@@ -147,11 +146,13 @@ private function processJsonEncode(FuncCall $funcCall): ?FuncCall
147146
return $funcCall;
148147
}
149148

150-
private function processJsonDecode(FuncCall $funcCall): ?FuncCall
149+
private function processJsonDecode(FuncCall $funcCall): FuncCall
151150
{
152151
$flags = [];
153152
if (isset($funcCall->args[3])) {
154-
$flags = $this->getFlags($funcCall->args[3]);
153+
/** @var Arg|Node\Expr\BinaryOp\BitwiseOr|ConstFetch $arg */
154+
$arg = $funcCall->args[3];
155+
$flags = $this->getFlags($arg);
155156
}
156157

157158
// set default to inter-args
@@ -191,7 +192,11 @@ private function isFirstValueStringOrArray(FuncCall $funcCall): bool
191192
return is_array($value);
192193
}
193194

194-
private function getFlags(Arg|Node\Expr\BinaryOp\BitwiseOr|ConstFetch $arg, array $result = []): array
195+
/**
196+
* @param string[] $flags
197+
* @return string[]
198+
*/
199+
private function getFlags(Arg|Node\Expr\BinaryOp\BitwiseOr|ConstFetch $arg, array $flags = []): array
195200
{
196201
if ($arg instanceof ConstFetch) {
197202
$constFetch = $arg;
@@ -201,19 +206,27 @@ private function getFlags(Arg|Node\Expr\BinaryOp\BitwiseOr|ConstFetch $arg, arra
201206
} else {
202207
$array = $arg->jsonSerialize();
203208
}
204-
if ($arg->value instanceof ConstFetch) { // single flag
209+
if ($arg instanceof Arg && $arg->value instanceof ConstFetch) { // single flag
205210
$constFetch = $arg->value;
206211
} else { // multiple flag
207-
$result = $this->getFlags($array['left'], $result);
212+
$flags = $this->getFlags($array['left'], $flags);
208213
$constFetch = $array['right'];
209214
}
210215
}
211216
if (!is_null($constFetch)) {
212-
$result[] = $constFetch->jsonSerialize()['name']->getFirst();
217+
/** @var ConstFetch $constFetch */
218+
$json = $constFetch->jsonSerialize();
219+
if (isset($json['name']) && $json['name'] instanceof Name) {
220+
$name = $json['name'];
221+
$flags[] = $name->getFirst();
222+
}
213223
}
214-
return $result;
224+
return $flags;
215225
}
216226

227+
/**
228+
* @param string[] $flags
229+
*/
217230
private function getArgWithFlags(array $flags): Arg|null
218231
{
219232
$oldNbFlags = count($flags);
@@ -246,6 +259,9 @@ private function getArgWithFlags(array $flags): Arg|null
246259
);
247260
}
248261
}
262+
if (is_null($result)) {
263+
return null;
264+
}
249265
return new Arg($result);
250266
}
251267
}

0 commit comments

Comments
 (0)