Completed
Push — master ( 0164c9...a81125 )
by Дмитрий
02:43
created

DebugCode::visitPhpFunctionCall()   B

Complexity

Conditions 6
Paths 5

Size

Total Lines 31
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 6
Bugs 0 Features 1
Metric Value
c 6
b 0
f 1
dl 0
loc 31
ccs 0
cts 23
cp 0
rs 8.439
cc 6
eloc 19
nc 5
nop 2
crap 42
1
<?php
2
/**
3
 * @author Patsura Dmitry https://github.com/ovr <[email protected]>
4
 */
5
6
namespace PHPSA\Analyzer\Pass\FunctionCall;
7
8
use PhpParser\Node\Expr\FuncCall;
9
use PhpParser\Node\Name;
10
use PHPSA\Compiler\Expression;
11
use PHPSA\Context;
12
13
class DebugCode implements PassFunctionCallInterface
14
{
15
    protected $map = array(
16
        'var_dump' => 'var_dump',
17
        'var_export' => 'var_export',
18
        'debug_zval_dump' => 'debug_zval_dump'
19
    );
20
21
    public function visitPhpFunctionCall(FuncCall $funcCall, Context $context)
22
    {
23
        $compiler = new Expression($context);
24
        $funcNameCompiledExpression = $compiler->compile($funcCall->name);
0 ignored issues
show
Comprehensibility Naming introduced by
The variable name $funcNameCompiledExpression exceeds the maximum configured length of 20.

Very long variable names usually make code harder to read. It is therefore recommended not to make variable names too verbose.

Loading history...
25
26
        if ($funcNameCompiledExpression->isString() && $funcNameCompiledExpression->isCorrectValue()) {
27
            $name = $funcNameCompiledExpression->getValue();
28
        } else {
29
            $context->debug(
30
                'Unexpected function name type ' . $funcNameCompiledExpression->getType(),
31
                $funcCall->name
32
            );
33
34
            return false;
35
        }
36
37
        if (isset($this->map[$name])) {
38
            if ($funcCall->getDocComment()) {
39
                $phpdoc = new \phpDocumentor\Reflection\DocBlock($funcCall->getDocComment()->getText());
40
                if ($phpdoc->hasTag('expected')) {
41
                    return true;
42
                }
43
            }
44
45
            $context->notice(
46
                'debug.code',
47
                sprintf('Function %s() is a debug code, please don`t use it in production.', $name),
48
                $funcCall
49
            );
50
        }
51
    }
52
}
53