Skip to content

Commit 83a9b80

Browse files
committed
Refactor for PHPStan 2 Compatibility
Refactor the entire package to ensure compatibility with PHPStan 2. To reduce effort, the package is now only compatible with TYPO3 v13, and compatibility with TYPO3 v12 and v11 has been removed. Older TYPO3 versions will continue to be supported with version 1 of the package. If support for TYPO3 v12 in version 2 is required, it can still be implemented if necessary.
1 parent bafc25d commit 83a9b80

File tree

59 files changed

+220
-1674
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+220
-1674
lines changed

.github/workflows/tests.yml

Lines changed: 7 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,70 +12,22 @@ jobs:
1212
fail-fast: false
1313
matrix:
1414
include:
15-
- typo3-version: "^11.5"
16-
php-version: "7.4"
17-
composer-flags: ""
18-
- typo3-version: "^11.5"
19-
php-version: "7.4"
20-
composer-flags: " --prefer-lowest"
21-
- typo3-version: "^11.5"
22-
php-version: "8.0"
23-
composer-flags: ""
24-
- typo3-version: "^11.5"
25-
php-version: "8.0"
26-
composer-flags: " --prefer-lowest"
27-
- typo3-version: "^11.5"
28-
php-version: "8.1"
29-
composer-flags: ""
30-
- typo3-version: "^11.5"
31-
php-version: "8.1"
32-
composer-flags: " --prefer-lowest"
33-
- typo3-version: "^11.5"
34-
php-version: "8.2"
35-
composer-flags: ""
36-
- typo3-version: "^11.5"
37-
php-version: "8.2"
38-
composer-flags: " --prefer-lowest"
39-
- typo3-version: "^11.5"
40-
php-version: "8.3"
41-
composer-flags: ""
42-
- typo3-version: "^11.5"
43-
php-version: "8.3"
44-
composer-flags: " --prefer-lowest"
45-
- typo3-version: "^12.4"
46-
php-version: "8.1"
47-
composer-flags: ""
48-
- typo3-version: "^12.4"
49-
php-version: "8.1"
50-
composer-flags: " --prefer-lowest"
51-
- typo3-version: "^12.4"
52-
php-version: "8.2"
53-
composer-flags: ""
54-
- typo3-version: "^12.4"
55-
php-version: "8.2"
56-
composer-flags: " --prefer-lowest"
57-
- typo3-version: "^12.4"
15+
- typo3-version: "^13.4"
5816
php-version: "8.3"
5917
composer-flags: ""
60-
- typo3-version: "^12.4"
18+
- typo3-version: "^13.4"
6119
php-version: "8.3"
6220
composer-flags: " --prefer-lowest"
63-
- typo3-version: "^13.1"
64-
php-version: "8.2"
21+
- typo3-version: "^13.4"
22+
php-version: "8.4"
6523
composer-flags: ""
66-
- typo3-version: "^13.1"
67-
php-version: "8.2"
68-
composer-flags: " --prefer-lowest"
69-
- typo3-version: "^13.1"
70-
php-version: "8.3"
71-
composer-flags: ""
72-
- typo3-version: "^13.1"
73-
php-version: "8.3"
24+
- typo3-version: "^13.4"
25+
php-version: "8.4"
7426
composer-flags: " --prefer-lowest"
7527

7628
steps:
7729
- name: "Checkout"
78-
uses: "actions/checkout@v3"
30+
uses: "actions/checkout@v4"
7931

8032
- name: "Install PHP"
8133
uses: "shivammathur/setup-php@v2"

README.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ This extension provides the following features (!!! not an exhaustive list !!!):
1010

1111
**Dynamic Return Type Extensions**
1212
* Provides correct return type for `\TYPO3\CMS\Core\Context\Context->getAspect()`.
13-
* Provides correct return type for `\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance()`.
14-
* Provides correct return type for `\TYPO3\CMS\Extbase\Object\ObjectManagerInterface->get()`.
15-
* Provides correct return type for `\TYPO3\CMS\Extbase\Object\ObjectManager->get()`.
1613
* Provides correct return type for `\TYPO3\CMS\Extbase\Property\PropertyMapper->convert()`.
1714
* Provides correct return type for `\TYPO3\CMS\Core\Utility\MathUtility` methods like isIntegerInRange.
1815
* Provides correct return type for `\TYPO3\CMS\Extbase\Persistence\Generic\Query->execute()`.

