for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
/**
* @author Patsura Dmitry https://github.com/ovr <[email protected]>
*/
namespace PHPSA\Analyzer\Pass\Expression\FunctionCall;
use phpDocumentor\Reflection\DocBlockFactory;
use PhpParser\Node\Expr\FuncCall;
use PHPSA\Context;
class DebugCode extends AbstractFunctionCallAnalyzer
{
protected $map = [
'var_dump' => 'var_dump',
'var_export' => 'var_export',
'debug_zval_dump' => 'debug_zval_dump'
];
/** @var DocBlockFactory */
protected $docBlockFactory;
public function __construct()
$this->docBlockFactory = DocBlockFactory::createInstance();
}
public function pass(FuncCall $funcCall, Context $context)
$functionName = $this->resolveFunctionName($funcCall, $context);
if (!$functionName || !isset($this->map[$functionName])) {
return false;
if ($funcCall->getDocComment()) {
$phpdoc = $this->docBlockFactory->create($funcCall->getDocComment()->getText());
if ($phpdoc->hasTag('expected')) {
$context->notice(
'debug.code',
sprintf('Function %s() is a debug function, please don`t use it in production.', $functionName),
$funcCall
);
return true;