Skip to content

Commit c92cf51

Browse files
committed
AttributeVersionRequirementHelper: Improve error messages
1 parent 2297f6c commit c92cf51

4 files changed

Lines changed: 38 additions & 26 deletions

File tree

src/Rules/PHPUnit/AttributeVersionRequirementHelper.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
use PHPStan\Php\PhpMinorVersionIterator;
1212
use PHPStan\Rules\IdentifierRuleError;
1313
use PHPStan\Rules\RuleErrorBuilder;
14+
use PHPStan\ShouldNotHappenException;
15+
use PHPStan\Type\IntegerRangeType;
16+
use PHPStan\Type\VerbosityLevel;
1417
use function count;
1518
use function is_numeric;
1619
use function preg_match;
@@ -77,7 +80,7 @@ public function checkVersionRequirement(array $attributes, Scope $scope): array
7780

7881
if ($this->warnAboutIncompleteVersion($versionRequirement)) {
7982
$errors[] = RuleErrorBuilder::message(
80-
sprintf('Version requirement is incomplete.'),
83+
sprintf('Version requirement %s is incomplete.', $versionRequirement),
8184
)
8285
->identifier('phpunit.attributeRequiresPhpVersion')
8386
->build();
@@ -129,8 +132,17 @@ public function checkVersionRequirement(array $attributes, Scope $scope): array
129132
}
130133
}
131134

135+
if (count($pharIoVersions) < 2) {
136+
throw new ShouldNotHappenException();
137+
}
138+
132139
$errors[] = RuleErrorBuilder::message(
133-
sprintf('Version requirement will always evaluate to false.'),
140+
sprintf(
141+
'Version requirement %s does not match %s...%s.',
142+
$versionRequirement,
143+
$pharIoVersions[0]->getVersionString(),
144+
$pharIoVersions[count($pharIoVersions) - 1]->getVersionString()
145+
),
134146
)
135147
->identifier('phpunit.attributeRequiresPhpVersion')
136148
->build();
@@ -140,7 +152,7 @@ public function checkVersionRequirement(array $attributes, Scope $scope): array
140152

141153
if ($this->PHPUnitVersion->requiresPhpversionAttributeWithOperator()->yes()) {
142154
$errors[] = RuleErrorBuilder::message(
143-
sprintf('Version requirement is missing operator.'),
155+
sprintf('Version requirement %s is missing operator.', $versionRequirement),
144156
)
145157
->identifier('phpunit.attributeRequiresPhpVersion')
146158
->build();
@@ -149,7 +161,7 @@ public function checkVersionRequirement(array $attributes, Scope $scope): array
149161
&& $this->PHPUnitVersion->deprecatesPhpversionAttributeWithoutOperator()->yes()
150162
) {
151163
$errors[] = RuleErrorBuilder::message(
152-
sprintf('Version requirement without operator is deprecated.'),
164+
sprintf('Version requirement %s without operator is deprecated.', $versionRequirement),
153165
)
154166
->identifier('phpunit.attributeRequiresPhpVersion')
155167
->build();
@@ -159,7 +171,7 @@ public function checkVersionRequirement(array $attributes, Scope $scope): array
159171
}
160172

