Completed
Pull Request — master (#156)
by Kévin
03:40
created

DebugCode::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @author Patsura Dmitry https://github.com/ovr <[email protected]>
4
 */
5
6
namespace PHPSA\Analyzer\Pass\Expression\FunctionCall;
7
8
use phpDocumentor\Reflection\DocBlockFactory;
9
use PhpParser\Node\Expr\FuncCall;
10
use PHPSA\Context;
11
12
class DebugCode extends AbstractFunctionCallAnalyzer
13
{
14
    protected $map = [
15
        'var_dump' => 'var_dump',
16
        'var_export' => 'var_export',
17
        'debug_zval_dump' => 'debug_zval_dump'
18
    ];
19
20
    /** @var DocBlockFactory */
21
    protected $docBlockFactory;
22
23 1
    public function __construct()
24
    {
25 1
        $this->docBlockFactory = DocBlockFactory::createInstance();
26 1
    }
27
28 10
    public function pass(FuncCall $funcCall, Context $context)
29
    {
30 10
        $functionName = $this->resolveFunctionName($funcCall, $context);
31 10
        if (!$functionName || !isset($this->map[$functionName])) {
32 8
            return false;
33
        }
34
35 2
        if ($funcCall->getDocComment()) {
36 1
            $phpdoc = $this->docBlockFactory->create($funcCall->getDocComment()->getText());
37 1
            if ($phpdoc->hasTag('expected')) {
38 1
                return false;
39
            }
40 1
        }
41
42 2
        $context->notice(
43 2
            'debug.code',
44 2
            sprintf('Function %s() is a debug function, please don`t use it in production.', $functionName),
45
            $funcCall
46 2
        );
47
48 2
        return true;
49
    }
50
}
51