Skip to content

Commit d4f0907

Browse files
committed
More rules use the recommended type description verbosity level
1 parent f6a37a0 commit d4f0907

7 files changed

+20
-16
lines changed

src/Rules/Arrays/AppendedArrayItemTypeRule.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public function processNode(\PhpParser\Node $node, Scope $scope): array
7676

7777
$itemType = $assignedToType->getItemType();
7878
if (!$this->ruleLevelHelper->accepts($itemType, $assignedValueType, $scope->isDeclareStrictTypes())) {
79-
$verbosityLevel = $itemType->isCallable()->and($assignedValueType->isCallable())->yes() ? VerbosityLevel::value() : VerbosityLevel::typeOnly();
79+
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($itemType);
8080
return [
8181
RuleErrorBuilder::message(sprintf(
8282
'Array (%s) does not accept %s.',

src/Rules/FunctionReturnTypeCheck.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use PHPStan\Analyser\Scope;
77
use PHPStan\Type\GenericTypeVariableResolver;
88
use PHPStan\Type\Type;
9-
use PHPStan\Type\TypeUtils;
109
use PHPStan\Type\TypeWithClassName;
1110
use PHPStan\Type\VerbosityLevel;
1211
use PHPStan\Type\VoidType;
@@ -58,9 +57,7 @@ public function checkReturnType(
5857
}
5958

6059
$isVoidSuperType = (new VoidType())->isSuperTypeOf($returnType);
61-
$verbosityLevel = $returnType->isCallable()->yes() || count(TypeUtils::getConstantArrays($returnType)) > 0
62-
? VerbosityLevel::value()
63-
: VerbosityLevel::typeOnly();
60+
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($returnType);
6461
if ($returnValue === null) {
6562
if (!$isVoidSuperType->no()) {
6663
return [];

src/Rules/Functions/IncompatibleDefaultParameterTypeRule.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,15 @@ public function processNode(Node $node, Scope $scope): array
6464
continue;
6565
}
6666

67+
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($parameterType);
68+
6769
$errors[] = RuleErrorBuilder::message(sprintf(
6870
'Default value of the parameter #%d $%s (%s) of function %s() is incompatible with type %s.',
6971
$paramI + 1,
7072
$param->var->name,
71-
$defaultValueType->describe(VerbosityLevel::value()),
73+
$defaultValueType->describe($verbosityLevel),
7274
$function->getName(),
73-
$parameterType->describe(VerbosityLevel::value())
75+
$parameterType->describe($verbosityLevel)
7476
))->line($param->getLine())->build();
7577
}
7678

src/Rules/Methods/IncompatibleDefaultParameterTypeRule.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,16 @@ public function processNode(Node $node, Scope $scope): array
5050
continue;
5151
}
5252

53+
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($parameterType);
54+
5355
$errors[] = RuleErrorBuilder::message(sprintf(
5456
'Default value of the parameter #%d $%s (%s) of method %s::%s() is incompatible with type %s.',
5557
$paramI + 1,
5658
$param->var->name,
57-
$defaultValueType->describe(VerbosityLevel::value()),
59+
$defaultValueType->describe($verbosityLevel),
5860
$method->getDeclaringClass()->getDisplayName(),
5961
$method->getName(),
60-
$parameterType->describe(VerbosityLevel::value())
62+
$parameterType->describe($verbosityLevel)
6163
))->line($param->getLine())->build();
6264
}
6365

src/Rules/Properties/DefaultValueTypesAssignedToPropertiesRule.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,15 @@ public function processNode(Node $node, Scope $scope): array
5353
continue;
5454
}
5555

56+
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($propertyType);
57+
5658
$errors[] = RuleErrorBuilder::message(sprintf(
5759
'%s %s::$%s (%s) does not accept default value of type %s.',
5860
$node->isStatic() ? 'Static property' : 'Property',
5961
$classReflection->getDisplayName(),
6062
$property->name->name,
61-
$propertyType->describe(VerbosityLevel::typeOnly()),
62-
$defaultValueType->describe(VerbosityLevel::typeOnly())
63+
$propertyType->describe($verbosityLevel),
64+
$defaultValueType->describe($verbosityLevel)
6365
))->build();
6466
}
6567

src/Rules/Properties/TypesAssignedToPropertiesRule.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,14 @@ public function processNode(Node $node, Scope $scope): array
7171
}
7272
if (!$this->ruleLevelHelper->accepts($propertyType, $assignedValueType, $scope->isDeclareStrictTypes())) {
7373
$propertyDescription = $this->propertyDescriptor->describeProperty($propertyReflection, $propertyFetch);
74+
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($propertyType);
7475

7576
return [
7677
RuleErrorBuilder::message(sprintf(
7778
'%s (%s) does not accept %s.',
7879
$propertyDescription,
79-
$propertyType->describe(VerbosityLevel::typeOnly()),
80-
$assignedValueType->describe(VerbosityLevel::typeOnly())
80+
$propertyType->describe($verbosityLevel),
81+
$assignedValueType->describe($verbosityLevel)
8182
))->build(),
8283
];
8384
}

tests/PHPStan/Rules/Arrays/AppendedArrayItemTypeRuleTest.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ public function testAppendedArrayItemType(): void
2929
18,
3030
],
3131
[
32-
'Array (array<callable>) does not accept array<int, int>.',
32+
'Array (array<callable(): mixed>) does not accept array(1, 2, 3).',
3333
20,
3434
],
3535
[
36-
'Array (array<callable>) does not accept array<int, string>.',
36+
'Array (array<callable(): mixed>) does not accept array(\'AppendedArrayItem\\\\Foo\', \'classMethod\').',
3737
23,
3838
],
3939
[
40-
'Array (array<callable>) does not accept array<int, string>.',
40+
'Array (array<callable(): mixed>) does not accept array(\'Foo\', \'Hello world\').',
4141
25,
4242
],
4343
[

0 commit comments

Comments
 (0)