161173
/**
162-
* @return Version[]
174+
* @return list<Version>
163175
*/
164176
private function getAnalyzedPhpVersions(): array
165177
{

tests/Rules/PHPUnit/AttributeRequiresPhpVersionRangeRuleTest.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,23 @@ public function testPhpVersionMismatch(): void
1717
{
1818
$this->analyse([__DIR__ . '/data/requires-php-version-mismatch.php'], [
1919
[
20-
'Version requirement will always evaluate to false.',
20+
'Version requirement < 7.0 does not match 8.2.0...8.4.0.',
2121
20,
2222
],
2323
[
24-
'Version requirement will always evaluate to false.',
24+
'Version requirement ^5.0 does not match 8.2.0...8.4.0.',
2525
28,
2626
],
2727
[
28-
'Version requirement will always evaluate to false.',
28+
'Version requirement ~5.0 does not match 8.2.0...8.4.0.',
2929
36,
3030
],
3131
[
32-
'Version requirement will always evaluate to false.',
32+
'Version requirement 5.* does not match 8.2.0...8.4.0.',
3333
44,
3434
],
3535
[
36-
'Version requirement will always evaluate to false.',
36+
'Version requirement 8.5.* does not match 8.2.0...8.4.0.',
3737
76,
3838
],
3939
]);

tests/Rules/PHPUnit/AttributeRequiresPhpVersionRuleTest.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function testRuleOnPHPUnit124DeprecationsOn(): void
5353

5454
$this->analyse([__DIR__ . '/data/requires-php-version.php'], [
5555
[
56-
'Version requirement without operator is deprecated.',
56+
'Version requirement 8.0 without operator is deprecated.',
5757
12,
5858
],
5959
]);
@@ -75,7 +75,7 @@ public function testRuleOnPHPUnit13(): void
7575

7676
$this->analyse([__DIR__ . '/data/requires-php-version.php'], [
7777
[
78-
'Version requirement is missing operator.',
78+
'Version requirement 8.0 is missing operator.',
7979
12,
8080
],
8181
]);
@@ -91,35 +91,35 @@ public function testPhpVersionMismatch(): void
9191
[
9292
// errors because https://github.com/sebastianbergmann/phpunit/issues/6451
9393
// the test assumes PHP_VERSION_ID 80500 and the constraint only has 2 digits
94-
'Version requirement will always evaluate to false.',
94+
'Version requirement <= 8.5 does not match 8.5.0...8.5.99.',
9595
12,
9696
],
9797
[
98-
'Version requirement will always evaluate to false.',
98+
'Version requirement < 7.0 does not match 8.5.0...8.5.99.',
9999
20,
100100
],
101101
[
102-
'Version requirement will always evaluate to false.',
102+
'Version requirement ^5.0 does not match 8.5.0...8.5.99.',
103103
28,
104104
],
105105
[
106-
'Version requirement will always evaluate to false.',
106+
'Version requirement ~5.0 does not match 8.5.0...8.5.99.',
107107
36,
108108
],
109109
[
110-
'Version requirement will always evaluate to false.',
110+
'Version requirement 5.* does not match 8.5.0...8.5.99.',
111111
44,
112112
],
113113
[
114-
'Version requirement will always evaluate to false.',
114+
'Version requirement <= 8.4 does not match 8.5.0...8.5.99.',
115115
52,
116116
],
117117
[
118-
'Version requirement will always evaluate to false.',
118+
'Version requirement <= 8.5 does not match 8.5.0...8.5.99.',
119119
60,
120120
],
121121
[
122-
'Version requirement will always evaluate to false.',
122+
'Version requirement 8.3.* does not match 8.5.0...8.5.99.',
123123
68,
124124
],
125125
]);
@@ -158,11 +158,11 @@ public function testWarnAboutIncompleteVersion(): void
158158

159159
$this->analyse([__DIR__ . '/data/requires-php-version.php'], [
160160
[
161-
'Version requirement is incomplete.',
161+
'Version requirement 8.0 is incomplete.',
162162
12,
163163
],
164164
[
165-
'Version requirement is incomplete.',
165+
'Version requirement >=8.0 is incomplete.',
166166
20,
167167
],
168168
]);
@@ -177,7 +177,7 @@ public function testWarnAboutIncompletePhpunitVersion(): void
177177

178178
$this->analyse([__DIR__ . '/data/requires-phpunit-version.php'], [
179179
[
180-
'Version requirement is incomplete.',
180+
'Version requirement 11.0 is incomplete.',
181181
12,
182182
],
183183
]);

tests/Rules/PHPUnit/ClassAttributeRequiresPhpVersionRuleTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public function testWarnAboutIncompleteVersion(): void
2626

2727
$this->analyse([__DIR__ . '/data/requires-php-version-on-class.php'], [
2828
[
29-
'Version requirement will always evaluate to false.',
29+
'Version requirement < 7.0 does not match 8.5.0...8.5.99.',
3030
10,
3131
],
3232
[
33-
'Version requirement is incomplete.',
33+
'Version requirement < 7.0 is incomplete.',
3434
10,
3535
],
3636
]);
@@ -44,7 +44,7 @@ public function testWarnAboutIncompletePhpunitVersion(): void
4444

4545
$this->analyse([__DIR__ . '/data/requires-phpunit-version.php'], [
4646
[
47-
'Version requirement is incomplete.',
47+
'Version requirement >=11.0 is incomplete.',
4848
18,
4949
],
5050
]);

0 commit comments

Comments
 (0)