Skip to content

Commit 05bc79b

Browse files
committed
Upgrade code to php 7.4 level
We are dropping support for php 7.2 and 7.3.
1 parent 1fb8299 commit 05bc79b

20 files changed

+296
-159
lines changed

composer.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
"phpstan/phpstan": "^1.8",
2020
"phpstan/phpstan-phpunit": "^1.1",
2121
"phpstan/extension-installer": "^1.1",
22-
"vimeo/psalm": "^4.25"
22+
"vimeo/psalm": "^4.25",
23+
"rector/rector": "^0.13.9"
2324
},
2425
"autoload": {
2526
"psr-4": {

composer.lock

+61-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

phpcs.xml.dist

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<!-- Set the minimum PHP version for PHPCompatibility.
1111
This should be kept in sync with the requirements in the composer.json file. -->
12-
<config name="testVersion" value="7.2-"/>
12+
<config name="testVersion" value="7.4-"/>
1313

1414
<rule ref="phpDocumentor">
1515
<!-- Property type declarations are a PHP 7.4 feature. -->

rector.php

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
6+
use Rector\Config\RectorConfig;
7+
use Rector\Set\ValueObject\LevelSetList;
8+
9+
return static function (RectorConfig $rectorConfig): void {
10+
$rectorConfig->paths([
11+
__DIR__ . '/src',
12+
__DIR__ . '/tests/unit'
13+
]);
14+
15+
// register a single rule
16+
$rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
17+
$rectorConfig->rule(Rector\CodeQuality\Rector\Class_\CompleteDynamicPropertiesRector::class);
18+
$rectorConfig->rule(Rector\TypeDeclaration\Rector\Closure\AddClosureReturnTypeRector::class);
19+
$rectorConfig->rule(Rector\PHPUnit\Rector\Class_\AddProphecyTraitRector::class);
20+
$rectorConfig->importNames();
21+
22+
// define sets of rules
23+
$rectorConfig->sets([
24+
LevelSetList::UP_TO_PHP_74
25+
]);
26+
};

src/PseudoTypes/False_.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ public function __toString(): string
3737
}
3838
}
3939

40-
class_alias('\phpDocumentor\Reflection\PseudoTypes\False_', 'phpDocumentor\Reflection\Types\False_', false);
40+
class_alias(False_::class, 'phpDocumentor\Reflection\Types\False_', false);

src/PseudoTypes/IntegerRange.php

+2-4
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
*/
2525
final class IntegerRange extends Integer implements PseudoType
2626
{
27-
/** @var string */
28-
private $minValue;
27+
private string $minValue;
2928

30-
/** @var string */
31-
private $maxValue;
29+
private string $maxValue;
3230

3331
public function __construct(string $minValue, string $maxValue)
3432
{

src/PseudoTypes/True_.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ public function __toString(): string
3737
}
3838
}
3939

40-
class_alias('\phpDocumentor\Reflection\PseudoTypes\True_', 'phpDocumentor\Reflection\Types\True_', false);
40+
class_alias(True_::class, 'phpDocumentor\Reflection\Types\True_', false);

src/TypeResolver.php

+71-50
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,60 @@
1515

