• 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/ExtEmConf.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 EliasHaeussler\PHPStanConfig\Enums;
27
use PhpParser\Node;
28
use Symfony\Component\Filesystem;
29

30
/**
31
 * ExtEmConf.
32
 *
33
 * @author Elias Häußler <elias@haeussler.dev>
34
 * @license GPL-3.0-or-later
35
 */
36
final readonly class ExtEmConf
37
{
38
    public string $filename;
39

NEW
40
    public function __construct(
×
41
        private string $currentWorkingDirectory,
42
    ) {
NEW
43
        $this->filename = Filesystem\Path::join($this->currentWorkingDirectory, 'composer.json');
×
44
    }
45

46
    /**
47
     * @return list<EmConfRelation>
48
     */
NEW
49
    public function extractRelations(Node\Expr\Array_ $array, Enums\EmConfRelationKey $relationKey): array
×
50
    {
NEW
51
        foreach ($array->items as $item) {
×
NEW
52
            if (!$item->key instanceof Node\Scalar\String_ || 'constraints' !== $item->key->value) {
×
NEW
53
                continue;
×
54
            }
55

NEW
56
            if (!$item->value instanceof Node\Expr\Array_) {
×
NEW
57
                return [];
×
58
            }
59

NEW
60
            foreach ($item->value->items as $relations) {
×
NEW
61
                if (!$relations->key instanceof Node\Scalar\String_ || $relations->key->value !== $relationKey->value) {
×
NEW
62
                    continue;
×
63
                }
64

NEW
65
                if (!$relations->value instanceof Node\Expr\Array_) {
×
NEW
66
                    return [];
×
67
                }
68

NEW
69
                $result = [];
×
70

NEW
71
                foreach ($relations->value->items as $relation) {
×
NEW
72
                    if (!$relation->key instanceof Node\Scalar\String_ || !$relation->value instanceof Node\Scalar\String_) {
×
NEW
73
                        continue;
×
74
                    }
75

NEW
76
                    $result[] = new EmConfRelation(
×
NEW
77
                        $relation->key->value,
×
NEW
78
                        $relation->value->value,
×
NEW
79
                        $relationKey,
×
NEW
80
                        $relation->getLine(),
×
NEW
81
                    );
×
82
                }
83

NEW
84
                return $result;
×
85
            }
86
        }
87

NEW
88
        return [];
×
89
    }
90
}
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