2025-03-09 00:51:12 +00:00
< ? php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___ | | _____ | | _ | \ / ( _ ) _ __ ___ | \ / | _ \
* | | _ ) / _ \ / __ | |/ / _ \ __ | | \ /| | | ' _ \ / _ \_____ | | \ /| | | _ ) |
* | __ / ( _ ) | ( __ | < __ / | _ | | | | | | | | __ / _____ | | | | __ /
* | _ | \___ / \___ | _ | \_\___ | \__ | _ | | _ | _ | _ | | _ | \___ | | _ | | _ | _ |
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* @ author PocketMine Team
* @ link http :// www . pocketmine . net /
*
*
*/
declare ( strict_types = 1 );
namespace pocketmine\phpstan\rules ;
use PhpParser\Node ;
use PhpParser\Node\Expr ;
use PhpParser\Node\Expr\New_ ;
use PHPStan\Analyser\Scope ;
use PHPStan\Rules\Rule ;
use PHPStan\Rules\RuleErrorBuilder ;
/**
* @ phpstan - implements Rule < New_ >
*/
final class DisallowDynamicNewRule implements Rule {
public function getNodeType () : string {
return New_ :: class ;
}
public function processNode ( Node $node , Scope $scope ) : array {
/** @var New_ $node */
if ( $node -> class instanceof Expr ){
return [
RuleErrorBuilder :: message ( " Dynamic new is not allowed. " )
-> tip ( " For factories, use closures instead. Closures can implement custom logic, are statically analyzable, and don't restrict the constructor signature. " )
2025-03-09 00:54:39 +00:00
-> identifier ( " pocketmine.new.dynamic " )
2025-03-09 00:51:12 +00:00
-> build ()
];
}
return [];
}
}