• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

eliashaeussler / phpstan-config / 22732864626

05 Mar 2026 07:21PM UTC coverage: 40.945% (-55.7%) from 96.654%
22732864626

Pull #132

github

eliashaeussler
[FEATURE] Add custom rule to compare composer.json and ext_emconf.php
Pull Request #132: [FEATURE] Add custom rule to compare composer.json and ext_emconf.php

3 of 369 new or added lines in 12 files covered. (0.81%)

260 of 635 relevant lines covered (40.94%)

3.59 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Resource/EmConfRelation.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Composer package "eliashaeussler/phpstan-config".
7
 *
8
 * Copyright (C) 2023-2026 Elias Häußler <elias@haeussler.dev>
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation, either version 3 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22
 */
23

24
namespace EliasHaeussler\PHPStanConfig\Resource;
25

26
use Composer\Semver;
27
use EliasHaeussler\PHPStanConfig\Enums;
28

29
use function array_reverse;
30
use function in_array;
31
use function str_contains;
32

33
/**
34
 * EmConfRelation.
35
 *
36
 * @author Elias Häußler <elias@haeussler.dev>
37
 * @license GPL-3.0-or-later
38
 */
39
final readonly class EmConfRelation
40
{
NEW
41
    public function __construct(
×
42
        public string $name,
43
        public string $constraint,
44
        public Enums\EmConfRelationKey $relationKey,
45
        public int $line,
NEW
46
    ) {}
×
47

NEW
48
    public function normalizeConstraint(): Semver\Constraint\ConstraintInterface
×
49
    {
NEW
50
        $versionParser = new Semver\VersionParser();
×
51

NEW
52
        if (str_contains($this->constraint, '-')) {
×
NEW
53
            [$lowerBound, $upperBound] = explode('-', $this->constraint);
×
NEW
54
            $constraint = sprintf('>= %s < %s', $lowerBound, $this->increaseUpperBound($upperBound));
×
55
        } else {
NEW
56
            $constraint = sprintf('>= %s', $this->constraint);
×
57
        }
58

NEW
59
        return $versionParser->parseConstraints($constraint);
×
60
    }
61

NEW
62
    private function increaseUpperBound(string $upperBound): string
×
63
    {
NEW
64
        $versionParts = explode('.', $upperBound);
×
NEW
65
        $increaseNext = false;
×
66

NEW
67
        foreach (array_reverse($versionParts, true) as $i => $versionPart) {
×
NEW
68
            $versionPart = (int) $versionPart;
×
69

NEW
70
            if (in_array($versionPart, [99, 999, 9999, 99999], true)) {
×
NEW
71
                $versionPart = 0;
×
NEW
72
                $increaseNext = true;
×
NEW
73
            } elseif ($increaseNext) {
×
NEW
74
                ++$versionPart;
×
NEW
75
                $increaseNext = false;
×
76
            }
77

NEW
78
            $versionParts[$i] = $versionPart;
×
79
        }
80

NEW
81
        return implode('.', $versionParts);
×
82
    }
83
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc