Completed
Push — master ( 0f1317...e5807f )
by Дмитрий
05:32 queued 02:45
created

DeprecatedIniOptions::pass()   C

Complexity

Conditions 8
Paths 6

Size

Total Lines 35
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 72

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 8
eloc 22
c 1
b 0
f 1
nc 6
nop 2
dl 0
loc 35
ccs 0
cts 29
cp 0
crap 72
rs 5.3846
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 PhpParser\Node\Expr\FuncCall;
9
use PhpParser\Node\Name;
10
use PHPSA\Compiler\Expression;
11
use PHPSA\Context;
12
13
class DeprecatedIniOptions implements PassFunctionCallInterface
14
{
15
    static protected $functions = array(
16
        'ini_set' => 'ini_set',
17
        'ini_get' => 'ini_get',
18
        'ini_alter' => 'ini_alter',
19
        'ini_restore' => 'ini_restore'
20
    );
21
22
    static protected $deprecatedOptions = array(
23
        'asp_tags' => 'is a deprecated option since PHP 7.0.0',
24
        'always_populate_raw_post_data' => 'is a deprecated option since PHP 7.0.0',
25
        //
26
        'iconv.input_encoding' => 'is a deprecated option since PHP 5.6.0. Use \'default_charset\' instead',
27
        'iconv.output_encoding' => 'is a deprecated option since PHP 5.6.0. Use \'default_charset\' instead',
28
        'iconv.internal_encoding' => 'is a deprecated option since PHP 5.6.0. Use \'default_charset\' instead',
29
        'mbstring.http_input' => 'is a deprecated option since PHP 5.6.0. Use \'default_charset\' instead',
30
        'mbstring.http_output' => 'is a deprecated option since PHP 5.6.0. Use \'default_charset\' instead',
31
        'mbstring.internal_encoding' => 'is a deprecated option since PHP 5.6.0. Use \'default_charset\' instead',
32
        //
33
        'xsl.security_prefs' => 'is a deprecated option since PHP 5.4.0 (removed in PHP 7.0.0). Use XsltProcessor->setSecurityPrefs() instead',
34
        //
35
        'allow_call_time_pass_reference' => 'is a deprecated option since PHP 5.4.0',
36
        'highlight.bg' => 'is a deprecated option since PHP 5.4.0',
37
        'zend.ze1_compatibility_mode' => 'is a deprecated option since PHP 5.4.0',
38
        'session.bug_compat_42' => 'is a deprecated option since PHP 5.4.0',
39
        'session.bug_compat_warn' => 'is a deprecated option since PHP 5.4.0',
40
        'y2k_compliance' => 'is a deprecated option since PHP 5.4.0',
41
        //
42
        'define_syslog_variables' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0',
43
        'magic_quotes_gpc' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
44
        'magic_quotes_runtime' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
45
        'magic_quotes_sybase' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
46
        'register_globals' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
47
        'register_long_arrays' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
48
        'safe_mode' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
49
        'safe_mode_gid' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
50
        'safe_mode_include_dir' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
51
        'safe_mode_exec_dir' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
52
        'safe_mode_allowed_env_vars' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)',
53
        'safe_mode_protected_env_vars' => 'is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0)'
54
    );
55
56
    public function pass(FuncCall $funcCall, Context $context)
57
    {
58
        $compiler = $context->getExpressionCompiler();
59
        $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...
60
61
        if ($funcNameCompiledExpression->isString() && $funcNameCompiledExpression->isCorrectValue()) {
62
            $name = $funcNameCompiledExpression->getValue();
63
        } else {
64
            $context->debug(
65
                'Unexpected function name type ' . $funcNameCompiledExpression->getType(),
66
                $funcCall->name
67
            );
68
69
            return false;
70
        }
71
72
        if (isset(self::$functions[$name])) {
73
            if ($funcCall->args) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $funcCall->args of type PhpParser\Node\Arg[] is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
74
                $compiledOptionName = $context->getExpressionCompiler()->compile($funcCall->args[0]);
75
                if ($compiledOptionName->isString() && $compiledOptionName->isCorrectValue()) {
76
                    if (isset(self::$deprecatedOptions[$compiledOptionName->getValue()])) {
77
                        $context->notice(
78
                            'deprecated.option',
79
                            sprintf(
80
                                'Ini option %s() %s.',
81
                                $name,
82
                                self::$deprecatedOptions[$compiledOptionName->getValue()]
83
                            ),
84
                            $funcCall
85
                        );
86
                    }
87
                }
88
            }
89
        }
90
    }
91
}
92