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

eliashaeussler / rector-config / 11486958257

pending completion
11486958257

Pull #88

github

web-flow
Merge e566020f7 into 5e72a2bf1
Pull Request #88: [TASK] Update actions/checkout digest to 11bd719

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

100.0
/src/Helper/VersionHelper.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Composer package "eliashaeussler/rector-config".
7
 *
8
 * Copyright (C) 2023-2024 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\RectorConfig\Helper;
25

26
use EliasHaeussler\RectorConfig\Entity;
27
use EliasHaeussler\RectorConfig\Enums;
28

29
use function defined;
30
use function is_string;
31
use function sprintf;
32

33
/**
34
 * VersionHelper.
35
 *
36
 * @author Elias Häußler <elias@haeussler.dev>
37
 * @license GPL-3.0-or-later
38
 */
39
final class VersionHelper
40
{
41
    /**
42
     * @param class-string     $setList
43
     * @param non-empty-string $constantPattern
44
     *
45
     * @return non-empty-string|null
46
     */
47
    public static function getRectorSetListForPackage(
4✔
48
        Entity\Version $packageVersion,
49
        string $setList,
50
        string $constantPattern,
51
        Enums\VersionRange $versionRange = Enums\VersionRange::MajorMinor,
52
        bool $fallBackToPreviousVersions = false,
53
    ): ?string {
54
        $normalizedVersion = Entity\Version::createMinor($packageVersion->major, $packageVersion->minor);
4✔
55

56
        $constant = sprintf(
4✔
57
            '%s::%s',
4✔
58
            $setList,
4✔
59
            sprintf($constantPattern, $normalizedVersion->range($versionRange)),
4✔
60
        );
4✔
61
        $value = defined($constant) ? constant($constant) : null;
4✔
62

63
        if (is_string($value) && '' !== $value) {
4✔
64
            return $value;
2✔
65
        }
66

67
        if (!$fallBackToPreviousVersions) {
3✔
68
            return null;
1✔
69
        }
70

71
        $previousVersion = self::resolvePreviousVersion($normalizedVersion, $versionRange);
2✔
72

73
        if (!$normalizedVersion->equals($previousVersion)) {
2✔
74
            return self::getRectorSetListForPackage(
2✔
75
                $previousVersion,
2✔
76
                $setList,
2✔
77
                $constantPattern,
2✔
78
                $versionRange,
2✔
79
                true,
2✔
80
            );
2✔
81
        }
82

83
        return null;
1✔
84
    }
85

86
    private static function resolvePreviousVersion(
2✔
87
        Entity\Version $packageVersion,
88
        Enums\VersionRange $versionRange,
89
    ): Entity\Version {
90
        return match ($versionRange) {
91
            Enums\VersionRange::MajorMinor => Entity\Version::createMinor(
2✔
92
                $packageVersion->major,
2✔
93
                max($packageVersion->minor - 1, 0),
2✔
94
            ),
2✔
95
            Enums\VersionRange::MajorDotZero, Enums\VersionRange::MajorOnly => Entity\Version::createMinor(
2✔
96
                max($packageVersion->major - 1, 0),
2✔
97
                $packageVersion->minor,
2✔
98
            ),
2✔
99
        };
100
    }
101
}
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