<?php namespace App\PHPStan; use PhpParser\Node; use PhpParser\Node\Expr\FuncCall; use PHPStan\Analyser\Scope; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleErrorBuilder; class ForbiddenGlobalFunctionsRule implements Rule { /** @var string[] */ public const FORBIDDEN_FUNCTIONS = ['app', 'resolve']; public function getNodeType(): string { return FuncCall::class; } public function processNode(Node $node, Scope $scope): array { /** @var FuncCall $node */ if ($node->name instanceof Node\Name) { $functionName = (string) $node->name; if (in_array($functionName, self::FORBIDDEN_FUNCTIONS, true)) { return [ RuleErrorBuilder::message(sprintf( 'Usage of global function "%s" is forbidden.', $functionName, ))->identifier('myCustomRules.forbiddenGlobalFunctions')->build(), ]; } } return []; } }