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

DeprecatedIniOptions   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 79
ccs 0
cts 29
cp 0
rs 10
wmc 8
lcom 1
cbo 4

1 Method

Rating   Name   Duplication   Size   Complexity  
C pass() 0 35 8
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