1616
use ArrayIterator;
1717
use InvalidArgumentException;
18+
use phpDocumentor\Reflection\PseudoTypes\CallableString;
19+
use phpDocumentor\Reflection\PseudoTypes\False_;
20+
use phpDocumentor\Reflection\PseudoTypes\HtmlEscapedString;
1821
use phpDocumentor\Reflection\PseudoTypes\IntegerRange;
1922
use phpDocumentor\Reflection\PseudoTypes\List_;
23+
use phpDocumentor\Reflection\PseudoTypes\LiteralString;
24+
use phpDocumentor\Reflection\PseudoTypes\LowercaseString;
25+
use phpDocumentor\Reflection\PseudoTypes\NegativeInteger;
26+
use phpDocumentor\Reflection\PseudoTypes\NonEmptyLowercaseString;
27+
use phpDocumentor\Reflection\PseudoTypes\NonEmptyString;
28+
use phpDocumentor\Reflection\PseudoTypes\Numeric_;
29+
use phpDocumentor\Reflection\PseudoTypes\NumericString;
30+
use phpDocumentor\Reflection\PseudoTypes\PositiveInteger;
31+
use phpDocumentor\Reflection\PseudoTypes\TraitString;
32+
use phpDocumentor\Reflection\PseudoTypes\True_;
2033
use phpDocumentor\Reflection\Types\Array_;
2134
use phpDocumentor\Reflection\Types\ArrayKey;
35+
use phpDocumentor\Reflection\Types\Boolean;
36+
use phpDocumentor\Reflection\Types\Callable_;
2237
use phpDocumentor\Reflection\Types\ClassString;
2338
use phpDocumentor\Reflection\Types\Collection;
2439
use phpDocumentor\Reflection\Types\Compound;
2540
use phpDocumentor\Reflection\Types\Context;
2641
use phpDocumentor\Reflection\Types\Expression;
42+
use phpDocumentor\Reflection\Types\Float_;
2743
use phpDocumentor\Reflection\Types\Integer;
2844
use phpDocumentor\Reflection\Types\InterfaceString;
2945
use phpDocumentor\Reflection\Types\Intersection;
3046
use phpDocumentor\Reflection\Types\Iterable_;
47+
use phpDocumentor\Reflection\Types\Mixed_;
48+
use phpDocumentor\Reflection\Types\Never_;
49+
use phpDocumentor\Reflection\Types\Null_;
3150
use phpDocumentor\Reflection\Types\Nullable;
3251
use phpDocumentor\Reflection\Types\Object_;
52+
use phpDocumentor\Reflection\Types\Parent_;
53+
use phpDocumentor\Reflection\Types\Resource_;
54+
use phpDocumentor\Reflection\Types\Scalar;
55+
use phpDocumentor\Reflection\Types\Self_;
56+
use phpDocumentor\Reflection\Types\Static_;
3357
use phpDocumentor\Reflection\Types\String_;
58+
use phpDocumentor\Reflection\Types\This;
59+
use phpDocumentor\Reflection\Types\Void_;
3460
use RuntimeException;
3561