composer.json

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,25 @@
1010
"type": "phpstan-extension",
1111
"minimum-stability": "dev",
1212
"prefer-stable": true,
13+
"prefer-source": true,
1314
"require": {
14-
"php": "^7.4 || ^8.0",
15-
"phpstan/phpstan": "^1.10.9 || ^1.11.0",
16-
"typo3/cms-core": "^11.5 || ^12.4 || ^13.0",
17-
"typo3/cms-extbase": "^11.5 || ^12.4 || ^13.0",
15+
"php": "^8.3",
16+
"ext-simplexml": "*",
17+
"phpstan/phpstan": "^2.1",
18+
"typo3/cms-core": "^13.4.3",
19+
"typo3/cms-extbase": "^13.4.3",
1820
"bnf/phpstan-psr-container": "^1.0",
19-
"composer/semver": "^3.3",
20-
"ssch/typo3-debug-dump-pass": "^0.0.2",
21-
"ext-simplexml": "*"
21+
"composer/semver": "^3.4",
22+
"ssch/typo3-debug-dump-pass": "^0.0.2"
2223
},
2324
"require-dev": {
24-
"nikic/php-parser": "^v4.19.1",
25-
"consistence-community/coding-standard": "^3.10",
25+
"consistence-community/coding-standard": "^3.11",
2626
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
2727
"php-parallel-lint/php-parallel-lint": "^1.4",
2828
"phing/phing": "^2.17",
29-
"phpstan/phpstan-strict-rules": "^1.5",
30-
"phpunit/phpunit": "^9.6",
31-
"symfony/polyfill-php80": "^1.29",
32-
"phpstan/phpstan-phpunit": "^1.3"
29+
"phpstan/phpstan-strict-rules": "^2.0",
30+
"phpstan/phpstan-phpunit": "^2.0.3",
31+
"phpunit/phpunit": "^11.5"
3332
},
3433
"autoload": {
3534
"psr-4": {

extension.neon

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,7 @@ includes:
33

44
services:
55
-
6-
class: SaschaEgerer\PhpstanTypo3\Reflection\RepositoryFindMethodsClassReflectionExtension
7-
tags:
8-
- phpstan.broker.methodsClassReflectionExtension
9-
-
10-
class: SaschaEgerer\PhpstanTypo3\Reflection\RepositoryCountByMethodsClassReflectionExtension
11-
tags:
12-
- phpstan.broker.methodsClassReflectionExtension
13-
-
14-
class: SaschaEgerer\PhpstanTypo3\Type\ObjectManagerDynamicReturnTypeExtension
15-
tags:
16-
- phpstan.broker.dynamicMethodReturnTypeExtension
17-
-
18-
class: SaschaEgerer\PhpstanTypo3\Type\QueryInterfaceDynamicReturnTypeExtension
19-
tags:
20-
- phpstan.broker.dynamicMethodReturnTypeExtension
21-
-
22-
class: SaschaEgerer\PhpstanTypo3\Type\QueryResultToArrayDynamicReturnTypeExtension
23-
tags:
24-
- phpstan.broker.dynamicMethodReturnTypeExtension
25-
-
26-
class: SaschaEgerer\PhpstanTypo3\Type\RepositoryDynamicReturnTypeExtension
27-
tags:
28-
- phpstan.broker.dynamicMethodReturnTypeExtension
6+
class: PhpParser\NodeVisitor\NodeConnectingVisitor
297
-
308
class: SaschaEgerer\PhpstanTypo3\Type\ValidatorResolverDynamicReturnTypeExtension
319
tags:
@@ -54,14 +32,6 @@ services:
5432
siteGetAttributeMapping: %typo3.siteGetAttributeMapping%
5533
tags:
5634
- phpstan.rules.rule
57-
-
58-
class: SaschaEgerer\PhpstanTypo3\Type\RepositoryQueryDynamicReturnTypeExtension
59-
tags:
60-
- phpstan.broker.dynamicMethodReturnTypeExtension
61-
-
62-
class: SaschaEgerer\PhpstanTypo3\Type\RepositoryFindAllDynamicReturnTypeExtension
63-
tags:
64-
- phpstan.broker.dynamicMethodReturnTypeExtension
6535
-
6636
class: SaschaEgerer\PhpstanTypo3\Type\RequestDynamicReturnTypeExtension
6737
arguments:
@@ -92,10 +62,6 @@ services:
9262
class: SaschaEgerer\PhpstanTypo3\Type\GeneralUtilityGetIndpEnvDynamicReturnTypeExtension
9363
tags:
9464
- phpstan.broker.dynamicStaticMethodReturnTypeExtension
95-
-
96-
class: SaschaEgerer\PhpstanTypo3\Stubs\StubFilesExtensionLoader
97-
tags:
98-
- phpstan.stubFilesExtension
9965
-
10066
class: SaschaEgerer\PhpstanTypo3\Type\UserAspectGetDynamicReturnTypeExtension
10167
tags:
@@ -105,7 +71,7 @@ services:
10571
tags:
10672
- phpstan.broker.dynamicMethodReturnTypeExtension
10773
-
108-
class: SaschaEgerer\PhpstanTypo3\Service\PrivateServiceAnalyzer
74+
class: SaschaEgerer\PhpstanTypo3\Service\PrivateServiceAnalyzer
10975
-
11076
class: SaschaEgerer\PhpstanTypo3\Service\PrototypeServiceDefinitionChecker
11177
# service map
@@ -155,16 +121,11 @@ parameters:
155121
websiteTitle: string
156122
stubFiles:
157123
- stubs/DomainObjectInterface.stub
158-
- stubs/EventDispatcherInterface.stub
159124
- stubs/ObjectStorage.stub
160-
- stubs/QueryFactory.stub
161125
- stubs/QueryInterface.stub
162126
- stubs/QueryResultInterface.stub
163127
- stubs/Repository.stub
164-
# See SaschaEgerer\PhpstanTypo3\Stubs\StubFilesExtensionLoader
165-
# GeneralUtility.stub is only used if TYPO3 version is < 12
166-
#- stubs/GeneralUtility.stub
167-
#- stubs/QueryResult.stub
128+
- stubs/RepositoryInterface.stub
168129
dynamicConstantNames:
169130
- TYPO3_MODE
170131
- TYPO3_REQUESTTYPE
@@ -213,3 +174,6 @@ parametersSchema:
213174
requestGetAttributeMapping: arrayOf(string())
214175
siteGetAttributeMapping: arrayOf(string())
215176
])
177+
conditionalTags:
178+
PhpParser\NodeVisitor\NodeConnectingVisitor:
179+
phpstan.parser.richParserNodeVisitor: true

