|
4 | 4 |
|
5 | 5 | use PHPStan\Analyser\Scope; |
6 | 6 | use PHPStan\Reflection\ParametersAcceptor; |
7 | | -use PHPStan\Type\ArrayType; |
8 | 7 | use PHPStan\Type\ErrorType; |
9 | | -use PHPStan\Type\IterableType; |
10 | | -use PHPStan\Type\MixedType; |
11 | 8 | use PHPStan\Type\NeverType; |
12 | 9 | use PHPStan\Type\Type; |
13 | 10 | use PHPStan\Type\VerbosityLevel; |
@@ -149,44 +146,20 @@ static function (Type $type): bool { |
149 | 146 | } |
150 | 147 |
|
151 | 148 | $parameter = $parameters[count($parameters) - 1]; |
152 | | - $parameterType = $parameter->getType(); |
153 | | - if (!($parameterType instanceof ArrayType)) { |
154 | | - break; |
155 | | - } |
156 | | - |
157 | | - if (!$argument->unpack) { |
158 | | - $parameterType = $parameterType->getItemType(); |
159 | | - } |
160 | 149 | } else { |
161 | 150 | $parameter = $parameters[$i]; |
162 | | - $parameterType = $parameter->getType(); |
163 | | - if ($parameter->isVariadic()) { |
164 | | - if ($parameterType instanceof ArrayType && !$argument->unpack) { |
165 | | - $parameterType = $parameterType->getItemType(); |
166 | | - } |
167 | | - } elseif ($argument->unpack) { |
168 | | - continue; |
169 | | - } |
170 | 151 | } |
171 | 152 |
|
| 153 | + $parameterType = $parameter->getType(); |
| 154 | + |
172 | 155 | $argumentValueType = $scope->getType($argument->value); |
173 | | - $secondAccepts = null; |
174 | | - if ($parameterType->isIterable()->yes() && $parameter->isVariadic()) { |
175 | | - $secondAccepts = $this->ruleLevelHelper->accepts( |
176 | | - new IterableType( |
177 | | - new MixedType(), |
178 | | - $parameterType->getIterableValueType() |
179 | | - ), |
180 | | - $argumentValueType, |
181 | | - $scope->isDeclareStrictTypes() |
182 | | - ); |
| 156 | + if ($argument->unpack) { |
| 157 | + $argumentValueType = $argumentValueType->getIterableValueType(); |
183 | 158 | } |
184 | | - |
185 | 159 | if ( |
186 | 160 | $this->checkArgumentTypes |
187 | 161 | && !$parameter->passedByReference()->createsNewVariable() |
188 | 162 | && !$this->ruleLevelHelper->accepts($parameterType, $argumentValueType, $scope->isDeclareStrictTypes()) |
189 | | - && ($secondAccepts === null || !$secondAccepts) |
190 | 163 | ) { |
191 | 164 | $verbosityLevel = VerbosityLevel::getRecommendedLevelByType($parameterType); |
192 | 165 | $errors[] = RuleErrorBuilder::message(sprintf( |
|
0 commit comments