Signature   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 15
lcom 0
cbo 2
dl 0
loc 64
ccs 25
cts 25
cp 1
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
C analyze() 0 56 15
1
<?php
2
3
namespace PHPSemVerChecker\Comparator;
4
5
class Signature
6
{
7
	/**
8
	 * @param array $parametersA
9
	 * @param array $parametersB
10
	 * @return array
11
	 */
12 82
	public static function analyze(array $parametersA, array $parametersB)
13
	{
14
		$changes = [
15 82
			'parameter_added'                 => false,
16
			'parameter_removed'               => false,
17
			'parameter_renamed'               => false,
18
			'parameter_typing_added'          => false,
19
			'parameter_typing_removed'        => false,
20
			'parameter_default_added'         => false,
21
			'parameter_default_removed'       => false,
22
			'parameter_default_value_changed' => false,
23
		];
24 82
		$lengthA = count($parametersA);
25 82
		$lengthB = count($parametersB);
26
27
		// TODO([email protected]): This is only true if newer params do not have defaults
28 82
		if ($lengthA < $lengthB) {
29 10
			$changes['parameter_added'] = true;
30 72
		} elseif ($lengthA > $lengthB) {
31 8
			$changes['parameter_removed'] = true;
32
		}
33
34 82
		$iterations = min($lengthA, $lengthB);
35 82
		for ($i = 0; $i < $iterations; ++$i) {
36
			// Name checking
37 67
			if ($parametersA[$i]->var->name !== $parametersB[$i]->var->name) {
38 11
				$changes['parameter_renamed'] = true;
39
			}
40
41
			// Type checking
42 67
			if (Type::get($parametersA[$i]->type) !== Type::get($parametersB[$i]->type)) {
43
				//if ($paramsA[$i]->default !== null && $paramsB[$i]->default !== null) {
44
				//	$changes['parameter_default_value_changed'] = true;
45 16
				if ($parametersA[$i]->type !== null) {
46 8
					$changes['parameter_typing_removed'] = true;
47
				}
48 16
				if ($parametersB[$i]->type !== null) {
49 8
					$changes['parameter_typing_added'] = true;
50
				}
51
			}
52
53
			// Default checking
54 67
			if ($parametersA[$i]->default === null && $parametersB[$i]->default === null) {
55
				// Do nothing
56 24
			} elseif ($parametersA[$i]->default !== null && $parametersB[$i]->default === null) {
57 8
				$changes['parameter_default_removed'] = true;
58 16
			} elseif ($parametersA[$i]->default === null && $parametersB[$i]->default !== null) {
59 8
				$changes['parameter_default_added'] = true;
60
				// TODO([email protected]): Not all nodes have a value property
61 8
			} elseif ( ! Node::isEqual($parametersA[$i]->default, $parametersB[$i]->default)) {
62 8
				$changes['parameter_default_value_changed'] = true;
63
			}
64
		}
65
66 82
		return $changes;
67
	}
68
}
69