Skip to content

Commit f424926

Browse files
author
BackEndTea
committed
Allow to pass an array of files instead of a single file
Generally we have multiple changed files, so this makes it easier to use that.
1 parent c985187 commit f424926

File tree

5 files changed

+65
-14
lines changed

5 files changed

+65
-14
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ $finder = new DependencyFinder([__DIR__.'/src/', './vendor/psr/container/src',
1818

1919
$finder->build();
2020

21-
$deps = $finder->getAllFilesDependingOn('./tests/Fixtures/Circular/A.php');
21+
$deps = $finder->getAllFilesDependingOn(['./tests/Fixtures/Circular/A.php']);
2222

2323
foreach ($deps as $dep) {
2424
var_dump($dep);

src/Dependency/DependencyResolver.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use function array_key_exists;
88
use function array_push;
9+
use function realpath;
910

1011
class DependencyResolver
1112
{
@@ -32,17 +33,21 @@ class DependencyResolver
3233
private $declareMap = [];
3334

3435
/**
36+
* @param array<string> $fileNames
3537
* @param array<string, array<string>> $declareMap
3638
* @param array<string, array<string>> $dependantMap
3739
*
3840
* @return array<string>
3941
*/
40-
public function resolve(string $fileName, array $declareMap, array $dependantMap) : array
42+
public function resolve(array $fileNames, array $declareMap, array $dependantMap) : array
4143
{
4244
$this->declareMap = $declareMap;
4345
$this->dependantMap = $dependantMap;
44-
foreach ($this->declareMap[$fileName]?? [] as $class) {
45-
$this->resolveClass($class);
46+
foreach ($fileNames as $fileName) {
47+
$fileName = realpath($fileName);
48+
foreach ($this->declareMap[$fileName]?? [] as $class) {
49+
$this->resolveClass($class);
50+
}
4651
}
4752

4853
return $this->knownDependencies;

src/DependencyFinder.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
use Symfony\Component\Finder\SplFileInfo;
1818
use function array_unique;
1919
use function file_get_contents;
20-
use function realpath;
2120

2221
class DependencyFinder
2322
{
@@ -84,16 +83,13 @@ public function build() : void
8483
}
8584

8685
/**
86+
* @param array<string> $fileNames
87+
*
8788
* @return array<string>
8889
*/
89-
public function getAllFilesDependingOn(string $fileName) : array
90+
public function getAllFilesDependingOn(array $fileNames) : array
9091
{
91-
$path = realpath($fileName);
92-
if ($path === false) {
93-
return [];
94-
}
95-
96-
return(new DependencyResolver())->resolve($path, $this->declareMap, $this->dependantMap);
92+
return(new DependencyResolver())->resolve($fileNames, $this->declareMap, $this->dependantMap);
9793
}
9894

9995
/**

tests/DependencyFinderTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public function testItCanDealWithCircularDependencies() : void
1414
$finder = new DependencyFinder([__DIR__ . '/Fixtures/Circular']);
1515

1616
$finder->build();
17-
$deps = $finder->getAllFilesDependingOn(__DIR__ . '/Fixtures/Circular/A.php');
17+
$deps = $finder->getAllFilesDependingOn([__DIR__ . '/Fixtures/Circular/A.php']);
1818

1919
$this->assertCount(2, $deps);
2020
}
@@ -24,7 +24,7 @@ public function testAWrongFileReturnsNoDependencies() : void
2424
$finder = new DependencyFinder([__DIR__ . '/Fixtures/Circular']);
2525
$finder->build();
2626

27-
$deps = $finder->getAllFilesDependingOn(__FILE__ . 'asdf');
27+
$deps = $finder->getAllFilesDependingOn([__FILE__ . 'asdf']);
2828
$this->assertCount(0, $deps);
2929
}
3030
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Depend\Test\PHPParser\Visitor;
4+
5+
use Depend\PHPParser\Visitor\DeclarationCollector;
6+
use Depend\PHPParser\Visitor\NameCollector;
7+
use Depend\PHPParser\Visitor\ParentConnectorVisitor;
8+
use PhpParser\NodeTraverser;
9+
use PhpParser\NodeVisitor\NameResolver;
10+
use PhpParser\ParserFactory;
11+
use PHPUnit\Framework\TestCase;
12+
13+
class DeclarationCollectorTest extends TestCase
14+
{
15+
16+
public function testItFindsAllDeclaredNames(): void
17+
{
18+
$parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7);
19+
$nodes = $parser->parse(<<<'PHP'
20+
<?php
21+
namespace F;
22+
23+
24+
class Foo
25+
{
26+
public function __construct(Bar\Baz $a) {}
27+
public function hello(\Full\Name $b): string
28+
{
29+
return false;
30+
}
31+
}
32+
33+
interface B{}
34+
PHP
35+
);
36+
$traverser = new NodeTraverser();
37+
$traverser->addVisitor(new NameResolver());
38+
$traverser->addVisitor(new ParentConnectorVisitor());
39+
$declareCollector = new DeclarationCollector();
40+
$traverser->addVisitor($declareCollector);
41+
$traverser->traverse($nodes);
42+
43+
$this->assertCount(2, $declareCollector->declared);
44+
$this->assertSame([
45+
'F\Foo',
46+
'F\B',
47+
], $declareCollector->declared);
48+
}
49+
50+
}

0 commit comments

Comments
 (0)