Skip to content

Commit 06b746d

Browse files
committed
Bleeding edge - stricter functionMap
1 parent 711c66b commit 06b746d

File tree

6 files changed

+27
-1
lines changed

6 files changed

+27
-1
lines changed

conf/bleedingEdge.neon

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,4 @@ parameters:
3636
strictStaticMethodTemplateTypeVariance: true
3737
propertyVariance: true
3838
genericPrototypeMessage: true
39+
stricterFunctionMap: true

conf/config.neon

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ parameters:
6666
strictStaticMethodTemplateTypeVariance: false
6767
propertyVariance: false
6868
genericPrototypeMessage: false
69+
stricterFunctionMap: false
6970
fileExtensions:
7071
- php
7172
checkAdvancedIsset: false
@@ -302,6 +303,7 @@ parametersSchema:
302303
strictStaticMethodTemplateTypeVariance: bool()
303304
propertyVariance: bool()
304305
genericPrototypeMessage: bool()
306+
stricterFunctionMap: bool()
305307
])
306308
fileExtensions: listOf(string())
307309
checkAdvancedIsset: bool()
@@ -936,6 +938,8 @@ services:
936938

937939
-
938940
class: PHPStan\Reflection\SignatureMap\FunctionSignatureMapProvider
941+
arguments:
942+
stricterFunctionMap: %featureToggles.stricterFunctionMap%
939943
autowired:
940944
- PHPStan\Reflection\SignatureMap\FunctionSignatureMapProvider
941945

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php // phpcs:ignoreFile
2+
3+
return [
4+
'new' => [
5+
6+
],
7+
'old' => [
8+
9+
]
10+
];

src/Reflection/SignatureMap/FunctionSignatureMapProvider.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public function __construct(
3232
private SignatureMapParser $parser,
3333
private InitializerExprTypeResolver $initializerExprTypeResolver,
3434
private PhpVersion $phpVersion,
35+
private bool $stricterFunctionMap,
3536
)
3637
{
3738
}
@@ -178,6 +179,15 @@ public function getSignatureMap(): array
178179

179180
$signatureMap = array_change_key_case($signatureMap, CASE_LOWER);
180181

182+
if ($this->stricterFunctionMap) {
183+
$stricterFunctionMap = require __DIR__ . '/../../../resources/functionMap_bleedingEdge.php';
184+
if (!is_array($stricterFunctionMap)) {
185+
throw new ShouldNotHappenException('Signature map could not be loaded.');
186+
}
187+
188+
$signatureMap = $this->computeSignatureMap($signatureMap, $stricterFunctionMap);
189+
}
190+
181191
if ($this->phpVersion->getVersionId() >= 70400) {
182192
$php74MapDelta = require __DIR__ . '/../../../resources/functionMap_php74delta.php';
183193
if (!is_array($php74MapDelta)) {

tests/PHPStan/Reflection/SignatureMap/Php8SignatureMapProviderTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ private function createProvider(): Php8SignatureMapProvider
153153
self::getContainer()->getByType(SignatureMapParser::class),
154154
self::getContainer()->getByType(InitializerExprTypeResolver::class),
155155
$phpVersion,
156+
true,
156157
),
157158
self::getContainer()->getByType(FileNodesFetcher::class),
158159
self::getContainer()->getByType(FileTypeMapper::class),

tests/PHPStan/Reflection/SignatureMap/SignatureMapParserTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ public function dataParseAll(): array
496496
public function testParseAll(int $phpVersionId): void
497497
{
498498
$parser = self::getContainer()->getByType(SignatureMapParser::class);
499-
$provider = new FunctionSignatureMapProvider($parser, self::getContainer()->getByType(InitializerExprTypeResolver::class), new PhpVersion($phpVersionId));
499+
$provider = new FunctionSignatureMapProvider($parser, self::getContainer()->getByType(InitializerExprTypeResolver::class), new PhpVersion($phpVersionId), true);
500500
$signatureMap = $provider->getSignatureMap();
501501
$reflector = self::getContainer()->getByType(Reflector::class);
502502

0 commit comments

Comments
 (0)