3662
use function array_key_exists;
63+
use function array_key_last;
3764
use function array_pop;
3865
use function array_values;
3966
use function class_exists;
4067
use function class_implements;
4168
use function count;
4269
use function current;
43-
use function end;
4470
use function in_array;
4571
use function is_numeric;
46-
use function key;
4772
use function preg_split;
4873
use function strpos;
4974
use function strtolower;
@@ -76,54 +101,51 @@ final class TypeResolver
76101
* @var array<string, string> List of recognized keywords and unto which Value Object they map
77102
* @psalm-var array<string, class-string<Type>>
78103
*/
79-
private $keywords = [
80-
'string' => Types\String_::class,
81-
'class-string' => Types\ClassString::class,
82-
'interface-string' => Types\InterfaceString::class,
83-
'html-escaped-string' => PseudoTypes\HtmlEscapedString::class,
84-
'lowercase-string' => PseudoTypes\LowercaseString::class,
85-
'non-empty-lowercase-string' => PseudoTypes\NonEmptyLowercaseString::class,
86-
'non-empty-string' => PseudoTypes\NonEmptyString::class,
87-
'numeric-string' => PseudoTypes\NumericString::class,
88-
'numeric' => PseudoTypes\Numeric_::class,
89-
'trait-string' => PseudoTypes\TraitString::class,
90-
'int' => Types\Integer::class,
91-
'integer' => Types\Integer::class,
92-
'positive-int' => PseudoTypes\PositiveInteger::class,
93-
'negative-int' => PseudoTypes\NegativeInteger::class,
94-
'bool' => Types\Boolean::class,
95-
'boolean' => Types\Boolean::class,
96-
'real' => Types\Float_::class,
97-
'float' => Types\Float_::class,
98-
'double' => Types\Float_::class,
99-
'object' => Types\Object_::class,
100-
'mixed' => Types\Mixed_::class,
101-
'array' => Types\Array_::class,
102-
'array-key' => Types\ArrayKey::class,
103-
'resource' => Types\Resource_::class,
104-
'void' => Types\Void_::class,
105-
'null' => Types\Null_::class,
106-
'scalar' => Types\Scalar::class,
107-
'callback' => Types\Callable_::class,
108-
'callable' => Types\Callable_::class,
109-
'callable-string' => PseudoTypes\CallableString::class,
110-
'false' => PseudoTypes\False_::class,
111-
'true' => PseudoTypes\True_::class,
112-
'literal-string' => PseudoTypes\LiteralString::class,
113-
'self' => Types\Self_::class,
114-
'$this' => Types\This::class,
115-
'static' => Types\Static_::class,
116-
'parent' => Types\Parent_::class,
117-
'iterable' => Types\Iterable_::class,
118-
'never' => Types\Never_::class,
119-
'list' => PseudoTypes\List_::class,
104+
private array $keywords = [
105+
'string' => String_::class,
106+
'class-string' => ClassString::class,
107+
'interface-string' => InterfaceString::class,
108+
'html-escaped-string' => HtmlEscapedString::class,
109+
'lowercase-string' => LowercaseString::class,
110+
'non-empty-lowercase-string' => NonEmptyLowercaseString::class,
111+
'non-empty-string' => NonEmptyString::class,
112+
'numeric-string' => NumericString::class,
113+
'numeric' => Numeric_::class,
114+
'trait-string' => TraitString::class,
115+
'int' => Integer::class,
116+
'integer' => Integer::class,
117+
'positive-int' => PositiveInteger::class,
118+
'negative-int' => NegativeInteger::class,
119+
'bool' => Boolean::class,
120+
'boolean' => Boolean::class,
121+
'real' => Float_::class,
122+
'float' => Float_::class,
123+
'double' => Float_::class,
124+
'object' => Object_::class,
125+
'mixed' => Mixed_::class,
126+
'array' => Array_::class,
127+
'array-key' => ArrayKey::class,
128+
'resource' => Resource_::class,
129+
'void' => Void_::class,
130+
'null' => Null_::class,
131+
'scalar' => Scalar::class,
132+
'callback' => Callable_::class,
133+
'callable' => Callable_::class,
134+
'callable-string' => CallableString::class,
135+
'false' => False_::class,
136+
'true' => True_::class,
137+
'literal-string' => LiteralString::class,
138+
'self' => Self_::class,
139+
'$this' => This::class,
140+
'static' => Static_::class,
141+
'parent' => Parent_::class,
142+
'iterable' => Iterable_::class,
143+
'never' => Never_::class,
144+
'list' => List_::class,
120145
];
121146

122-
/**
123-
* @var FqsenResolver
124-
* @psalm-readonly
125-
*/
126-
private $fqsenResolver;
147+
/** @psalm-readonly */
148+
private FqsenResolver $fqsenResolver;
127149

128150
/**
129151
* Initializes this TypeResolver with the means to create and resolve Fqsen objects.
@@ -280,8 +302,7 @@ private function parseTypes(ArrayIterator $tokens, Context $context, int $parser
280302
) {
281303
break;
282304
} elseif ($token === self::OPERATOR_ARRAY) {
283-
end($types);
284-
$last = key($types);
305+
$last = array_key_last($types);
285306
if ($last === null) {
286307
throw new InvalidArgumentException('Unexpected array operator');
287308
}

src/Types/AggregatedType.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,9 @@ abstract class AggregatedType implements Type, IteratorAggregate
3434
* @psalm-allow-private-mutation
3535
* @var array<int, Type>
3636
*/
37-
private $types = [];
37+
private array $types = [];
3838

39-
/** @var string */
40-
private $token;
39+
private string $token;
4140

4241
/**
4342
* @param array<Type> $types

src/Types/ClassString.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@
2424
*/
2525
final class ClassString extends String_ implements PseudoType
2626
{
27-
/** @var Fqsen|null */
28-
private $fqsen;
27+
private ?Fqsen $fqsen;
2928

3029
/**
3130
* Initializes this representation of a class string with the given Fqsen.

src/Types/Collection.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131
*/
3232
final class Collection extends AbstractList
3333
{
34-
/** @var Fqsen|null */
35-
private $fqsen;
34+
private ?Fqsen $fqsen;
3635

3736
/**
3837
* Initializes this representation of an array with the given Type or Fqsen.

src/Types/Context.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@
3636
final class Context
3737
{
3838
/** @var string The current namespace. */
39-
private $namespace;
39+
private string $namespace;
4040

4141
/**
4242
* @var string[] List of namespace aliases => Fully Qualified Namespace.
4343
* @psalm-var array<string, string>
4444
*/
45-
private $namespaceAliases;
45+
private array $namespaceAliases;
4646

4747
/**
4848
* Initializes the new context and normalizes all passed namespaces to be in Qualified Namespace Name (QNN)

src/Types/Expression.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
*/
2323
final class Expression implements Type
2424
{
25-
/** @var Type */
26-
protected $valueType;
25+
protected Type $valueType;
2726

2827
/**
2928
* Initializes this representation of an array with the given Type.

src/Types/InterfaceString.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
*/
2424
final class InterfaceString implements Type
2525
{
26-
/** @var Fqsen|null */
27-
private $fqsen;
26+
private ?Fqsen $fqsen;
2827

2928
/**
3029
* Initializes this representation of a class string with the given Fqsen.

src/Types/Nullable.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
final class Nullable implements Type
2424
{
2525
/** @var Type The actual type that is wrapped */
26-
private $realType;
26+
private Type $realType;
2727

2828
/**
2929
* Initialises this nullable type using the real type embedded

0 commit comments

Comments
 (0)