Skip to content

Commit 6c1bd70

Browse files
Nathan Esayeasdg
authored andcommitted
PhpFile::addNamespace() accepts PhpNamespace object (#68)
1 parent 8b4f2ec commit 6c1bd70

File tree

3 files changed

+43
-7
lines changed

3 files changed

+43
-7
lines changed

readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,9 @@ $namespace = $file->addNamespace('Foo');
505505
$class = $namespace->addClass('A');
506506
$class->addMethod('hello');
507507

508+
// or insert an existing namespace into the file
509+
// $file->addNamespace(new Nette\PhpGenerator\PhpNamespace('Foo'));
510+
508511
echo $file;
509512

510513
// or use PsrPrinter for output compatible with PSR-2 / PSR-12

src/PhpGenerator/PhpFile.php

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,23 @@ public function addTrait(string $name): ClassType
5656
}
5757

5858

59-
public function addNamespace(string $name): PhpNamespace
59+
/** @param string|PhpNamespace $namespace */
60+
public function addNamespace($namespace): PhpNamespace
6061
{
61-
if (!isset($this->namespaces[$name])) {
62-
$this->namespaces[$name] = new PhpNamespace($name);
63-
foreach ($this->namespaces as $namespace) {
64-
$namespace->setBracketedSyntax(count($this->namespaces) > 1 && isset($this->namespaces['']));
65-
}
62+
if ($namespace instanceof PhpNamespace) {
63+
$res = $this->namespaces[$namespace->getName()] = $namespace;
64+
65+
} elseif (is_string($namespace)) {
66+
$res = $this->namespaces[$namespace] = $this->namespaces[$namespace] ?? new PhpNamespace($namespace);
67+
68+
} else {
69+
throw new Nette\InvalidArgumentException('Argument must be string|PhpNamespace.');
70+
}
71+
72+
foreach ($this->namespaces as $namespace) {
73+
$namespace->setBracketedSyntax(count($this->namespaces) > 1 && isset($this->namespaces['']));
6674
}
67-
return $this->namespaces[$name];
75+
return $res;
6876
}
6977

7078

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Nette\PhpGenerator\PhpFile;
6+
use Nette\PhpGenerator\PhpNamespace;
7+
8+
require __DIR__ . '/../bootstrap.php';
9+
10+
$namespace = new PhpNamespace('Foo');
11+
$namespace->addClass('Bar');
12+
13+
$phpFile = new PhpFile;
14+
$phpFile->addNamespace('Foo');
15+
$phpFile->addNamespace($namespace); // overwrite
16+
17+
18+
same('<?php
19+
20+
namespace Foo;
21+
22+
class Bar
23+
{
24+
}
25+
', (string) $phpFile);

0 commit comments

Comments
 (0)