[PHPStan] Only run custom PHPStan extensions if environment vairable PHPSTAN_BOOT_KERNEL is defined (since it requires having the whole social setup available)
This commit is contained in:
parent
a21b0afb70
commit
1adde913c6
3
.dir-locals.el
Normal file
3
.dir-locals.el
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
((nil . ((php-project-root . auto)
|
||||||
|
(phpstan-config-file . (root . "phpstan.neon"))
|
||||||
|
(phpstan-memory-limit . "2G"))))
|
|
@ -4,4 +4,4 @@ cd /var/www/social || exit 1
|
||||||
|
|
||||||
yes yes | php bin/console doctrine:fixtures:load || exit 1
|
yes yes | php bin/console doctrine:fixtures:load || exit 1
|
||||||
|
|
||||||
runuser -u www-data -- vendor/bin/simple-phpunit -vvv --coverage-html .test_coverage_report
|
runuser -u www-data -- vendor/bin/simple-phpunit --ansi -vvv --coverage-html .test_coverage_report
|
||||||
|
|
|
@ -2,4 +2,6 @@
|
||||||
|
|
||||||
cd /var/www/social || exit 1
|
cd /var/www/social || exit 1
|
||||||
|
|
||||||
vendor/bin/phpstan --ansi --no-interaction --memory-limit=2G analyse src tests components plugins
|
rm -rf /var/www/social/var/cache/*
|
||||||
|
PHPSTAN_BOOT_KERNEL=1 vendor/bin/phpstan --ansi --no-interaction --memory-limit=2G analyse
|
||||||
|
rm -rf /var/www/social/var/cache/*
|
||||||
|
|
|
@ -2,6 +2,11 @@ parameters:
|
||||||
level: 3
|
level: 3
|
||||||
bootstrapFiles:
|
bootstrapFiles:
|
||||||
- config/bootstrap.php
|
- config/bootstrap.php
|
||||||
|
paths:
|
||||||
|
- src
|
||||||
|
- tests
|
||||||
|
- components
|
||||||
|
- plugins
|
||||||
earlyTerminatingMethodCalls:
|
earlyTerminatingMethodCalls:
|
||||||
App\Core\Log:
|
App\Core\Log:
|
||||||
- unexpected_exception
|
- unexpected_exception
|
||||||
|
|
|
@ -28,12 +28,18 @@ class ClassFromTableNameDynamicStaticMethodReturnTypeExtension implements Dynami
|
||||||
return in_array($methodReflection->getName(), DB::METHODS_ACCEPTING_TABLE_NAME);
|
return in_array($methodReflection->getName(), DB::METHODS_ACCEPTING_TABLE_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For calls to DB::find and such, if the first argument is a
|
||||||
|
* constant string, it's a table name, so convert it to the
|
||||||
|
* corresponding entity. Only run if the environment variable
|
||||||
|
* PHPSTAN_BOOT_KERNEL is defined
|
||||||
|
*/
|
||||||
public function getTypeFromStaticMethodCall(
|
public function getTypeFromStaticMethodCall(
|
||||||
MethodReflection $methodReflection,
|
MethodReflection $methodReflection,
|
||||||
StaticCall $staticCall,
|
StaticCall $staticCall,
|
||||||
Scope $scope
|
Scope $scope
|
||||||
): \PHPStan\Type\Type {
|
): \PHPStan\Type\Type {
|
||||||
if (count($staticCall->args) >= 1 && ($arg = $staticCall->args[0]->value) instanceof String_) {
|
if (isset($_ENV['PHPSTAN_BOOT_KERNEL']) && count($staticCall->args) >= 1 && ($arg = $staticCall->args[0]->value) instanceof String_) {
|
||||||
// If called with the first argument as a string, it's a table name
|
// If called with the first argument as a string, it's a table name
|
||||||
return $scope->resolveTypeByName(new Name(DB::filterTableName($staticCall->name, [$arg->value])));
|
return $scope->resolveTypeByName(new Name(DB::filterTableName($staticCall->name, [$arg->value])));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -14,15 +14,17 @@ class GNUsocialProvider
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->kernel = require __DIR__ . '/../../config/phpstan-bootstrap.php';
|
if (isset($_ENV['PHPSTAN_BOOT_KERNEL'])) {
|
||||||
$container = $this->kernel->getContainer()->get('test.service_container');
|
$this->kernel = require __DIR__ . '/../../config/phpstan-bootstrap.php';
|
||||||
$services = F\map(
|
$container = $this->kernel->getContainer()->get('test.service_container');
|
||||||
(new \ReflectionClass(GNUsocial::class))->getMethod('__construct')->getParameters(),
|
$services = F\map(
|
||||||
fn ($p) => $container->get((string) $p->getType())
|
(new \ReflectionClass(GNUsocial::class))->getMethod('__construct')->getParameters(),
|
||||||
);
|
fn ($p) => $container->get((string) $p->getType())
|
||||||
$this->gnu_social = new GNUsocial(...$services);
|
);
|
||||||
$this->gnu_social->initialize();
|
$this->gnu_social = new GNUsocial(...$services);
|
||||||
Event::handle('InitializeModule');
|
$this->gnu_social->initialize();
|
||||||
|
Event::handle('InitializeModule');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGNUsocial(): GNUsocial
|
public function getGNUsocial(): GNUsocial
|
||||||
|
|
Loading…
Reference in New Issue
Block a user