Skip to content

Commit 13d5528

Browse files
authored
Bug: dependencies leak between files (#445)
this fixes #389
1 parent d4446ca commit 13d5528

File tree

6 files changed

+56
-0
lines changed

6 files changed

+56
-0
lines changed

src/Analyzer/FileVisitor.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ public function getClassDescriptions(): array
243243
public function clearParsedClassDescriptions(): void
244244
{
245245
$this->classDescriptions = [];
246+
$this->classDescriptionBuilder->clear();
246247
}
247248

248249
public function leaveNode(Node $node): void

tests/E2E/Cli/CheckCommandTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ public function test_you_can_ignore_the_default_baseline(): void
146146
$this->assertCheckHasErrors($cmdTester);
147147
}
148148

149+
public function test_dependencies_should_not_leak_between_files(): void
150+
{
151+
$cmdTester = $this->runCheck(__DIR__.'/../_fixtures/configDependenciesLeak.php');
152+
153+
$this->assertCheckHasSuccess($cmdTester);
154+
}
155+
149156
public function test_baseline_line_numbers_can_be_ignored(): void
150157
{
151158
$configFilePath = __DIR__.'/../_fixtures/configIgnoreBaselineLineNumbers.php';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\DependenciesLeak\FirstModule;
6+
7+
class Router
8+
{
9+
public static function define(): void
10+
{
11+
}
12+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\DependenciesLeak\FirstModule;
6+
7+
Router::define();
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\DependenciesLeak\SecondModule;
6+
7+
class SomeClass
8+
{
9+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
use Arkitect\ClassSet;
5+
use Arkitect\CLI\Config;
6+
use Arkitect\Expression\ForClasses\NotDependsOnTheseNamespaces;
7+
use Arkitect\Expression\ForClasses\ResideInOneOfTheseNamespaces;
8+
use Arkitect\Rules\Rule;
9+
10+
return static function (Config $config): void {
11+
$dependenciesLeakClassSet = ClassSet::fromDir(__DIR__.'/DependenciesLeak');
12+
13+
$rule_1 = Rule::allClasses()
14+
->that(new ResideInOneOfTheseNamespaces('App\DependenciesLeak\SecondModule'))
15+
->should(new NotDependsOnTheseNamespaces('App\DependenciesLeak\FirstModule'))
16+
->because('modules should be independent');
17+
18+
$config
19+
->add($dependenciesLeakClassSet, ...[$rule_1]);
20+
};

0 commit comments

Comments
 (0)