phpstan.bootstrap.php

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,4 @@
88

99
define('FILE_DENY_PATTERN_DEFAULT', '\\.(php[3-8]?|phpsh|phtml|pht|phar|shtml|cgi)(\\..*)?$|\\.pl$|^\\.htaccess$');
1010

11-
define('TYPO3_REQUESTTYPE', 0);
12-
define('TYPO3_REQUESTTYPE_FE', 1);
13-
define('TYPO3_REQUESTTYPE_BE', 2);
14-
define('TYPO3_REQUESTTYPE_CLI', 4);
15-
define('TYPO3_REQUESTTYPE_AJAX', 8);
16-
define('TYPO3_REQUESTTYPE_INSTALL', 16);
17-
18-
define('TYPO3_MODE', '');
19-
define('TYPO3_mainDir', 'typo3/');
20-
define('TYPO3_version', '');
21-
define('TYPO3_branch', '');
11+
defined('TYPO3') ?: define('TYPO3', true);

phpstan.neon

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,21 @@ parameters:
2929
message: "#^Method SaschaEgerer\\\\PhpstanTypo3\\\\Tests\\\\Unit\\\\Type\\\\QueryResultToArrayDynamicReturnTypeExtension\\\\FrontendUserGroupCustomFindAllWithoutModelTypeRepository\\:\\:findAll\\(\\) return type with generic interface TYPO3\\\\CMS\\\\Extbase\\\\Persistence\\\\QueryResultInterface does not specify its types\\: ModelType$#"
3030
count: 1
3131
path: tests/Unit/Type/QueryResultToArrayDynamicReturnTypeExtension/data/query-result-to-array.php
32-
3332
-
3433
message: "#^PHPDoc tag @var for variable \\$queryResult contains generic class TYPO3\\\\CMS\\\\Extbase\\\\Persistence\\\\Generic\\\\QueryResult but does not specify its types\\: ModelType$#"
3534
count: 2
3635
path: tests/Unit/Type/QueryResultToArrayDynamicReturnTypeExtension/data/query-result-to-array.php
37-
3836
-
3937
message: "#^Return type \\(TYPO3\\\\CMS\\\\Extbase\\\\Persistence\\\\QueryResultInterface\\) of method SaschaEgerer\\\\PhpstanTypo3\\\\Tests\\\\Unit\\\\Type\\\\QueryResultToArrayDynamicReturnTypeExtension\\\\FrontendUserGroupCustomFindAllWithoutModelTypeRepository\\:\\:findAll\\(\\) should be covariant with return type \\(array\\<int, SaschaEgerer\\\\PhpstanTypo3\\\\Tests\\\\Unit\\\\Type\\\\QueryResultToArrayDynamicReturnTypeExtension\\\\FrontendUserGroup\\>\\|TYPO3\\\\CMS\\\\Extbase\\\\Persistence\\\\QueryResultInterface\\<SaschaEgerer\\\\PhpstanTypo3\\\\Tests\\\\Unit\\\\Type\\\\QueryResultToArrayDynamicReturnTypeExtension\\\\FrontendUserGroup\\>\\) of method TYPO3\\\\CMS\\\\Extbase\\\\Persistence\\\\Repository\\<SaschaEgerer\\\\PhpstanTypo3\\\\Tests\\\\Unit\\\\Type\\\\QueryResultToArrayDynamicReturnTypeExtension\\\\FrontendUserGroup\\>\\:\\:findAll\\(\\)$#"
4038
count: 1
4139
path: tests/Unit/Type/QueryResultToArrayDynamicReturnTypeExtension/data/query-result-to-array.php
40+
-
41+
message: '#^Although PHPStan\\Reflection\\Php\\PhpPropertyReflection is covered by backward compatibility promise, this instanceof assumption might break because it''s not guaranteed to always stay the same\.$#'
42+
identifier: phpstanApi.instanceofAssumption
43+
count: 1
44+
path: src/Rule/ValidatorResolverOptionsRule.php
45+
-
46+
message: '#^Node attribute ''parent'' is no longer available\.$#'
47+
identifier: phpParser.nodeConnectingAttribute
48+
count: 2
49+
path: src/Type/MathUtilityTypeSpecifyingExtension.php

src/Helpers/Typo3ClassNamingUtilityTrait.php

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)