Group   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 36
ccs 15
cts 15
cp 1
rs 10
c 0
b 0
f 0
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 31 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace loophp\collection\Operation;
6
7
use Closure;
8
use Generator;
9
10
/**
11
 * @immutable
12
 *
13
 * @template TKey
14
 * @template T
15
 */
16
final class Group extends AbstractOperation
17
{
18
    /**
19
     * @return Closure(iterable<TKey, T>): Generator<int, list<T>>
20
     */
21 6
    public function __invoke(): Closure
22
    {
23 6
        return
24
            /**
25
             * @param iterable<TKey, T> $iterable
26
             *
27
             * @return Generator<int, list<T>>
28
             */
29 6
            static function (iterable $iterable): Generator {
30 6
                $last = [];
31
32 6
                foreach ($iterable as $current) {
33 4
                    if ([] === $last) {
34 4
                        $last = [$current];
35
36 4
                        continue;
37
                    }
38
39 4
                    if (current($last) === $current) {
40 4
                        $last[] = $current;
41
42 4
                        continue;
43
                    }
44
45 4
                    yield $last;
46
47 4
                    $last = [$current];
48
                }
49
50 6
                if ([] !== $last) {
51 4
                    yield $last;
52
                }
53 6
            };
54
    }
55
}
56